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