go-vise

Constrained Size Output Virtual Machine
Info | Log | Files | Refs | README | LICENSE

fs_test.go (2641B)


      1 package persist
      2 
      3 import (
      4 	"bytes"
      5 	"io/ioutil"
      6 	"reflect"
      7 	"testing"
      8 
      9 	"git.defalsify.org/vise.git/cache"
     10 	"git.defalsify.org/vise.git/state"
     11 	"git.defalsify.org/vise.git/vm"
     12 )
     13 
     14 func TestSerializeState(t *testing.T) {
     15 	st := state.NewState(12)
     16 	st.Down("foo")
     17 	st.Down("bar")
     18 	st.Down("baz")
     19 	st.Next()
     20 	st.Next()
     21 
     22 	b := vm.NewLine(nil, vm.LOAD, []string{"foo"}, []byte{42}, nil)
     23 	b = vm.NewLine(b, vm.HALT, nil, nil, nil)
     24 	st.SetCode(b)
     25 
     26 	ca := cache.NewCache().WithCacheSize(1024)
     27 	ca.Add("inky", "pinky", 13)
     28 	ca.Add("blinky", "clyde", 42)
     29 
     30 	pr := NewFsPersister(".").WithContent(&st, ca)
     31 	v, err := pr.Serialize()
     32 	if err != nil {
     33 		t.Error(err)
     34 	}
     35 
     36 	prnew := NewFsPersister(".")
     37 	err = prnew.Deserialize(v)
     38 	if err != nil {
     39 		t.Fatal(err)
     40 	}	
     41 	if !reflect.DeepEqual(prnew.State.ExecPath, pr.State.ExecPath) {
     42 		t.Fatalf("expected %s, got %s", prnew.State.ExecPath, pr.State.ExecPath)
     43 	}
     44 	if !bytes.Equal(prnew.State.Code, pr.State.Code) {
     45 		t.Fatalf("expected %x, got %x", prnew.State.Code, pr.State.Code)
     46 	}
     47 	if prnew.State.BitSize != pr.State.BitSize {
     48 		t.Fatalf("expected %v, got %v", prnew.State.BitSize, pr.State.BitSize)
     49 	}
     50 	if prnew.State.SizeIdx != pr.State.SizeIdx {
     51 		t.Fatalf("expected %v, got %v", prnew.State.SizeIdx, pr.State.SizeIdx)
     52 	}
     53 	if !reflect.DeepEqual(prnew.Memory, pr.Memory) {
     54 		t.Fatalf("expected %v, got %v", prnew.Memory, pr.Memory)
     55 	}
     56 }
     57 
     58 func TestSaveLoad(t *testing.T) {
     59 	st := state.NewState(12)
     60 	st.Down("foo")
     61 	st.Down("bar")
     62 	st.Down("baz")
     63 	st.Next()
     64 	st.Next()
     65 
     66 	b := vm.NewLine(nil, vm.LOAD, []string{"foo"}, []byte{42}, nil)
     67 	b = vm.NewLine(b, vm.HALT, nil, nil, nil)
     68 	st.SetCode(b)
     69 
     70 	ca := cache.NewCache().WithCacheSize(1024)
     71 	ca.Add("inky", "pinky", 13)
     72 	ca.Add("blinky", "clyde", 42)
     73 
     74 	dir, err := ioutil.TempDir("", "vise_persist")
     75 	if err != nil {
     76 		t.Error(err)
     77 	}
     78 	pr := NewFsPersister(dir).WithContent(&st, ca)
     79 	err = pr.Save("xyzzy")
     80 	if err != nil {
     81 		t.Error(err)
     82 	}
     83 
     84 	prnew := NewFsPersister(dir)
     85 	err = prnew.Load("xyzzy")
     86 	if err != nil {
     87 		t.Error(err)
     88 	}
     89 	if !reflect.DeepEqual(prnew.State.ExecPath, pr.State.ExecPath) {
     90 		t.Fatalf("expected %s, got %s", prnew.State.ExecPath, pr.State.ExecPath)
     91 	}
     92 	if !bytes.Equal(prnew.State.Code, pr.State.Code) {
     93 		t.Fatalf("expected %x, got %x", prnew.State.Code, pr.State.Code)
     94 	}
     95 	if prnew.State.BitSize != pr.State.BitSize {
     96 		t.Fatalf("expected %v, got %v", prnew.State.BitSize, pr.State.BitSize)
     97 	}
     98 	if prnew.State.SizeIdx != pr.State.SizeIdx {
     99 		t.Fatalf("expected %v, got %v", prnew.State.SizeIdx, pr.State.SizeIdx)
    100 	}
    101 	if !reflect.DeepEqual(prnew.Memory, pr.Memory) {
    102 		t.Fatalf("expected %v, got %v", prnew.Memory, pr.Memory)
    103 	}
    104 }