# Copyright © 2012, 2020 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 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 (@<:@@<:@: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_sed], [/$1/i\ AS_TR_SH([$2])=:]) AT_DATA([sanity.sed], [#n m4_map_sep([sanity_sed], [m4_newline], [sanity_tests]) ]) printf 'Using seed %d\n' "$random_seed" >&AS_MESSAGE_LOG_FD AT_CHECK([randomdecl -En 10000 -s "$random_seed" >decls], [0], [ignore-nolog]) AT_CHECK([sed -f sanity.sed decls], [0], [stdout-nolog]) sort -u stdout >decls.chk exec 3&AS_MESSAGE_LOG_FD AT_CHECK([randomdecl -n "$random_iter" -s "$random_seed"],, [stdout-nolog]) AT_CHECK([crossparse -f stdout]) AT_CLEANUP