diff options
Diffstat (limited to 'genprog.sh')
-rwxr-xr-x | genprog.sh | 46 |
1 files changed, 46 insertions, 0 deletions
@@ -52,6 +52,7 @@ cp $ORIG_HALTING_DECIDER $HALTING_DECIDER cp $ORIG_ERROR_DECIDER $ERROR_DECIDER PROGRAM_BASENAME=pg-${HD_HASH}-${ED_HASH} +STANDALONE_DECIDER_BASENAME=sa-${HD_HASH} printf "halting decider: %s\n" $HALTING_DECIDER printf "error decider: %s\n" $ERROR_DECIDER @@ -124,5 +125,50 @@ gcc $CFLAGS $PROGRAM_BASENAME.c -o $PROGRAM_BASENAME printf "\n" +printf "generating standalone decider %s\n" $STANDALONE_DECIDER_BASENAME.c +cat > $STANDALONE_DECIDER_BASENAME.c <<! +#include <stdio.h> +#include <stdlib.h> +#include "ternary.h" + +ternary halting_decider(const char *, const char *); + +#include "$HALTING_DECIDER" + +int main(int argc, char **argv) +{ + if (argc != 3) { + fprintf(stderr, "usage: %s <program>.c <input>\n", argv[0]); + return EXIT_FAILURE; + } + + switch (halting_decider(argv[1], argv[2])) { + case FALSE: + printf("%s: %s will not halt on %s\n", argv[0], argv[1], argv[2]); + break; + case TRUE: + printf("%s: %s will halt on %s\n", argv[0], argv[1], argv[2]); + break; + case ERROR: + printf("%s: for %s run on %s, the answer is ERROR\n", + argv[0], argv[1], argv[2]); + break; + } + + return 0; +} +! +printf "compiling %s to %s\n" $STANDALONE_DECIDER_BASENAME.c $STANDALONE_DECIDER_BASENAME +gcc $CFLAGS $STANDALONE_DECIDER_BASENAME.c -o $STANDALONE_DECIDER_BASENAME + +printf "\n" + +printf "executing stand alone decider: %s %s %s\n" \ + ./$STANDALONE_DECIDER_BASENAME $PROGRAM_BASENAME.c $PROGRAM_BASENAME.c + +./$STANDALONE_DECIDER_BASENAME $PROGRAM_BASENAME.c $PROGRAM_BASENAME.c + +printf "\n" + printf "executing test case %s %s\n" ./$PROGRAM_BASENAME $PROGRAM_BASENAME.c ./$PROGRAM_BASENAME $PROGRAM_BASENAME.c |