script_parse_tests.cpp raw

   1  // Copyright (c) 2021-present The Bitcoin Core developers
   2  // Distributed under the MIT software license, see the accompanying
   3  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
   4  
   5  #include <core_io.h>
   6  #include <script/script.h>
   7  #include <util/strencodings.h>
   8  #include <test/util/common.h>
   9  
  10  #include <boost/test/unit_test.hpp>
  11  
  12  BOOST_AUTO_TEST_SUITE(script_parse_tests)
  13  BOOST_AUTO_TEST_CASE(parse_script)
  14  {
  15      const std::vector<std::pair<std::string,std::string>> IN_OUT{
  16          // {IN: script string , OUT: hex string }
  17          {"", ""},
  18          {"0", "00"},
  19          {"1", "51"},
  20          {"2", "52"},
  21          {"3", "53"},
  22          {"4", "54"},
  23          {"5", "55"},
  24          {"6", "56"},
  25          {"7", "57"},
  26          {"8", "58"},
  27          {"9", "59"},
  28          {"10", "5a"},
  29          {"11", "5b"},
  30          {"12", "5c"},
  31          {"13", "5d"},
  32          {"14", "5e"},
  33          {"15", "5f"},
  34          {"16", "60"},
  35          {"17", "0111"},
  36          {"-9", "0189"},
  37          {"0x17", "17"},
  38          {"'17'", "023137"},
  39          {"ELSE", "67"},
  40          {"NOP10", "b9"},
  41      };
  42      std::string all_in;
  43      std::string all_out;
  44      for (const auto& [in, out] : IN_OUT) {
  45          BOOST_CHECK_EQUAL(HexStr(ParseScript(in)), out);
  46          all_in += " " + in + " ";
  47          all_out += out;
  48      }
  49      BOOST_CHECK_EQUAL(HexStr(ParseScript(all_in)), all_out);
  50  
  51      BOOST_CHECK_EXCEPTION(ParseScript("11111111111111111111"), std::runtime_error, HasReason("script parse error: decimal numeric value only allowed in the range -0xFFFFFFFF...0xFFFFFFFF"));
  52      BOOST_CHECK_EXCEPTION(ParseScript("11111111111"), std::runtime_error, HasReason("script parse error: decimal numeric value only allowed in the range -0xFFFFFFFF...0xFFFFFFFF"));
  53      BOOST_CHECK_EXCEPTION(ParseScript("OP_CHECKSIGADD"), std::runtime_error, HasReason("script parse error: unknown opcode"));
  54  }
  55  BOOST_AUTO_TEST_SUITE_END()
  56