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