diff options
Diffstat (limited to 'testes')
| -rw-r--r-- | testes/nextvar.lua | 72 |
1 files changed, 54 insertions, 18 deletions
diff --git a/testes/nextvar.lua b/testes/nextvar.lua index cee77f76..85c9ff6b 100644 --- a/testes/nextvar.lua +++ b/testes/nextvar.lua | |||
| @@ -9,6 +9,22 @@ local function checkerror (msg, f, ...) | |||
| 9 | end | 9 | end |
| 10 | 10 | ||
| 11 | 11 | ||
| 12 | |||
| 13 | ---------------------------------------------------------------- | ||
| 14 | local function printTable (t) | ||
| 15 | local a, h = T.querytab(t) | ||
| 16 | print("array:") | ||
| 17 | for i = 1, a do | ||
| 18 | print("", T.querytab(t, i - 1)) | ||
| 19 | end | ||
| 20 | print("hash:") | ||
| 21 | for i = 1, h do | ||
| 22 | print("", T.querytab(t, a + i - 1)) | ||
| 23 | end | ||
| 24 | end | ||
| 25 | ---------------------------------------------------------------- | ||
| 26 | |||
| 27 | |||
| 12 | local function check (t, na, nh) | 28 | local function check (t, na, nh) |
| 13 | if not T then return end | 29 | if not T then return end |
| 14 | local a, h = T.querytab(t) | 30 | local a, h = T.querytab(t) |
| @@ -106,9 +122,10 @@ else --[ | |||
| 106 | -- testing table sizes | 122 | -- testing table sizes |
| 107 | 123 | ||
| 108 | 124 | ||
| 109 | local function mp2 (n) -- minimum power of 2 >= n | 125 | -- minimum power of 2 (or zero) >= n |
| 126 | local function mp2 (n) | ||
| 110 | local mp = 2^math.ceil(math.log(n, 2)) | 127 | local mp = 2^math.ceil(math.log(n, 2)) |
| 111 | assert(n == 0 or (mp/2 < n and n <= mp)) | 128 | assert((mp == 0 or mp/2 < n) and n <= mp) |
| 112 | return mp | 129 | return mp |
| 113 | end | 130 | end |
| 114 | 131 | ||
| @@ -123,7 +140,7 @@ end | |||
| 123 | 140 | ||
| 124 | -- testing constructor sizes | 141 | -- testing constructor sizes |
| 125 | local sizes = {0, 1, 2, 3, 4, 5, 7, 8, 9, 15, 16, 17, | 142 | local sizes = {0, 1, 2, 3, 4, 5, 7, 8, 9, 15, 16, 17, |
| 126 | 30, 31, 32, 33, 34, 254, 255, 256, 500, 1000} | 143 | 30, 31, 32, 33, 34, 254, 255, 256, 257, 500, 1001} |
| 127 | 144 | ||
| 128 | for _, sa in ipairs(sizes) do -- 'sa' is size of the array part | 145 | for _, sa in ipairs(sizes) do -- 'sa' is size of the array part |
| 129 | local arr = {"return {"} | 146 | local arr = {"return {"} |
| @@ -167,8 +184,9 @@ end | |||
| 167 | 184 | ||
| 168 | -- testing tables dynamically built | 185 | -- testing tables dynamically built |
| 169 | local lim = 130 | 186 | local lim = 130 |
| 170 | local a = {}; a[2] = 1; check(a, 0, 1) | 187 | local a = {}; a[2] = 1; check(a, 2, 0) |
| 171 | a = {}; a[0] = 1; check(a, 0, 1); a[2] = 1; check(a, 0, 2) | 188 | a = {}; a[0] = 1; check(a, 0, 1); |
| 189 | a[2] = 1; check(a, 2, 1) | ||
| 172 | a = {}; a[0] = 1; a[1] = 1; check(a, 1, 1) | 190 | a = {}; a[0] = 1; a[1] = 1; check(a, 1, 1) |
| 173 | a = {} | 191 | a = {} |
| 174 | for i = 1,lim do | 192 | for i = 1,lim do |
| @@ -184,28 +202,46 @@ for i = 1,lim do | |||
| 184 | check(a, 0, mp2(i)) | 202 | check(a, 0, mp2(i)) |
| 185 | end | 203 | end |
| 186 | 204 | ||
| 187 | a = {} | ||
| 188 | for i=1,16 do a[i] = i end | ||
| 189 | check(a, 16, 0) | ||
| 190 | do | 205 | do |
| 206 | local a = {} | ||
| 207 | for i=1,16 do a[i] = i end | ||
| 208 | check(a, 16, 0) | ||
| 191 | for i=1,11 do a[i] = undef end | 209 | for i=1,11 do a[i] = undef end |
| 192 | for i=30,50 do a[i] = true; a[i] = undef end -- force a rehash (?) | 210 | check(a, 16, 0) |
| 193 | check(a, 0, 8) -- 5 elements in the table | 211 | a[30] = true -- force a rehash |
| 212 | a[30] = undef | ||
| 213 | check(a, 0, 8) -- 5 elements in the hash part: [12]-[16] | ||
| 194 | a[10] = 1 | 214 | a[10] = 1 |
| 195 | for i=30,50 do a[i] = true; a[i] = undef end -- force a rehash (?) | 215 | for i=30,50 do a[i] = true; a[i] = undef end -- force a rehash |
| 196 | check(a, 0, 8) -- only 6 elements in the table | 216 | check(a, 16, 1) |
| 197 | for i=1,14 do a[i] = true; a[i] = undef end | 217 | for i=1,14 do a[i] = true; a[i] = undef end |
| 198 | for i=18,50 do a[i] = true; a[i] = undef end -- force a rehash (?) | 218 | check(a, 16, 1) -- no rehash... |
| 199 | check(a, 0, 4) -- only 2 elements ([15] and [16]) | 219 | a[31] = true; a[32] = true -- force a rehash |
| 220 | check(a, 0, 4) -- [15], [16], [31], [32] | ||
| 200 | end | 221 | end |
| 201 | 222 | ||
| 202 | -- reverse filling | 223 | -- reverse filling |
| 203 | for i=1,lim do | 224 | do |
| 225 | local N = 2^10 | ||
| 204 | local a = {} | 226 | local a = {} |
| 205 | for i=i,1,-1 do a[i] = i end -- fill in reverse | 227 | for i = N, 1, -1 do a[i] = i end -- fill in reverse |
| 206 | check(a, mp2(i), 0) | 228 | check(a, mp2(N), 0) |
| 207 | end | 229 | end |
| 208 | 230 | ||
| 231 | |||
| 232 | do -- "almost sparse" arrays | ||
| 233 | -- create table with holes in 1/3 of its entries; all its | ||
| 234 | -- elements are always in the array part | ||
| 235 | local a = {} | ||
| 236 | for i = 1, 257 do | ||
| 237 | if i % 3 ~= 1 then | ||
| 238 | a[i] = true | ||
| 239 | check(a, mp2(i), 0) | ||
| 240 | end | ||
| 241 | end | ||
| 242 | end | ||
| 243 | |||
| 244 | |||
| 209 | -- size tests for vararg | 245 | -- size tests for vararg |
| 210 | lim = 35 | 246 | lim = 35 |
| 211 | local function foo (n, ...) | 247 | local function foo (n, ...) |
| @@ -840,7 +876,7 @@ do | |||
| 840 | co() -- start coroutine | 876 | co() -- start coroutine |
| 841 | co(1) -- continue after yield | 877 | co(1) -- continue after yield |
| 842 | assert(res[1] == 30 and res[2] == 20 and res[3] == 10 and #res == 3) | 878 | assert(res[1] == 30 and res[2] == 20 and res[3] == 10 and #res == 3) |
| 843 | 879 | ||
| 844 | end | 880 | end |
| 845 | 881 | ||
| 846 | print"OK" | 882 | print"OK" |
