/ src / test / script_parse_tests.cpp
script_parse_tests.cpp
 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()