Skip to content

Commit e8c8f08

Browse files
committed
Add partial utreexo implementation to test build.
1 parent ae6441d commit e8c8f08

6 files changed

Lines changed: 150 additions & 77 deletions

File tree

Makefile.am

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,8 @@ test_libbitcoin_system_test_SOURCES = \
362362
test/unicode/utf8_everywhere/ofstream.cpp \
363363
test/unicode/utf8_everywhere/unicode_istream.cpp \
364364
test/unicode/utf8_everywhere/unicode_ostream.cpp \
365+
test/utreexo/utreexo.cpp \
366+
test/utreexo/utreexo.hpp \
365367
test/wallet/context.cpp \
366368
test/wallet/message.cpp \
367369
test/wallet/neutrino_filter.cpp \

builds/cmake/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -849,6 +849,8 @@ if (with-tests)
849849
"../../test/unicode/utf8_everywhere/ofstream.cpp"
850850
"../../test/unicode/utf8_everywhere/unicode_istream.cpp"
851851
"../../test/unicode/utf8_everywhere/unicode_ostream.cpp"
852+
"../../test/utreexo/utreexo.cpp"
853+
"../../test/utreexo/utreexo.hpp"
852854
"../../test/wallet/context.cpp"
853855
"../../test/wallet/message.cpp"
854856
"../../test/wallet/neutrino_filter.cpp"

builds/msvc/vs2022/libbitcoin-system-test/libbitcoin-system-test.vcxproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,7 @@
245245
<ClCompile Include="..\..\..\..\test\unicode\utf8_everywhere\ofstream.cpp" />
246246
<ClCompile Include="..\..\..\..\test\unicode\utf8_everywhere\unicode_istream.cpp" />
247247
<ClCompile Include="..\..\..\..\test\unicode\utf8_everywhere\unicode_ostream.cpp" />
248+
<ClCompile Include="..\..\..\..\test\utreexo\utreexo.cpp" />
248249
<ClCompile Include="..\..\..\..\test\wallet\addresses\bitcoin_uri.cpp" />
249250
<ClCompile Include="..\..\..\..\test\wallet\addresses\checked.cpp" />
250251
<ClCompile Include="..\..\..\..\test\wallet\addresses\payment_address.cpp" />
@@ -305,6 +306,7 @@
305306
<ClInclude Include="..\..\..\..\test\hash\performance\performance.hpp" />
306307
<ClInclude Include="..\..\..\..\test\hash\siphash.hpp" />
307308
<ClInclude Include="..\..\..\..\test\test.hpp" />
309+
<ClInclude Include="..\..\..\..\test\utreexo\utreexo.hpp" />
308310
<ClInclude Include="..\..\..\..\test\wallet\mnemonics\electrum.hpp" />
309311
<ClInclude Include="..\..\..\..\test\wallet\mnemonics\electrum_v1.hpp" />
310312
<ClInclude Include="..\..\..\..\test\wallet\mnemonics\mnemonic.hpp" />

