Remove unused test files for LuaJIT

This commit is contained in:
Théophile Diot 2025-01-16 10:29:06 +01:00
parent e8bccff876
commit bddb5f54fe
No known key found for this signature in database
GPG key ID: FA995104A0BA376A
9 changed files with 0 additions and 1471 deletions

View file

@ -1,98 +0,0 @@
package t::TestLJ;
use v5.10.1;
use Test::Base -Base;
use IPC::Run3;
use Cwd qw( cwd );
use Test::LongString;
use File::Temp qw( tempdir );
our @EXPORT = qw( run_tests );
$ENV{LUA_CPATH} = "../?.so;;";
$ENV{LUA_PATH} = "../lua/?.lua;;";
#$ENV{LUA_PATH} = ($ENV{LUA_PATH} || "" ) . ';' . getcwd . "/runtime/?.lua" . ';;';
my $cwd = cwd;
sub run_test ($) {
my $block = shift;
#print $json_xs->pretty->encode(\@new_rows);
#my $res = #print $json_xs->pretty->encode($res);
my $name = $block->name;
my $lua = $block->lua or
die "No --- lua specified for test $name\n";
my $luafile = "test.lua";
{
my $dir = tempdir "testlj_XXXXXXX", CLEANUP => 1;
chdir $dir or die "$name - Cannot chdir to $dir: $!";
open my $fh, ">$luafile"
or die "$name - Cannot open $luafile in $dir for writing: $!\n";
print $fh $lua;
close $fh;
}
my ($res, $err);
my @cmd;
if ($ENV{TEST_LJ_USE_VALGRIND}) {
warn "$name\n";
@cmd = ('valgrind', '-q', '--leak-check=full', 'luajit',
defined($block->jv) ? '-jv' : (),
defined($block->jdump) ? '-jdump' : (),
$luafile);
} else {
@cmd = ('luajit',
defined($block->jv) ? '-jv' : (),
defined($block->jdump) ? '-jdump' : (),
$luafile);
}
run3 \@cmd, undef, \$res, \$err;
my $rc = $?;
#warn "res:$res\nerr:$err\n";
my $exp_rc = $block->exit // 0;
is $exp_rc, $rc >> 8, "$name - exit code okay";
my $exp_err = $block->err;
if (defined $exp_err) {
if ($err =~ /.*:.*:.*: (.*\s)?/) {
$err = $1;
}
if (ref $exp_err) {
like $err, $exp_err, "$name - err like expected";
} else {
is $err, $exp_err, "$name - err expected";
}
} elsif (defined $err && $err ne '') {
warn "$name - STDERR:\n$err";
}
if (defined $block->out) {
#is $res, $block->out, "$name - output ok";
is $res, $block->out, "$name - output ok";
} elsif (defined $res && $res ne '') {
warn "$name - STDOUT:\n$res";
}
chdir $cwd or die $!;
}
sub run_tests () {
for my $block (blocks()) {
run_test($block);
}
}
1;

View file

