diff options
Diffstat (limited to 'src/test/sigopcount_tests.cpp')
| -rw-r--r-- | src/test/sigopcount_tests.cpp | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/test/sigopcount_tests.cpp b/src/test/sigopcount_tests.cpp new file mode 100644 index 000000000..ea2b9b795 --- /dev/null +++ b/src/test/sigopcount_tests.cpp @@ -0,0 +1,67 @@ +// Copyright (c) 2012-2013 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "pubkey.h" +#include "key.h" +#include "script/script.h" +#include "script/standard.h" +#include "uint256.h" +#include "test/test_bitcoin.h" + +#include <vector> + +#include <boost/foreach.hpp> +#include <boost/test/unit_test.hpp> + +using namespace std; + +// Helpers: +static std::vector<unsigned char> +Serialize(const CScript& s) +{ + std::vector<unsigned char> sSerialized(s.begin(), s.end()); + return sSerialized; +} + +BOOST_FIXTURE_TEST_SUITE(sigopcount_tests, BasicTestingSetup) + +BOOST_AUTO_TEST_CASE(GetSigOpCount) +{ + // Test CScript::GetSigOpCount() + CScript s1; + BOOST_CHECK_EQUAL(s1.GetSigOpCount(false), 0U); + BOOST_CHECK_EQUAL(s1.GetSigOpCount(true), 0U); + + uint160 dummy; + s1 << OP_1 << ToByteVector(dummy) << ToByteVector(dummy) << OP_2 << OP_CHECKMULTISIG; + BOOST_CHECK_EQUAL(s1.GetSigOpCount(true), 2U); + s1 << OP_IF << OP_CHECKSIG << OP_ENDIF; + BOOST_CHECK_EQUAL(s1.GetSigOpCount(true), 3U); + BOOST_CHECK_EQUAL(s1.GetSigOpCount(false), 21U); + + CScript p2sh = GetScriptForDestination(CScriptID(s1)); + CScript scriptSig; + scriptSig << OP_0 << Serialize(s1); + BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(scriptSig), 3U); + + std::vector<CPubKey> keys; + for (int i = 0; i < 3; i++) + { + CKey k; + k.MakeNewKey(true); + keys.push_back(k.GetPubKey()); + } + CScript s2 = GetScriptForMultisig(1, keys); + BOOST_CHECK_EQUAL(s2.GetSigOpCount(true), 3U); + BOOST_CHECK_EQUAL(s2.GetSigOpCount(false), 20U); + + p2sh = GetScriptForDestination(CScriptID(s2)); + BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(true), 0U); + BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(false), 0U); + CScript scriptSig2; + scriptSig2 << OP_1 << ToByteVector(dummy) << ToByteVector(dummy) << Serialize(s2); + BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(scriptSig2), 3U); +} + +BOOST_AUTO_TEST_SUITE_END() |