1*01826a49SYabin Cui# ############################################################################# 2*01826a49SYabin Cui# Copyright (c) 2018-present Dima Krasner <[email protected]> 3*01826a49SYabin Cui# lzutao <taolzu(at)gmail.com> 4*01826a49SYabin Cui# All rights reserved. 5*01826a49SYabin Cui# 6*01826a49SYabin Cui# This source code is licensed under both the BSD-style license (found in the 7*01826a49SYabin Cui# LICENSE file in the root directory of this source tree) and the GPLv2 (found 8*01826a49SYabin Cui# in the COPYING file in the root directory of this source tree). 9*01826a49SYabin Cui# ############################################################################# 10*01826a49SYabin Cui 11*01826a49SYabin Cuizstd_rootdir = '../../..' 12*01826a49SYabin Cui 13*01826a49SYabin Cuitests_supported_oses = [os_linux, 'gnu/kfreebsd', os_darwin, 'gnu', 'openbsd', 14*01826a49SYabin Cui os_freebsd, 'netbsd', 'dragonfly', os_sun] 15*01826a49SYabin Cui 16*01826a49SYabin Cui# ============================================================================= 17*01826a49SYabin Cui# Test flags 18*01826a49SYabin Cui# ============================================================================= 19*01826a49SYabin Cui 20*01826a49SYabin CuiFUZZER_FLAGS = ['--no-big-tests'] 21*01826a49SYabin CuiFUZZERTEST = '-T200s' 22*01826a49SYabin CuiZSTREAM_TESTTIME = '-T90s' 23*01826a49SYabin CuiDECODECORPUS_TESTTIME = '-T30' 24*01826a49SYabin Cui 25*01826a49SYabin Cui# ============================================================================= 26*01826a49SYabin Cui# Executables 27*01826a49SYabin Cui# ============================================================================= 28*01826a49SYabin Cui 29*01826a49SYabin Cuitest_includes = [ include_directories(join_paths(zstd_rootdir, 'programs')) ] 30*01826a49SYabin Cui 31*01826a49SYabin Cuitestcommon_sources = [join_paths(zstd_rootdir, 'programs/datagen.c'), 32*01826a49SYabin Cui join_paths(zstd_rootdir, 'programs/lorem.c'), 33*01826a49SYabin Cui join_paths(zstd_rootdir, 'programs/util.c'), 34*01826a49SYabin Cui join_paths(zstd_rootdir, 'programs/timefn.c'), 35*01826a49SYabin Cui join_paths(zstd_rootdir, 'programs/benchfn.c'), 36*01826a49SYabin Cui join_paths(zstd_rootdir, 'programs/benchzstd.c')] 37*01826a49SYabin Cui 38*01826a49SYabin Cuitestcommon = static_library('testcommon', 39*01826a49SYabin Cui testcommon_sources, 40*01826a49SYabin Cui # needed due to use of private symbol + -fvisibility=hidden 41*01826a49SYabin Cui link_with: libzstd_static) 42*01826a49SYabin Cui 43*01826a49SYabin Cuitestcommon_dep = declare_dependency(link_with: testcommon, 44*01826a49SYabin Cui dependencies: libzstd_deps, 45*01826a49SYabin Cui include_directories: libzstd_includes) 46*01826a49SYabin Cui 47*01826a49SYabin Cuidatagen_sources = [join_paths(zstd_rootdir, 'tests/datagencli.c'), 48*01826a49SYabin Cui join_paths(zstd_rootdir, 'tests/loremOut.c')] 49*01826a49SYabin Cuidatagen = executable('datagen', 50*01826a49SYabin Cui datagen_sources, 51*01826a49SYabin Cui c_args: [ '-DNDEBUG' ], 52*01826a49SYabin Cui include_directories: test_includes, 53*01826a49SYabin Cui dependencies: testcommon_dep, 54*01826a49SYabin Cui install: false) 55*01826a49SYabin Cui 56*01826a49SYabin Cuifullbench_sources = [join_paths(zstd_rootdir, 'tests/fullbench.c')] 57*01826a49SYabin Cuifullbench = executable('fullbench', 58*01826a49SYabin Cui fullbench_sources, 59*01826a49SYabin Cui include_directories: test_includes, 60*01826a49SYabin Cui dependencies: testcommon_dep, 61*01826a49SYabin Cui install: false) 62*01826a49SYabin Cui 63*01826a49SYabin Cuifuzzer_sources = [join_paths(zstd_rootdir, 'tests/fuzzer.c')] 64*01826a49SYabin Cuifuzzer = executable('fuzzer', 65*01826a49SYabin Cui fuzzer_sources, 66*01826a49SYabin Cui include_directories: test_includes, 67*01826a49SYabin Cui dependencies: [ testcommon_dep, thread_dep ], 68*01826a49SYabin Cui install: false) 69*01826a49SYabin Cui 70*01826a49SYabin Cuizstreamtest_sources = [ 71*01826a49SYabin Cui join_paths(zstd_rootdir, 'tests/seqgen.c'), 72*01826a49SYabin Cui join_paths(zstd_rootdir, 'tests/zstreamtest.c'), 73*01826a49SYabin Cui join_paths(zstd_rootdir, 'tests/external_matchfinder.c')] 74*01826a49SYabin Cuizstreamtest = executable('zstreamtest', 75*01826a49SYabin Cui zstreamtest_sources, 76*01826a49SYabin Cui include_directories: test_includes, 77*01826a49SYabin Cui dependencies: testcommon_dep, 78*01826a49SYabin Cui install: false) 79*01826a49SYabin Cui 80*01826a49SYabin Cuiparamgrill_sources = [join_paths(zstd_rootdir, 'tests/paramgrill.c')] 81*01826a49SYabin Cuiparamgrill = executable('paramgrill', 82*01826a49SYabin Cui paramgrill_sources, 83*01826a49SYabin Cui include_directories: test_includes, 84*01826a49SYabin Cui dependencies: [ testcommon_dep, libm_dep ], 85*01826a49SYabin Cui install: false) 86*01826a49SYabin Cui 87*01826a49SYabin CuiroundTripCrash_sources = [join_paths(zstd_rootdir, 'tests/roundTripCrash.c')] 88*01826a49SYabin CuiroundTripCrash = executable('roundTripCrash', 89*01826a49SYabin Cui roundTripCrash_sources, 90*01826a49SYabin Cui dependencies: [ testcommon_dep ], 91*01826a49SYabin Cui install: false) 92*01826a49SYabin Cui 93*01826a49SYabin Cuilongmatch_sources = [join_paths(zstd_rootdir, 'tests/longmatch.c')] 94*01826a49SYabin Cuilongmatch = executable('longmatch', 95*01826a49SYabin Cui longmatch_sources, 96*01826a49SYabin Cui dependencies: [ libzstd_dep ], 97*01826a49SYabin Cui install: false) 98*01826a49SYabin Cui 99*01826a49SYabin CuiinvalidDictionaries_sources = [join_paths(zstd_rootdir, 'tests/invalidDictionaries.c')] 100*01826a49SYabin CuiinvalidDictionaries = executable('invalidDictionaries', 101*01826a49SYabin Cui invalidDictionaries_sources, 102*01826a49SYabin Cui dependencies: [ libzstd_dep ], 103*01826a49SYabin Cui install: false) 104*01826a49SYabin Cui 105*01826a49SYabin Cuiif 0 < legacy_level and legacy_level <= 4 106*01826a49SYabin Cui legacy_sources = [join_paths(zstd_rootdir, 'tests/legacy.c')] 107*01826a49SYabin Cui legacy = executable('legacy', 108*01826a49SYabin Cui legacy_sources, 109*01826a49SYabin Cui # Use -Dlegacy_level build option to control it 110*01826a49SYabin Cui #c_args: '-DZSTD_LEGACY_SUPPORT=4', 111*01826a49SYabin Cui dependencies: [ libzstd_dep ], 112*01826a49SYabin Cui install: false) 113*01826a49SYabin Cuiendif 114*01826a49SYabin Cui 115*01826a49SYabin Cuidecodecorpus_sources = [join_paths(zstd_rootdir, 'tests/decodecorpus.c')] 116*01826a49SYabin Cuidecodecorpus = executable('decodecorpus', 117*01826a49SYabin Cui decodecorpus_sources, 118*01826a49SYabin Cui include_directories: test_includes, 119*01826a49SYabin Cui dependencies: [ testcommon_dep, libm_dep ], 120*01826a49SYabin Cui install: false) 121*01826a49SYabin Cui 122*01826a49SYabin CuipoolTests_sources = [join_paths(zstd_rootdir, 'tests/poolTests.c')] 123*01826a49SYabin CuipoolTests = executable('poolTests', 124*01826a49SYabin Cui poolTests_sources, 125*01826a49SYabin Cui include_directories: test_includes, 126*01826a49SYabin Cui dependencies: [ testcommon_dep, thread_dep ], 127*01826a49SYabin Cui install: false) 128*01826a49SYabin Cui 129*01826a49SYabin CuicheckTag_sources = [join_paths(zstd_rootdir, 'tests/checkTag.c')] 130*01826a49SYabin CuicheckTag = executable('checkTag', 131*01826a49SYabin Cui checkTag_sources, 132*01826a49SYabin Cui dependencies: [ libzstd_dep ], 133*01826a49SYabin Cui install: false) 134*01826a49SYabin Cui 135*01826a49SYabin Cui# ============================================================================= 136*01826a49SYabin Cui# Tests (Use "meson test --list" to list all tests) 137*01826a49SYabin Cui# ============================================================================= 138*01826a49SYabin Cui 139*01826a49SYabin Cuiif tests_supported_oses.contains(host_machine_os) 140*01826a49SYabin Cui valgrind_prog = find_program('valgrind', ['/usr/bin/valgrind'], required: false) 141*01826a49SYabin Cui valgrindTest_py = files('valgrindTest.py') 142*01826a49SYabin Cui if valgrind_prog.found() 143*01826a49SYabin Cui test('valgrindTest', 144*01826a49SYabin Cui valgrindTest_py, 145*01826a49SYabin Cui args: [valgrind_prog.path(), zstd, datagen, fuzzer, fullbench], 146*01826a49SYabin Cui depends: [zstd, datagen, fuzzer, fullbench], 147*01826a49SYabin Cui timeout: 600) # Timeout should work on HDD drive 148*01826a49SYabin Cui endif 149*01826a49SYabin Cuiendif 150*01826a49SYabin Cui 151*01826a49SYabin Cuiif host_machine_os != os_windows 152*01826a49SYabin Cui playTests_sh = find_program(join_paths(zstd_rootdir, 'tests/playTests.sh'), required: true) 153*01826a49SYabin Cui 154*01826a49SYabin Cui # add slow tests only if the meson version is new enough to support 155*01826a49SYabin Cui # test setups with default-excluded suites 156*01826a49SYabin Cui if meson.version().version_compare('>=0.57.0') 157*01826a49SYabin Cui matrix = {'fast': [], 'slow': ['--test-large-data']} 158*01826a49SYabin Cui else 159*01826a49SYabin Cui matrix = {'fast': []} 160*01826a49SYabin Cui endif 161*01826a49SYabin Cui 162*01826a49SYabin Cui foreach suite, opt: matrix 163*01826a49SYabin Cui test('test-zstd-'+suite, 164*01826a49SYabin Cui playTests_sh, 165*01826a49SYabin Cui args: opt, 166*01826a49SYabin Cui env: ['ZSTD_BIN=' + zstd.full_path(), 'DATAGEN_BIN=./datagen'], 167*01826a49SYabin Cui depends: [datagen, zstd], 168*01826a49SYabin Cui suite: suite, 169*01826a49SYabin Cui workdir: meson.current_build_dir(), 170*01826a49SYabin Cui timeout: 2800) # Timeout should work on HDD drive 171*01826a49SYabin Cui endforeach 172*01826a49SYabin Cuiendif 173*01826a49SYabin Cui 174*01826a49SYabin Cuitest('test-fullbench-1', 175*01826a49SYabin Cui fullbench, 176*01826a49SYabin Cui args: ['-i1'], 177*01826a49SYabin Cui depends: [datagen], 178*01826a49SYabin Cui timeout: 60) 179*01826a49SYabin Cuitest('test-fullbench-2', 180*01826a49SYabin Cui fullbench, 181*01826a49SYabin Cui args: ['-i1', '-P0'], 182*01826a49SYabin Cui depends: [datagen], 183*01826a49SYabin Cui timeout: 60) 184*01826a49SYabin Cui 185*01826a49SYabin Cuiif use_zlib 186*01826a49SYabin Cui test('test-fuzzer', 187*01826a49SYabin Cui fuzzer, 188*01826a49SYabin Cui args: ['-v', FUZZERTEST] + FUZZER_FLAGS, 189*01826a49SYabin Cui timeout: 480) 190*01826a49SYabin Cuiendif 191*01826a49SYabin Cui 192*01826a49SYabin Cuitest('test-zstream-1', 193*01826a49SYabin Cui zstreamtest, 194*01826a49SYabin Cui args: ['-v', ZSTREAM_TESTTIME] + FUZZER_FLAGS, 195*01826a49SYabin Cui timeout: 240) 196*01826a49SYabin Cuitest('test-zstream-3', 197*01826a49SYabin Cui zstreamtest, 198*01826a49SYabin Cui args: ['--newapi', '-t1', ZSTREAM_TESTTIME] + FUZZER_FLAGS, 199*01826a49SYabin Cui timeout: 120) 200*01826a49SYabin Cuitest('test-longmatch', longmatch, timeout: 36) 201*01826a49SYabin Cuitest('test-invalidDictionaries', invalidDictionaries) # should be fast 202*01826a49SYabin Cuiif 0 < legacy_level and legacy_level <= 4 203*01826a49SYabin Cui test('test-legacy', legacy) # should be fast 204*01826a49SYabin Cuiendif 205*01826a49SYabin Cuitest('test-decodecorpus', 206*01826a49SYabin Cui decodecorpus, 207*01826a49SYabin Cui args: ['-t', DECODECORPUS_TESTTIME], 208*01826a49SYabin Cui timeout: 60) 209*01826a49SYabin Cuitest('test-poolTests', poolTests) # should be fast 210*01826a49SYabin Cui 211*01826a49SYabin Cuiif meson.version().version_compare('>=0.57.0') 212*01826a49SYabin Cui add_test_setup('fast', 213*01826a49SYabin Cui is_default: true, 214*01826a49SYabin Cui exclude_suites: ['slow']) 215*01826a49SYabin Cui add_test_setup('slow', 216*01826a49SYabin Cui exclude_suites: ['fast']) 217*01826a49SYabin Cuiendif 218