@@ -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)
@@ -53,7 +69,7 @@ endif()
5369ExternalProject_Add(${LUA_TESTS_TARGET_NAME}
5470 PREFIX ${LUA_TESTS_TARGET_NAME}
5571 GIT_REPOSITORY https://github.com/ligurio/lua-c-api-tests.git
56- GIT_TAG ${GIT_REF}
72+ GIT_TAG ligurio/gh-xxxx-lapi-bitop
5773 SOURCE_DIR ${LUA_TESTS_PREFIX} /src
5874 BINARY_DIR ${LUA_TESTS_PREFIX} /build
5975 TMP_DIR ${LUA_TESTS_PREFIX} /tmp
@@ -64,10 +80,10 @@ ExternalProject_Add(${LUA_TESTS_TARGET_NAME}
6480 -B <BINARY_DIR>
6581 -G ${CMAKE_GENERATOR}
6682 "${LUA_TESTS_CMAKE_FLAGS} "
67- BUILD_COMMAND cd <BINARY_DIR> && ${CMAKE_MAKE_PROGRAM} "${LUA_TESTS } "
83+ BUILD_COMMAND cd <BINARY_DIR> && ${CMAKE_MAKE_PROGRAM} "${CAPI_TESTS } "
6884 INSTALL_COMMAND ""
6985 CMAKE_GENERATOR ${CMAKE_GENERATOR}
70- BUILD_BYPRODUCTS "${LUA_TESTS } "
86+ BUILD_BYPRODUCTS "${CAPI_TESTS } "
7187 DOWNLOAD_EXTRACT_TIMESTAMP TRUE
7288)
7389
@@ -81,7 +97,7 @@ add_dependencies(${LUA_TESTS_TARGET_NAME} libluajit_static)
8197# environment variable `RUNS`.
8298#
8399# 1. https://github.com/ligurio/lua-c-api-tests/blob/ef74f0558bb913edef85e7a774fada4ecc82247b/tests/capi/CMakeLists.txt#L46-L58
84- foreach (test ${LUA_TESTS } )
100+ foreach (test ${CAPI_TESTS } )
85101 set (test_title test /fuzz/${test} )
86102 add_test (NAME ${test_title}
87103 COMMAND ${CMAKE_CTEST_COMMAND}
@@ -96,8 +112,67 @@ foreach(test ${LUA_TESTS})
96112 )
97113endforeach ()
98114
115+ set (DEFAULT_RUNS_NUMBER 5)
116+
117+ string (JOIN " " LIBFUZZER_OPTS
118+ -print_final_stats=1
119+ -print_pcs=1
120+ -reduce_inputs=1
121+ -reload=1
122+ -report_slow_units=5
123+ # Shell parameter expansion,
124+ # https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
125+ -runs=\${RUNS:-${DEFAULT_RUNS_NUMBER} }
126+ )
127+
128+ make_lua_path(LUA_CPATH
129+ PATHS
130+ ${PROJECT_BINARY_DIR} /luzer/build /luzer/?.so
131+ )
132+
133+ make_lua_path(LUA_PATH
134+ PATHS
135+ ${PROJECT_BINARY_DIR} /luzer/?/init.lua
136+ ${CMAKE_CURRENT_SOURCE_DIR} /?.lua
137+ )
138+
139+ function (create_lapi_test)
140+ cmake_parse_arguments (
141+ FUZZ
142+ ""
143+ "FILENAME"
144+ ""
145+ ${ARGN}
146+ )
147+ get_filename_component (test_name ${FUZZ_FILENAME} NAME_WE )
148+ string (REPLACE "_test" "" test_prefix ${test_name} )
149+ set (dict_path ${PROJECT_SOURCE_DIR} /corpus/${test_prefix} .dict)
150+ set (corpus_path ${PROJECT_SOURCE_DIR} /corpus/${test_prefix} )
151+ if (EXISTS ${dict_path} )
152+ set (LIBFUZZER_OPTS "${LIBFUZZER_OPTS} -dict=${dict_path} " )
153+ endif ()
154+ if (EXISTS ${corpus_path} )
155+ set (LIBFUZZER_OPTS "${LIBFUZZER_OPTS} ${corpus_path} " )
156+ endif ()
157+
158+ add_test (NAME ${test_name}
159+ COMMAND ${BASH} -c "${LUAJIT_TEST_BINARY} ${FUZZ_FILENAME} ${LIBFUZZER_OPTS} "
160+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
161+ )
162+ set_tests_properties (${test_name} PROPERTIES
163+ LABELS "lapi"
164+ ENVIRONMENT "LUA_PATH=${LUA_PATH} ;LUA_CPATH=${LUA_CPATH} ;ASAN_OPTIONS=detect_odr_violation=0"
165+ DEPENDS ${LUAJIT_TEST_BINARY}
166+ )
167+ endfunction ()
168+
169+ foreach (filename ${LAPI_TESTS} )
170+ create_lapi_test(FILENAME ${LUA_TESTS_PREFIX} /src/tests/lapi/${filename} .lua)
171+ endforeach ()
172+
99173unset (GIT_REF)
100- unset (LUA_TESTS)
174+ unset (CAPI_TESTS)
175+ unset (LAPI_TESTS)
101176unset (LUA_TESTS_CMAKE_FLAGS)
102177unset (LUA_TESTS_PREFIX)
103178unset (LUA_TESTS_TARGET_NAME)
0 commit comments