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 }