updated tests

pull/243/merge
obscuren 10 years ago
parent 34689cb3f3
commit 750d70c202
  1. 1
      ethutil/common.go
  2. 11
      tests/helper/vm.go
  3. 6
      tests/vm/gh_test.go
  4. 16
      vm/vm_debug.go

@ -84,4 +84,5 @@ var (
BigFalse = Big0 BigFalse = Big0
Big32 = big.NewInt(32) Big32 = big.NewInt(32)
Big256 = big.NewInt(0xff) Big256 = big.NewInt(0xff)
Big257 = big.NewInt(257)
) )

@ -15,6 +15,7 @@ type Env struct {
depth int depth int
state *state.StateDB state *state.StateDB
skipTransfer bool skipTransfer bool
initial bool
Gas *big.Int Gas *big.Int
origin []byte origin []byte
@ -68,9 +69,17 @@ func (self *Env) Depth() int { return self.depth }
func (self *Env) SetDepth(i int) { self.depth = i } func (self *Env) SetDepth(i int) { self.depth = i }
func (self *Env) Transfer(from, to vm.Account, amount *big.Int) error { func (self *Env) Transfer(from, to vm.Account, amount *big.Int) error {
if self.skipTransfer { if self.skipTransfer {
// ugly hack
if self.initial {
self.initial = false
return nil
}
if from.Balance().Cmp(amount) < 0 { if from.Balance().Cmp(amount) < 0 {
return errors.New("Insufficient balance in account") return errors.New("Insufficient balance in account")
} }
return nil
} }
return vm.Transfer(from, to, amount) return vm.Transfer(from, to, amount)
} }
@ -109,10 +118,10 @@ func RunVm(state *state.StateDB, env, exec map[string]string) ([]byte, state.Log
) )
caller := state.GetOrNewStateObject(from) caller := state.GetOrNewStateObject(from)
caller.SetBalance(ethutil.Big("1000000000000000000"))
vmenv := NewEnvFromMap(state, env, exec) vmenv := NewEnvFromMap(state, env, exec)
vmenv.skipTransfer = true vmenv.skipTransfer = true
vmenv.initial = true
ret, err := vmenv.Call(caller, to, data, gas, price, value) ret, err := vmenv.Call(caller, to, data, gas, price, value)
return ret, vmenv.logs, vmenv.Gas, err return ret, vmenv.logs, vmenv.Gas, err

@ -79,12 +79,6 @@ func RunVmTest(p string, t *testing.T) {
helper.CreateFileTests(t, p, &tests) helper.CreateFileTests(t, p, &tests)
for name, test := range tests { for name, test := range tests {
/*
helper.Logger.SetLogLevel(5)
if name != "createNameRegistratorZeroMem" {
continue
}
*/
db, _ := ethdb.NewMemDatabase() db, _ := ethdb.NewMemDatabase()
statedb := state.New(nil, db) statedb := state.New(nil, db)
for addr, account := range test.Pre { for addr, account := range test.Pre {

@ -50,10 +50,6 @@ func (self *DebugVm) Run(me, caller ContextRef, code []byte, value, gas, price *
vmlogger.Debugf("(%d) (%x) %x (code=%d) gas: %v (d) %x\n", self.env.Depth(), caller.Address()[:4], context.Address(), len(code), context.Gas, callData) vmlogger.Debugf("(%d) (%x) %x (code=%d) gas: %v (d) %x\n", self.env.Depth(), caller.Address()[:4], context.Address(), len(code), context.Gas, callData)
if p := Precompiled[string(me.Address())]; p != nil {
return self.RunPrecompiled(p, callData, context)
}
if self.Recoverable { if self.Recoverable {
// Recover from any require exception // Recover from any require exception
defer func() { defer func() {
@ -70,6 +66,10 @@ func (self *DebugVm) Run(me, caller ContextRef, code []byte, value, gas, price *
}() }()
} }
if p := Precompiled[string(me.Address())]; p != nil {
return self.RunPrecompiled(p, callData, context)
}
var ( var (
op OpCode op OpCode
@ -513,10 +513,12 @@ func (self *DebugVm) Run(me, caller ContextRef, code []byte, value, gas, price *
// 0x40 range // 0x40 range
case BLOCKHASH: case BLOCKHASH:
num := stack.Pop() num := stack.Pop()
if num.Cmp(new(big.Int).Sub(self.env.BlockNumber(), ethutil.Big256)) < 0 {
stack.Push(ethutil.Big0) n := U256(new(big.Int).Sub(self.env.BlockNumber(), ethutil.Big257))
} else { if num.Cmp(n) > 0 && num.Cmp(self.env.BlockNumber()) < 0 {
stack.Push(ethutil.BigD(self.env.GetHash(num.Uint64()))) stack.Push(ethutil.BigD(self.env.GetHash(num.Uint64())))
} else {
stack.Push(ethutil.Big0)
} }
self.Printf(" => 0x%x", stack.Peek().Bytes()) self.Printf(" => 0x%x", stack.Peek().Bytes())

Loading…
Cancel
Save