[tarantool-patches] [PATCH 1/1] test: move luajit-tap suite to luajit repo
Igor Munkin
imun at tarantool.org
Thu Sep 5 17:01:53 MSK 2019
* All test chunks related to luajit were moved from tarantool source
tree to the luajit repo
* Adjusted CMakeLists via creating a symlink to luajit test directory
to fix out-of-source tests
Closed #4478
---
.gitignore | 1 +
test/CMakeLists.txt | 10 +
test/luajit-tap/fold_bug_LuaJIT_505.test.lua | 20 --
test/luajit-tap/gh.test.lua | 17 --
test/luajit-tap/suite.ini | 5 -
.../table_chain_bug_LuaJIT_494.test.lua | 178 ------------------
test/luajit-tap/unsink_64_kptr.test.lua | 44 -----
7 files changed, 11 insertions(+), 264 deletions(-)
delete mode 100755 test/luajit-tap/fold_bug_LuaJIT_505.test.lua
delete mode 100755 test/luajit-tap/gh.test.lua
delete mode 100644 test/luajit-tap/suite.ini
delete mode 100755 test/luajit-tap/table_chain_bug_LuaJIT_494.test.lua
delete mode 100755 test/luajit-tap/unsink_64_kptr.test.lua
diff --git a/.gitignore b/.gitignore
index fdf5ae5b5..b8ffaca6d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -90,6 +90,7 @@ test/unit/*.test
test/unit/fiob
test/small
test/var
+test/luajit-tap
third_party/luajit/src/luajit
third_party/luajit/lib/vmdef.lua
third_party/luajit/src/buildvm
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 53357504e..9b5df7dc5 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -21,6 +21,14 @@ if(POLICY CMP0037)
cmake_policy(SET CMP0037 OLD)
endif(POLICY CMP0037)
+add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/luajit-tap
+ COMMAND ${CMAKE_COMMAND} -E create_symlink
+ ${PROJECT_SOURCE_DIR}/third_party/luajit/test
+ ${CMAKE_CURRENT_BINARY_DIR}/luajit-tap
+ COMMENT Create a symlink for luajit test dir to fix out-of-source tests)
+add_custom_target(symlink_luajit_tests ALL
+ DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/luajit-tap)
+
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/small
COMMAND ${CMAKE_COMMAND} -E create_symlink
${PROJECT_SOURCE_DIR}/src/lib/small/test/
@@ -31,12 +39,14 @@ add_custom_target(symlink_small_tests ALL
add_custom_target(test
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/small
+ ${CMAKE_CURRENT_BINARY_DIR}/luajit-tap
COMMAND ${PROJECT_SOURCE_DIR}/test/test-run.py
--builddir=${PROJECT_BINARY_DIR}
--vardir=${PROJECT_BINARY_DIR}/test/var)
add_custom_target(test-force
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/small
+ ${CMAKE_CURRENT_BINARY_DIR}/luajit-tap
COMMAND ${PROJECT_SOURCE_DIR}/test/test-run.py
--builddir=${PROJECT_BINARY_DIR}
--vardir=${PROJECT_BINARY_DIR}/test/var
diff --git a/test/luajit-tap/fold_bug_LuaJIT_505.test.lua b/test/luajit-tap/fold_bug_LuaJIT_505.test.lua
deleted file mode 100755
index 2fee06964..000000000
--- a/test/luajit-tap/fold_bug_LuaJIT_505.test.lua
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env tarantool
-
-tap = require('tap')
-
-test = tap.test("505")
-test:plan(1)
-
--- Test file to demonstrate Lua fold machinery icorrect behavior, details:
--- https://github.com/LuaJIT/LuaJIT/issues/505
-
-jit.opt.start("hotloop=1")
-for _ = 1, 20 do
- local value = "abc"
- local pos_c = string.find(value, "c", 1, true)
- local value2 = string.sub(value, 1, pos_c - 1)
- local pos_b = string.find(value2, "b", 2, true)
- assert(pos_b == 2, "FAIL: position of 'b' is " .. pos_b)
-end
-
-test:ok("PASS")
diff --git a/test/luajit-tap/gh.test.lua b/test/luajit-tap/gh.test.lua
deleted file mode 100755
index 00b71a6bd..000000000
--- a/test/luajit-tap/gh.test.lua
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/env tarantool
-
--- Miscellaneous test for LuaJIT bugs
-tap = require('tap')
-
-test = tap.test("gh")
-test:plan(2)
---
--- gh-3196: incorrect string length if Lua hash returns 0
---
-h = "\x1F\x93\xE2\x1C\xCA\xDE\x28\x08\x26\x01\xED\x0A\x2F\xE4\x21\x02\x97\x77\xD9\x3E"
-test:is(h:len(), 20)
-
-h = "\x0F\x93\xE2\x1C\xCA\xDE\x28\x08\x26\x01\xED\x0A\x2F\xE4\x21\x02\x97\x77\xD9\x3E"
-test:is(h:len(), 20)
-
-test:check()
diff --git a/test/luajit-tap/suite.ini b/test/luajit-tap/suite.ini
deleted file mode 100644
index 3e860c9ac..000000000
--- a/test/luajit-tap/suite.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[default]
-core = app
-description = Luajit tests
-is_parallel = True
-pretest_clean = True
diff --git a/test/luajit-tap/table_chain_bug_LuaJIT_494.test.lua b/test/luajit-tap/table_chain_bug_LuaJIT_494.test.lua
deleted file mode 100755
index 06c0f0d29..000000000
--- a/test/luajit-tap/table_chain_bug_LuaJIT_494.test.lua
+++ /dev/null
@@ -1,178 +0,0 @@
-#!/usr/bin/env tarantool
-
-tap = require('tap')
-
-test = tap.test("494")
-test:plan(1)
-
--- Test file to demonstrate Lua table hash chain bugs discussed in
--- https://github.com/LuaJIT/LuaJIT/issues/494
--- Credit: prepared by Peter Cawley here with minor edits:
--- https://gist.github.com/corsix/1fc9b13a2dd5f3659417b62dd54d4500
-
---- Plumbing
-ffi = require"ffi"
-ffi.cdef"char* strstr(const char*, const char*)"
-strstr = ffi.C.strstr
-cast = ffi.cast
-str_hash_offset = cast("uint32_t*", strstr("*", ""))[-2] == 1 and 3 or 2
-function str_hash(s)
- return cast("uint32_t*", strstr(s, "")) - str_hash_offset
-end
-table_new = require"table.new"
-
---- Prepare some objects
-victims = {}
-orig_hash = {}
-for c in ("abcdef"):gmatch"." do
- v = c .. "{09add58a-13a4-44e0-a52c-d44d0f9b2b95}"
- victims[c] = v
- orig_hash[c] = str_hash(v)[0]
-end
-collectgarbage()
-
-do --- Basic version of the problem
- for k, v in pairs(victims) do
- str_hash(v)[0] = 0
- end
- t = table_new(0, 8)
- -- Make chain a -> b -> c -> d, all with a as primary
- t[victims.a] = true
- t[victims.d] = true
- t[victims.c] = true
- t[victims.b] = true
- -- Change c's primary to b, and d's primary to c
- t[victims.d] = nil
- t[victims.c] = nil
- str_hash(victims.c)[0] = 5
- str_hash(victims.d)[0] = 6
- t[victims.c] = true
- t[victims.d] = true
- -- Insert something with b as primary
- str_hash(victims.e)[0] = 5
- t[victims.e] = true
- -- Check for consistency
- for c in ("abcde"):gmatch"." do
- assert(t[victims[c]], c)
- end
-end
-collectgarbage()
-
-do --- Just `mn != freenode` can lead to infinite loops
- for k, v in pairs(victims) do
- str_hash(v)[0] = 0
- end
- t = table_new(0, 8)
- -- Make chain a -> b -> c -> d, all with a as primary
- t[victims.a] = true
- t[victims.d] = true
- t[victims.c] = true
- t[victims.b] = true
- -- Change c's primary to b, and d's primary to d
- t[victims.d] = nil
- t[victims.c] = nil
- str_hash(victims.c)[0] = 5
- str_hash(victims.d)[0] = 7
- t[victims.c] = true
- t[victims.d] = true
- -- Insert something with b as primary
- str_hash(victims.e)[0] = 5
- t[victims.e] = true
- -- Insert something with d as primary (infinite lookup loop)
- str_hash(victims.f)[0] = 7
- t[victims.f] = true
-end
-collectgarbage()
-
-do --- Just `mn != nn` can lead to infinite loops
- for k, v in pairs(victims) do
- str_hash(v)[0] = 0
- end
- t = table_new(0, 8)
- -- Make chain a -> b -> c -> d -> e, all with a as primary
- t[victims.a] = true
- t[victims.e] = true
- t[victims.d] = true
- t[victims.c] = true
- t[victims.b] = true
- -- Change c's primary to b, d's primary to d, and e's primary to d
- t[victims.e] = nil
- t[victims.d] = nil
- t[victims.c] = nil
- str_hash(victims.c)[0] = 4
- str_hash(victims.d)[0] = 6
- str_hash(victims.e)[0] = 6
- t[victims.c] = true
- t[victims.d] = true
- t[victims.e] = true
- -- Insert something with b as primary (infinite rechaining loop)
- str_hash(victims.f)[0] = 4
- t[victims.f] = true
-end
-
-for i = 0, 10 do --- Non-strings can need rechaining too
- collectgarbage()
-
- k = tonumber((("0x%xp-1074"):format(i)))
- str_hash(victims.a)[0] = 0
- str_hash(victims.b)[0] = 0
- t = table_new(0, 4)
- -- a -> b, both with a as primary
- t[victims.a] = true
- t[victims.b] = true
- -- Change b's primary to b
- t[victims.b] = nil
- str_hash(victims.b)[0] = 3
- t[victims.b] = true
- -- Might get a -> b -> k, with k's primary as b
- t[k] = true
- -- Change b's primary to a
- t[victims.b] = nil
- str_hash(victims.b)[0] = 0
- t[victims.b] = true
- -- Insert something with b as primary
- str_hash(victims.c)[0] = 3
- t[victims.c] = true
- -- Check for consistency
- assert(t[k], i)
-end
-
-for i = 0, 10 do --- Non-strings can be moved to freenode
- collectgarbage()
-
- k = false
- str_hash(victims.a)[0] = 0
- str_hash(victims.b)[0] = 0
- t = table_new(0, 4)
- -- a -> k -> b, all with a as primary
- t[victims.a] = true
- t[victims.b] = true
- t[k] = true
- -- Change b's primary to k
- t[victims.b] = nil
- str_hash(victims.b)[0] = 2
- t[victims.b] = true
- -- Insert a non-string with primary of k
- t[tonumber((("0x%xp-1074"):format(i)))] = true
- -- Check for consistency
- assert(t[victims.b], i)
-end
-collectgarbage()
-
-do --- Do not forget to advance freenode in the not-string case
- t = table_new(0, 4)
- -- Chain of colliding numbers
- t[0x0p-1074] = true
- t[0x4p-1074] = true
- t[0x8p-1074] = true
- -- Steal middle node of the chain to be a main node (infinite walking loop)
- t[0x2p-1074] = true
-end
-collectgarbage()
-
---- Restore interpreter invariants, just in case
-for c, v in pairs(victims) do
- str_hash(v)[0] = orig_hash[c]
-end
-
-test:ok("PASS")
diff --git a/test/luajit-tap/unsink_64_kptr.test.lua b/test/luajit-tap/unsink_64_kptr.test.lua
deleted file mode 100755
index 89957637b..000000000
--- a/test/luajit-tap/unsink_64_kptr.test.lua
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/env tarantool
-
-tap = require('tap')
-
-test = tap.test("232")
-test:plan(1)
-
---- From: Thibault Charbonnier <thibaultcha at me.com>
---- tests: ffi: added a test case unsinking a 64-bit pointer from a constant.
----
---- This test case reproduces the issue observed at:
---- https://github.com/openresty/lua-resty-core/issues/232 and was
---- contributed by @lukego and myself.
----
---- Co-authored-by: Luke Gorrie <lukego at gmail.com>
----
-local ffi = require("ffi")
-
-local array = ffi.new("struct { int x; } [1]")
-
--- This test forces the VM to unsink a pointer that was constructed
--- from a constant. The IR will include a 'cnewi' instruction to
--- allocate an FFI pointer object, the pointer value will be an IR
--- constant, the allocation will be sunk, and the allocation will
--- at some point be "unsunk" due to a reference in the snapshot for
--- a taken exit.
-
--- Note: JIT will recognize <array> as a "singleton" and allow its
--- address to be inlined ("constified") instead of looking up the
--- upvalue at runtime.
-
-local function fn(i)
- local struct = array[0] -- Load pointer that the JIT will constify.
- if i == 1000 then end -- Force trace exit when i==1000.
- struct.x = 0 -- Ensure that 'struct' is live after exit.
-end
-
--- Loop over the function to make it compile and take a trace exit
--- during the final iteration.
-for i = 1, 1000 do
- fn(i)
-end
-
-test:ok("PASS")
--
2.22.1
More information about the Tarantool-patches
mailing list