gitee.com/yfmps/gopher-lua@v0.0.3/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 TestTableAppend(t *testing.T) { 31 tbl := newLTable(0, 0) 32 tbl.RawSetInt(1, LNumber(1)) 33 tbl.RawSetInt(2, LNumber(2)) 34 tbl.RawSetInt(3, LNumber(3)) 35 errorIfNotEqual(t, 3, tbl.Len()) 36 37 tbl.RawSetInt(1, LNil) 38 tbl.RawSetInt(2, LNil) 39 errorIfNotEqual(t, 3, tbl.Len()) 40 41 tbl.Append(LNumber(4)) 42 errorIfNotEqual(t, 4, tbl.Len()) 43 44 tbl.RawSetInt(3, LNil) 45 tbl.RawSetInt(4, LNil) 46 errorIfNotEqual(t, 0, tbl.Len()) 47 48 tbl.Append(LNumber(5)) 49 errorIfNotEqual(t, 1, tbl.Len()) 50 } 51 52 func TestTableInsert(t *testing.T) { 53 tbl := newLTable(0, 0) 54 tbl.Append(LTrue) 55 tbl.Append(LTrue) 56 tbl.Append(LTrue) 57 58 tbl.Insert(5, LFalse) 59 errorIfNotEqual(t, LFalse, tbl.RawGetInt(5)) 60 errorIfNotEqual(t, 5, tbl.Len()) 61 62 tbl.Insert(-10, LFalse) 63 errorIfNotEqual(t, LFalse, tbl.RawGet(LNumber(-10))) 64 errorIfNotEqual(t, 5, tbl.Len()) 65 66 tbl = newLTable(0, 0) 67 tbl.Append(LNumber(1)) 68 tbl.Append(LNumber(2)) 69 tbl.Append(LNumber(3)) 70 tbl.Insert(1, LNumber(10)) 71 errorIfNotEqual(t, LNumber(10), tbl.RawGetInt(1)) 72 errorIfNotEqual(t, LNumber(1), tbl.RawGetInt(2)) 73 errorIfNotEqual(t, LNumber(2), tbl.RawGetInt(3)) 74 errorIfNotEqual(t, LNumber(3), tbl.RawGetInt(4)) 75 errorIfNotEqual(t, 4, tbl.Len()) 76 77 tbl = newLTable(0, 0) 78 tbl.Insert(5, LNumber(10)) 79 errorIfNotEqual(t, LNumber(10), tbl.RawGetInt(5)) 80 81 } 82 83 func TestTableMaxN(t *testing.T) { 84 tbl := newLTable(0, 0) 85 tbl.Append(LTrue) 86 tbl.Append(LTrue) 87 tbl.Append(LTrue) 88 errorIfNotEqual(t, 3, tbl.MaxN()) 89 90 tbl = newLTable(0, 0) 91 errorIfNotEqual(t, 0, tbl.MaxN()) 92 93 tbl = newLTable(10, 0) 94 errorIfNotEqual(t, 0, tbl.MaxN()) 95 } 96 97 func TestTableRemove(t *testing.T) { 98 tbl := newLTable(0, 0) 99 errorIfNotEqual(t, LNil, tbl.Remove(10)) 100 tbl.Append(LTrue) 101 errorIfNotEqual(t, LNil, tbl.Remove(10)) 102 103 tbl.Append(LFalse) 104 tbl.Append(LTrue) 105 errorIfNotEqual(t, LFalse, tbl.Remove(2)) 106 errorIfNotEqual(t, 2, tbl.MaxN()) 107 tbl.Append(LFalse) 108 errorIfNotEqual(t, LFalse, tbl.Remove(-1)) 109 errorIfNotEqual(t, 2, tbl.MaxN()) 110 111 } 112 113 func TestTableRawSetInt(t *testing.T) { 114 tbl := newLTable(0, 0) 115 tbl.RawSetInt(MaxArrayIndex+1, LTrue) 116 errorIfNotEqual(t, 0, tbl.MaxN()) 117 errorIfNotEqual(t, LTrue, tbl.RawGet(LNumber(MaxArrayIndex+1))) 118 119 tbl.RawSetInt(1, LTrue) 120 tbl.RawSetInt(3, LTrue) 121 errorIfNotEqual(t, 3, tbl.MaxN()) 122 errorIfNotEqual(t, LTrue, tbl.RawGetInt(1)) 123 errorIfNotEqual(t, LNil, tbl.RawGetInt(2)) 124 errorIfNotEqual(t, LTrue, tbl.RawGetInt(3)) 125 tbl.RawSetInt(2, LTrue) 126 errorIfNotEqual(t, LTrue, tbl.RawGetInt(1)) 127 errorIfNotEqual(t, LTrue, tbl.RawGetInt(2)) 128 errorIfNotEqual(t, LTrue, tbl.RawGetInt(3)) 129 } 130 131 func TestTableRawSetH(t *testing.T) { 132 tbl := newLTable(0, 0) 133 tbl.RawSetH(LString("key"), LTrue) 134 tbl.RawSetH(LString("key"), LNil) 135 _, found := tbl.dict[LString("key")] 136 errorIfNotEqual(t, false, found) 137 138 tbl.RawSetH(LTrue, LTrue) 139 tbl.RawSetH(LTrue, LNil) 140 _, foundb := tbl.dict[LTrue] 141 errorIfNotEqual(t, false, foundb) 142 } 143 144 func TestTableRawGetH(t *testing.T) { 145 tbl := newLTable(0, 0) 146 errorIfNotEqual(t, LNil, tbl.RawGetH(LNumber(1))) 147 errorIfNotEqual(t, LNil, tbl.RawGetH(LString("key0"))) 148 tbl.RawSetH(LString("key0"), LTrue) 149 tbl.RawSetH(LString("key1"), LFalse) 150 tbl.RawSetH(LNumber(1), LTrue) 151 errorIfNotEqual(t, LTrue, tbl.RawGetH(LString("key0"))) 152 errorIfNotEqual(t, LTrue, tbl.RawGetH(LNumber(1))) 153 errorIfNotEqual(t, LNil, tbl.RawGetH(LString("notexist"))) 154 errorIfNotEqual(t, LNil, tbl.RawGetH(LTrue)) 155 } 156 157 func TestTableForEach(t *testing.T) { 158 tbl := newLTable(0, 0) 159 tbl.Append(LNumber(1)) 160 tbl.Append(LNumber(2)) 161 tbl.Append(LNumber(3)) 162 tbl.Append(LNil) 163 tbl.Append(LNumber(5)) 164 165 tbl.RawSetH(LString("a"), LString("a")) 166 tbl.RawSetH(LString("b"), LString("b")) 167 tbl.RawSetH(LString("c"), LString("c")) 168 169 tbl.RawSetH(LTrue, LString("true")) 170 tbl.RawSetH(LFalse, LString("false")) 171 172 tbl.ForEach(func(key, value LValue) { 173 switch k := key.(type) { 174 case LBool: 175 switch bool(k) { 176 case true: 177 errorIfNotEqual(t, LString("true"), value) 178 case false: 179 errorIfNotEqual(t, LString("false"), value) 180 default: 181 t.Fail() 182 } 183 case LNumber: 184 switch int(k) { 185 case 1: 186 errorIfNotEqual(t, LNumber(1), value) 187 case 2: 188 errorIfNotEqual(t, LNumber(2), value) 189 case 3: 190 errorIfNotEqual(t, LNumber(3), value) 191 case 4: 192 errorIfNotEqual(t, LNumber(5), value) 193 default: 194 t.Fail() 195 } 196 case LString: 197 switch string(k) { 198 case "a": 199 errorIfNotEqual(t, LString("a"), value) 200 case "b": 201 errorIfNotEqual(t, LString("b"), value) 202 case "c": 203 errorIfNotEqual(t, LString("c"), value) 204 default: 205 t.Fail() 206 } 207 } 208 }) 209 }