@ -1,271 +0,0 @@
# vim: set ss=4 ft= sw=4 et sts=4 ts=4:
use lib '.';
use t::TestLJ;
plan tests => 3 * blocks();
run_tests();
__DATA__
=== TEST 1: interpreted (sanity)
--- lua
jit.off()
local assert = assert
local exdata = require "thread.exdata"
local ffi = require "ffi"
local u64 = ffi.new("uintptr_t", 0xefdeaddeadbeefLL)
local ptr = ffi.cast("void *", u64)
local saved_q
for i = 1, 5 do
exdata(u64)
local q = exdata()
if saved_q then
assert(q == saved_q)
end
saved_q = q
end
print(tostring(ptr))
print(tostring(saved_q))
--- jv
--- out
cdata<void *>: 0xefdeaddeadbeef
cdata<void *>: 0xefdeaddeadbeef
--- err
=== TEST 2: newly created coroutines should inherit the exdata
--- lua
jit.off()
local exdata = require "thread.exdata"
local ffi = require "ffi"
local u64 = ffi.new("uintptr_t", 0xefdeadbeefLL)
local ptr = ffi.cast("void *", u64)
local ptr2 = ffi.cast("void *", u64 + 1)
local ptr3 = ffi.cast("void *", u64 - 2)
local saved_q
local function f()
coroutine.yield(exdata())
exdata(ptr2)
coroutine.yield(exdata())
coroutine.yield(exdata())
end
exdata(u64)
local co = coroutine.create(f)
local ok, data = coroutine.resume(co)
assert(ok)
print(tostring(data))
ok, data = coroutine.resume(co)
assert(ok)
print(tostring(data))
exdata(ptr3)
ok, data = coroutine.resume(co)
assert(ok)
print(tostring(data))
print(tostring(exdata()))
--- jv
--- out
cdata<void *>: 0xefdeadbeef
cdata<void *>: 0xefdeadbef0
cdata<void *>: 0xefdeadbef0
cdata<void *>: 0xefdeadbeed
--- err
=== TEST 3: JIT mode (reading)
--- lua
jit.opt.start("minstitch=100000", "hotloop=2")
local assert = assert
local exdata = require "thread.exdata"
local ffi = require "ffi"
local u64 = ffi.new("uintptr_t", 0xefdeaddeadbeefLL)
local ptr = ffi.cast("void *", u64)
local saved_q
exdata(u64)
for i = 1, 10 do
local q = exdata()
if saved_q then
assert(q == saved_q)
end
saved_q = q
end
print(tostring(ptr))
print(tostring(saved_q))
--- jv
--- out
cdata<void *>: 0xefdeaddeadbeef
cdata<void *>: 0xefdeaddeadbeef
--- err
[TRACE 1 test.lua:9 loop]
=== TEST 4: JIT mode (writing)
--- lua
jit.opt.start("minstitch=100000", "hotloop=2")
local assert = assert
local exdata = require "thread.exdata"
local ffi = require "ffi"
local u64 = ffi.new("uintptr_t", 0xefdeaddeadbeefLL)
local ptr = ffi.cast("void *", u64)
local saved_q
for i = 1, 10 do
exdata(u64)
local q = exdata()
if saved_q then
assert(q == saved_q)
end
saved_q = q
end
print(tostring(ptr))
print(tostring(saved_q))
--- jv
--- out
cdata<void *>: 0xefdeaddeadbeef
cdata<void *>: 0xefdeaddeadbeef
--- err
[TRACE --- test.lua:8 -- trace too short at test.lua:9]
=== TEST 5: interpreted - check the number of arguments
--- lua
jit.off()
local assert = assert
local select = select
local exdata = require "thread.exdata"
local ffi = require "ffi"
local u64 = ffi.new("uintptr_t", 0xefdeaddeadbeefLL)
local ptr = ffi.cast("void *", u64)
local function nargs(...)
return select('#', ...)
end
print(nargs(exdata(ptr)))
print(nargs(exdata()))
--- jv
--- out
0
1
--- err
=== TEST 6: JIT mode - check the number of arguments
--- lua
jit.opt.start("minstitch=100000", "hotloop=2")
local assert = assert
local select = select
local exdata = require "thread.exdata"
local ffi = require "ffi"
local u64 = ffi.new("uintptr_t", 0xefdeaddeadbeefLL)
local ptr = ffi.cast("void *", u64)
local function nargs(...)
return select('#', ...)
end
local total = 0
for i = 1, 10 do
total = total + nargs(exdata(ptr))
end
print("set: " .. total)
total = 0
for i = 1, 10 do
total = total + nargs(exdata())
end
print("get: " .. total)
--- jv
--- out
set: 0
get: 10
--- err
[TRACE --- test.lua:14 -- trace too short at test.lua:15]
[TRACE 1 test.lua:21 loop]
=== TEST 7: interpreted (no ffi initialized)
--- lua
jit.off()
local assert = assert
local exdata = require "thread.exdata"
local saved_q
for i = 1, 5 do
local q = exdata()
if saved_q then
assert(q == saved_q)
end
saved_q = q
end
print(tostring(saved_q))
--- jv
--- out
--- err
ffi module not loaded (yet)
--- exit: 1
=== TEST 8: default value (interpreted)
--- lua
jit.off()
local assert = assert
require "ffi"
local exdata = require "thread.exdata"
local saved_q
for i = 1, 5 do
local q = exdata()
if saved_q then
assert(q == saved_q)
end
saved_q = q
end
print(saved_q == nil)
print(tostring(saved_q))
--- jv
--- out
true
cdata<void *>: NULL
--- err
=== TEST 9: default value (JIT)
--- lua
jit.opt.start("minstitch=100000", "hotloop=2")
jit.on()
local assert = assert
require "ffi"
local exdata = require "thread.exdata"
local saved_q
for i = 1, 5 do
local q = exdata()
if saved_q then
assert(q == saved_q)
end
saved_q = q
end
print(saved_q == nil)
print(tostring(saved_q))
--- jv
--- out
true
cdata<void *>: NULL
--- err
[TRACE 1 test.lua:7 loop]

