20 #include <ripple/basics/Blob.h>
21 #include <ripple/basics/Buffer.h>
22 #include <ripple/beast/unit_test.h>
23 #include <ripple/beast/utility/Journal.h>
24 #include <ripple/shamap/SHAMap.h>
25 #include <test/shamap/common.h>
26 #include <test/unit_test/SuiteJournal.h>
31 #ifndef __INTELLISENSE__
131 testcase(
"add/traverse backed");
133 testcase(
"add/traverse unbacked");
139 "092891fe4ef6cee585fdc6fda0e09eb4d386363158ec3321b8123e5a772c6ca7");
141 "436ccbac3347baa1f1e53baeef1f43334da88f1f6d70d963b833afd6dfa289fe");
143 "b92891fe4ef6cee585fdc6fda1e09eb4d386363158ec3321b8123e5a772c6ca8");
145 "b92891fe4ef6cee585fdc6fda2e09eb4d386363158ec3321b8123e5a772c6ca8");
147 "a92891fe4ef6cee585fdc6fda0e09eb4d386363158ec3321b8123e5a772c6ca7");
171 auto i = sMap.
begin();
173 unexpected(i == e || (*i != *i1),
"bad traverse");
175 unexpected(i == e || (*i != *i2),
"bad traverse");
177 unexpected(i != e,
"bad traverse");
186 unexpected(i == e || (*i != *i1),
"bad traverse");
188 unexpected(i == e || (*i != *i3),
"bad traverse");
190 unexpected(i == e || (*i != *i4),
"bad traverse");
192 unexpected(i != e,
"bad traverse");
195 testcase(
"snapshot backed");
197 testcase(
"snapshot unbacked");
202 unexpected(sMap.
getHash() != mapHash,
"bad snapshot");
203 unexpected(map2->getHash() != mapHash,
"bad snapshot");
206 BEAST_EXPECT(sMap.
compare(*map2, delta, 100));
207 BEAST_EXPECT(delta.
empty());
209 unexpected(!sMap.
delItem(sMap.
begin()->key()),
"bad mod");
211 unexpected(sMap.
getHash() == mapHash,
"bad snapshot");
212 unexpected(map2->getHash() != mapHash,
"bad snapshot");
214 BEAST_EXPECT(sMap.
compare(*map2, delta, 100));
215 BEAST_EXPECT(delta.
size() == 1);
216 BEAST_EXPECT(delta.
begin()->first == h1);
217 BEAST_EXPECT(delta.
begin()->second.first ==
nullptr);
218 BEAST_EXPECT(delta.
begin()->second.second->key() == h1);
223 testcase(
"build/tear backed");
225 testcase(
"build/tear unbacked");
228 uint256(
"b92891fe4ef6cee585fdc6fda1e09eb4d386363158ec3321b8123e"
230 uint256(
"b92881fe4ef6cee585fdc6fda1e09eb4d386363158ec3321b8123e"
232 uint256(
"b92691fe4ef6cee585fdc6fda1e09eb4d386363158ec3321b8123e"
234 uint256(
"b92791fe4ef6cee585fdc6fda1e09eb4d386363158ec3321b8123e"
236 uint256(
"b91891fe4ef6cee585fdc6fda1e09eb4d386363158ec3321b8123e"
238 uint256(
"b99891fe4ef6cee585fdc6fda1e09eb4d386363158ec3321b8123e"
240 uint256(
"f22891fe4ef6cee585fdc6fda1e09eb4d386363158ec3321b8123e"
242 uint256(
"292891fe4ef6cee585fdc6fda1e09eb4d386363158ec3321b8123e"
246 uint256(
"B7387CFEA0465759ADC718E8C42B52D2309D179B326E239EB5075C"
248 uint256(
"FBC195A9592A54AB44010274163CB6BA95F497EC5BA0A883184546"
250 uint256(
"4E7D2684B65DFD48937FFB775E20175C43AF0C94066F7D5679F51A"
252 uint256(
"7A2F312EB203695FFD164E038E281839EEF06A1B99BFC263F3CECC"
254 uint256(
"395A6691A372387A703FB0F2C6D2C405DAF307D0817F8F0E207596"
256 uint256(
"D044C0A696DE3169CC70AE216A1564D69DE96582865796142CE7D9"
258 uint256(
"76DCC77C4027309B5A91AD164083264D70B77B5E43E08AEDA5EBF9"
260 uint256(
"DF4220E93ADC6F5569063A01B4DC79F8DB9553B6A3222ADE23DEA0"
267 BEAST_EXPECT(map.
getHash() == beast::zero);
268 for (
int k = 0; k < keys.size(); ++k)
276 for (
int k = keys.size() - 1; k >= 0; --k)
279 BEAST_EXPECT(map.
delItem(keys[k]));
282 BEAST_EXPECT(map.
getHash() == beast::zero);
286 testcase(
"iterate backed");
288 testcase(
"iterate unbacked");
292 uint256(
"f22891fe4ef6cee585fdc6fda1e09eb4d386363158ec3321b8123e"
294 uint256(
"b99891fe4ef6cee585fdc6fda1e09eb4d386363158ec3321b8123e"
296 uint256(
"b92891fe4ef6cee585fdc6fda1e09eb4d386363158ec3321b8123e"
298 uint256(
"b92881fe4ef6cee585fdc6fda1e09eb4d386363158ec3321b8123e"
300 uint256(
"b92791fe4ef6cee585fdc6fda1e09eb4d386363158ec3321b8123e"
302 uint256(
"b92691fe4ef6cee585fdc6fda1e09eb4d386363158ec3321b8123e"
304 uint256(
"b91891fe4ef6cee585fdc6fda1e09eb4d386363158ec3321b8123e"
306 uint256(
"292891fe4ef6cee585fdc6fda1e09eb4d386363158ec3321b8123e"
313 for (
auto const& k : keys)
322 for (
auto const& k : map)
324 BEAST_EXPECT(k.key() == keys[h]);
346 for (
unsigned char c = 1; c < 100; ++c)
354 auto root = map.getHash().as_uint256();
355 auto path = map.getProofPath(k);
359 BEAST_EXPECT(map.verifyProofPath(
root, k, *path));
363 path->insert(path->begin(), path->front());
364 BEAST_EXPECT(!map.verifyProofPath(
root, k, *path));
367 BEAST_EXPECT(!map.getProofPath(wrongKey));
373 goodPath = std::move(*path);
378 BEAST_EXPECT(map.verifyProofPath(rootHash, key, goodPath));
381 BEAST_EXPECT(!map.verifyProofPath(rootHash, key, badPath));
385 BEAST_EXPECT(!map.verifyProofPath(rootHash, key, badPath));
389 BEAST_EXPECT(!map.verifyProofPath(rootHash, key, badPath));
393 badPath.
front().back()--;
394 BEAST_EXPECT(!map.verifyProofPath(rootHash, key, badPath));
399 BEAST_EXPECT(!map.verifyProofPath(rootHash, key, badPath));