Changeset View
Changeset View
Standalone View
Standalone View
src/test/opcode_tests.cpp
| Show All 24 Lines | |||||
| static void CheckTestResultForAllFlags(const stacktype &original_stack, | static void CheckTestResultForAllFlags(const stacktype &original_stack, | ||||
| const CScript &script, | const CScript &script, | ||||
| const stacktype &expected) { | const stacktype &expected) { | ||||
| BaseSignatureChecker sigchecker; | BaseSignatureChecker sigchecker; | ||||
| for (uint32_t flags : flagset) { | for (uint32_t flags : flagset) { | ||||
| ScriptError err = SCRIPT_ERR_OK; | ScriptError err = SCRIPT_ERR_OK; | ||||
| stacktype stack{original_stack}; | stacktype stack{original_stack}; | ||||
| bool r = EvalScript(stack, script, flags, sigchecker, &err); | bool r = | ||||
| EvalScript(stack, script, flags | SCRIPT_ENABLE_MAGNETIC_OPCODES, | |||||
| sigchecker, &err); | |||||
| BOOST_CHECK(r); | BOOST_CHECK(r); | ||||
| BOOST_CHECK(stack == expected); | BOOST_CHECK(stack == expected); | ||||
| } | } | ||||
| } | } | ||||
| static void CheckError(uint32_t flags, const stacktype &original_stack, | static void CheckError(uint32_t flags, const stacktype &original_stack, | ||||
| const CScript &script, ScriptError expected_error) { | const CScript &script, ScriptError expected_error) { | ||||
| BaseSignatureChecker sigchecker; | BaseSignatureChecker sigchecker; | ||||
| ScriptError err = SCRIPT_ERR_OK; | ScriptError err = SCRIPT_ERR_OK; | ||||
| stacktype stack{original_stack}; | stacktype stack{original_stack}; | ||||
| bool r = EvalScript(stack, script, flags, sigchecker, &err); | bool r = EvalScript(stack, script, flags | SCRIPT_ENABLE_MAGNETIC_OPCODES, | ||||
| sigchecker, &err); | |||||
| BOOST_CHECK(!r); | BOOST_CHECK(!r); | ||||
| BOOST_CHECK_EQUAL(err, expected_error); | BOOST_CHECK_EQUAL(err, expected_error); | ||||
| } | } | ||||
| static void CheckErrorForAllFlags(const stacktype &original_stack, | static void CheckErrorForAllFlags(const stacktype &original_stack, | ||||
| const CScript &script, | const CScript &script, | ||||
| ScriptError expected_error) { | ScriptError expected_error) { | ||||
| for (uint32_t flags : flagset) { | for (uint32_t flags : flagset) { | ||||
| Show All 13 Lines | static void CheckAllBitwiseOpErrors(const stacktype &stack, | ||||
| CheckOpError(stack, OP_XOR, expected_error); | CheckOpError(stack, OP_XOR, expected_error); | ||||
| } | } | ||||
| static void CheckBinaryOp(const valtype &a, const valtype &b, opcodetype op, | static void CheckBinaryOp(const valtype &a, const valtype &b, opcodetype op, | ||||
| const valtype &expected) { | const valtype &expected) { | ||||
| CheckTestResultForAllFlags({a, b}, CScript() << op, {expected}); | CheckTestResultForAllFlags({a, b}, CScript() << op, {expected}); | ||||
| } | } | ||||
| static void CheckUnaryOp(const valtype &a, opcodetype op, | |||||
| const valtype &expected) { | |||||
| CheckTestResultForAllFlags({a}, CScript() << op, {expected}); | |||||
| } | |||||
| static valtype NegativeValtype(const valtype &v) { | static valtype NegativeValtype(const valtype &v) { | ||||
| valtype r(v); | valtype r(v); | ||||
| if (r.size() > 0) { | if (r.size() > 0) { | ||||
| r[r.size() - 1] ^= 0x80; | r[r.size() - 1] ^= 0x80; | ||||
| } | } | ||||
| CScriptNum::MinimallyEncode(r); | CScriptNum::MinimallyEncode(r); | ||||
| return r; | return r; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 682 Lines • ▼ Show 20 Lines | BOOST_AUTO_TEST_CASE(div_and_mod_opcode_tests) { | ||||
| // 56488123 % 3 = 1 (and negative operands) | // 56488123 % 3 = 1 (and negative operands) | ||||
| CheckDivMod({0xbb, 0xf0, 0x5d, 0x03}, {0x03}, {0x3e, 0x50, 0x1f, 0x01}, | CheckDivMod({0xbb, 0xf0, 0x5d, 0x03}, {0x03}, {0x3e, 0x50, 0x1f, 0x01}, | ||||
| {0x01}); | {0x01}); | ||||
| // 56488123 % 564881230 = 56488123 (and negative operands) | // 56488123 % 564881230 = 56488123 (and negative operands) | ||||
| CheckDivMod({0xbb, 0xf0, 0x5d, 0x03}, {0x4e, 0x67, 0xab, 0x21}, {}, | CheckDivMod({0xbb, 0xf0, 0x5d, 0x03}, {0x4e, 0x67, 0xab, 0x21}, {}, | ||||
| {0xbb, 0xf0, 0x5d, 0x03}); | {0xbb, 0xf0, 0x5d, 0x03}); | ||||
| } | } | ||||
| BOOST_AUTO_TEST_CASE(mul2_div2_test) { | |||||
| CheckUnaryOp({}, OP_2MUL, {}); | |||||
| CheckUnaryOp({0x01}, OP_2MUL, {0x02}); | |||||
| CheckUnaryOp({0x02}, OP_2MUL, {0x04}); | |||||
| CheckUnaryOp({}, OP_2DIV, {}); | |||||
| CheckUnaryOp({0x01}, OP_2DIV, {}); | |||||
| CheckUnaryOp({0x02}, OP_2DIV, {0x01}); | |||||
| CheckUnaryOp({0x03}, OP_2DIV, {0x01}); | |||||
| CheckUnaryOp({0x04}, OP_2DIV, {0x02}); | |||||
| } | |||||
| BOOST_AUTO_TEST_SUITE_END() | BOOST_AUTO_TEST_SUITE_END() | ||||