Feathercoin  0.5.0
P2P Digital Currency
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros
sigopcount_tests.cpp
Go to the documentation of this file.
1 #include <vector>
2 #include <boost/test/unit_test.hpp>
3 #include <boost/foreach.hpp>
4 
5 #include "script.h"
6 #include "key.h"
7 
8 using namespace std;
9 
10 // Helpers:
11 static std::vector<unsigned char>
12 Serialize(const CScript& s)
13 {
14  std::vector<unsigned char> sSerialized(s);
15  return sSerialized;
16 }
17 
18 BOOST_AUTO_TEST_SUITE(sigopcount_tests)
19 
20 BOOST_AUTO_TEST_CASE(GetSigOpCount)
21 {
22  // Test CScript::GetSigOpCount()
23  CScript s1;
24  BOOST_CHECK_EQUAL(s1.GetSigOpCount(false), 0U);
25  BOOST_CHECK_EQUAL(s1.GetSigOpCount(true), 0U);
26 
27  uint160 dummy;
28  s1 << OP_1 << dummy << dummy << OP_2 << OP_CHECKMULTISIG;
29  BOOST_CHECK_EQUAL(s1.GetSigOpCount(true), 2U);
30  s1 << OP_IF << OP_CHECKSIG << OP_ENDIF;
31  BOOST_CHECK_EQUAL(s1.GetSigOpCount(true), 3U);
32  BOOST_CHECK_EQUAL(s1.GetSigOpCount(false), 21U);
33 
34  CScript p2sh;
35  p2sh.SetDestination(s1.GetID());
36  CScript scriptSig;
37  scriptSig << OP_0 << Serialize(s1);
38  BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(scriptSig), 3U);
39 
40  std::vector<CPubKey> keys;
41  for (int i = 0; i < 3; i++)
42  {
43  CKey k;
44  k.MakeNewKey(true);
45  keys.push_back(k.GetPubKey());
46  }
47  CScript s2;
48  s2.SetMultisig(1, keys);
49  BOOST_CHECK_EQUAL(s2.GetSigOpCount(true), 3U);
50  BOOST_CHECK_EQUAL(s2.GetSigOpCount(false), 20U);
51 
52  p2sh.SetDestination(s2.GetID());
53  BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(true), 0U);
54  BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(false), 0U);
55  CScript scriptSig2;
56  scriptSig2 << OP_1 << dummy << dummy << Serialize(s2);
57  BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(scriptSig2), 3U);
58 }
59 
60 BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_CASE(GetSigOpCount)
Definition: script.h:98
void Serialize(Stream &s, char a, int, int=0)
Definition: serialize.h:120
Definition: script.h:79
void SetDestination(const CTxDestination &address)
Definition: script.cpp:1768
int std::string int dummy
Definition: util.h:164
unsigned int GetSigOpCount(bool fAccurate) const
Definition: script.cpp:1686
CPubKey GetPubKey() const
Definition: key.cpp:312
Definition: script.h:77
void MakeNewKey(bool fCompressed)
Definition: key.cpp:285
Serialized script, used inside transaction inputs and outputs.
Definition: script.h:244
void SetMultisig(int nRequired, const std::vector< CPubKey > &keys)
Definition: script.cpp:1773
CScriptID GetID() const
Definition: script.h:589
160-bit unsigned integer
Definition: uint256.h:422
An encapsulated private key.
Definition: key.h:172
Definition: script.h:70