text: // Copyright (c) 2012-2013 The Theoscoin Core developers
  // Distributed under the MIT/X11 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 <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);
      return sSerialized;
  }
  
  BOOST_AUTO_TEST_SUITE(sigopcount_tests)
  
  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(0);
      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()
  