builds/msvc/vs2022/libbitcoin-system-test/libbitcoin-system-test.vcxproj.filters

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<UniqueIdentifier>{51A424A9-2C12-4211-0000-000000000001}</UniqueIdentifier>
1515
</Filter>
1616
<Filter Include="src\chain\enums">
17-
<UniqueIdentifier>{51A424A9-2C12-4211-0000-000000000002}</UniqueIdentifier>
17+
<UniqueIdentifier>{51A424A9-2C12-4211-0000-000000000003}</UniqueIdentifier>
1818
</Filter>
1919
<Filter Include="src\config">
2020
<UniqueIdentifier>{51A424A9-2C12-4211-0000-000000000002}</UniqueIdentifier>
@@ -35,22 +35,22 @@
3535
<UniqueIdentifier>{51A424A9-2C12-4211-0000-000000000007}</UniqueIdentifier>
3636
</Filter>
3737
<Filter Include="src\hash\performance">
38-
<UniqueIdentifier>{51A424A9-2C12-4211-0000-000000000003}</UniqueIdentifier>
38+
<UniqueIdentifier>{51A424A9-2C12-4211-0000-000000000004}</UniqueIdentifier>
3939
</Filter>
4040
<Filter Include="src\hash\performance\baseline">
41-
<UniqueIdentifier>{51A424A9-2C12-4211-0000-000000000006}</UniqueIdentifier>
41+
<UniqueIdentifier>{51A424A9-2C12-4211-0000-000000000007}</UniqueIdentifier>
4242
</Filter>
4343
<Filter Include="src\hash\rmd">
44-
<UniqueIdentifier>{51A424A9-2C12-4211-0000-000000000004}</UniqueIdentifier>
44+
<UniqueIdentifier>{51A424A9-2C12-4211-0000-000000000005}</UniqueIdentifier>
4545
</Filter>
4646
<Filter Include="src\hash\sha">
47-
<UniqueIdentifier>{51A424A9-2C12-4211-0000-000000000005}</UniqueIdentifier>
47+
<UniqueIdentifier>{51A424A9-2C12-4211-0000-000000000006}</UniqueIdentifier>
4848
</Filter>
4949
<Filter Include="src\intrinsics">
5050
<UniqueIdentifier>{51A424A9-2C12-4211-0000-000000000008}</UniqueIdentifier>
5151
</Filter>
5252
<Filter Include="src\intrinsics\xcpu">
53-
<UniqueIdentifier>{51A424A9-2C12-4211-0000-000000000007}</UniqueIdentifier>
53+
<UniqueIdentifier>{51A424A9-2C12-4211-0000-000000000008}</UniqueIdentifier>
5454
</Filter>
5555
<Filter Include="src\machine">
5656
<UniqueIdentifier>{51A424A9-2C12-4211-0000-000000000009}</UniqueIdentifier>
@@ -68,37 +68,40 @@
6868
<UniqueIdentifier>{51A424A9-2C12-4211-0000-00000000000D}</UniqueIdentifier>
6969
</Filter>
7070
<Filter Include="src\stream\devices">
71-
<UniqueIdentifier>{51A424A9-2C12-4211-0000-000000000008}</UniqueIdentifier>
71+
<UniqueIdentifier>{51A424A9-2C12-4211-0000-000000000009}</UniqueIdentifier>
7272
</Filter>
7373
<Filter Include="src\stream\iostream">
74-
<UniqueIdentifier>{51A424A9-2C12-4211-0000-000000000009}</UniqueIdentifier>
74+
<UniqueIdentifier>{51A424A9-2C12-4211-0000-000000000010}</UniqueIdentifier>
7575
</Filter>
7676
<Filter Include="src\stream\streamers">
77-
<UniqueIdentifier>{51A424A9-2C12-4211-0000-000000000010}</UniqueIdentifier>
77+
<UniqueIdentifier>{51A424A9-2C12-4211-0000-0000000000A1}</UniqueIdentifier>
7878
</Filter>
7979
<Filter Include="src\unicode">
8080
<UniqueIdentifier>{51A424A9-2C12-4211-0000-00000000000E}</UniqueIdentifier>
8181
</Filter>
8282
<Filter Include="src\unicode\utf8_everywhere">
83-
<UniqueIdentifier>{51A424A9-2C12-4211-0000-0000000000A1}</UniqueIdentifier>
83+
<UniqueIdentifier>{51A424A9-2C12-4211-0000-0000000000B1}</UniqueIdentifier>
8484
</Filter>
85-
<Filter Include="src\wallet">
85+
<Filter Include="src\utreexo">
8686
<UniqueIdentifier>{51A424A9-2C12-4211-0000-00000000000F}</UniqueIdentifier>
8787
</Filter>
88+
<Filter Include="src\wallet">
89+
<UniqueIdentifier>{51A424A9-2C12-4211-0000-000000000001}</UniqueIdentifier>
90+
</Filter>
8891
<Filter Include="src\wallet\addresses">
89-
<UniqueIdentifier>{51A424A9-2C12-4211-0000-0000000000B1}</UniqueIdentifier>
92+
<UniqueIdentifier>{51A424A9-2C12-4211-0000-0000000000C1}</UniqueIdentifier>
9093
</Filter>
9194
<Filter Include="src\wallet\keys">
92-
<UniqueIdentifier>{51A424A9-2C12-4211-0000-0000000000C1}</UniqueIdentifier>
95+
<UniqueIdentifier>{51A424A9-2C12-4211-0000-0000000000D1}</UniqueIdentifier>
9396
</Filter>
9497
<Filter Include="src\wallet\mnemonics">
95-
<UniqueIdentifier>{51A424A9-2C12-4211-0000-0000000000D1}</UniqueIdentifier>
98+
<UniqueIdentifier>{51A424A9-2C12-4211-0000-0000000000E1}</UniqueIdentifier>
9699
</Filter>
97100
<Filter Include="src\words">
98-
<UniqueIdentifier>{51A424A9-2C12-4211-0000-000000000001}</UniqueIdentifier>
101+
<UniqueIdentifier>{51A424A9-2C12-4211-0000-000000000002}</UniqueIdentifier>
99102
</Filter>
100103
<Filter Include="src\words\catalogs">
101-
<UniqueIdentifier>{51A424A9-2C12-4211-0000-0000000000E1}</UniqueIdentifier>
104+
<UniqueIdentifier>{51A424A9-2C12-4211-0000-0000000000F1}</UniqueIdentifier>
102105
</Filter>
103106
</ItemGroup>
104107
<ItemGroup>
@@ -561,6 +564,9 @@
561564
<ClCompile Include="..\..\..\..\test\unicode\utf8_everywhere\unicode_ostream.cpp">
562565
<Filter>src\unicode\utf8_everywhere</Filter>
563566
</ClCompile>
567+
<ClCompile Include="..\..\..\..\test\utreexo\utreexo.cpp">
568+
<Filter>src\utreexo</Filter>
569+
</ClCompile>
564570
<ClCompile Include="..\..\..\..\test\wallet\addresses\bitcoin_uri.cpp">
565571
<Filter>src\wallet\addresses</Filter>
566572
</ClCompile>
@@ -695,6 +701,9 @@
695701
<ClInclude Include="..\..\..\..\test\test.hpp">
696702
<Filter>src</Filter>
697703
</ClInclude>
704+
<ClInclude Include="..\..\..\..\test\utreexo\utreexo.hpp">
705+
<Filter>src\utreexo</Filter>
706+
</ClInclude>
698707
<ClInclude Include="..\..\..\..\test\wallet\mnemonics\electrum.hpp">
699708
<Filter>src\wallet\mnemonics</Filter>
700709
</ClInclude>

