summaryrefslogtreecommitdiffstats
path: root/genprog.sh
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2015-01-13 22:24:41 -0800
committerKaz Kylheku <kaz@kylheku.com>2015-01-13 22:24:41 -0800
commitbb75fc30d114e304c9afd9277a42196698bde24b (patch)
treefa99b6498b533ba0a9e84df5dc894934be8956ee /genprog.sh
parent44ebf376177a4e7f06e0cb4a6cb660b9f232d4eb (diff)
downloadhalt3-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-xgenprog.sh46
1 files changed, 46 insertions, 0 deletions
diff --git a/genprog.sh b/genprog.sh
index 3b76ad1..803fe9b 100755
--- a/genprog.sh
+++ b/genprog.sh
@@ -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