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 305 Lines • ▼ Show 20 Lines | BOOST_AUTO_TEST_CASE(bitwise_opcodes_test) { | ||||
CheckAllBitwiseOpErrors({{0x00}, {0xab, 0xcd, 0xef}}, | CheckAllBitwiseOpErrors({{0x00}, {0xab, 0xcd, 0xef}}, | ||||
SCRIPT_ERR_INVALID_OPERAND_SIZE); | SCRIPT_ERR_INVALID_OPERAND_SIZE); | ||||
CheckAllBitwiseOpErrors({{0xab, 0xcd, 0xef}, {0x00}}, | CheckAllBitwiseOpErrors({{0xab, 0xcd, 0xef}, {0x00}}, | ||||
SCRIPT_ERR_INVALID_OPERAND_SIZE); | SCRIPT_ERR_INVALID_OPERAND_SIZE); | ||||
CheckAllBitwiseOpErrors({{}, a}, SCRIPT_ERR_INVALID_OPERAND_SIZE); | CheckAllBitwiseOpErrors({{}, a}, SCRIPT_ERR_INVALID_OPERAND_SIZE); | ||||
CheckAllBitwiseOpErrors({b, {}}, SCRIPT_ERR_INVALID_OPERAND_SIZE); | CheckAllBitwiseOpErrors({b, {}}, SCRIPT_ERR_INVALID_OPERAND_SIZE); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(invert_test) { | |||||
CheckUnaryOp({}, OP_INVERT, {}); | |||||
CheckUnaryOp({0x00}, OP_INVERT, {0xFF}); | |||||
CheckUnaryOp({0xFF}, OP_INVERT, {0x00}); | |||||
CheckUnaryOp({0xFF, 0xA0, 0xCE, 0xA0, 0x96, 0x12}, OP_INVERT, | |||||
{0x00, 0x5F, 0x31, 0x5F, 0x69, 0xED}); | |||||
} | |||||
/** | /** | ||||
* String opcodes. | * String opcodes. | ||||
*/ | */ | ||||
static void CheckStringOp(const valtype &a, const valtype &b, | static void CheckStringOp(const valtype &a, const valtype &b, | ||||
const valtype &n) { | const valtype &n) { | ||||
CheckBinaryOp(a, b, OP_CAT, n); | CheckBinaryOp(a, b, OP_CAT, n); | ||||
// Check concatenation with empty elements. | // Check concatenation with empty elements. | ||||
▲ Show 20 Lines • Show All 370 Lines • Show Last 20 Lines |