From b8ce26d9f9d0a079ccfdb39f2e225b63dbe5f10a Mon Sep 17 00:00:00 2001 From: Carl Allendorph Date: Sat, 19 Apr 2014 10:52:08 -0700 Subject: Broke trie tests out as separate boost auto test case. --- main.cpp | 1 - trie.cpp | 74 +++++++++++++++++++++++++++++++--------------------------------- 2 files changed, 36 insertions(+), 39 deletions(-) diff --git a/main.cpp b/main.cpp index 92ec9a4f..9fdee181 100644 --- a/main.cpp +++ b/main.cpp @@ -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(); diff --git a/trie.cpp b/trie.cpp index 5e3cfcb6..785bcc72 100644 --- a/trie.cpp +++ b/trie.cpp @@ -26,56 +26,56 @@ #include #include "TrieHash.h" #include "MemTrie.h" +#include + 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> 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> 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 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 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... { -- cgit v1.2.3