Changeset View
Changeset View
Standalone View
Standalone View
src/test/opcode_tests.cpp
Show First 20 Lines • Show All 68 Lines • ▼ Show 20 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 |