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 | |
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.
-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 |