Changeset View
Changeset View
Standalone View
Standalone View
src/test/monolith_opcodes.cpp
| Show First 20 Lines • Show All 371 Lines • ▼ Show 20 Lines | BOOST_AUTO_TEST_CASE(bitwise_opcodes_test) { | ||||
| 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); | ||||
| } | } | ||||
| /** | /** | ||||
| * String opcodes. | * String opcodes. | ||||
| */ | */ | ||||
| static void CheckStringOp(const valtype &a, const valtype &b, | static void CheckStringOp(const valtype &a, const valtype &b, | ||||
| const valtype &expected) { | const valtype &n) { | ||||
| CheckBinaryOp(a, b, OP_CAT, expected); | CheckBinaryOp(a, b, OP_CAT, n); | ||||
| // Check concatenation with empty elements. | // Check concatenation with empty elements. | ||||
| CheckBinaryOp(a, {}, OP_CAT, a); | CheckBinaryOp(a, {}, OP_CAT, a); | ||||
| CheckBinaryOp(b, {}, OP_CAT, b); | CheckBinaryOp(b, {}, OP_CAT, b); | ||||
| CheckBinaryOp({}, a, OP_CAT, a); | CheckBinaryOp({}, a, OP_CAT, a); | ||||
| CheckBinaryOp({}, b, OP_CAT, b); | CheckBinaryOp({}, b, OP_CAT, b); | ||||
| // Split n into a and b. | |||||
| CheckTestResultForAllFlags({n}, CScript() << a.size() << OP_SPLIT, {a, b}); | |||||
| // Combine split and cat. | |||||
| CheckTestResultForAllFlags({n}, CScript() << a.size() << OP_SPLIT << OP_CAT, | |||||
| {n}); | |||||
| CheckTestResultForAllFlags( | |||||
| {a, b}, CScript() << OP_CAT << a.size() << OP_SPLIT, {a, b}); | |||||
| // Split away empty elements. | |||||
| CheckTestResultForAllFlags({a}, CScript() << 0 << OP_SPLIT, {{}, a}); | |||||
| CheckTestResultForAllFlags({b}, CScript() << 0 << OP_SPLIT, {{}, b}); | |||||
| CheckTestResultForAllFlags({a}, CScript() << a.size() << OP_SPLIT, {a, {}}); | |||||
| CheckTestResultForAllFlags({b}, CScript() << b.size() << OP_SPLIT, {b, {}}); | |||||
| // Out of bound split. | |||||
| CheckErrorForAllFlags({a}, CScript() << (a.size() + 1) << OP_SPLIT, | |||||
| SCRIPT_ERR_INVALID_SPLIT_RANGE); | |||||
| CheckErrorForAllFlags({b}, CScript() << (b.size() + 1) << OP_SPLIT, | |||||
| SCRIPT_ERR_INVALID_SPLIT_RANGE); | |||||
| CheckErrorForAllFlags({n}, CScript() << (n.size() + 1) << OP_SPLIT, | |||||
| SCRIPT_ERR_INVALID_SPLIT_RANGE); | |||||
| CheckErrorForAllFlags({a}, CScript() << (-1) << OP_SPLIT, | |||||
| SCRIPT_ERR_INVALID_SPLIT_RANGE); | |||||
| } | } | ||||
| BOOST_AUTO_TEST_CASE(string_opcodes_test) { | BOOST_AUTO_TEST_CASE(string_opcodes_test) { | ||||
| // Check for empty string. | // Check for empty string. | ||||
| CheckStringOp({}, {}, {}); | CheckStringOp({}, {}, {}); | ||||
| // Check for simple concats. | // Check for simple concats. | ||||
| CheckStringOp({0x00}, {0x00}, {0x00, 0x00}); | CheckStringOp({0x00}, {0x00}, {0x00, 0x00}); | ||||
| ▲ Show 20 Lines • Show All 64 Lines • ▼ Show 20 Lines | for (size_t i = 0; i <= MAX_SCRIPT_ELEMENT_SIZE; i++) { | ||||
| CheckOpError({extraA, b}, OP_CAT, SCRIPT_ERR_PUSH_SIZE); | CheckOpError({extraA, b}, OP_CAT, SCRIPT_ERR_PUSH_SIZE); | ||||
| CheckOpError({a, extraB}, OP_CAT, SCRIPT_ERR_PUSH_SIZE); | CheckOpError({a, extraB}, OP_CAT, SCRIPT_ERR_PUSH_SIZE); | ||||
| CheckOpError({extraA, extraB}, OP_CAT, SCRIPT_ERR_PUSH_SIZE); | CheckOpError({extraA, extraB}, OP_CAT, SCRIPT_ERR_PUSH_SIZE); | ||||
| } | } | ||||
| // Check error conditions. | // Check error conditions. | ||||
| CheckOpError({}, OP_CAT, SCRIPT_ERR_INVALID_STACK_OPERATION); | CheckOpError({}, OP_CAT, SCRIPT_ERR_INVALID_STACK_OPERATION); | ||||
| CheckOpError({}, OP_SPLIT, SCRIPT_ERR_INVALID_STACK_OPERATION); | |||||
| CheckOpError({{}}, OP_CAT, SCRIPT_ERR_INVALID_STACK_OPERATION); | CheckOpError({{}}, OP_CAT, SCRIPT_ERR_INVALID_STACK_OPERATION); | ||||
| CheckOpError({{}}, OP_SPLIT, SCRIPT_ERR_INVALID_STACK_OPERATION); | |||||
| CheckOpError({{0x00}}, OP_CAT, SCRIPT_ERR_INVALID_STACK_OPERATION); | CheckOpError({{0x00}}, OP_CAT, SCRIPT_ERR_INVALID_STACK_OPERATION); | ||||
| CheckOpError({{0x00}}, OP_SPLIT, SCRIPT_ERR_INVALID_STACK_OPERATION); | |||||
| CheckOpError({{0xab, 0xcd, 0xef}}, OP_CAT, | CheckOpError({{0xab, 0xcd, 0xef}}, OP_CAT, | ||||
| SCRIPT_ERR_INVALID_STACK_OPERATION); | SCRIPT_ERR_INVALID_STACK_OPERATION); | ||||
| CheckOpError({{0xab, 0xcd, 0xef}}, OP_SPLIT, | |||||
| SCRIPT_ERR_INVALID_STACK_OPERATION); | |||||
| } | } | ||||
| /** | /** | ||||
| * Type conversion opcodes. | * Type conversion opcodes. | ||||
| */ | */ | ||||
| static void CheckTypeConversionOp(const valtype &bin, const valtype &num) { | static void CheckTypeConversionOp(const valtype &bin, const valtype &num) { | ||||
| // Check BIN2NUM. | // Check BIN2NUM. | ||||
| CheckTestResultForAllFlags({bin}, CScript() << OP_BIN2NUM, {num}); | CheckTestResultForAllFlags({bin}, CScript() << OP_BIN2NUM, {num}); | ||||
| ▲ Show 20 Lines • Show All 107 Lines • Show Last 20 Lines | |||||