diff --git a/libethcore/BlockInfo.h b/libethcore/BlockInfo.h index 389d0a8ef..d37b70302 100644 --- a/libethcore/BlockInfo.h +++ b/libethcore/BlockInfo.h @@ -128,6 +128,7 @@ public: void setCoinbaseAddress(Address const& _v) { m_coinbaseAddress = _v; noteDirty(); } void setRoots(h256 const& _t, h256 const& _r, h256 const& _u, h256 const& _s) { m_transactionsRoot = _t; m_receiptsRoot = _r; m_stateRoot = _s; m_sha3Uncles = _u; noteDirty(); } void setGasUsed(u256 const& _v) { m_gasUsed = _v; noteDirty(); } + void setNumber(u256 const& _v) { m_number = _v; noteDirty(); } void setGasLimit(u256 const& _v) { m_gasLimit = _v; noteDirty(); } void setExtraData(bytes const& _v) { m_extraData = _v; noteDirty(); } void setLogBloom(LogBloom const& _v) { m_logBloom = _v; noteDirty(); } diff --git a/test/libethcore/difficulty.cpp b/test/libethcore/difficulty.cpp new file mode 100644 index 000000000..6defcd51d --- /dev/null +++ b/test/libethcore/difficulty.cpp @@ -0,0 +1,62 @@ +/* + This file is part of cpp-ethereum. + + cpp-ethereum is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + cpp-ethereum is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with cpp-ethereum. If not, see . +*/ +/** @file difficulty.cpp + * @author Christoph Jentzsch + * @date 2015 + * difficulty calculation tests. + */ + + +#include +#include +#include + +using namespace std; +using namespace dev; +using namespace dev::eth; + +namespace js = json_spirit; + +BOOST_AUTO_TEST_SUITE(DifficultyTests) + +BOOST_AUTO_TEST_CASE(difficultyTests) +{ + string testPath = test::getTestPath(); + testPath += "/BasicTests"; + + js::mValue v; + string s = contentsString(testPath + "/difficulty.json"); + BOOST_REQUIRE_MESSAGE(s.length() > 0, "Contents of 'difficulty.json' is empty. Have you cloned the 'tests' repo branch develop?"); + js::read_string(s, v); + + for (auto& i: v.get_obj()) + { + js::mObject o = i.second.get_obj(); + cnote << "Difficulty test: " << i.first; + BlockInfo parent; + parent.setTimestamp(test::toInt(o["parentTimestamp"])); + parent.setDifficulty(test::toInt(o["parentDifficulty"])); + + BlockInfo current; + current.setTimestamp(test::toInt(o["currentTimestamp"])); + current.setNumber(test::toInt(o["currentBlockNumber"])); + + BOOST_CHECK_EQUAL(current.calculateDifficulty(parent), test::toInt(o["currentDifficulty"])); + } +} + +BOOST_AUTO_TEST_SUITE_END()