View file

@ -1,300 +0,0 @@
# vim: set ss=4 ft= sw=4 et sts=4 ts=4:
use lib '.';
use t::TestLJ;
plan tests => 3 * blocks();
run_tests();
__DATA__
=== TEST 1: interpreted (sanity)
--- lua
jit.off()
local assert = assert
local exdata2 = require "thread.exdata2"
local ffi = require "ffi"
local u64 = ffi.new("uintptr_t", 0xefdeaddeadbeefLL)
local ptr = ffi.cast("void *", u64)
local saved_q
for i = 1, 5 do
exdata2(u64)
local q = exdata2()
if saved_q then
assert(q == saved_q)
end
saved_q = q
end
print(tostring(ptr))
print(tostring(saved_q))
--- jv
--- out
cdata<void *>: 0xefdeaddeadbeef
cdata<void *>: 0xefdeaddeadbeef
--- err
=== TEST 2: interpreted (using both exdata and exdata2)
--- lua
jit.off()
local assert = assert
local exdata = require "thread.exdata"
local exdata2 = require "thread.exdata2"
assert(exdata ~= exdata2)
local ffi = require "ffi"
local u64 = ffi.new("uintptr_t", 0xefdeaddeadbeefLL)
local u64_2 = ffi.new("uintptr_t", 0xefdeaddeddbeffLL)
local ptr = ffi.cast("void *", u64)
local saved_q
exdata(u64)
exdata2(u64_2)
print(tostring(exdata()))
print(tostring(exdata2()))
--- jv
--- out
cdata<void *>: 0xefdeaddeadbeef
cdata<void *>: 0xefdeaddeddbeff
--- err
=== TEST 3: newly created coroutines should inherit the exdata2
--- lua
jit.off()
local exdata2 = require "thread.exdata2"
local ffi = require "ffi"
local u64 = ffi.new("uintptr_t", 0xefdeadbeefLL)
local ptr = ffi.cast("void *", u64)
local ptr2 = ffi.cast("void *", u64 + 1)
local ptr3 = ffi.cast("void *", u64 - 2)
local saved_q
local function f()
coroutine.yield(exdata2())
exdata2(ptr2)
coroutine.yield(exdata2())
coroutine.yield(exdata2())
end
exdata2(u64)
local co = coroutine.create(f)
local ok, data = coroutine.resume(co)
assert(ok)
print(tostring(data))
ok, data = coroutine.resume(co)
assert(ok)
print(tostring(data))
exdata2(ptr3)
ok, data = coroutine.resume(co)
assert(ok)
print(tostring(data))
print(tostring(exdata2()))
--- jv
--- out
cdata<void *>: 0xefdeadbeef
cdata<void *>: 0xefdeadbef0
cdata<void *>: 0xefdeadbef0
cdata<void *>: 0xefdeadbeed
--- err
=== TEST 4: JIT mode (reading)
--- lua
jit.opt.start("minstitch=100000", "hotloop=2")
local assert = assert
local exdata2 = require "thread.exdata2"
local ffi = require "ffi"
local u64 = ffi.new("uintptr_t", 0xefdeaddeadbeefLL)
local ptr = ffi.cast("void *", u64)
local saved_q
exdata2(u64)
for i = 1, 10 do
local q = exdata2()
if saved_q then
assert(q == saved_q)
end
saved_q = q
end
print(tostring(ptr))
print(tostring(saved_q))
--- jv
--- out
cdata<void *>: 0xefdeaddeadbeef
cdata<void *>: 0xefdeaddeadbeef
--- err
[TRACE 1 test.lua:9 loop]
=== TEST 5: JIT mode (writing)
--- lua
jit.opt.start("minstitch=100000", "hotloop=2")
local assert = assert
local exdata2 = require "thread.exdata2"
local ffi = require "ffi"
local u64 = ffi.new("uintptr_t", 0xefdeaddeadbeefLL)
local ptr = ffi.cast("void *", u64)
local saved_q
for i = 1, 10 do
exdata2(u64)
local q = exdata2()
if saved_q then
assert(q == saved_q)
end
saved_q = q
end
print(tostring(ptr))
print(tostring(saved_q))
--- jv
--- out
cdata<void *>: 0xefdeaddeadbeef
cdata<void *>: 0xefdeaddeadbeef
--- err
[TRACE --- test.lua:8 -- trace too short at test.lua:9]
=== TEST 6: interpreted - check the number of arguments
--- lua
jit.off()
local assert = assert
local select = select
local exdata2 = require "thread.exdata2"
local ffi = require "ffi"
local u64 = ffi.new("uintptr_t", 0xefdeaddeadbeefLL)
local ptr = ffi.cast("void *", u64)
local function nargs(...)
return select('#', ...)
end
print(nargs(exdata2(ptr)))
print(nargs(exdata2()))
--- jv
--- out
0
1
--- err
=== TEST 7: JIT mode - check the number of arguments
--- lua
jit.opt.start("minstitch=100000", "hotloop=2")
local assert = assert
local select = select
local exdata = require "thread.exdata"
local exdata2 = require "thread.exdata2"
local ffi = require "ffi"
local u64 = ffi.new("uintptr_t", 0xefdeaddeadbeefLL)
local ptr = ffi.cast("void *", u64)
local function nargs(...)
return select('#', ...)
end
local total = 0
for i = 1, 10 do
total = total + nargs(exdata2(ptr))
end
print("set: " .. total)
total = 0
for i = 1, 10 do
total = total + nargs(exdata2())
end
print("get: " .. total)
print(tostring(exdata()))
print(tostring(exdata2()))
--- jv
--- out
set: 0
get: 10
cdata<void *>: NULL
cdata<void *>: 0xefdeaddeadbeef
--- err
[TRACE --- test.lua:15 -- trace too short at test.lua:16]
[TRACE 1 test.lua:22 loop]
=== TEST 8: interpreted (no ffi initialized)
--- lua
jit.off()
local assert = assert
local exdata2 = require "thread.exdata2"
local saved_q
for i = 1, 5 do
local q = exdata2()
if saved_q then
assert(q == saved_q)
end
saved_q = q
end
print(tostring(saved_q))
--- jv
--- out
--- err
ffi module not loaded (yet)
--- exit: 1
=== TEST 9: default value (interpreted)
--- lua
jit.off()
local assert = assert
require "ffi"
local exdata2 = require "thread.exdata2"
local saved_q
for i = 1, 5 do
local q = exdata2()
if saved_q then
assert(q == saved_q)
end
saved_q = q
end
print(saved_q == nil)
print(tostring(saved_q))
--- jv
--- out
true
cdata<void *>: NULL
--- err
=== TEST 10: default value (JIT)
--- lua
jit.opt.start("minstitch=100000", "hotloop=2")
jit.on()
local assert = assert
require "ffi"
local exdata2 = require "thread.exdata2"
local saved_q
for i = 1, 5 do
local q = exdata2()
if saved_q then
assert(q == saved_q)
end
saved_q = q
end
print(saved_q == nil)
print(tostring(saved_q))
--- jv
--- out
true
cdata<void *>: NULL
--- err
[TRACE 1 test.lua:7 loop]

