vm_test.go (3203B)
1 package vm 2 3 import ( 4 "testing" 5 ) 6 7 func TestParseNoArg(t *testing.T) { 8 b := NewLine(nil, HALT, nil, nil, nil) 9 _, b, _ = opSplit(b) 10 b, err := ParseHalt(b) 11 if err != nil { 12 t.Fatal(err) 13 } 14 if len(b) > 0 { 15 t.Fatalf("expected empty code") 16 } 17 } 18 19 func TestParseSym(t *testing.T) { 20 b := NewLine(nil, MAP, []string{"baz"}, nil, nil) 21 _, b, _ = opSplit(b) 22 sym, b, err := ParseMap(b) 23 if err != nil { 24 t.Fatal(err) 25 } 26 if sym != "baz" { 27 t.Fatalf("expected sym baz, got %v", sym) 28 } 29 if len(b) > 0 { 30 t.Fatalf("expected empty code") 31 } 32 33 b = NewLine(nil, RELOAD, []string{"xyzzy"}, nil, nil) 34 _, b, _ = opSplit(b) 35 sym, b, err = ParseReload(b) 36 if err != nil { 37 t.Fatal(err) 38 } 39 if sym != "xyzzy" { 40 t.Fatalf("expected sym xyzzy, got %v", sym) 41 } 42 if len(b) > 0 { 43 t.Fatalf("expected empty code") 44 } 45 46 b = NewLine(nil, MOVE, []string{"plugh"}, nil, nil) 47 _, b, _ = opSplit(b) 48 sym, b, err = ParseMove(b) 49 if err != nil { 50 t.Fatal(err) 51 } 52 if sym != "plugh" { 53 t.Fatalf("expected sym plugh, got %v", sym) 54 } 55 if len(b) > 0 { 56 t.Fatalf("expected empty code") 57 } 58 } 59 60 func TestParseTwoSym(t *testing.T) { 61 b := NewLine(nil, INCMP, []string{"foo", "bar"}, nil, nil) 62 _, b, _ = opSplit(b) 63 one, two, b, err := ParseInCmp(b) 64 if err != nil { 65 t.Fatal(err) 66 } 67 if one != "foo" { 68 t.Fatalf("expected symone foo, got %v", one) 69 } 70 if two != "bar" { 71 t.Fatalf("expected symtwo bar, got %v", two) 72 } 73 if len(b) > 0 { 74 t.Fatalf("expected empty code") 75 } 76 } 77 78 func TestParseSig(t *testing.T) { 79 b := NewLine(nil, CROAK, nil, []byte{0x0b, 0x13}, []uint8{0x04}) 80 _, b, _ = opSplit(b) 81 n, m, b, err := ParseCroak(b) 82 if err != nil { 83 t.Fatal(err) 84 } 85 if n != 2835 { 86 t.Fatalf("expected n 13, got %v", n) 87 } 88 if !m { 89 t.Fatalf("expected m true") 90 } 91 if len(b) > 0 { 92 t.Fatalf("expected empty code") 93 } 94 } 95 96 func TestParseSymSig(t *testing.T) { 97 b := NewLine(nil, CATCH, []string{"baz"}, []byte{0x0a, 0x13}, []uint8{0x01}) 98 _, b, _ = opSplit(b) 99 sym, n, m, b, err := ParseCatch(b) 100 if err != nil { 101 t.Fatal(err) 102 } 103 if sym != "baz" { 104 t.Fatalf("expected sym baz, got %v", sym) 105 } 106 if n != 2579 { 107 t.Fatalf("expected n 13, got %v", n) 108 } 109 if !m { 110 t.Fatalf("expected m true") 111 } 112 if len(b) > 0 { 113 t.Fatalf("expected empty code") 114 } 115 } 116 117 func TestParseSymAndLen(t *testing.T) { 118 b := NewLine(nil, LOAD, []string{"foo"}, []byte{0x2a}, nil) 119 _, b, _ = opSplit(b) 120 sym, n, b, err := ParseLoad(b) 121 if err != nil { 122 t.Fatal(err) 123 } 124 if sym != "foo" { 125 t.Fatalf("expected sym foo, got %v", sym) 126 } 127 if n != 42 { 128 t.Fatalf("expected n 42, got %v", n) 129 } 130 131 b = NewLine(nil, LOAD, []string{"bar"}, []byte{0x02, 0x9a}, nil) 132 _, b, _ = opSplit(b) 133 sym, n, b, err = ParseLoad(b) 134 if err != nil { 135 t.Fatal(err) 136 } 137 if sym != "bar" { 138 t.Fatalf("expected sym foo, got %v", sym) 139 } 140 if n != 666 { 141 t.Fatalf("expected n 666, got %v", n) 142 } 143 if len(b) > 0 { 144 t.Fatalf("expected empty code") 145 } 146 147 b = NewLine(nil, LOAD, []string{"baz"}, []byte{0x0}, nil) 148 _, b, _ = opSplit(b) 149 sym, n, b, err = ParseLoad(b) 150 if err != nil { 151 t.Fatal(err) 152 } 153 if sym != "baz" { 154 t.Fatalf("expected sym foo, got %v", sym) 155 } 156 if n != 0 { 157 t.Fatalf("expected n 666, got %v", n) 158 } 159 if len(b) > 0 { 160 t.Fatalf("expected empty code") 161 } 162 }