go-vise

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

state_test.go (3633B)


      1 package state
      2 
      3 import (
      4 	"bytes"
      5 	"testing"
      6 )
      7 
      8 // Check creation 
      9 func TestNewState(t *testing.T) {
     10 	st := NewState(5)
     11 	if len(st.Flags) != 2 {
     12 		t.Fatalf("invalid state flag length: %v", len(st.Flags))
     13 	}
     14 	st = NewState(8)
     15 	if len(st.Flags) != 2 {
     16 		t.Fatalf("invalid state flag length: %v", len(st.Flags))
     17 	}
     18 	st = NewState(17)
     19 	if len(st.Flags) != 4 {
     20 		t.Fatalf("invalid state flag length: %v", len(st.Flags))
     21 	}
     22 }
     23 
     24 func TestStateflags(t *testing.T) {
     25 	st := NewState(9)
     26 	v := st.GetFlag(2)
     27 	if v {
     28 		t.Fatalf("Expected bit 2 not to be set")
     29 	}
     30 	v = st.SetFlag(2)
     31 	if !v {
     32 		t.Fatalf("Expected change to be set for bit 2")
     33 	}
     34 	v = st.GetFlag(2)
     35 	if !v {
     36 		t.Fatalf("Expected bit 2 to be set")
     37 	}
     38 	v = st.SetFlag(10)
     39 	if !v {
     40 		t.Fatalf("Expected change to be set for bit 10")
     41 	}
     42 	v = st.GetFlag(10)
     43 	if !v {
     44 		t.Fatalf("Expected bit 10 to be set")
     45 	}
     46 	v = st.ResetFlag(2)
     47 	if !v {
     48 		t.Fatalf("Expected change to be set for bit 10")
     49 	}
     50 	v = st.GetFlag(2)
     51 	if v {
     52 		t.Fatalf("Expected bit 2 not to be set")
     53 	}
     54 	v = st.GetFlag(10)
     55 	if !v {
     56 		t.Fatalf("Expected bit 10 to be set")
     57 	}
     58 	v = st.SetFlag(10)
     59 	if v {
     60 		t.Fatalf("Expected change not to be set for bit 10")
     61 	}
     62 	v = st.SetFlag(2)
     63 	v = st.SetFlag(16)
     64 	if !bytes.Equal(st.Flags[:3], []byte{0x04, 0x04, 0x01}) {
     65 		t.Fatalf("Expected 0x040401, got %v", st.Flags[:3])
     66 	}
     67 }
     68 
     69 func TestStateFlagFromSlice(t *testing.T) {
     70 	st := NewState(15)
     71 	st.SetFlag(2)
     72 	v := st.GetIndex([]byte{})
     73 	if v {
     74 		t.Fatalf("Expected no match on empty compare")
     75 	}
     76 	v = st.GetIndex([]byte{0x01})
     77 	if v {
     78 		t.Fatalf("Expected 0x01 not to match")
     79 	}
     80 	v = st.GetIndex([]byte{0x04})
     81 	if !v {
     82 		t.Fatalf("Expected 0x04 to match")
     83 	}
     84 	st.SetFlag(12)
     85 	v = st.GetIndex([]byte{0x04})
     86 	if !v {
     87 		t.Fatalf("Expected 0x04 to match")
     88 	}
     89 	v = st.GetIndex([]byte{0x00, 0x10})
     90 	if !v {
     91 		t.Fatalf("Expected 0x1000 to match")
     92 	}
     93 	v = st.ResetFlag(2)
     94 	v = st.GetIndex([]byte{0x00, 0x10})
     95 	if !v {
     96 		t.Fatalf("Expected 0x1000 to matck")
     97 	}
     98 }
     99 
    100 func TestStateNavigate(t *testing.T) {
    101 	st := NewState(0)
    102 	err := st.Down("foo")
    103 	if err != nil {
    104 		t.Fatal(err)
    105 	}
    106 	err = st.Down("bar")
    107 	if err != nil {
    108 		t.Fatal(err)
    109 	}
    110 	err = st.Down("baz")
    111 	if err != nil {
    112 		t.Fatal(err)
    113 	}
    114 
    115 	s, i := st.Where()
    116 	if s != "baz" {
    117 		t.Fatalf("expected baz, got %s", s)
    118 	}
    119 	if i != 0 {
    120 		t.Fatalf("expected idx 0, got %v", i)
    121 	}
    122 	r := st.Depth()
    123 	if r != 2 {
    124 		t.Fatalf("expected depth 3, got %v", r)
    125 	}
    126 
    127 	s, err = st.Up()
    128 	if err != nil {
    129 		t.Fatal(err)
    130 	}
    131 	if s != "bar" {
    132 		t.Fatalf("expected bar, got %s", s)
    133 	}
    134 	s, i = st.Where()
    135 	if s != "bar" {
    136 		t.Fatalf("expected bar, got %s", s)
    137 	}
    138 	if i != 0 {
    139 		t.Fatalf("expected idx 0, got %v", i)
    140 	}
    141 
    142 	i, err = st.Next()
    143 	if err != nil {
    144 		t.Fatal(err)
    145 	}
    146 	if i != 1 {
    147 		t.Fatalf("expected idx 1, got %v", i)
    148 	}
    149 	i, err = st.Next()
    150 	if err != nil {
    151 		t.Fatal(err)
    152 	}
    153 	if i != 2 {
    154 		t.Fatalf("expected idx 2, got %v", i)
    155 	}
    156 	if err != nil {
    157 		t.Fatal(err)
    158 	}
    159 
    160 	s, i = st.Where()
    161 	if s != "bar" {
    162 		t.Fatalf("expected baz, got %s", s)
    163 	}
    164 	if i != 2 {
    165 		t.Fatalf("expected idx 2, got %v", i)
    166 	}
    167 
    168 	s, err = st.Up()
    169 	if err != nil {
    170 		t.Fatal(err)
    171 	}
    172 	if s != "foo" {
    173 		t.Fatalf("expected foo, got %s", s)
    174 	}
    175 	s, i = st.Where()
    176 	if s != "foo" {
    177 		t.Fatalf("expected foo, got %s", s)
    178 	}
    179 	if i != 0 {
    180 		t.Fatalf("expected idx 0, got %v", i)
    181 	}
    182 }
    183 
    184 func TestStateFlagMatch(t *testing.T) {
    185 	st := NewState(2)
    186 	st.SetFlag(8)
    187 	v := st.MatchFlag(8, true)
    188 	if !v {
    189 		t.Fatalf("unexpected flag")
    190 	}
    191 	v = st.MatchFlag(8, false)
    192 	if v {
    193 		t.Fatalf("unexpected flag")
    194 	}
    195 
    196 	v = st.MatchFlag(9, true)
    197 	if v {
    198 		t.Fatalf("unexpected flag")
    199 	}
    200 	v = st.MatchFlag(9, false)
    201 	if !v {
    202 		t.Fatalf("unexpected flag")
    203 	}
    204 }