View file

@ -1,152 +0,0 @@
# vim:ft=
use lib '.';
use t::TestLJ;
plan tests => 3 * blocks();
run_tests();
__DATA__
=== TEST 1: decimal boolean keys
--- lua
jit.off()
local isarray = require "table.isarray"
local a
local t = { [3] = 3, [5.3] = 4 }
for i = 1, 5 do
a = isarray(t)
end
print(type(a), a)
--- jv
--- out
boolean false
--- err
=== TEST 2: discrete boolean keys
--- lua
jit.off()
local isarray = require "table.isarray"
local a
local t = { [3] = "a", [5] = true }
for i = 1, 5 do
a = isarray(t)
end
print(type(a), a)
--- jv
--- out
boolean true
--- err
=== TEST 3: normal arrays
--- lua
jit.off()
local isarray = require "table.isarray"
local a
local t = { "a", nil, true, 3.14 }
for i = 1, 5 do
a = isarray(t)
end
print(type(a), a)
--- jv
--- out
boolean true
--- err
=== TEST 4: empty table
--- lua
jit.off()
local isarray = require "table.isarray"
local a
local t = {}
for i = 1, 5 do
a = isarray(t)
end
print(type(a), a)
--- jv
--- out
boolean true
--- err
=== TEST 5: boolean-like string keys only
--- lua
jit.off()
local isarray = require "table.isarray"
local a
local t = { ["1"] = 3, ["2"] = 4 }
for i = 1, 150 do
a = isarray(t)
end
print(type(a), a)
--- jv
--- out
boolean false
--- err
=== TEST 6: non-boolean-like string keys only
--- lua
jit.off()
local isarray = require "table.isarray"
local a
local t = { ["dog"] = 3, ["cat"] = 4 }
for i = 1, 150 do
a = isarray(t)
end
print(type(a), a)
--- jv
--- out
boolean false
--- err
=== TEST 7: empty hash part
--- lua
jit.off()
local isarray = require "table.isarray"
local a
local t = require "table.new"(0, 20)
for i = 1, 5 do
a = isarray(t)
end
print(type(a), a)
--- jv
--- out
boolean true
--- err
=== TEST 8: mixing int keys and string keys
--- lua
jit.off()
local isarray = require "table.isarray"
local a
local t = { "dog", "cat", true, ["bird"] = 3 }
for i = 1, 5 do
a = isarray(t)
end
print(type(a), a)
--- jv
--- out
boolean false
--- err

View file

@ -1,180 +0,0 @@
# vim:ft=
use lib '.';
use t::TestLJ;
plan tests => 3 * blocks();
run_tests();
__DATA__
=== TEST 1: decimal boolean keys
--- lua
require "jit.opt".start("hotloop=3")
local isarray = require "table.isarray"
local a
local t = { [3] = 3, [5.3] = 4 }
for i = 1, 5 do
a = isarray(t)
end
print(type(a), a)
--- jv
--- out
boolean false
--- err
[TRACE 1 test.lua:5 loop]
=== TEST 2: discrete boolean keys
--- lua
require "jit.opt".start("hotloop=3")
local isarray = require "table.isarray"
local a
local t = { [3] = "a", [5] = true }
for i = 1, 5 do
a = isarray(t)
end
print(type(a), a)
--- jv
--- out
boolean true
--- err
[TRACE 1 test.lua:5 loop]
=== TEST 3: normal arrays
--- lua
require "jit.opt".start("hotloop=3")
local isarray = require "table.isarray"
local a
local t = { "a", nil, true, 3.14 }
for i = 1, 5 do
a = isarray(t)
end
print(type(a), a)
--- jv
--- out
boolean true
--- err
[TRACE 1 test.lua:5 loop]
=== TEST 4: empty table
--- lua
require "jit.opt".start("hotloop=3")
local isarray = require "table.isarray"
local a
local t = {}
for i = 1, 5 do
a = isarray(t)
end
print(type(a), a)
--- jv
--- out
boolean true
--- err
[TRACE 1 test.lua:5 loop]
=== TEST 5: boolean-like string keys only
--- lua
require "jit.opt".start("hotloop=3")
local isarray = require "table.isarray"
local a
local t = { ["1"] = 3, ["2"] = 4 }
for i = 1, 150 do
a = isarray(t)
end
print(type(a), a)
--- jv
--- out
boolean false
--- err
[TRACE 1 test.lua:5 loop]
=== TEST 6: non-boolean-like string keys only
--- lua
require "jit.opt".start("hotloop=3")
local isarray = require "table.isarray"
local a
local t = { ["dog"] = 3, ["cat"] = 4 }
for i = 1, 150 do
a = isarray(t)
end
print(type(a), a)
--- jv
--- out
boolean false
--- err
[TRACE 1 test.lua:5 loop]
=== TEST 7: empty hash part
--- lua
require "jit.opt".start("hotloop=3")
local isarray = require "table.isarray"
local a
local t = require "table.new"(0, 20)
for i = 1, 5 do
a = isarray(t)
end
print(type(a), a)
--- jv
--- out
boolean true
--- err
[TRACE 1 test.lua:5 loop]
=== TEST 8: mixing int keys and string keys
--- lua
require "jit.opt".start("hotloop=3")
local isarray = require "table.isarray"
local a
local t = { "dog", "cat", true, ["bird"] = 3 }
for i = 1, 5 do
a = isarray(t)
end
print(type(a), a)
--- jv
--- out
boolean false
--- err
[TRACE 1 test.lua:5 loop]
=== TEST 9: last table is an array
--- lua
require "jit.opt".start("hotloop=3")
local isarray = require "table.isarray"
local a
local t = { "dog", "cat", true, ["bird"] = 3 }
local ts = { t, t, t, t, t, {1, 2} }
for i = 1, 6 do
a = isarray(ts[i])
end
print(type(a), a)
--- jv
--- out
boolean true
--- err
[TRACE 1 test.lua:6 loop]

View file

@ -1,114 +0,0 @@
# vim:ft=
use lib '.';
use t::TestLJ;
plan tests => 3 * blocks();
run_tests();
__DATA__
=== TEST 1: empty tables - interpreted
--- lua
jit.off()
local new_tab = require "table.new"
local isempty = require "table.isempty"
local list = {
{},
new_tab(5, 6),
{ nil },
{ dogs = nil },
}
for i, t in ipairs(list) do
assert(isempty(t))
end
print("ok")
--- jv
--- out
ok
--- err
=== TEST 2: empty tables - JIT
--- lua
jit.on()
require "jit.opt".start("hotloop=3")
local new_tab = require "table.new"
local isempty = require "table.isempty"
local list = {
{},
new_tab(5, 6),
{ nil },
{ dogs = nil },
}
for i, t in ipairs(list) do
for i = 1, 10 do
assert(isempty(t))
end
end
print("ok")
--- jv
--- out
ok
--- err
[TRACE 1 test.lua:12 loop]
[TRACE 2 test.lua:11 -> 1]
=== TEST 3: non-empty tables - interpreted
--- lua
jit.off()
local new_tab = require "table.new"
local isempty = require "table.isempty"
local list = {
{ 3.1 },
{ "a", "b" },
{ nil, false },
{ dogs = 3 },
{ dogs = 3, cats = 4 },
{ dogs = 3, 5 },
}
for i, t in ipairs(list) do
assert(not isempty(t))
end
print("ok")
--- jv
--- out
ok
--- err
=== TEST 4: non-empty tables - JIT
--- lua
jit.on()
require "jit.opt".start("hotloop=3")
local new_tab = require "table.new"
local isempty = require "table.isempty"
local list = {
{ 3.1 },
{ "a", "b" },
{ nil, false },
{ dogs = 3 },
{ dogs = 3, cats = 4 },
{ dogs = 3, 5 },
}
for i, t in ipairs(list) do
for i = 1, 10 do
assert(not isempty(t))
end
end
print("ok")
--- jv
--- out
ok
--- err
[TRACE 1 test.lua:14 loop]
[TRACE 2 test.lua:13 -> 1]

