mirror of https://github.com/ethereum/go-ethereum
parent
6171d01b11
commit
3285a0fda3
@ -0,0 +1,43 @@ |
||||
package vm |
||||
|
||||
import ( |
||||
"math/big" |
||||
"testing" |
||||
|
||||
"github.com/ethereum/go-ethereum/common" |
||||
"github.com/ethereum/go-ethereum/params" |
||||
) |
||||
|
||||
func TestByteOp(t *testing.T) { |
||||
|
||||
var ( |
||||
env = NewEVM(Context{}, nil, params.TestChainConfig, Config{EnableJit: false, ForceJit: false}) |
||||
stack = newstack() |
||||
) |
||||
tests := []struct { |
||||
v string |
||||
th uint64 |
||||
expected *big.Int |
||||
}{ |
||||
{"ABCDEF0908070605040302010000000000000000000000000000000000000000", 0, big.NewInt(0xAB)}, |
||||
{"ABCDEF0908070605040302010000000000000000000000000000000000000000", 1, big.NewInt(0xCD)}, |
||||
{"00CDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff", 0, big.NewInt(0x00)}, |
||||
{"00CDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff", 1, big.NewInt(0xCD)}, |
||||
{"0000000000000000000000000000000000000000000000000000000000102030", 31, big.NewInt(0x30)}, |
||||
{"0000000000000000000000000000000000000000000000000000000000102030", 30, big.NewInt(0x20)}, |
||||
{"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 32, big.NewInt(0x0)}, |
||||
{"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 0xFFFFFFFFFFFFFFFF, big.NewInt(0x0)}, |
||||
} |
||||
pc := uint64(0) |
||||
for _, test := range tests { |
||||
val := new(big.Int).SetBytes(common.Hex2Bytes(test.v)) |
||||
th := new(big.Int).SetUint64(test.th) |
||||
stack.push(val) |
||||
stack.push(th) |
||||
opByte(&pc, env, nil, nil, stack) |
||||
actual := stack.pop() |
||||
if actual.Cmp(test.expected) != 0 { |
||||
t.Fatalf("Expected [%v] %v:th byte to be %v, was %v.", test.v, test.th, test.expected, actual) |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue