diff options
author | obscuren <geffobscura@gmail.com> | 2014-11-19 02:48:35 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-11-19 02:48:35 +0800 |
commit | 675ba4d7eb7ab96fa74b803085f042a25f8d8d42 (patch) | |
tree | cc8ee5c2cd3f80e943a336d9820539ea2ebce4d2 /tests/vm/gh_test.go | |
parent | f8d0cd9906a1ec4a4a1e95868a279312363f8b49 (diff) | |
parent | 5c958ec5f658709b648647449ce5349aa98b3d5d (diff) | |
download | dexon-675ba4d7eb7ab96fa74b803085f042a25f8d8d42.tar.gz dexon-675ba4d7eb7ab96fa74b803085f042a25f8d8d42.tar.zst dexon-675ba4d7eb7ab96fa74b803085f042a25f8d8d42.zip |
Merge branch 'tests' into poc8
Diffstat (limited to 'tests/vm/gh_test.go')
-rw-r--r-- | tests/vm/gh_test.go | 265 |
1 files changed, 133 insertions, 132 deletions
diff --git a/tests/vm/gh_test.go b/tests/vm/gh_test.go index 7d98983e7..e25ccb550 100644 --- a/tests/vm/gh_test.go +++ b/tests/vm/gh_test.go @@ -1,134 +1,135 @@ package vm -import ( - "bytes" - "testing" - - "github.com/ethereum/go-ethereum/ethutil" - "github.com/ethereum/go-ethereum/state" - "github.com/ethereum/go-ethereum/tests/helper" -) - -type Account struct { - Balance string - Code string - Nonce string - Storage map[string]string -} - -func StateObjectFromAccount(addr string, account Account) *state.StateObject { - obj := state.NewStateObject(ethutil.Hex2Bytes(addr)) - obj.SetBalance(ethutil.Big(account.Balance)) - - if ethutil.IsHex(account.Code) { - account.Code = account.Code[2:] - } - obj.Code = ethutil.Hex2Bytes(account.Code) - obj.Nonce = ethutil.Big(account.Nonce).Uint64() - - return obj -} - -type VmTest struct { - Callcreates interface{} - Env map[string]string - Exec map[string]string - Gas string - Out string - Post map[string]Account - Pre map[string]Account -} - -func RunVmTest(p string, t *testing.T) { - tests := make(map[string]VmTest) - helper.CreateFileTests(t, p, &tests) - - for name, test := range tests { - state := state.New(helper.NewTrie()) - for addr, account := range test.Pre { - obj := StateObjectFromAccount(addr, account) - state.SetStateObject(obj) - } - - ret, gas, err := helper.RunVm(state, test.Env, test.Exec) - // When an error is returned it doesn't always mean the tests fails. - // Have to come up with some conditional failing mechanism. - if err != nil { - helper.Log.Infoln(err) - } - - rexp := helper.FromHex(test.Out) - if bytes.Compare(rexp, ret) != 0 { - t.Errorf("%s's return failed. Expected %x, got %x\n", name, rexp, ret) - } - - gexp := ethutil.Big(test.Gas) - if gexp.Cmp(gas) != 0 { - t.Errorf("%s's gas failed. Expected %v, got %v\n", name, gexp, gas) - } - - for addr, account := range test.Post { - obj := state.GetStateObject(helper.FromHex(addr)) - for addr, value := range account.Storage { - v := obj.GetState(helper.FromHex(addr)).Bytes() - vexp := helper.FromHex(value) - - if bytes.Compare(v, vexp) != 0 { - t.Errorf("%s's : (%x: %s) storage failed. Expected %x, got %x (%v %v)\n", name, obj.Address()[0:4], addr, vexp, v, ethutil.BigD(vexp), ethutil.BigD(v)) - } - } - } - } -} - -// I've created a new function for each tests so it's easier to identify where the problem lies if any of them fail. -func TestVMArithmetic(t *testing.T) { - //helper.Logger.SetLogLevel(5) - const fn = "../files/vmtests/vmArithmeticTest.json" - RunVmTest(fn, t) -} - -/* -deleted? -func TestVMSystemOperation(t *testing.T) { - helper.Logger.SetLogLevel(5) - const fn = "../files/vmtests/vmSystemOperationsTest.json" - RunVmTest(fn, t) -} -*/ - -func TestBitwiseLogicOperation(t *testing.T) { - const fn = "../files/vmtests/vmBitwiseLogicOperationTest.json" - RunVmTest(fn, t) -} - -func TestBlockInfo(t *testing.T) { - const fn = "../files/vmtests/vmBlockInfoTest.json" - RunVmTest(fn, t) -} - -func TestEnvironmentalInfo(t *testing.T) { - const fn = "../files/vmtests/vmEnvironmentalInfoTest.json" - RunVmTest(fn, t) -} - -func TestFlowOperation(t *testing.T) { - helper.Logger.SetLogLevel(5) - const fn = "../files/vmtests/vmIOandFlowOperationsTest.json" - RunVmTest(fn, t) -} - -func TestPushDupSwap(t *testing.T) { - const fn = "../files/vmtests/vmPushDupSwapTest.json" - RunVmTest(fn, t) -} - -func TestVMSha3(t *testing.T) { - const fn = "../files/vmtests/vmSha3Test.json" - RunVmTest(fn, t) -} - -func TestVm(t *testing.T) { - const fn = "../files/vmtests/vmtests.json" - RunVmTest(fn, t) -} +// import ( +// "bytes" +// "testing" + +// "github.com/ethereum/go-ethereum/ethutil" +// "github.com/ethereum/go-ethereum/state" +// "github.com/ethereum/go-ethereum/tests/helper" +// ) + +// type Account struct { +// Balance string +// Code string +// Nonce string +// Storage map[string]string +// } + +// func StateObjectFromAccount(addr string, account Account) *state.StateObject { +// obj := state.NewStateObject(ethutil.Hex2Bytes(addr)) +// obj.SetBalance(ethutil.Big(account.Balance)) + +// if ethutil.IsHex(account.Code) { +// account.Code = account.Code[2:] +// } +// obj.Code = ethutil.Hex2Bytes(account.Code) +// obj.Nonce = ethutil.Big(account.Nonce).Uint64() + +// return obj +// } + +// type VmTest struct { +// Callcreates interface{} +// Env map[string]string +// Exec map[string]string +// Gas string +// Out string +// Post map[string]Account +// Pre map[string]Account +// } + +// func RunVmTest(p string, t *testing.T) { +// tests := make(map[string]VmTest) +// helper.CreateFileTests(t, p, &tests) + +// for name, test := range tests { +// state := state.New(helper.NewTrie()) +// for addr, account := range test.Pre { +// obj := StateObjectFromAccount(addr, account) +// state.SetStateObject(obj) +// } + +// ret, gas, err := helper.RunVm(state, test.Env, test.Exec) +// // When an error is returned it doesn't always mean the tests fails. +// // Have to come up with some conditional failing mechanism. +// if err != nil { +// t.Errorf("%s", err) +// helper.Log.Infoln(err) +// } + +// rexp := helper.FromHex(test.Out) +// if bytes.Compare(rexp, ret) != 0 { +// t.Errorf("%s's return failed. Expected %x, got %x\n", name, rexp, ret) +// } + +// gexp := ethutil.Big(test.Gas) +// if gexp.Cmp(gas) != 0 { +// t.Errorf("%s's gas failed. Expected %v, got %v\n", name, gexp, gas) +// } + +// for addr, account := range test.Post { +// obj := state.GetStateObject(helper.FromHex(addr)) +// for addr, value := range account.Storage { +// v := obj.GetState(helper.FromHex(addr)).Bytes() +// vexp := helper.FromHex(value) + +// if bytes.Compare(v, vexp) != 0 { +// t.Errorf("%s's : (%x: %s) storage failed. Expected %x, got %x (%v %v)\n", name, obj.Address()[0:4], addr, vexp, v, ethutil.BigD(vexp), ethutil.BigD(v)) +// } +// } +// } +// } +// } + +// // I've created a new function for each tests so it's easier to identify where the problem lies if any of them fail. +// func TestVMArithmetic(t *testing.T) { +// //helper.Logger.SetLogLevel(5) +// const fn = "../files/vmtests/vmArithmeticTest.json" +// RunVmTest(fn, t) +// } + +// /* +// deleted? +// func TestVMSystemOperation(t *testing.T) { +// helper.Logger.SetLogLevel(5) +// const fn = "../files/vmtests/vmSystemOperationsTest.json" +// RunVmTest(fn, t) +// } +// */ + +// func TestBitwiseLogicOperation(t *testing.T) { +// const fn = "../files/vmtests/vmBitwiseLogicOperationTest.json" +// RunVmTest(fn, t) +// } + +// func TestBlockInfo(t *testing.T) { +// const fn = "../files/vmtests/vmBlockInfoTest.json" +// RunVmTest(fn, t) +// } + +// func TestEnvironmentalInfo(t *testing.T) { +// const fn = "../files/vmtests/vmEnvironmentalInfoTest.json" +// RunVmTest(fn, t) +// } + +// func TestFlowOperation(t *testing.T) { +// helper.Logger.SetLogLevel(5) +// const fn = "../files/vmtests/vmIOandFlowOperationsTest.json" +// RunVmTest(fn, t) +// } + +// func TestPushDupSwap(t *testing.T) { +// const fn = "../files/vmtests/vmPushDupSwapTest.json" +// RunVmTest(fn, t) +// } + +// func TestVMSha3(t *testing.T) { +// const fn = "../files/vmtests/vmSha3Test.json" +// RunVmTest(fn, t) +// } + +// func TestVm(t *testing.T) { +// const fn = "../files/vmtests/vmtests.json" +// RunVmTest(fn, t) +// } |