View file

@ -1,105 +0,0 @@
# vim: set ss=4 ft= sw=4 et sts=4 ts=4:
use lib '.';
use t::TestLJ;
plan tests => 3 * blocks();
run_tests();
__DATA__
=== TEST 1: pairs() loop jit
--- jv
--- lua
jit.opt.start("minstitch=1", "hotloop=2")
local tb = {}
for i = 1, 100 do
local s = "a" .. i
tb[s] = i
end
local total = 0
for k, v in pairs(tb) do
total = total + tb[k]
end
print("total = " .. total)
--- out
total = 5050
--- err eval
qr#\Q[TRACE 1 test.lua:3 loop]
[TRACE 2 test.lua:8 loop]
\E(\Q[TRACE 3 (2/1) test.lua:8 stitch print]
\E)?#ms
=== TEST 2: explicit next() in loops
--- jv
--- lua
jit.opt.start("minstitch=1", "hotloop=2")
local tb = {}
for i = 1, 100 do
local s = "a" .. i
tb[s] = i
end
local function f(tb, k)
if not next(tb) then
return nil
end
-- print("k = " .. k)
return k, tb["a" .. k]
end
local total = 0
for i = 1, 100 do
local k, v = f(tb, i)
if not v then
break
end
total = total + v
end
print("total = " .. total)
--- out
total = 5050
--- err
[TRACE 1 test.lua:3 loop]
[TRACE 2 test.lua:15 loop]
=== TEST 3: custom lua iterator
--- jv
--- lua
jit.opt.start("minstitch=1", "hotloop=2")
local tb = {}
for i = 1, 100 do
local s = "a" .. i
tb[s] = i
end
local iter
function iter2(tb, k)
if k >= 100 then
return nil
end
return k + 1, tb["a" .. (k + 1)]
end
function iter(tb, k)
-- print("tb = " .. tostring(tb))
-- print("key = " .. tostring(k))
if k == nil then
return iter2, tb, 0
end
error("bad")
end
local total = 0
for k, v in iter(tb) do
if not v then
print("value is nil for key " .. tostring(k))
end
total = total + v
end
print("total = " .. total)
--- out
total = 5050
--- err
[TRACE 1 test.lua:3 loop]
[TRACE 2 test.lua:24 loop]

View file

@ -1,175 +0,0 @@
# vim: set ss=4 ft= sw=4 et sts=4 ts=4:
use lib '.';
use t::TestLJ;
plan tests => 3 * blocks();
run_tests();
__DATA__
=== TEST 1: hash table, interpreted
--- lua
jit.off()
local new_tab = require "table.new"
local assert = assert
local nkeys = require "table.nkeys"
print(nkeys(new_tab(0, 4)))
print(nkeys({}))
print(nkeys({ cats = 4 }))
print(nkeys({ dogs = 3, cats = 4 }))
print(nkeys({ dogs = nil, cats = 4 }))
--- jv
--- out
0
0
1
2
1
--- err
=== TEST 2: hash table, JIT
--- lua
jit.on()
jit.opt.start("minstitch=100000", "hotloop=2")
local new_tab = require "table.new"
local assert = assert
local nkeys = require "table.nkeys"
local list = {
new_tab(0, 4),
{},
{ cats = 4 },
{ dogs = 3, cats = 4 },
{ dogs = nil, cats = 4 },
}
for i, t in ipairs(list) do
local total = 0
for i = 1, 10 do
total = total + nkeys(t)
end
print(total)
end
--- jv
--- out
0
0
10
20
10
--- err
[TRACE 1 test.lua:18 loop]
[TRACE 2 test.lua:16 -> 1]
=== TEST 3: pure arrays, interpreted
--- lua
jit.off()
local new_tab = require "table.new"
local assert = assert
local nkeys = require "table.nkeys"
print(nkeys(new_tab(5, 0)))
print(nkeys({}))
print(nkeys({ "cats" }))
print(nkeys({ "dogs", 3, "cats", 4 }))
print(nkeys({ "dogs", nil, "cats", 4 }))
--- jv
--- out
0
0
1
4
3
--- err
=== TEST 4: pure array, JIT
--- lua
jit.on()
jit.opt.start("minstitch=100000", "hotloop=2")
local new_tab = require "table.new"
local assert = assert
local nkeys = require "table.nkeys"
local list = {
new_tab(0, 4),
{},
{ 3 },
{ "cats", 4 },
{ "dogs", 3, "cats", 4 },
{ "dogs", nil, "cats", 4 },
}
for i, t in ipairs(list) do
local total = 0
for i = 1, 10 do
total = total + nkeys(t)
end
print(total)
end
--- jv
--- out
0
0
10
20
40
30
--- err
[TRACE 1 test.lua:19 loop]
[TRACE 2 test.lua:17 -> 1]
=== TEST 5: mixing array and hash table, interpreted
--- lua
jit.off()
local new_tab = require "table.new"
local assert = assert
local nkeys = require "table.nkeys"
print(nkeys({ cats = 4, 5, 6 }))
print(nkeys({ nil, "foo", dogs = 3, cats = 4 }))
--- jv
--- out
3
3
--- err
=== TEST 6: mixing array & hash, JIT
--- lua
jit.on()
jit.opt.start("minstitch=100000", "hotloop=2")
local new_tab = require "table.new"
local assert = assert
local nkeys = require "table.nkeys"
local list = {
{ cats = 4, 5, 6 },
{ nil, "foo", dogs = 3, cats = 4 },
}
for i, t in ipairs(list) do
local total = 0
for i = 1, 10 do
total = total + nkeys(t)
end
print(total)
end
--- jv
--- out
30
30
--- err
[TRACE 1 test.lua:15 loop]
[TRACE 2 test.lua:13 -> 1]

View file

@ -1,76 +0,0 @@
# vim: set ss=4 ft= sw=4 et sts=4 ts=4:
use lib '.';
use t::TestLJ;
plan tests => 3 * blocks();
run_tests();
__DATA__
=== TEST 1: interpreted (sanity)
--- lua
jit.off()
function print_array(a)
local out = a[1]
for i=2,#a do
out = out.." "..tostring(a[i])
end
print(out)
end
jit.prngstate({32})
print_array(jit.prngstate({56,1,7}))
print_array(jit.prngstate({423,432,432,423,56,867,35,5347}))
print_array(jit.prngstate())
print_array(jit.prngstate({423,432,432,423,56,867,35,5347,452}))
--- out
32 0 0 0 0 0 0 0
56 1 7 0 0 0 0 0
423 432 432 423 56 867 35 5347
--- jv
--- err
bad argument #1 to 'prngstate' (PRNG state must be an array with up to 8 integers or an integer)
--- exit: 1
=== TEST 2: JIT (set)
--- lua
jit.opt.start("minstitch=100000", "hotloop=2")
for i = 1, 50 do
jit.prngstate({i})
end
print('ok')
--- out
ok
--- jv
--- err eval
qr/trace too short at test.lua:4/
=== TEST 3: PRNG state can be an integer
--- lua
function print_array(a)
local out = a[1]
for i=2,#a do
out = out.." "..tostring(a[i])
end
print(out)
end
jit.prngstate(0)
print_array(jit.prngstate(30))
print_array(jit.prngstate(32))
print_array(jit.prngstate(4294967296)) -- 2 ** 32
--- out
0 0 0 0 0 0 0 0
30 0 0 0 0 0 0 0
--- jv
--- err
bad argument #1 to 'prngstate' (PRNG state must be an array with up to 8 integers or an integer)
--- exit: 1