Current section
Files
Jump to
Current section
Files
test/adjacency_test.exs
defmodule BitGraphTest.Adjacency do
use ExUnit.Case
alias BitGraph.Adjacency
test "create adjacency table" do
assert Enum.all?(
Enum.take_random(1..1000, 100),
fn v_num ->
%{table_dimension: dimension, bit_vector: {:bit_vector, ref}} =
Adjacency.init_adjacency_table(v_num)
dimension == v_num &&
div((:atomics.info(ref)[:size] - 2) * 64 - v_num * v_num, 64) <= 1
end
)
end
test "get/set/clear entries in adjacency table" do
num_vertices = Enum.random(1..1000)
adjacency_table = Adjacency.init_adjacency_table(num_vertices)
assert Enum.all?(1..num_vertices, fn i ->
Enum.all?(1..num_vertices, fn j ->
Adjacency.get(adjacency_table, i, j) == 0
end)
end)
Enum.each(1..num_vertices, fn i ->
Enum.each(1..num_vertices, fn j ->
Adjacency.set(adjacency_table, i, j)
end)
end)
assert Enum.all?(1..num_vertices, fn i ->
Enum.all?(1..num_vertices, fn j ->
Adjacency.get(adjacency_table, i, j) == 1
end)
end)
Enum.each(1..num_vertices, fn i ->
Enum.each(1..num_vertices, fn j ->
Adjacency.clear(adjacency_table, i, j)
end)
end)
assert Enum.all?(1..num_vertices, fn i ->
Enum.all?(1..num_vertices, fn j ->
Adjacency.get(adjacency_table, i, j) == 0
end)
end)
end
test "get row from adjacency table" do
num_vertices = 10
adjacency_table = Adjacency.init_adjacency_table(num_vertices)
Adjacency.set(adjacency_table, 1, 2)
Adjacency.set(adjacency_table, 1, 3)
Adjacency.set(adjacency_table, 4, 1)
Adjacency.set(adjacency_table, 3, 2)
assert Adjacency.row(adjacency_table, 1) == MapSet.new([2, 3])
assert Adjacency.row(adjacency_table, 2) == MapSet.new()
assert Adjacency.row(adjacency_table, 3) == MapSet.new([2])
assert Adjacency.column(adjacency_table, 1) == MapSet.new([4])
assert Adjacency.column(adjacency_table, 2) == MapSet.new([1, 3])
assert Adjacency.column(adjacency_table, 3) == MapSet.new([1])
assert Adjacency.column(adjacency_table, 4) == MapSet.new()
assert Enum.all?(5..10, fn i ->
Adjacency.row(adjacency_table, i) == MapSet.new() &&
Adjacency.column(adjacency_table, i) == MapSet.new()
end)
end
test "copy adjacency table" do
num_vertices = Enum.random(2..1000)
adjacency_table = Adjacency.init_adjacency_table(num_vertices)
for i <- 1..num_vertices, j <- 1..num_vertices, i != j do
:rand.uniform() <= 0.5 && Adjacency.set(adjacency_table, i, j)
end
copy = Adjacency.copy(adjacency_table)
assert Enum.all?(1..num_vertices, fn i ->
Enum.all?(1..num_vertices, fn j ->
Adjacency.get(adjacency_table, i, j) ==
Adjacency.get(copy, i, j)
end)
end)
end
end