# Copyright © 2012, 2020, 2022-2024 Nick Bowler # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . AT_BANNER([Stress tests]) dnl Verify the RNG implementation TEST_TAP_SIMPLE([xoshiro256p sanity], [rng-test], [TEST_NEED_PROGRAM([rng-test])]) dnl Verify that randomdecl actually produces all keywords and a variety dnl of different declarations. AT_SETUP([randomdecl sanity]) TEST_NEED_PROGRAM([randomdecl]) m4_define([sanity_tests], [dnl [[^declare], [declaration of an identifier]], [[^type], [type name]], [[inline], [inline function specifier]], [[inline inline], [redundant function specifiers]], [[function [(]@<:@]]RE_ALNUM()_[[@:>@* as], [named function parameter]], [[function [(]void[)]], [empty prototype declaration]], [[function returning], [non-prototype function declaration]], [[\.\.\.], [variadic function]], [[const], [const qualifier]], [[volatile], [volatile qualifier]], [[restrict], [restrict qualifier]], [[const const], [redundant type qualifiers]], [[variable-length array], [variable-length array]], [[static], [static storage-class specifier]], [[extern], [extern storage-class specifier]], [[typedef], [typedef storage-class specifier]], [[auto], [auto storage-class specifier]], [[register], [register storage-class specifier]], [[void], [void type specifier]], [[char], [char type specifier]], [[short], [short type specifier]], [[int], [int type specifier]], [[long], [long type specifier]], [[float], [float type specifier]], [[double], [double type specifier]], [[signed], [signed type specifier]], [[unsigned], [unsigned type specifier]], [[_Bool], [_Bool type specifier]], [[_Complex], [_Complex type specifier]], [[_Imaginary], [_Imaginary type specifier]], [[union], [union type specifier]], [[enum], [enum type specifier]], [[pointer to array], [pointer to an array]], [[pointer to function], [pointer to a function]], ]) m4_define([sanity_awk], [[/$1/ { found["$2"] = 1; } ]])AT_DATA([sanity.awk], [# We don't need any field splitting, so choose a character that does not # appear in C code to avoid tripping over 199-field limit in HP-UX 11 awk. BEGIN { FS = "@"; } m4_map([sanity_awk], [sanity_tests])dnl END { for (k in found) print "FOUND", k; } ]) m4_define([sanity_exp], [[FOUND $2 ]]) LC_ALL=C sort >expout <<'EOF' m4_map([sanity_exp], [sanity_tests])dnl EOF AS_ECHO(["Using seed $random_seed"]) >&AS_MESSAGE_LOG_FD AT_CHECK([randomdecl -En 10000 -s "$random_seed" >decls], [0]) AT_CHECK([$AWK -f sanity.awk decls | LC_ALL=C sort], [0], [expout]) AT_CLEANUP AT_SETUP([Random crossparse]) TEST_NEED_PROGRAM([randomdecl]) TEST_NEED_PROGRAM([crossparse]) AS_ECHO(["Using seed $random_seed"]) >&AS_MESSAGE_LOG_FD AT_CHECK([randomdecl -n "$random_iter" -s "$random_seed"],, [stdout-nolog]) AT_CHECK([crossparse -f stdout]) AT_CLEANUP # Check that we can parse declarations with more than 10000 specifiers. AT_SETUP([Excessive specifiers]) AT_CHECK([gunzip -c "$srcdir/tests/data/manyspec.gz" >test.dat || exit 77 cdecl99 -f test.dat], [0], [[type const int type const int const int const int inline int f() ]]) AT_CLEANUP # Check that we can parse declarations with more than 10000 declarators. AT_SETUP([Excessive declarators]) AT_DATA([check.awk], [[# We don't need any field splitting, so choose a character that does not # appear in C code to avoid tripping over 199-field limit in HP-UX 11 awk. BEGIN { FS = "@"; runstart = 0; } END { finish_run(NR); } $0 != lastline { finish_run(NR-1); lastline = $0; runstart = NR; print; } function finish_run(nr) { count = nr - runstart; if (count > 0) print "[repeated " count " more times]"; } ]]) AT_CHECK([gunzip -c "$srcdir/tests/data/manydecl.gz" >test.dat || exit 77 cdecl99 -f test.dat >test.out; status=$?; tr