diff options
author | Gav Wood <i@gavwood.com> | 2015-03-03 20:00:09 +0800 |
---|---|---|
committer | Gav Wood <i@gavwood.com> | 2015-03-04 00:08:35 +0800 |
commit | 731543e21c99d2fa245a8a5a2c8529887e9fd50f (patch) | |
tree | 45c119683d00420c8adae1859919131874517de3 | |
parent | b3de3493bf4d68328ce6185e54fd39e3b179e4d0 (diff) | |
download | dexon-solidity-731543e21c99d2fa245a8a5a2c8529887e9fd50f.tar.gz dexon-solidity-731543e21c99d2fa245a8a5a2c8529887e9fd50f.tar.zst dexon-solidity-731543e21c99d2fa245a8a5a2c8529887e9fd50f.zip |
Update precompiled stuff.
Add extra tests for secure trie.
-rw-r--r-- | trie.cpp | 62 |
1 files changed, 62 insertions, 0 deletions
@@ -72,6 +72,68 @@ BOOST_AUTO_TEST_CASE(fat_trie) } } +BOOST_AUTO_TEST_CASE(hex_encoded_securetrie_test) +{ + string testPath = test::getTestPath(); + + testPath += "/TrieTests"; + + cnote << "Testing Secure Trie..."; + js::mValue v; + string s = asString(contents(testPath + "/hex_encoded_securetrie_test.json")); + BOOST_REQUIRE_MESSAGE(s.length() > 0, "Contents of 'hex_encoded_securetrie_test.json' is empty. Have you cloned the 'tests' repo branch develop?"); + js::read_string(s, v); + for (auto& i: v.get_obj()) + { + cnote << i.first; + js::mObject& o = i.second.get_obj(); + vector<pair<string, string>> ss; + for (auto i: o["in"].get_obj()) + { + ss.push_back(make_pair(i.first, i.second.get_str())); + if (!ss.back().first.find("0x")) + ss.back().first = asString(fromHex(ss.back().first.substr(2))); + if (!ss.back().second.find("0x")) + ss.back().second = asString(fromHex(ss.back().second.substr(2))); + } + for (unsigned j = 0; j < min(1000000000u, dev::test::fac((unsigned)ss.size())); ++j) + { + next_permutation(ss.begin(), ss.end()); + MemoryDB m; + GenericTrieDB<MemoryDB> t(&m); + MemoryDB hm; + HashedGenericTrieDB<MemoryDB> ht(&hm); + MemoryDB fm; + FatGenericTrieDB<MemoryDB> ft(&fm); + t.init(); + ht.init(); + ft.init(); + BOOST_REQUIRE(t.check(true)); + BOOST_REQUIRE(ht.check(true)); + BOOST_REQUIRE(ft.check(true)); + for (auto const& k: ss) + { + t.insert(k.first, k.second); + ht.insert(k.first, k.second); + ft.insert(k.first, k.second); + BOOST_REQUIRE(t.check(true)); + BOOST_REQUIRE(ht.check(true)); + BOOST_REQUIRE(ft.check(true)); + for (auto i = ft.begin(), j = t.begin(); i != ft.end() && j != t.end(); ++i, ++j) + { + BOOST_CHECK_EQUAL(i == ft.end(), j == t.end()); + BOOST_REQUIRE((*i).first.toBytes() == (*j).first.toBytes()); + BOOST_REQUIRE((*i).second.toBytes() == (*j).second.toBytes()); + } + BOOST_CHECK_EQUAL(ht.root(), ft.root()); + } + BOOST_REQUIRE(!o["root"].is_null()); + BOOST_CHECK_EQUAL(o["root"].get_str(), "0x" + toHex(ht.root().asArray())); + BOOST_CHECK_EQUAL(o["root"].get_str(), "0x" + toHex(ft.root().asArray())); + } + } +} + BOOST_AUTO_TEST_CASE(trie_test_anyorder) { string testPath = test::getTestPath(); |