| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- 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)
- }
- }
- }
|