summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkim Demaille <demaille@gostai.com>2012-02-16 15:44:43 +0100
committerAkim Demaille <demaille@gostai.com>2012-02-16 15:52:14 +0100
commitc1192f8af3fff4bf860a9e1583f704dbe2b3c0ac (patch)
tree0f4524fe1e32b2567ccc9fc90ed9dbab3a489820
parent2e4986a88d5dbf180dc3829a67b5f420e727d470 (diff)
downloadbison-c1192f8af3fff4bf860a9e1583f704dbe2b3c0ac.tar.gz
mfcalc: extract and exercise.
* examples/mfcalc/local.mk, examples/mfcalc/test: New, based on calc++'s ones. * examples/local.mk: Include mfcalc/local.mk.
-rw-r--r--examples/local.mk1
-rw-r--r--examples/mfcalc/.gitignore11
-rw-r--r--examples/mfcalc/local.mk57
-rwxr-xr-xexamples/mfcalc/test70
4 files changed, 139 insertions, 0 deletions
diff --git a/examples/local.mk b/examples/local.mk
index e6d69d08..02e82bb0 100644
--- a/examples/local.mk
+++ b/examples/local.mk
@@ -18,3 +18,4 @@ extexi = $(top_srcdir)/examples/extexi
dist_noinst_SCRIPTS = examples/extexi
include examples/calc++/local.mk
+include examples/mfcalc/local.mk
diff --git a/examples/mfcalc/.gitignore b/examples/mfcalc/.gitignore
new file mode 100644
index 00000000..901c3553
--- /dev/null
+++ b/examples/mfcalc/.gitignore
@@ -0,0 +1,11 @@
+/*.o
+/*.tmp
+/.deps
+/calc.h
+/mfcalc
+/mfcalc.c
+/mfcalc.exe
+/mfcalc.h
+/mfcalc.stamp
+/mfcalc.y
+
diff --git a/examples/mfcalc/local.mk b/examples/mfcalc/local.mk
new file mode 100644
index 00000000..aae9e04b
--- /dev/null
+++ b/examples/mfcalc/local.mk
@@ -0,0 +1,57 @@
+## Process this file with automake to produce Makefile.in -*-Makefile-*-
+
+## Copyright (C) 2005-2006, 2008-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+## ------------ ##
+## Extracting. ##
+## ------------ ##
+
+# Extract in src.
+$(top_srcdir)/examples/mfcalc/mfcalc.stamp: $(doc) $(extexi)
+ $(AM_V_GEN)rm -f $@ $@.tmp
+ $(AM_V_at)touch $@.tmp
+ $(AM_V_at)cd $(top_srcdir)/examples/mfcalc && \
+ $(AWK) -f ../extexi -v VERSION="$(VERSION)" \
+ ../../doc/bison.texinfo -- calc.h mfcalc.y
+ $(AM_V_at)mv $@.tmp $@
+
+$(mfcalc_extracted): $(top_srcdir)/examples/mfcalc/mfcalc.stamp
+ $(AM_V_GEN)if test -f $@; then :; else \
+ rm -f $< && \
+ $(MAKE) $(AM_MAKEFLAGS) $<; \
+ fi
+
+## -------------------- ##
+## Building & testing. ##
+## -------------------- ##
+
+BUILT_SOURCES += $(mfcalc_sources)
+MAINTAINERCLEANFILES += $(top_srcdir)/examples/mfcalc/mfcalc.stamp $(mfcalc_sources)
+EXTRA_DIST += examples/mfcalc/mfcalc.stamp
+
+mfcalc_extracted = \
+ examples/mfcalc/calc.h \
+ examples/mfcalc/mfcalc.y
+mfcalc_sources = \
+ $(mfcalc_extracted)
+
+check_PROGRAMS += examples/mfcalc/mfcalc
+examples_mfcalc_mfcalc_SOURCES = \
+ $(mfcalc_sources)
+
+examples_mfcalc_mfcalc_CPPFLAGS = -I$(top_srcdir)/examples/mfcalc
+TESTS += examples/mfcalc/test
+EXTRA_DIST += examples/mfcalc/test
diff --git a/examples/mfcalc/test b/examples/mfcalc/test
new file mode 100755
index 00000000..edcbc14a
--- /dev/null
+++ b/examples/mfcalc/test
@@ -0,0 +1,70 @@
+#! /bin/sh
+
+# Copyright (C) 2005-2012 Free Software Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+me=`basename $0`
+
+# Number of the current test.
+number=1
+
+# Exit status of this script.
+exit=true
+
+# The exercised program.
+prog=./examples/mfcalc/mfcalc
+
+# run EXPECTED-EXIT-STATUS EXPECTED-OUTPUT [PARSER-OPTIONS]
+# ---------------------------------------------------------
+run ()
+{
+ # Effective and expected exit status.
+ local sta_exp=$1
+ shift
+ local out_exp=$1
+ shift
+ $prog "$@" - < input >out_eff
+ local sta_eff=$?
+ local out_eff=`cat out_eff`
+ if test $sta_eff -eq $sta_exp; then
+ if test "$out_eff" = "$out_exp"; then
+ printf "$me: PASS: %2d\n" $number
+ else
+ printf "$me: FAIL: %2d (expected output: %s, effective: %s\n" \
+ $number "$out_exp" "$out_eff"
+ exit=false
+ fi
+ else
+ printf "$me: FAIL: %2d (expected status: %d, effective: %d\n" \
+ $number $sta_exp $sta_eff
+ exit=false
+ fi
+ number=`expr $number + 1`
+}
+
+cat >input <<EOF
+1+2*3
+EOF
+run 0 7
+run 0 7
+
+cat >input <<EOF
+(1+2) * 3
+EOF
+run 0 9
+
+
+rm input out_eff
+$exit