diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2015-01-13 22:24:41 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2015-01-13 22:24:41 -0800 |
commit | bb75fc30d114e304c9afd9277a42196698bde24b (patch) | |
tree | fa99b6498b533ba0a9e84df5dc894934be8956ee /genprog.sh | |
parent | 44ebf376177a4e7f06e0cb4a6cb660b9f232d4eb (diff) | |
download | halt3-bb75fc30d114e304c9afd9277a42196698bde24b.tar.gz halt3-bb75fc30d114e304c9afd9277a42196698bde24b.tar.bz2 halt3-bb75fc30d114e304c9afd9277a42196698bde24b.zip |
Stand-alone decider.halt3-1.2
Generate an additional program which wraps just the decider
in a simple driver main which lets the program be run
independently, with both its inputs specified through
the command line. The result of the decider is reported
to standard output.
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 |