# Copyright © 2012, 2020, 2022-2023 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([Randomized 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], [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 printf 'Using seed %d\n' "$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 cross-parse]) TEST_NEED_PROGRAM([randomdecl]) TEST_NEED_PROGRAM([crossparse]) printf 'Using seed %d\n' "$random_seed" >&AS_MESSAGE_LOG_FD AT_CHECK([randomdecl -n "$random_iter" -s "$random_seed"],, [stdout-nolog]) AT_CHECK([crossparse -f stdout]) AT_CLEANUP