@@ -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
@@ -43,7 +43,7 @@ endif()
4343
4444include (ExternalProject)
4545
46- set (GIT_REF "68e62715310f197f489f03a33dce501c0a2e4450 " )
46+ set (GIT_REF "51d08cf572256c9fbec8a23a551a05a901917518 " )
4747# Git reference can be overridden with environment variable. It is
4848# needed for checking build by project itself.
4949if (DEFINED ENV{LUA_TESTS_GIT_REF})
@@ -64,10 +64,10 @@ ExternalProject_Add(${LUA_TESTS_TARGET_NAME}
6464 -B <BINARY_DIR>
6565 -G ${CMAKE_GENERATOR}
6666 "${LUA_TESTS_CMAKE_FLAGS} "
67- BUILD_COMMAND cd <BINARY_DIR> && ${CMAKE_MAKE_PROGRAM} "${LUA_TESTS } "
67+ BUILD_COMMAND cd <BINARY_DIR> && ${CMAKE_MAKE_PROGRAM} "${CAPI_TESTS } "
6868 INSTALL_COMMAND ""
6969 CMAKE_GENERATOR ${CMAKE_GENERATOR}
70- BUILD_BYPRODUCTS "${LUA_TESTS } "
70+ BUILD_BYPRODUCTS "${CAPI_TESTS } "
7171 DOWNLOAD_EXTRACT_TIMESTAMP TRUE
7272)
7373
@@ -81,7 +81,7 @@ add_dependencies(${LUA_TESTS_TARGET_NAME} libluajit_static)
8181# environment variable `RUNS`.
8282#
8383# 1. https://github.com/ligurio/lua-c-api-tests/blob/ef74f0558bb913edef85e7a774fada4ecc82247b/tests/capi/CMakeLists.txt#L46-L58
84- foreach (test ${LUA_TESTS } )
84+ foreach (test ${CAPI_TESTS } )
8585 set (test_title test /fuzz/${test} )
8686 add_test (NAME ${test_title}
8787 COMMAND ${CMAKE_CTEST_COMMAND}
@@ -96,8 +96,171 @@ foreach(test ${LUA_TESTS})
9696 )
9797endforeach ()
9898
99+ set (DEFAULT_RUNS_NUMBER 5)
100+
101+ string (JOIN " " LIBFUZZER_OPTS
102+ -print_final_stats=1
103+ -print_pcs=1
104+ -reduce_inputs=1
105+ -reload=1
106+ -report_slow_units=5
107+ # Shell parameter expansion,
108+ # https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
109+ -runs=\${RUNS:-${DEFAULT_RUNS_NUMBER} }
110+ )
111+
112+ make_lua_path(LUA_PATH
113+ PATHS
114+ ${LUZER_LUA_PATH}
115+ ${CMAKE_CURRENT_SOURCE_DIR} /?.lua
116+ )
117+
118+ include (BuildLuzer)
119+
120+ list (APPEND LAPI_TEST_ENV
121+ "LUA_PATH=${LUA_PATH} ;"
122+ "LUA_CPATH=${LUZER_LUA_CPATH} ;"
123+ "ASAN_OPTIONS=detect_odr_violation=0;"
124+ "LD_DYNAMIC_WEAK=1"
125+ )
126+
127+ string (JOIN ";" LAPI_TESTS
128+ bitop_arshift_test.lua
129+ bitop_band_test.lua
130+ bitop_bnot_test.lua
131+ bitop_bor_test.lua
132+ bitop_bswap_test.lua
133+ bitop_bxor_test.lua
134+ bitop_lshift_test.lua
135+ bitop_rol_test.lua
136+ bitop_ror_test.lua
137+ bitop_rshift_test.lua
138+ bitop_tobit_test.lua
139+ bitop_tohex_test.lua
140+ builtin_assert_test.lua
141+ builtin_collectgarbage_test.lua
142+ builtin_concat_test.lua
143+ builtin_dofile_test.lua
144+ builtin_dostring_test.lua
145+ builtin_error_test.lua
146+ builtin_getfenv_test.lua
147+ builtin_getmetatable_test.lua
148+ builtin_ipairs_test.lua
149+ builtin_length_test.lua
150+ builtin_loadfile_test.lua
151+ builtin_loadstring_test.lua
152+ builtin_load_test.lua
153+ builtin_next_test.lua
154+ builtin_pairs_test.lua
155+ builtin_rawequal_test.lua
156+ builtin_rawget_test.lua
157+ builtin_rawset_test.lua
158+ builtin_select_test.lua
159+ builtin_setmetatable_test.lua
160+ builtin_tonumber_test.lua
161+ builtin_tostring_test.lua
162+ builtin_unpack_test.lua
163+ coroutine_torture_test.lua
164+ debug_torture_test.lua
165+ math_abs_test.lua
166+ math_acos_test.lua
167+ math_asin_test.lua
168+ math_atan_test.lua
169+ math_ceil_test.lua
170+ math_cos_test.lua
171+ math_deg_test.lua
172+ math_exp_test.lua
173+ math_floor_test.lua
174+ math_fmod_test.lua
175+ math_log_test.lua
176+ math_modf_test.lua
177+ math_pow_test.lua
178+ math_rad_test.lua
179+ math_randomseed_test.lua
180+ math_sin_test.lua
181+ math_sqrt_test.lua
182+ math_tan_test.lua
183+ math_tointeger_test.lua
184+ math_ult_test.lua
185+ os_date_test.lua
186+ os_difftime_test.lua
187+ os_getenv_test.lua
188+ os_setlocale_test.lua
189+ os_time_test.lua
190+ package_require_test.lua
191+ string_byte_test.lua
192+ string_char_test.lua
193+ string_dump_test.lua
194+ string_find_test.lua
195+ string_format_test.lua
196+ string_gmatch_test.lua
197+ string_gsub_test.lua
198+ string_len_test.lua
199+ string_lower_test.lua
200+ string_match_test.lua
201+ string_packsize_test.lua
202+ string_pack_test.lua
203+ string_rep_test.lua
204+ string_reverse_test.lua
205+ string_sub_test.lua
206+ string_unpack_test.lua
207+ string_upper_test.lua
208+ table_concat_test.lua
209+ table_create_test.lua
210+ table_foreachi_test.lua
211+ table_foreach_test.lua
212+ table_insert_test.lua
213+ table_maxn_test.lua
214+ table_move_test.lua
215+ table_pack_test.lua
216+ table_remove_test.lua
217+ table_sort_test.lua
218+ utf8_char_test.lua
219+ utf8_codepoint_test.lua
220+ utf8_codes_test.lua
221+ utf8_len_test.lua
222+ utf8_offset_test.lua
223+ )
224+
225+ function (create_lapi_test)
226+ cmake_parse_arguments (
227+ FUZZ
228+ ""
229+ "FILENAME"
230+ ""
231+ ${ARGN}
232+ )
233+ get_filename_component (test_name ${FUZZ_FILENAME} NAME_WE )
234+ string (REPLACE "_test" "" test_prefix ${test_name} )
235+ set (dict_path ${PROJECT_SOURCE_DIR} /corpus/${test_prefix} .dict)
236+ set (corpus_path ${PROJECT_SOURCE_DIR} /corpus/${test_prefix} )
237+ if (EXISTS ${dict_path} )
238+ set (LIBFUZZER_OPTS "${LIBFUZZER_OPTS} -dict=${dict_path} " )
239+ endif ()
240+ if (EXISTS ${corpus_path} )
241+ set (LIBFUZZER_OPTS "${LIBFUZZER_OPTS} ${corpus_path} " )
242+ endif ()
243+
244+ add_test (NAME ${test_name}
245+ COMMAND ${BASH} -c "${LUAJIT_TEST_BINARY} ${FUZZ_FILENAME} ${LIBFUZZER_OPTS} "
246+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
247+ )
248+ set_tests_properties (${test_name} PROPERTIES
249+ LABELS "lapi"
250+ ENVIRONMENT "${LAPI_TEST_ENV} "
251+ DEPENDS ${LUAJIT_TEST_BINARY}
252+ )
253+ endfunction ()
254+
255+ foreach (test_name ${LAPI_TESTS} )
256+ create_lapi_test(FILENAME ${LUA_TESTS_PREFIX} /src/tests/lapi/${test_name} )
257+ endforeach ()
258+
259+ add_dependencies (lua-tests luzer-library)
260+
99261unset (GIT_REF)
100- unset (LUA_TESTS)
262+ unset (CAPI_TESTS)
263+ unset (LAPI_TESTS)
101264unset (LUA_TESTS_CMAKE_FLAGS)
102265unset (LUA_TESTS_PREFIX)
103266unset (LUA_TESTS_TARGET_NAME)
0 commit comments