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()