nimbus-eth1/tests/test_op_bit.nim

668 lines
19 KiB
Nim

# Nimbus
# Copyright (c) 2019-2024 Status Research & Development GmbH
# Licensed under either of
# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or
# http://www.apache.org/licenses/LICENSE-2.0)
# * MIT license ([LICENSE-MIT](LICENSE-MIT) or
# http://opensource.org/licenses/MIT)
# at your option. This file may not be copied, modified, or distributed except
# according to those terms.
import macro_assembler, unittest2
proc opBitMain*() =
suite "Bitwise Opcodes":
assembler: # And OP
title: "AND_1"
code:
Push1 "0x0A"
Push1 "0x0A"
And
stack: "0x000000000000000000000000000000000000000000000000000000000000000A"
assembler: # And OP
title: "AND_2"
code:
Push1 "0xC0"
Push1 "0x0A"
And
stack: "0x0000000000000000000000000000000000000000000000000000000000000000"
assembler: # And OP mal data
title: "AND_3"
code:
Push1 "0xC0"
And
success: false
stack: "0xC0"
assembler: # Or OP
title: "OR_1"
code:
Push1 "0xF0"
Push1 "0x0F"
Or
stack: "0x00000000000000000000000000000000000000000000000000000000000000FF"
assembler: # Or OP
title: "OR_2"
code:
Push1 "0xC3"
Push1 "0x3C"
Or
stack: "0x00000000000000000000000000000000000000000000000000000000000000FF"
assembler: # Or OP mal data
title: "OR_3"
code:
Push1 "0xC0"
Or
success: false
stack: "0xC0"
assembler: # Xor OP
title: "XOR_1"
code:
Push1 "0xFF"
Push1 "0xFF"
Xor
stack: "0x0000000000000000000000000000000000000000000000000000000000000000"
assembler: # Xor OP
title: "XOR_2"
code:
Push1 "0x0F"
Push1 "0xF0"
Xor
stack: "0x00000000000000000000000000000000000000000000000000000000000000FF"
assembler: # Xor OP mal data
title: "XOR_3"
code:
Push1 "0xC0"
Xor
success: false
stack: "0xC0"
assembler: # Byte OP
title: "BYTE_1"
code:
Push6 "0xAABBCCDDEEFF"
Push1 "0x1E"
Byte
stack: "0x00000000000000000000000000000000000000000000000000000000000000EE"
assembler: # Byte OP
title: "BYTE_2"
code:
Push6 "0xAABBCCDDEEFF"
Push1 "0x20"
Byte
stack: "0x0000000000000000000000000000000000000000000000000000000000000000"
assembler: # Byte OP
title: "BYTE_3"
code:
Push6 "0xAABBCCDDEE3A"
Push1 "0x1F"
Byte
stack: "0x000000000000000000000000000000000000000000000000000000000000003A"
assembler: # Byte OP mal data
title: "BYTE_4"
code:
Push6 "0xAABBCCDDEE3A"
Byte
success: false
stack: "0xAABBCCDDEE3A"
assembler: # Shl OP
title: "SHL_1"
code:
Push32 "0x0000000000000000000000000000000000000000000000000000000000000001"
Push1 "0x00"
Shl
fork: Constantinople
stack: "0x0000000000000000000000000000000000000000000000000000000000000001"
assembler: # Shl OP
title: "SHL_2"
code:
Push32 "0x0000000000000000000000000000000000000000000000000000000000000001"
Push1 "0x01"
Shl
fork: Constantinople
stack: "0x0000000000000000000000000000000000000000000000000000000000000002"
assembler: # Shl OP
title: "SHL_3"
code:
Push32 "0x0000000000000000000000000000000000000000000000000000000000000001"
Push1 "0xff"
Shl
fork: Constantinople
stack: "0x8000000000000000000000000000000000000000000000000000000000000000"
assembler: # Shl OP
title: "SHL_4"
code:
Push32 "0x0000000000000000000000000000000000000000000000000000000000000001"
Push2 "0x0100"
Shl
fork: Constantinople
stack: "0x0000000000000000000000000000000000000000000000000000000000000000"
assembler: # Shl OP
title: "SHL_5"
code:
Push32 "0x0000000000000000000000000000000000000000000000000000000000000001"
Push2 "0x0101"
Shl
fork: Constantinople
stack: "0x0000000000000000000000000000000000000000000000000000000000000000"
assembler: # Shl OP
title: "SHL_6"
code:
Push32 "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
Push1 "0x00"
Shl
fork: Constantinople
stack: "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
assembler: # Shl OP
title: "SHL_7"
code:
Push32 "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
Push1 "0x01"
Shl
fork: Constantinople
stack: "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE"
assembler: # Shl OP
title: "SHL_8"
code:
Push32 "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
Push1 "0xff"
Shl
fork: Constantinople
stack: "0x8000000000000000000000000000000000000000000000000000000000000000"
assembler: # Shl OP
title: "SHL_9"
code:
Push32 "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
Push2 "0x0100"
Shl
fork: Constantinople
stack: "0x0000000000000000000000000000000000000000000000000000000000000000"
assembler: # Shl OP
title: "SHL_10"
code:
Push32 "0x0000000000000000000000000000000000000000000000000000000000000000"
Push1 "0x01"
Shl
fork: Constantinople
stack: "0x0000000000000000000000000000000000000000000000000000000000000000"
assembler: # Shl OP
title: "SHL_11"
code:
Push32 "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
Push1 "0x01"
Shl
fork: Constantinople
stack: "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE"
assembler: # Shr OP
title: "SHR_1"
code:
Push32 "0x0000000000000000000000000000000000000000000000000000000000000001"
Push1 "0x00"
Shr
fork: Constantinople
stack: "0x0000000000000000000000000000000000000000000000000000000000000001"
assembler: # Shr OP
title: "SHR_2"
code:
Push32 "0x0000000000000000000000000000000000000000000000000000000000000001"
Push1 "0x01"
Shr
fork: Constantinople
stack: "0x0000000000000000000000000000000000000000000000000000000000000000"
assembler: # Shr OP
title: "SHR_3"
code:
Push32 "0x8000000000000000000000000000000000000000000000000000000000000000"
Push1 "0x01"
Shr
fork: Constantinople
stack: "0x4000000000000000000000000000000000000000000000000000000000000000"
assembler: # Shr OP
title: "SHR_4"
code:
Push32 "0x8000000000000000000000000000000000000000000000000000000000000000"
Push1 "0xff"
Shr
fork: Constantinople
stack: "0x0000000000000000000000000000000000000000000000000000000000000001"
assembler: # Shr OP
title: "SHR_5"
code:
Push32 "0x8000000000000000000000000000000000000000000000000000000000000000"
Push2 "0x0100"
Shr
fork: Constantinople
stack: "0x0000000000000000000000000000000000000000000000000000000000000000"
assembler: # Shr OP
title: "SHR_6"
code:
Push32 "0x8000000000000000000000000000000000000000000000000000000000000000"
Push2 "0x0101"
Shr
fork: Constantinople
stack: "0x0000000000000000000000000000000000000000000000000000000000000000"
assembler: # Shr OP
title: "SHR_7"
code:
Push32 "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
Push1 "0x00"
Shr
fork: Constantinople
stack: "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
assembler: # Shr OP
title: "SHR_8"
code:
Push32 "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
Push1 "0x01"
Shr
fork: Constantinople
stack: "0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
assembler: # Shr OP
title: "SHR_9"
code:
Push32 "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
Push1 "0xff"
Shr
fork: Constantinople
stack: "0x0000000000000000000000000000000000000000000000000000000000000001"
assembler: # Shr OP
title: "SHR_10"
code:
Push32 "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
Push2 "0x0100"
Shr
fork: Constantinople
stack: "0x0000000000000000000000000000000000000000000000000000000000000000"
assembler: # Shr OP
title: "SHR_11"
code:
Push32 "0x0000000000000000000000000000000000000000000000000000000000000000"
Push1 "0x01"
Shr
fork: Constantinople
stack: "0x0000000000000000000000000000000000000000000000000000000000000000"
assembler: # Sar OP
title: "SAR_1"
code:
Push32 "0x0000000000000000000000000000000000000000000000000000000000000001"
Push1 "0x00"
Sar
fork: Constantinople
stack: "0x0000000000000000000000000000000000000000000000000000000000000001"
assembler: # Sar OP
title: "SAR_2"
code:
Push32 "0x0000000000000000000000000000000000000000000000000000000000000001"
Push1 "0x01"
Sar
fork: Constantinople
stack: "0x0000000000000000000000000000000000000000000000000000000000000000"
assembler: # Sar OP
title: "SAR_3"
code:
Push32 "0x8000000000000000000000000000000000000000000000000000000000000000"
Push1 "0x01"
Sar
fork: Constantinople
stack: "0xC000000000000000000000000000000000000000000000000000000000000000"
assembler: # Sar OP
title: "SAR_4"
code:
Push32 "0x8000000000000000000000000000000000000000000000000000000000000000"
Push1 "0xff"
Sar
fork: Constantinople
stack: "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
assembler: # Sar OP
title: "SAR_5"
code:
Push32 "0x8000000000000000000000000000000000000000000000000000000000000000"
Push2 "0x0100"
Sar
fork: Constantinople
stack: "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
assembler: # Sar OP
title: "SAR_6"
code:
Push32 "0x8000000000000000000000000000000000000000000000000000000000000000"
Push2 "0x0101"
Sar
fork: Constantinople
stack: "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
assembler: # Sar OP
title: "SAR_7"
code:
Push32 "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
Push1 "0x00"
Sar
fork: Constantinople
stack: "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
assembler: # Sar OP
title: "SAR_8"
code:
Push32 "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
Push1 "0x01"
Sar
fork: Constantinople
stack: "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
assembler: # Sar OP
title: "SAR_9"
code:
Push32 "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
Push1 "0xff"
Sar
fork: Constantinople
stack: "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
assembler: # Sar OP
title: "SAR_10"
code:
Push32 "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
Push2 "0x0100"
Sar
fork: Constantinople
stack: "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
assembler: # Sar OP
title: "SAR_11"
code:
Push32 "0x0000000000000000000000000000000000000000000000000000000000000000"
Push1 "0x01"
Sar
fork: Constantinople
stack: "0x0000000000000000000000000000000000000000000000000000000000000000"
assembler: # Sar OP
title: "SAR_12"
code:
Push32 "0x4000000000000000000000000000000000000000000000000000000000000000"
Push1 "0xfe"
Sar
fork: Constantinople
stack: "0x0000000000000000000000000000000000000000000000000000000000000001"
assembler: # Sar OP
title: "SAR_13"
code:
Push32 "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
Push1 "0xf8"
Sar
fork: Constantinople
stack: "0x000000000000000000000000000000000000000000000000000000000000007F"
assembler: # Sar OP
title: "SAR_14"
code:
Push32 "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
Push1 "0xfe"
Sar
fork: Constantinople
stack: "0x0000000000000000000000000000000000000000000000000000000000000001"
assembler: # Sar OP
title: "SAR_15"
code:
Push32 "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
Push1 "0xff"
Sar
fork: Constantinople
stack: "0x0000000000000000000000000000000000000000000000000000000000000000"
assembler: # Sar OP
title: "SAR_16"
code:
Push32 "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
Push2 "0x0100"
Sar
fork: Constantinople
stack: "0x0000000000000000000000000000000000000000000000000000000000000000"
assembler: # IsZero OP
title: "ISZERO_1"
code:
Push1 "0x00"
IsZero
stack: "0x0000000000000000000000000000000000000000000000000000000000000001"
assembler: # IsZero OP
title: "ISZERO_2"
code:
Push1 "0x2A"
IsZero
stack: "0x0000000000000000000000000000000000000000000000000000000000000000"
assembler: # IsZero OP mal data
title: "ISZERO_3"
code: IsZero
success: false
assembler: # Eq OP
title: "EQ_1"
code:
Push1 "0x2A"
Push1 "0x2A"
Eq
stack: "0x0000000000000000000000000000000000000000000000000000000000000001"
assembler: # Eq OP
title: "EQ_2"
code:
Push3 "0x2A3B4C"
Push3 "0x2A3B4C"
Eq
stack: "0x0000000000000000000000000000000000000000000000000000000000000001"
assembler: # Eq OP
title: "EQ_3"
code:
Push3 "0x2A3B5C"
Push3 "0x2A3B4C"
Eq
stack: "0x0000000000000000000000000000000000000000000000000000000000000000"
assembler: # Eq OP mal data
title: "EQ_4"
code:
Push3 "0x2A3B4C"
Eq
success: false
stack: "0x2A3B4C"
assembler: # Gt OP
title: "GT_1"
code:
Push1 "0x01"
Push1 "0x02"
Gt
stack: "0x0000000000000000000000000000000000000000000000000000000000000001"
assembler: # Gt OP
title: "GT_2"
code:
Push1 "0x01"
Push2 "0x0F00"
Gt
stack: "0x0000000000000000000000000000000000000000000000000000000000000001"
assembler: # Gt OP
title: "GT_3"
code:
Push4 "0x01020304"
Push2 "0x0F00"
Gt
stack: "0x0000000000000000000000000000000000000000000000000000000000000000"
assembler: # Gt OP mal data
title: "GT_4"
code:
Push3 "0x2A3B4C"
Gt
success: false
stack: "0x2A3B4C"
assembler: # Sgt OP
title: "SGT_1"
code:
Push1 "0x01"
Push1 "0x02"
Sgt
stack: "0x0000000000000000000000000000000000000000000000000000000000000001"
assembler: # Sgt OP
title: "SGT_2"
code:
Push32 "0x000000000000000000000000000000000000000000000000000000000000001E" # 30
Push32 "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56" # -170
Sgt
stack: "0x0000000000000000000000000000000000000000000000000000000000000000"
assembler: # Sgt OP
title: "SGT_3"
code:
Push32 "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56" # -170
Push32 "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57" # -169
Sgt
stack: "0x0000000000000000000000000000000000000000000000000000000000000001"
assembler: # Sgt OP mal
title: "SGT_4"
code:
Push32 "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56" # -170
Sgt
success: false
stack: "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56"
assembler: # Lt OP
title: "LT_1"
code:
Push1 "0x01"
Push1 "0x02"
Lt
stack: "0x0000000000000000000000000000000000000000000000000000000000000000"
assembler: # Lt OP
title: "LT_2"
code:
Push1 "0x01"
Push2 "0x0F00"
Lt
stack: "0x0000000000000000000000000000000000000000000000000000000000000000"
assembler: # Lt OP
title: "LT_3"
code:
Push4 "0x01020304"
Push2 "0x0F00"
Lt
stack: "0x0000000000000000000000000000000000000000000000000000000000000001"
assembler: # Lt OP mal data
title: "LT_4"
code:
Push3 "0x2A3B4C"
Lt
success: false
stack: "0x2A3B4C"
assembler: # Slt OP
title: "SLT_1"
code:
Push1 "0x01"
Push1 "0x02"
Slt
stack: "0x0000000000000000000000000000000000000000000000000000000000000000"
assembler: # Slt OP
title: "SLT_2"
code:
Push32 "0x000000000000000000000000000000000000000000000000000000000000001E" # 30
Push32 "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56" # -170
Slt
stack: "0x0000000000000000000000000000000000000000000000000000000000000001"
assembler: # Slt OP
title: "SLT_3"
code:
Push32 "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56" # -170
Push32 "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57" # -169
Slt
stack: "0x0000000000000000000000000000000000000000000000000000000000000000"
assembler: # Slt OP mal
title: "SLT_4"
code:
Push32 "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56" # -170
Slt
success: false
stack: "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56"
assembler: # Not OP
title: "NOT_1"
code:
Push1 "0x01"
Not
stack: "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE"
assembler: # Not OP
title: "NOT_2"
code:
Push2 "0xA003"
Not
stack: "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5FFC"
assembler: # BNOT OP
title: "BNOT_4"
code: Not
success: false
assembler: # Not OP
title: "NOT_5"
code:
Push1 "0x00"
Not
stack: "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
when isMainModule:
opBitMain()