From d87227c82699ec3eefed4708a7c38df2c6e877cd Mon Sep 17 00:00:00 2001 From: Linus Nordberg Date: Sat, 26 Apr 2014 14:24:53 +0200 Subject: Rearrange tests. Also, don't build 1024 trees. --- src/ht.erl | 73 +++++++++++++++++++++++++++++++------------------------------- 1 file changed, 37 insertions(+), 36 deletions(-) (limited to 'src') diff --git a/src/ht.erl b/src/ht.erl index 3d7c02e..5cd262f 100644 --- a/src/ht.erl +++ b/src/ht.erl @@ -166,43 +166,9 @@ rightbranchdepth(Tree, Acc) -> %%%%%%%%%%%%%%%%%%%% %% Internal tests. - -basic_helpers_test_() -> - [test_bitcount()]. - -test_bitcount() -> - L = [1, 2, 3, 255, 256, 511, 512, 32767, 32768, 65535, 65536, - 2147483648, 4294967296, 8589934591, 8589934592, 18446744073709551616], - [[?_assertEqual(lists:nth(1, tv_bitcount(X)), ffs(X)) || X <- L], - [?_assertEqual(lists:nth(2, tv_bitcount(X)), fls(X)) || X <- L]]. - -tv_bitcount(1) -> [0, 0]; -tv_bitcount(2) -> [1, 1]; -tv_bitcount(3) -> [1, 0]; -tv_bitcount(255) -> [7, 0]; -tv_bitcount(256) -> [8, 8]; -tv_bitcount(511) -> [8, 0]; -tv_bitcount(512) -> [9, 9]; -tv_bitcount(32767) -> [14, 0]; -tv_bitcount(32768) -> [15, 15]; -tv_bitcount(65535) -> [15, 0]; -tv_bitcount(65536) -> [16, 16]; -tv_bitcount(2147483648) -> [31, 31]; -tv_bitcount(4294967296) -> [32, 32]; -tv_bitcount(8589934591) -> [32, 0]; -tv_bitcount(8589934592) -> [33, 33]; -tv_bitcount(18446744073709551616) -> [64, 64]. - -define(TEST_VECTOR_TREES, [<<148,242,40,0,3,172,180,106,111,230,146,161,32,40,128,38,103,8,194, 102,72,68, 126,70,108,47,8,216,208,146,178,107>>]). -basic_tree_test_() -> - TestVectorTree = #leaf{hash = hd(?TEST_VECTOR_TREES)}, - [?_assertEqual(#head{version = 0, tree = undefined}, - create()), - ?_assertEqual(#head{version = 1, tree = TestVectorTree}, - create("a foo is a bar"))]. - %% Test vectors from certificate-transparency/src/python/ct/crypto/merkle_test.py. -define(EMPTY_HASH, "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"). -define(TEST_VECTOR_LEAVES, ["", "\x00", "\x10", " !", "01", "@ABC", "PQRSTUVW", "`abcdefghijklmno"]). @@ -215,6 +181,16 @@ basic_tree_test_() -> "ddb89be403809e325750d3d263cd78929c2942b7942a34b77e122c9594a74c8c", "5dc9da79a70659a9ad559cb701ded9a2ab9d823aad2f4960cfe370eff4604328"]). +basic_helpers_test_() -> + [test_bitcount()]. + +basic_tree_test_() -> + TestVectorTree = #leaf{hash = hd(?TEST_VECTOR_TREES)}, + [?_assertEqual(#head{version = 0, tree = undefined}, + create()), + ?_assertEqual(#head{version = 1, tree = TestVectorTree}, + create("a foo is a bar"))]. + empty_hash_test_() -> [?_assertEqual(hex:hexstr_to_bin(?EMPTY_HASH), mth([]))]. @@ -226,7 +202,6 @@ mth_test() -> end, lists:seq(1, length(?TEST_VECTOR_LEAVES))). - %% @doc Build trees using append/2 and mth/2 and compare the resulting %% tree hashes. append_test() -> @@ -246,9 +221,12 @@ mkhead_from_list_test() -> mkhead(L)). append_eq_mth_test() -> - L = [<> || X <- lists:seq(0, 1024)], + Count = 300, + L = [<> || X <- lists:seq(0, Count)], ?assertEqual(gethash((mkhead(L))#head.tree), mth(L)). +sth_test_() -> + []. %% Test helpers. %% @doc Calculate a Merkle Tree Hash from an ordered list as specified @@ -260,6 +238,29 @@ append_eq_mth_test() -> %% The way we calculate K is to let N be the number of entries, find %% the most significant bit in N-1 and raise two to that number. This %% is K. +test_bitcount() -> + L = [1, 2, 3, 255, 256, 511, 512, 32767, 32768, 65535, 65536, + 2147483648, 4294967296, 8589934591, 8589934592, 18446744073709551616], + [[?_assertEqual(lists:nth(1, tv_bitcount(X)), ffs(X)) || X <- L], + [?_assertEqual(lists:nth(2, tv_bitcount(X)), fls(X)) || X <- L]]. + +tv_bitcount(1) -> [0, 0]; +tv_bitcount(2) -> [1, 1]; +tv_bitcount(3) -> [1, 0]; +tv_bitcount(255) -> [7, 0]; +tv_bitcount(256) -> [8, 8]; +tv_bitcount(511) -> [8, 0]; +tv_bitcount(512) -> [9, 9]; +tv_bitcount(32767) -> [14, 0]; +tv_bitcount(32768) -> [15, 15]; +tv_bitcount(65535) -> [15, 0]; +tv_bitcount(65536) -> [16, 16]; +tv_bitcount(2147483648) -> [31, 31]; +tv_bitcount(4294967296) -> [32, 32]; +tv_bitcount(8589934591) -> [32, 0]; +tv_bitcount(8589934592) -> [33, 33]; +tv_bitcount(18446744073709551616) -> [64, 64]. + -spec mth(list()) -> binary(). mth([]) -> hashfun(<<"">>); -- cgit v1.1