package ethchain

import (
	"fmt"
	"github.com/ethereum/eth-go/ethdb"
	"github.com/ethereum/eth-go/ethutil"
	"math/big"
	"testing"
)

func TestSync(t *testing.T) {
	ethutil.ReadConfig("", ethutil.LogStd)

	db, _ := ethdb.NewMemDatabase()
	state := NewState(ethutil.NewTrie(db, ""))

	contract := NewContract([]byte("aa"), ethutil.Big1, ZeroHash256)

	contract.script = []byte{42}

	state.UpdateStateObject(contract)
	state.Sync()

	object := state.GetStateObject([]byte("aa"))
	if len(object.Script()) == 0 {
		t.Fail()
	}
}

func TestObjectGet(t *testing.T) {
	ethutil.ReadConfig("", ethutil.LogStd)

	db, _ := ethdb.NewMemDatabase()
	ethutil.Config.Db = db

	state := NewState(ethutil.NewTrie(db, ""))

	contract := NewContract([]byte("aa"), ethutil.Big1, ZeroHash256)
	state.UpdateStateObject(contract)

	contract = state.GetStateObject([]byte("aa"))
	contract.SetStorage(big.NewInt(0), ethutil.NewValue("hello"))
	o := contract.GetMem(big.NewInt(0))
	fmt.Println(o)

	state.UpdateStateObject(contract)
	contract.SetStorage(big.NewInt(0), ethutil.NewValue("hello00"))

	contract = state.GetStateObject([]byte("aa"))
	o = contract.GetMem(big.NewInt(0))
	fmt.Println("after", o)
}