diff options
author | Carl Allendorph <callendorph@gmail.com> | 2014-04-20 01:52:08 +0800 |
---|---|---|
committer | Carl Allendorph <callendorph@gmail.com> | 2014-04-20 01:52:08 +0800 |
commit | b8ce26d9f9d0a079ccfdb39f2e225b63dbe5f10a (patch) | |
tree | 38572e704e6dfda0a4641af75607dd0f32bce876 | |
parent | cd132eae5e12f98410a62b06dd7abfd0eee9722d (diff) | |
download | dexon-solidity-b8ce26d9f9d0a079ccfdb39f2e225b63dbe5f10a.tar dexon-solidity-b8ce26d9f9d0a079ccfdb39f2e225b63dbe5f10a.tar.gz dexon-solidity-b8ce26d9f9d0a079ccfdb39f2e225b63dbe5f10a.tar.bz2 dexon-solidity-b8ce26d9f9d0a079ccfdb39f2e225b63dbe5f10a.tar.lz dexon-solidity-b8ce26d9f9d0a079ccfdb39f2e225b63dbe5f10a.tar.xz dexon-solidity-b8ce26d9f9d0a079ccfdb39f2e225b63dbe5f10a.tar.zst dexon-solidity-b8ce26d9f9d0a079ccfdb39f2e225b63dbe5f10a.zip |
Broke trie tests out as separate boost auto test case.
-rw-r--r-- | main.cpp | 1 | ||||
-rw-r--r-- | trie.cpp | 74 |
2 files changed, 36 insertions, 39 deletions
@@ -45,7 +45,6 @@ BOOST_AUTO_TEST_CASE(basic_tests) std::cout << sha3(s.out()) << std::endl;*/ int r = 0; - r += trieTest(); r += vmTest(); r += cryptoTest(); // TODO: Put in tests repo. // r += daggerTest(); @@ -26,56 +26,56 @@ #include <TrieDB.h> #include "TrieHash.h" #include "MemTrie.h" +#include <boost/test/unit_test.hpp> + using namespace std; using namespace eth; namespace js = json_spirit; -namespace eth -{ +namespace eth +{ + namespace test + { + static unsigned fac(unsigned _i) + { + return _i > 2 ? _i * fac(_i - 1) : _i; + } -unsigned fac(unsigned _i) { return _i > 2 ? _i * fac(_i - 1) : _i; } + } +} -template <> class UnitTest<4> + +BOOST_AUTO_TEST_CASE(trie_tests) { -public: - int operator()() + cnote << "Testing Trie..."; + + js::mValue v; + string s = asString(contents("../../tests/trietest.json")); + BOOST_REQUIRE_MESSAGE( s.length() > 0, "Contents of 'trietest.json' is empty. Have you cloned the 'tests' repo branch develop?"); + js::read_string(s, v); + for (auto& i: v.get_obj()) { - js::mValue v; - string s = asString(contents("../../tests/trietest.json")); - js::read_string(s, v); - bool passed = true; - for (auto& i: v.get_obj()) + js::mObject& o = i.second.get_obj(); + cnote << i.first; + vector<pair<string, string>> ss; + for (auto& i: o["in"].get_obj()) + ss.push_back(make_pair(i.first, i.second.get_str())); + for (unsigned j = 0; j < eth::test::fac((unsigned)ss.size()); ++j) { - js::mObject& o = i.second.get_obj(); - cnote << i.first; - vector<pair<string, string>> ss; - for (auto& i: o["in"].get_obj()) - ss.push_back(make_pair(i.first, i.second.get_str())); - for (unsigned j = 0; j < fac((unsigned)ss.size()); ++j) - { - next_permutation(ss.begin(), ss.end()); - BasicMap m; - GenericTrieDB<BasicMap> t(&m); - t.init(); - for (auto const& k: ss) - t.insert(k.first, k.second); - if (!o["root"].is_null() && o["root"].get_str() != toHex(t.root().asArray())) - { - cwarn << "Test failed on permutation " << j; - cwarn << "Test says:" << o["root"].get_str(); - cwarn << "Impl says:" << toHex(t.root().asArray()); - passed = false; - } - } + next_permutation(ss.begin(), ss.end()); + BasicMap m; + GenericTrieDB<BasicMap> t(&m); + t.init(); + for (auto const& k: ss) + t.insert(k.first, k.second); + BOOST_REQUIRE(!o["root"].is_null()); + BOOST_CHECK(o["root"].get_str() == toHex(t.root().asArray()) ); } - return passed ? 0 : 1; } - -}; - } + inline h256 stringMapHash256(StringMap const& _s) { return hash256(_s); @@ -83,8 +83,6 @@ inline h256 stringMapHash256(StringMap const& _s) int trieTest() { - cnote << "Testing Trie..."; - return UnitTest<4>()(); // More tests... { |