@@ -7,7 +7,7 @@ set(LUA_TESTS_PREFIX
77# The test `luaL_loadbuffer_proto_test` is not enabled, because
88# it is quite similar to `luaL_loadbuffer_fuzzer` located in
99# test/fuzz/luaL_loadbuffer/.
10- string (JOIN ";" LUA_TESTS
10+ string (JOIN ";" CAPI_TESTS
1111 ffi_cdef_proto_test
1212 lua_dump_test
1313 luaL_gsub_test
@@ -17,6 +17,21 @@ string(JOIN ";" LUA_TESTS
1717 torture_test
1818)
1919
20+ string (JOIN ";" LAPI_TESTS
21+ bitop_arshift_test
22+ bitop_band_test
23+ bitop_bnot_test
24+ bitop_bor_test
25+ bitop_bswap_test
26+ bitop_bxor_test
27+ bitop_lshift_test
28+ bitop_rol_test
29+ bitop_ror_test
30+ bitop_rshift_test
31+ bitop_tobit_test
32+ bitop_tohex_test
33+ )
34+
2035list (APPEND LUA_TESTS_CMAKE_FLAGS
2136 "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} "
2237 "-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} "
@@ -31,6 +46,7 @@ list(APPEND LUA_TESTS_CMAKE_FLAGS
3146 "-DLUA_LIBRARIES=${LUAJIT_LIBRARIES} "
3247 "-DLUA_EXECUTABLE=${LUAJIT_TEST_BINARY} "
3348 "-DLUA_VERSION_STRING=\" tarantool\" "
49+ "-DENABLE_LAPI_TESTS=ON"
3450)
3551
3652if (ENABLE_ASAN)
@@ -43,7 +59,9 @@ endif()
4359
4460include (ExternalProject)
4561
46- set (GIT_REF "68e62715310f197f489f03a33dce501c0a2e4450" )
62+ # FIXME: Update Git reference after merging
63+ # https://github.com/ligurio/lua-c-api-tests/pull/121.
64+ set (GIT_REF "ligurio/gh-xxxx-lapi-bitop" )
4765# Git reference can be overridden with environment variable. It is
4866# needed for checking build by project itself.
4967if (DEFINED ENV{LUA_TESTS_GIT_REF})
@@ -64,10 +82,10 @@ ExternalProject_Add(${LUA_TESTS_TARGET_NAME}
6482 -B <BINARY_DIR>
6583 -G ${CMAKE_GENERATOR}
6684 "${LUA_TESTS_CMAKE_FLAGS} "
67- BUILD_COMMAND cd <BINARY_DIR> && ${CMAKE_MAKE_PROGRAM} "${LUA_TESTS } "
85+ BUILD_COMMAND cd <BINARY_DIR> && ${CMAKE_MAKE_PROGRAM} "${CAPI_TESTS } "
6886 INSTALL_COMMAND ""
6987 CMAKE_GENERATOR ${CMAKE_GENERATOR}
70- BUILD_BYPRODUCTS "${LUA_TESTS } "
88+ BUILD_BYPRODUCTS "${CAPI_TESTS } "
7189 DOWNLOAD_EXTRACT_TIMESTAMP TRUE
7290)
7391
@@ -81,7 +99,7 @@ add_dependencies(${LUA_TESTS_TARGET_NAME} libluajit_static)
8199# environment variable `RUNS`.
82100#
83101# 1. https://github.com/ligurio/lua-c-api-tests/blob/ef74f0558bb913edef85e7a774fada4ecc82247b/tests/capi/CMakeLists.txt#L46-L58
84- foreach (test ${LUA_TESTS } )
102+ foreach (test ${CAPI_TESTS } )
85103 set (test_title test /fuzz/${test} )
86104 add_test (NAME ${test_title}
87105 COMMAND ${CMAKE_CTEST_COMMAND}
@@ -96,8 +114,67 @@ foreach(test ${LUA_TESTS})
96114 )
97115endforeach ()
98116
117+ set (DEFAULT_RUNS_NUMBER 5)
118+
119+ string (JOIN " " LIBFUZZER_OPTS
120+ -print_final_stats=1
121+ -print_pcs=1
122+ -reduce_inputs=1
123+ -reload=1
124+ -report_slow_units=5
125+ # Shell parameter expansion,
126+ # https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
127+ -runs=\${RUNS:-${DEFAULT_RUNS_NUMBER} }
128+ )
129+
130+ make_lua_path(LUA_CPATH
131+ PATHS
132+ ${PROJECT_BINARY_DIR} /luzer/build /luzer/?.so
133+ )
134+
135+ make_lua_path(LUA_PATH
136+ PATHS
137+ ${PROJECT_BINARY_DIR} /luzer/?/init.lua
138+ ${CMAKE_CURRENT_SOURCE_DIR} /?.lua
139+ )
140+
141+ function (create_lapi_test)
142+ cmake_parse_arguments (
143+ FUZZ
144+ ""
145+ "FILENAME"
146+ ""
147+ ${ARGN}
148+ )
149+ get_filename_component (test_name ${FUZZ_FILENAME} NAME_WE )
150+ string (REPLACE "_test" "" test_prefix ${test_name} )
151+ set (dict_path ${PROJECT_SOURCE_DIR} /corpus/${test_prefix} .dict)
152+ set (corpus_path ${PROJECT_SOURCE_DIR} /corpus/${test_prefix} )
153+ if (EXISTS ${dict_path} )
154+ set (LIBFUZZER_OPTS "${LIBFUZZER_OPTS} -dict=${dict_path} " )
155+ endif ()
156+ if (EXISTS ${corpus_path} )
157+ set (LIBFUZZER_OPTS "${LIBFUZZER_OPTS} ${corpus_path} " )
158+ endif ()
159+
160+ add_test (NAME ${test_name}
161+ COMMAND ${BASH} -c "${LUAJIT_TEST_BINARY} ${FUZZ_FILENAME} ${LIBFUZZER_OPTS} "
162+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
163+ )
164+ set_tests_properties (${test_name} PROPERTIES
165+ LABELS "lapi"
166+ ENVIRONMENT "LUA_PATH=${LUA_PATH} ;LUA_CPATH=${LUA_CPATH} ;ASAN_OPTIONS=detect_odr_violation=0"
167+ DEPENDS ${LUAJIT_TEST_BINARY}
168+ )
169+ endfunction ()
170+
171+ foreach (filename ${LAPI_TESTS} )
172+ create_lapi_test(FILENAME ${LUA_TESTS_PREFIX} /src/tests/lapi/${filename} .lua)
173+ endforeach ()
174+
99175unset (GIT_REF)
100- unset (LUA_TESTS)
176+ unset (CAPI_TESTS)
177+ unset (LAPI_TESTS)
101178unset (LUA_TESTS_CMAKE_FLAGS)
102179unset (LUA_TESTS_PREFIX)
103180unset (LUA_TESTS_TARGET_NAME)
0 commit comments