aboutsummaryrefslogtreecommitdiff
path: root/test/tree_bitmap_test.exs
diff options
context:
space:
mode:
Diffstat (limited to 'test/tree_bitmap_test.exs')
-rw-r--r--test/tree_bitmap_test.exs67
1 files changed, 67 insertions, 0 deletions
diff --git a/test/tree_bitmap_test.exs b/test/tree_bitmap_test.exs
new file mode 100644
index 0000000..ff1359f
--- /dev/null
+++ b/test/tree_bitmap_test.exs
@@ -0,0 +1,67 @@
+defmodule TreeBitmapTest do
+ use ExUnit.Case
+ doctest TreeBitmap
+ alias TreeBitmap.NIF
+
+ test "new/0" do
+ table = NIF.new()
+ assert is_reference(table)
+ end
+
+ test "length/1" do
+ table = NIF.new()
+ assert 0 == NIF.length(table)
+ end
+
+ test "add/4 and lookup/2" do
+ table = NIF.new()
+ assert :ok == NIF.add(table, {:inet4, 192, 168, 1, 0}, 24, 0)
+ assert {:ok, _, 24, 0} = NIF.lookup(table, {:inet4, 192, 168, 1, 1})
+ assert {:ok, nil} = NIF.lookup(table, {:inet4, 1, 1, 1, 1})
+ end
+
+ test "remove/2" do
+ table = NIF.new()
+ assert :ok == NIF.add(table, {:inet4, 192, 168, 1, 0}, 24, 0)
+ assert {:ok, _, 24, 0} = NIF.lookup(table, {:inet4, 192, 168, 1, 1})
+ assert :ok == NIF.remove(table, {:inet4, 192, 168, 1, 0}, 24)
+ assert {:ok, nil} = NIF.lookup(table, {:inet4, 192, 168, 1, 1})
+ end
+
+ test "default route" do
+ table = NIF.new()
+ assert :ok == NIF.add(table, {:inet4, 0, 0, 0, 0}, 0, 0)
+ assert {:ok, _, 0, 0} = NIF.lookup(table, {:inet4, 192, 168, 1, 1})
+ end
+
+ test "more to less specific" do
+ table = NIF.new()
+ :ok = NIF.add(table, {:inet4, 10, 69, 1, 0}, 24, 2)
+ :ok = NIF.add(table, {:inet4, 10, 69, 0, 0}, 16, 1)
+ :ok = NIF.add(table, {:inet4, 0, 0, 0, 0}, 0, 0)
+ assert {:ok, _, _, 0} = NIF.lookup(table, {:inet4, 8, 8, 8, 8})
+ assert {:ok, _, _, 2} = NIF.lookup(table, {:inet4, 10, 69, 1, 2})
+ assert {:ok, _, _, 1} = NIF.lookup(table, {:inet4, 10, 69, 2, 2})
+ end
+
+ test "less to more specific" do
+ table = NIF.new()
+ :ok = NIF.add(table, {:inet4, 0, 0, 0, 0}, 0, 0)
+ :ok = NIF.add(table, {:inet4, 10, 69, 0, 0}, 16, 1)
+ :ok = NIF.add(table, {:inet4, 10, 69, 1, 0}, 24, 2)
+ assert {:ok, _, _, 0} = NIF.lookup(table, {:inet4, 8, 8, 8, 8})
+ assert {:ok, _, _, 2} = NIF.lookup(table, {:inet4, 10, 69, 1, 2})
+ assert {:ok, _, _, 1} = NIF.lookup(table, {:inet4, 10, 69, 2, 2})
+ end
+
+ test "multiple routes" do
+ table = NIF.new()
+ :ok = NIF.add(table, {:inet4, 8, 8, 8, 0}, 24, 8)
+ :ok = NIF.add(table, {:inet4, 1, 1, 0, 0}, 16, 1)
+ :ok = NIF.add(table, {:inet4, 192, 168, 1, 1}, 32, 200)
+ assert {:ok, _, _, 8} = NIF.lookup(table, {:inet4, 8, 8, 8, 8})
+ assert {:ok, _, _, 1} = NIF.lookup(table, {:inet4, 1, 1, 0, 0})
+ assert {:ok, _, _, 200} = NIF.lookup(table, {:inet4, 192, 168, 1, 1})
+ end
+
+end