github.com/erikdubbelboer/gopher-lua@v0.0.0-20160512044044-e68f0dc85040/table_test.go (about) 1 package lua 2 3 import ( 4 "testing" 5 ) 6 7 func TestTableNewLTable(t *testing.T) { 8 tbl := newLTable(-1, -2) 9 errorIfNotEqual(t, 0, cap(tbl.array)) 10 11 tbl = newLTable(10, 9) 12 errorIfNotEqual(t, 10, cap(tbl.array)) 13 } 14 15 func TestTableLen(t *testing.T) { 16 tbl := newLTable(0, 0) 17 tbl.RawSetInt(10, LNil) 18 tbl.RawSetInt(9, LNumber(10)) 19 tbl.RawSetInt(8, LNil) 20 tbl.RawSetInt(7, LNumber(10)) 21 errorIfNotEqual(t, 9, tbl.Len()) 22 23 tbl = newLTable(0, 0) 24 tbl.Append(LTrue) 25 tbl.Append(LTrue) 26 tbl.Append(LTrue) 27 errorIfNotEqual(t, 3, tbl.Len()) 28 } 29 30 func TestTableInsert(t *testing.T) { 31 tbl := newLTable(0, 0) 32 tbl.Append(LTrue) 33 tbl.Append(LTrue) 34 tbl.Append(LTrue) 35 36 tbl.Insert(5, LFalse) 37 errorIfNotEqual(t, LFalse, tbl.RawGetInt(5)) 38 errorIfNotEqual(t, 5, tbl.Len()) 39 40 tbl.Insert(-10, LFalse) 41 errorIfNotEqual(t, LFalse, tbl.RawGet(LNumber(-10))) 42 errorIfNotEqual(t, 5, tbl.Len()) 43 44 tbl = newLTable(0, 0) 45 tbl.Append(LNumber(1)) 46 tbl.Append(LNumber(2)) 47 tbl.Append(LNumber(3)) 48 tbl.Insert(1, LNumber(10)) 49 errorIfNotEqual(t, LNumber(10), tbl.RawGetInt(1)) 50 errorIfNotEqual(t, LNumber(1), tbl.RawGetInt(2)) 51 errorIfNotEqual(t, LNumber(2), tbl.RawGetInt(3)) 52 errorIfNotEqual(t, LNumber(3), tbl.RawGetInt(4)) 53 errorIfNotEqual(t, 4, tbl.Len()) 54 55 tbl = newLTable(0, 0) 56 tbl.Insert(5, LNumber(10)) 57 errorIfNotEqual(t, LNumber(10), tbl.RawGetInt(5)) 58 59 } 60 61 func TestTableMaxN(t *testing.T) { 62 tbl := newLTable(0, 0) 63 tbl.Append(LTrue) 64 tbl.Append(LTrue) 65 tbl.Append(LTrue) 66 errorIfNotEqual(t, 3, tbl.MaxN()) 67 68 tbl = newLTable(0, 0) 69 errorIfNotEqual(t, 0, tbl.MaxN()) 70 71 tbl = newLTable(10, 0) 72 errorIfNotEqual(t, 0, tbl.MaxN()) 73 } 74 75 func TestTableRemove(t *testing.T) { 76 tbl := newLTable(0, 0) 77 errorIfNotEqual(t, LNil, tbl.Remove(10)) 78 tbl.Append(LTrue) 79 errorIfNotEqual(t, LNil, tbl.Remove(10)) 80 81 tbl.Append(LFalse) 82 tbl.Append(LTrue) 83 errorIfNotEqual(t, LFalse, tbl.Remove(2)) 84 errorIfNotEqual(t, 2, tbl.MaxN()) 85 tbl.Append(LFalse) 86 errorIfNotEqual(t, LFalse, tbl.Remove(-1)) 87 errorIfNotEqual(t, 2, tbl.MaxN()) 88 89 } 90 91 func TestTableRawSetInt(t *testing.T) { 92 tbl := newLTable(0, 0) 93 tbl.RawSetInt(MaxArrayIndex+1, LTrue) 94 errorIfNotEqual(t, 0, tbl.MaxN()) 95 errorIfNotEqual(t, LTrue, tbl.RawGet(LNumber(MaxArrayIndex+1))) 96 97 tbl.RawSetInt(1, LTrue) 98 tbl.RawSetInt(3, LTrue) 99 errorIfNotEqual(t, 3, tbl.MaxN()) 100 errorIfNotEqual(t, LTrue, tbl.RawGetInt(1)) 101 errorIfNotEqual(t, LNil, tbl.RawGetInt(2)) 102 errorIfNotEqual(t, LTrue, tbl.RawGetInt(3)) 103 tbl.RawSetInt(2, LTrue) 104 errorIfNotEqual(t, LTrue, tbl.RawGetInt(1)) 105 errorIfNotEqual(t, LTrue, tbl.RawGetInt(2)) 106 errorIfNotEqual(t, LTrue, tbl.RawGetInt(3)) 107 } 108 109 func TestTableRawSetH(t *testing.T) { 110 tbl := newLTable(0, 0) 111 tbl.RawSetH(LString("key"), LTrue) 112 tbl.RawSetH(LString("key"), LNil) 113 _, found := tbl.dict[LString("key")] 114 errorIfNotEqual(t, false, found) 115 116 tbl.RawSetH(LTrue, LTrue) 117 tbl.RawSetH(LTrue, LNil) 118 _, foundb := tbl.dict[LTrue] 119 errorIfNotEqual(t, false, foundb) 120 } 121 122 func TestTableRawGetH(t *testing.T) { 123 tbl := newLTable(0, 0) 124 errorIfNotEqual(t, LNil, tbl.RawGetH(LNumber(1))) 125 errorIfNotEqual(t, LNil, tbl.RawGetH(LString("key0"))) 126 tbl.RawSetH(LString("key0"), LTrue) 127 tbl.RawSetH(LString("key1"), LFalse) 128 tbl.RawSetH(LNumber(1), LTrue) 129 errorIfNotEqual(t, LTrue, tbl.RawGetH(LString("key0"))) 130 errorIfNotEqual(t, LTrue, tbl.RawGetH(LNumber(1))) 131 errorIfNotEqual(t, LNil, tbl.RawGetH(LString("notexist"))) 132 errorIfNotEqual(t, LNil, tbl.RawGetH(LTrue)) 133 } 134 135 func TestTableForEach(t *testing.T) { 136 tbl := newLTable(0, 0) 137 tbl.Append(LNumber(1)) 138 tbl.Append(LNumber(2)) 139 tbl.Append(LNumber(3)) 140 tbl.Append(LNil) 141 tbl.Append(LNumber(5)) 142 143 tbl.RawSetH(LString("a"), LString("a")) 144 tbl.RawSetH(LString("b"), LString("b")) 145 tbl.RawSetH(LString("c"), LString("c")) 146 147 tbl.RawSetH(LTrue, LString("true")) 148 tbl.RawSetH(LFalse, LString("false")) 149 150 tbl.ForEach(func(key, value LValue) { 151 switch k := key.(type) { 152 case LBool: 153 switch bool(k) { 154 case true: 155 errorIfNotEqual(t, LString("true"), value) 156 case false: 157 errorIfNotEqual(t, LString("false"), value) 158 default: 159 t.Fail() 160 } 161 case LNumber: 162 switch int(k) { 163 case 1: 164 errorIfNotEqual(t, LNumber(1), value) 165 case 2: 166 errorIfNotEqual(t, LNumber(2), value) 167 case 3: 168 errorIfNotEqual(t, LNumber(3), value) 169 case 5: 170 errorIfNotEqual(t, LNumber(5), value) 171 default: 172 t.Fail() 173 } 174 case LString: 175 switch string(k) { 176 case "a": 177 errorIfNotEqual(t, LString("a"), value) 178 case "b": 179 errorIfNotEqual(t, LString("b"), value) 180 case "c": 181 errorIfNotEqual(t, LString("c"), value) 182 default: 183 t.Fail() 184 } 185 } 186 }) 187 }