test/utreexo/utreexo.cpp

Lines changed: 84 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,67 @@ BOOST_AUTO_TEST_SUITE(utreexo_tests)
2525

2626
// inferred from rustreexo implementation (no test provided)
2727

28+
BOOST_AUTO_TEST_CASE(utreexo__parent__various__expected)
29+
{
30+
static_assert(parent(0, 0) == 1);
31+
static_assert(parent(0, 1) == 2);
32+
static_assert(parent(0, 2) == 4);
33+
static_assert(parent(0, 3) == 8);
34+
static_assert(parent(0, 4) == 16);
35+
static_assert(parent(0, 5) == 32);
36+
static_assert(parent(0, 6) == 64);
37+
38+
static_assert(parent(1, 0) == 1);
39+
static_assert(parent(1, 1) == 2);
40+
static_assert(parent(1, 2) == 4);
41+
static_assert(parent(1, 3) == 8);
42+
static_assert(parent(1, 4) == 16);
43+
static_assert(parent(1, 5) == 32);
44+
static_assert(parent(1, 6) == 64);
45+
46+
static_assert(parent(128, 0) == 64 + 1);
47+
static_assert(parent(128, 1) == 64 + 2);
48+
static_assert(parent(128, 2) == 64 + 4);
49+
static_assert(parent(128, 3) == 64 + 8);
50+
static_assert(parent(128, 4) == 64 + 16);
51+
static_assert(parent(128, 5) == 64 + 32);
52+
static_assert(parent(128, 6) == 64);
53+
54+
BOOST_REQUIRE_EQUAL(parent(128, 0), 65_u64);
55+
BOOST_REQUIRE_EQUAL(parent(128, 1), 66_u64);
56+
BOOST_REQUIRE_EQUAL(parent(128, 2), 68_u64);
57+
BOOST_REQUIRE_EQUAL(parent(128, 3), 72_u64);
58+
BOOST_REQUIRE_EQUAL(parent(128, 4), 80_u64);
59+
BOOST_REQUIRE_EQUAL(parent(128, 5), 96_u64);
60+
BOOST_REQUIRE_EQUAL(parent(128, 6), 64_u64);
61+
}
62+
63+
BOOST_AUTO_TEST_CASE(utreexo__left_child__various__expected)
64+
{
65+
// same as children()
66+
static_assert(left_child(4, 2) == 0);
67+
static_assert(left_child(49, 5) == 34);
68+
static_assert(left_child(50, 5) == 36);
69+
static_assert(left_child(44, 5) == 24);
70+
BOOST_REQUIRE_EQUAL(left_child(4, 2), 0_u64);
71+
BOOST_REQUIRE_EQUAL(left_child(49, 5), 34_u64);
72+
BOOST_REQUIRE_EQUAL(left_child(50, 5), 36_u64);
73+
BOOST_REQUIRE_EQUAL(left_child(44, 5), 24_u64);
74+
}
75+
76+
BOOST_AUTO_TEST_CASE(utreexo__right_child__various__expected)
77+
{
78+
// same as add1(children())
79+
static_assert(right_child(4, 2) == 0 + 1);
80+
static_assert(right_child(49, 5) == 34 + 1);
81+
static_assert(right_child(50, 5) == 36 + 1);
82+
static_assert(right_child(44, 5) == 24 + 1);
83+
BOOST_REQUIRE_EQUAL(right_child(4, 2), 1_u64);
84+
BOOST_REQUIRE_EQUAL(right_child(49, 5), 35_u64);
85+
BOOST_REQUIRE_EQUAL(right_child(50, 5), 37_u64);
86+
BOOST_REQUIRE_EQUAL(right_child(44, 5), 25_u64);
87+
}
88+
2889
BOOST_AUTO_TEST_CASE(utreexo__is_root_populated__various__expected)
2990
{
3091
static_assert(!is_root_populated(0b00000000, 0));
@@ -66,14 +127,14 @@ BOOST_AUTO_TEST_CASE(utreexo__left_sibling__various__expected)
66127
BOOST_AUTO_TEST_CASE(utreexo__start_position_at_row__various__expected)
67128
{
68129
// forest_rows must be >= row.
69-
static_assert(start_position_at_row(0, 0) == 0_u64);
70-
static_assert(start_position_at_row(0, 1) == 0_u64);
71-
static_assert(start_position_at_row(1, 1) == 2_u64);
72-
static_assert(start_position_at_row(1, 2) == 4_u64);
73-
static_assert(start_position_at_row(1, 3) == 8_u64);
74-
static_assert(start_position_at_row(2, 2) == 6_u64);
75-
static_assert(start_position_at_row(2, 3) == 12_u64);
76-
static_assert(start_position_at_row(3, 3) == 14_u64);
130+
static_assert(start_position_at_row(0, 0) == 0);
131+
static_assert(start_position_at_row(0, 1) == 0);
132+
static_assert(start_position_at_row(1, 1) == 2);
133+
static_assert(start_position_at_row(1, 2) == 4);
134+
static_assert(start_position_at_row(1, 3) == 8);
135+
static_assert(start_position_at_row(2, 2) == 6);
136+
static_assert(start_position_at_row(2, 3) == 12);
137+
static_assert(start_position_at_row(3, 3) == 14);
77138
BOOST_REQUIRE_EQUAL(start_position_at_row(0, 0), 0_u64);
78139
BOOST_REQUIRE_EQUAL(start_position_at_row(0, 1), 0_u64);
79140
BOOST_REQUIRE_EQUAL(start_position_at_row(1, 1), 2_u64);
@@ -86,11 +147,11 @@ BOOST_AUTO_TEST_CASE(utreexo__start_position_at_row__various__expected)
86147

87148
BOOST_AUTO_TEST_CASE(utreexo__number_of_roots__various__expected)
88149
{
89-
static_assert(number_of_roots(0) == 0_size);
90-
static_assert(number_of_roots(1) == 1_size);
91-
static_assert(number_of_roots(2) == 1_size);
92-
static_assert(number_of_roots(3) == 2_size);
93-
static_assert(number_of_roots(0xfefefefefefefefe) == (64_size - 8_size));
150+
static_assert(number_of_roots(0) == 0);
151+
static_assert(number_of_roots(1) == 1);
152+
static_assert(number_of_roots(2) == 1);
153+
static_assert(number_of_roots(3) == 2);
154+
static_assert(number_of_roots(0xfefefefefefefefe) == (64 - 8));
94155
BOOST_REQUIRE_EQUAL(number_of_roots(0), 0_size);
95156
BOOST_REQUIRE_EQUAL(number_of_roots(1), 1_size);
96157
BOOST_REQUIRE_EQUAL(number_of_roots(2), 1_size);
@@ -131,10 +192,10 @@ BOOST_AUTO_TEST_CASE(utreexo__is_sibling__various__expected)
131192
// github.com/mit-dci/rustreexo/blob/main/src/accumulator/util.rs#L474
132193
BOOST_AUTO_TEST_CASE(utreexo__children__various__expected)
133194
{
134-
static_assert(children(4, 2) == 0_u64);
135-
static_assert(children(49, 5) == 34_u64);
136-
static_assert(children(50, 5) == 36_u64);
137-
static_assert(children(44, 5) == 24_u64);
195+
static_assert(children(4, 2) == 0);
196+
static_assert(children(49, 5) == 34);
197+
static_assert(children(50, 5) == 36);
198+
static_assert(children(44, 5) == 24);
138199
BOOST_REQUIRE_EQUAL(children(4, 2), 0_u64);
139200
BOOST_REQUIRE_EQUAL(children(49, 5), 34_u64);
140201
BOOST_REQUIRE_EQUAL(children(50, 5), 36_u64);
@@ -151,10 +212,10 @@ BOOST_AUTO_TEST_CASE(utreexo__is_root_position__various__expected)
151212
// github.com/mit-dci/rustreexo/blob/main/src/accumulator/util.rs#L424
152213
BOOST_AUTO_TEST_CASE(utreexo__tree_rows__various__expected)
153214
{
154-
static_assert(tree_rows(8) == 3_u8);
155-
static_assert(tree_rows(9) == 4_u8);
156-
static_assert(tree_rows(12) == 4_u8);
157-
static_assert(tree_rows(255) == 8_u8);
215+
static_assert(tree_rows(8) == 3);
216+
static_assert(tree_rows(9) == 4);
217+
static_assert(tree_rows(12) == 4);
218+
static_assert(tree_rows(255) == 8);
158219
BOOST_REQUIRE_EQUAL(tree_rows(8), 3_u8);
159220
BOOST_REQUIRE_EQUAL(tree_rows(9), 4_u8);
160221
BOOST_REQUIRE_EQUAL(tree_rows(12), 4_u8);
@@ -199,8 +260,8 @@ BOOST_AUTO_TEST_CASE(utreexo__detect_row__scenario__expected)
199260
// github.com/mit-dci/rustreexo/blob/main/src/accumulator/util.rs#L359
200261
BOOST_AUTO_TEST_CASE(utreexo__root_position__various__expected)
201262
{
202-
static_assert(root_position(5, 2, 3) == 12_u64);
203-
static_assert(root_position(5, 0, 3) == 4_u64);
263+
static_assert(root_position(5, 2, 3) == 12);
264+
static_assert(root_position(5, 0, 3) == 4);
204265
BOOST_REQUIRE_EQUAL(root_position(5, 2, 3), 12_u64);
205266
BOOST_REQUIRE_EQUAL(root_position(5, 0, 3), 4_u64);
206267
}

0 commit comments

Comments
 (0)