2020-01-04 14:21:38 +00:00
|
|
|
test_sources = [
|
2022-01-06 11:26:01 +00:00
|
|
|
'at_path.cpp',
|
2020-07-05 15:08:28 +00:00
|
|
|
'conformance_burntsushi_invalid.cpp',
|
|
|
|
'conformance_burntsushi_valid.cpp',
|
|
|
|
'conformance_iarna_invalid.cpp',
|
|
|
|
'conformance_iarna_valid.cpp',
|
2021-10-29 20:59:53 +00:00
|
|
|
'formatters.cpp',
|
2022-04-24 17:21:59 +00:00
|
|
|
'for_each.cpp',
|
2020-04-02 21:39:21 +00:00
|
|
|
'impl_toml.cpp',
|
2022-04-24 17:21:59 +00:00
|
|
|
'main.cpp',
|
|
|
|
'manipulating_arrays.cpp',
|
|
|
|
'manipulating_parse_result.cpp',
|
|
|
|
'manipulating_tables.cpp',
|
|
|
|
'manipulating_values.cpp',
|
2020-01-04 14:21:38 +00:00
|
|
|
'parsing_arrays.cpp',
|
|
|
|
'parsing_booleans.cpp',
|
|
|
|
'parsing_comments.cpp',
|
|
|
|
'parsing_dates_and_times.cpp',
|
2022-04-24 17:21:59 +00:00
|
|
|
'parsing_floats.cpp',
|
2020-01-04 14:21:38 +00:00
|
|
|
'parsing_integers.cpp',
|
|
|
|
'parsing_key_value_pairs.cpp',
|
|
|
|
'parsing_spec_example.cpp',
|
|
|
|
'parsing_strings.cpp',
|
2020-02-03 09:12:43 +00:00
|
|
|
'parsing_tables.cpp',
|
2022-04-24 17:21:59 +00:00
|
|
|
'tests.cpp',
|
2020-07-27 22:04:52 +00:00
|
|
|
'user_feedback.cpp',
|
2020-12-18 16:08:15 +00:00
|
|
|
'using_iterators.cpp',
|
2022-04-24 17:21:59 +00:00
|
|
|
'visit.cpp',
|
2020-07-13 18:18:04 +00:00
|
|
|
'windows_compat.cpp'
|
2020-01-04 14:21:38 +00:00
|
|
|
]
|
|
|
|
|
2022-05-01 12:09:09 +00:00
|
|
|
test_deps = [ tomlplusplus_dep ]
|
|
|
|
if not get_option('use_vendored_libs')
|
|
|
|
test_deps += dependency('catch2')
|
|
|
|
endif
|
2022-02-14 17:41:52 +00:00
|
|
|
|
2020-08-08 17:51:33 +00:00
|
|
|
#######################################################################################################################
|
|
|
|
# fast math check
|
|
|
|
#######################################################################################################################
|
|
|
|
|
|
|
|
compiler_supports_fast_math_args = []
|
|
|
|
if compiler.get_id() == 'gcc' or compiler.get_id() == 'clang'
|
|
|
|
compiler_supports_fast_math_args += '-ffast-math'
|
|
|
|
compiler_supports_fast_math_args += '-ffp-contract=fast'
|
|
|
|
elif compiler.get_id() == 'msvc' or compiler.get_id() == 'intel-cl'
|
|
|
|
compiler_supports_fast_math_args += '/fp:fast'
|
|
|
|
endif
|
2020-07-17 13:33:56 +00:00
|
|
|
compiler_supports_fast_math = compiler.links('''
|
|
|
|
#include <cmath>
|
|
|
|
#include <iostream>
|
|
|
|
int main()
|
|
|
|
{
|
2020-08-11 13:34:03 +00:00
|
|
|
std::cout << std::exp2(2.0) << std::pow(2.0, 3.0) << "\n";
|
2020-07-17 13:33:56 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
''',
|
2021-09-22 06:47:15 +00:00
|
|
|
name: 'supports fast-math',
|
|
|
|
args: compiler_supports_fast_math_args
|
2020-07-17 13:33:56 +00:00
|
|
|
)
|
2020-06-24 18:05:23 +00:00
|
|
|
|
2020-08-08 17:51:33 +00:00
|
|
|
#######################################################################################################################
|
|
|
|
# do the thing!
|
|
|
|
#######################################################################################################################
|
|
|
|
|
2020-07-17 13:33:56 +00:00
|
|
|
fast_math_modes = [ false, true ]
|
|
|
|
exception_modes = [ true, false ]
|
2020-07-21 13:11:32 +00:00
|
|
|
unreleased_feature_modes = [ false, true ]
|
2020-07-17 13:33:56 +00:00
|
|
|
cpp20_modes = [ false, true ]
|
2020-09-05 10:26:12 +00:00
|
|
|
test_executables = []
|
2022-04-18 09:27:54 +00:00
|
|
|
test_counter = 0
|
2022-02-12 13:25:20 +00:00
|
|
|
test_base_args = []
|
|
|
|
test_base_args += universal_args
|
|
|
|
test_base_args += devel_args
|
2020-07-25 17:37:30 +00:00
|
|
|
|
2022-04-22 19:42:49 +00:00
|
|
|
# there are a number of skips here for builds that choose to precompile the library for their tests;
|
|
|
|
# that's 'fine', it just means that the tests for the compiled library only test settings exactly compatible with
|
|
|
|
# the way the library itself was compiled (otherwise we risk ABI errors, link errors, etc.)
|
|
|
|
#
|
|
|
|
# regular header-only mode tests all the things like normal.
|
|
|
|
|
2020-07-17 13:33:56 +00:00
|
|
|
foreach cpp20 : cpp20_modes
|
2022-04-22 19:42:49 +00:00
|
|
|
|
|
|
|
# skip this target if we're testing c++20 mode and precompiling the library
|
2022-02-12 13:25:20 +00:00
|
|
|
if cpp20 and (not compiler_supports_cpp20 or get_option('compile_library'))
|
2020-07-21 13:11:32 +00:00
|
|
|
continue
|
|
|
|
endif
|
2022-04-22 19:42:49 +00:00
|
|
|
|
2020-07-21 13:11:32 +00:00
|
|
|
foreach unrel : unreleased_feature_modes
|
2022-04-22 19:42:49 +00:00
|
|
|
|
|
|
|
# skip this target if it's using 'unreleased features' and precompiling the library
|
2022-02-12 13:25:20 +00:00
|
|
|
if unrel and get_option('compile_library')
|
|
|
|
continue
|
|
|
|
endif
|
2022-04-22 19:42:49 +00:00
|
|
|
|
2020-07-18 12:10:19 +00:00
|
|
|
foreach fast_math : fast_math_modes
|
2022-04-22 19:42:49 +00:00
|
|
|
|
|
|
|
# skip this target if it's testing fast math and the compiler doesn't support a known fast-math mode
|
|
|
|
# (or if we're precompiling the library)
|
2022-02-12 13:25:20 +00:00
|
|
|
if fast_math and (not compiler_supports_fast_math or get_option('compile_library'))
|
2020-07-17 13:33:56 +00:00
|
|
|
continue
|
|
|
|
endif
|
2022-04-22 19:42:49 +00:00
|
|
|
|
2020-07-18 12:10:19 +00:00
|
|
|
foreach exceptions : exception_modes
|
2022-04-18 09:27:54 +00:00
|
|
|
|
2022-04-22 19:42:49 +00:00
|
|
|
# skip this target if exceptions are disabled and precompiling the library;
|
2022-04-18 09:27:54 +00:00
|
|
|
if not exceptions and get_option('compile_library')
|
|
|
|
continue
|
|
|
|
endif
|
|
|
|
|
2022-04-22 19:42:49 +00:00
|
|
|
# skip this target if we've disabled exceptions and enabled fast math;
|
|
|
|
# both are already tested separately and don't interact in any way meaningful enough to warrant
|
|
|
|
# a combined permutation.
|
2022-04-18 09:27:54 +00:00
|
|
|
if not exceptions and fast_math
|
|
|
|
continue
|
|
|
|
endif
|
|
|
|
|
|
|
|
# ... same for 'unreleased features' and fast math
|
|
|
|
if unrel and fast_math
|
2022-02-12 13:25:20 +00:00
|
|
|
continue
|
|
|
|
endif
|
2022-04-18 09:27:54 +00:00
|
|
|
|
2020-09-05 10:26:12 +00:00
|
|
|
test_name = ''
|
|
|
|
test_overrides = []
|
|
|
|
test_overrides += overrides
|
|
|
|
test_args = []
|
2022-02-12 13:25:20 +00:00
|
|
|
test_args += test_base_args
|
2020-09-05 10:26:12 +00:00
|
|
|
|
2022-04-18 09:27:54 +00:00
|
|
|
# use the single-header version for some tests to ensure it is the same (no header generation failures)
|
2022-04-22 19:42:49 +00:00
|
|
|
single_header = (
|
|
|
|
test_counter % 2 == 0
|
|
|
|
and not get_option('compile_library')
|
|
|
|
)
|
2022-04-18 09:27:54 +00:00
|
|
|
|
|
|
|
# use asan in the tests
|
2022-04-22 19:42:49 +00:00
|
|
|
address_sanitizer = (
|
|
|
|
get_option('asan_tests')
|
|
|
|
and is_clang
|
|
|
|
)
|
2022-04-18 09:27:54 +00:00
|
|
|
|
|
|
|
# use ubsan in the tests
|
2022-04-22 19:42:49 +00:00
|
|
|
ub_sanitizer = (
|
|
|
|
get_option('ubsan_tests')
|
|
|
|
and is_clang
|
|
|
|
)
|
2021-11-25 18:20:22 +00:00
|
|
|
|
2020-09-05 10:26:12 +00:00
|
|
|
if cpp20
|
|
|
|
test_name = 'cpp20'
|
|
|
|
test_overrides += 'cpp_std=none'
|
|
|
|
test_args += compiler_supports_cpp20_args
|
|
|
|
if compiler_supports_char8
|
|
|
|
test_args += compiler_supports_char8_args
|
2020-07-18 12:10:19 +00:00
|
|
|
endif
|
2020-09-05 10:26:12 +00:00
|
|
|
else
|
|
|
|
test_name = 'cpp17'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if exceptions
|
|
|
|
test_overrides += 'cpp_eh=default'
|
|
|
|
test_args += '-DSHOULD_HAVE_EXCEPTIONS=1'
|
|
|
|
if is_windows
|
|
|
|
test_args += '-D_HAS_EXCEPTIONS=1'
|
2020-07-18 12:10:19 +00:00
|
|
|
endif
|
2020-09-05 10:26:12 +00:00
|
|
|
else
|
|
|
|
test_name = test_name + '_noexcept'
|
|
|
|
test_overrides += 'cpp_eh=none'
|
|
|
|
test_args += '-DSHOULD_HAVE_EXCEPTIONS=0'
|
|
|
|
if is_windows
|
|
|
|
test_args += '-D_HAS_EXCEPTIONS=0'
|
2020-07-18 12:10:19 +00:00
|
|
|
endif
|
2020-09-05 10:26:12 +00:00
|
|
|
endif
|
2020-07-18 12:10:19 +00:00
|
|
|
|
2022-02-26 12:42:09 +00:00
|
|
|
if address_sanitizer or ub_sanitizer
|
2021-11-25 18:20:22 +00:00
|
|
|
test_args += [ '-g3' ]
|
2022-02-26 12:42:09 +00:00
|
|
|
if address_sanitizer and ub_sanitizer
|
|
|
|
test_overrides += 'b_sanitize=address,undefined'
|
|
|
|
elif address_sanitizer
|
|
|
|
test_overrides += 'b_sanitize=address'
|
|
|
|
else
|
|
|
|
test_overrides += 'b_sanitize=undefined'
|
|
|
|
endif
|
2021-11-25 18:20:22 +00:00
|
|
|
endif
|
|
|
|
|
2020-09-05 10:26:12 +00:00
|
|
|
if fast_math
|
|
|
|
test_name = test_name + '_fastmath'
|
|
|
|
test_args += compiler_supports_fast_math_args
|
|
|
|
endif
|
2020-07-25 17:37:30 +00:00
|
|
|
|
2020-09-05 10:26:12 +00:00
|
|
|
if compiler_supports_float16 or compiler_supports_fp16
|
|
|
|
if compiler_supports_fp16
|
|
|
|
test_args += '-DSHOULD_HAVE_FP16=1'
|
2020-07-25 17:37:30 +00:00
|
|
|
endif
|
2020-09-05 10:26:12 +00:00
|
|
|
if compiler_supports_float16
|
|
|
|
test_args += '-DSHOULD_HAVE_FLOAT16=1'
|
2020-07-25 17:37:30 +00:00
|
|
|
endif
|
2020-09-05 10:26:12 +00:00
|
|
|
endif
|
|
|
|
if compiler_supports_int128
|
|
|
|
test_args += '-DSHOULD_HAVE_INT128=1'
|
|
|
|
endif
|
|
|
|
if compiler_supports_float128
|
|
|
|
test_args += '-DSHOULD_HAVE_FLOAT128=1'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if unrel
|
|
|
|
test_name = test_name + '_unrel'
|
2021-10-30 14:26:05 +00:00
|
|
|
test_args += '-DTOML_ENABLE_UNRELEASED_FEATURES=1'
|
2020-09-05 10:26:12 +00:00
|
|
|
else
|
2021-10-30 14:26:05 +00:00
|
|
|
test_args += '-DTOML_ENABLE_UNRELEASED_FEATURES=0'
|
2020-09-05 10:26:12 +00:00
|
|
|
endif
|
|
|
|
|
2021-11-25 18:20:22 +00:00
|
|
|
if single_header
|
2020-09-05 10:26:12 +00:00
|
|
|
test_args += '-DUSE_SINGLE_HEADER=1'
|
|
|
|
endif
|
2022-04-18 09:27:54 +00:00
|
|
|
|
2022-05-01 12:09:09 +00:00
|
|
|
if not get_option('use_vendored_libs')
|
|
|
|
test_args += '-DUSE_VENDORED_LIBS=0'
|
|
|
|
endif
|
|
|
|
|
2020-09-05 10:26:12 +00:00
|
|
|
test_executables += [[
|
|
|
|
test_name,
|
|
|
|
executable(
|
|
|
|
test_name,
|
|
|
|
test_sources,
|
2021-09-22 06:47:15 +00:00
|
|
|
cpp_args: test_args,
|
2022-02-14 17:41:52 +00:00
|
|
|
dependencies: test_deps,
|
2021-09-22 06:47:15 +00:00
|
|
|
override_options: test_overrides
|
2020-09-05 10:26:12 +00:00
|
|
|
)
|
|
|
|
]]
|
|
|
|
|
2022-04-18 09:27:54 +00:00
|
|
|
test_counter = test_counter + 1
|
2020-07-17 13:33:56 +00:00
|
|
|
|
2020-07-18 12:10:19 +00:00
|
|
|
endforeach # exceptions
|
|
|
|
endforeach # fast_math
|
2020-07-17 13:33:56 +00:00
|
|
|
endforeach # strict
|
|
|
|
endforeach # cpp20
|
2020-04-06 12:57:49 +00:00
|
|
|
|
2022-01-13 10:09:07 +00:00
|
|
|
test_locales = [
|
2020-04-06 12:57:49 +00:00
|
|
|
'C',
|
|
|
|
'en_US.utf8',
|
|
|
|
'ja_JP.utf8',
|
|
|
|
'it_IT.utf8',
|
|
|
|
'tr_TR.utf8',
|
|
|
|
'fi_FI.utf8',
|
|
|
|
'fr_FR.utf8',
|
|
|
|
'zh_CN.utf8',
|
|
|
|
'de_DE.utf8'
|
|
|
|
]
|
2020-03-03 21:28:24 +00:00
|
|
|
|
2020-09-05 10:26:12 +00:00
|
|
|
foreach executable : test_executables
|
2022-01-13 10:09:07 +00:00
|
|
|
foreach locale : test_locales
|
2020-08-01 18:15:09 +00:00
|
|
|
test(
|
2021-11-25 18:20:22 +00:00
|
|
|
executable[0] + ' (' + locale + ')', # name
|
|
|
|
executable[1], # executable object
|
2021-09-22 06:47:15 +00:00
|
|
|
env: ['LC_ALL=' + locale],
|
|
|
|
workdir: meson.source_root()/'tests'
|
2020-08-01 18:15:09 +00:00
|
|
|
)
|
2020-04-06 12:57:49 +00:00
|
|
|
endforeach
|
|
|
|
endforeach
|
2022-01-12 23:24:09 +00:00
|
|
|
|
|
|
|
|
|
|
|
# add the ODR-test build project
|
|
|
|
executable(
|
|
|
|
'odr_test',
|
|
|
|
[ 'odr_test_1.cpp', 'odr_test_2.cpp' ],
|
2022-02-12 13:25:20 +00:00
|
|
|
cpp_args: test_base_args,
|
2022-02-14 17:41:52 +00:00
|
|
|
dependencies: tomlplusplus_dep,
|
2022-01-13 10:09:07 +00:00
|
|
|
override_options: overrides
|
2022-01-12 23:24:09 +00:00
|
|
|
)
|