From b610f43f25aa16d591f6a6b5bf36784050ede651 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Sun, 19 Aug 2018 10:55:08 +0200 Subject: [PATCH] examples: check the variant example * examples/mfcalc/local.mk, examples/rpcalc/local.mk: Define the programs in a more natural order, source, preproc, then linker. * examples/test: Be ready to work on programs that are not in a subdir. * examples/variant.test: New. * examples/local.mk: Use it. * examples/variant.yy: Don't use 0 for nullptr. Use a more natural output for a list of string. --- examples/local.mk | 6 ++++++ examples/mfcalc/local.mk | 4 ++-- examples/rpcalc/local.mk | 4 ++-- examples/test | 13 ++++++++++++- examples/variant.test | 19 +++++++++++++++++++ examples/variant.yy | 6 +++--- 6 files changed, 44 insertions(+), 8 deletions(-) create mode 100644 examples/variant.test diff --git a/examples/local.mk b/examples/local.mk index 6dfbf2eb..13f8d492 100644 --- a/examples/local.mk +++ b/examples/local.mk @@ -48,6 +48,12 @@ $(extracted): %D%/extracted.stamp examplesdir = $(docdir)/examples dist_examples_DATA = %D%/README %D%/variant.yy +check_PROGRAMS += %D%/variant +nodist_%C%_variant_SOURCES = %D%/variant.yy +%C%_variant_CPPFLAGS = -I$(top_builddir) +dist_TESTS += %D%/variant.test + + include %D%/calc++/local.mk include %D%/mfcalc/local.mk include %D%/rpcalc/local.mk diff --git a/examples/mfcalc/local.mk b/examples/mfcalc/local.mk index e8be61a9..1bb8b82c 100644 --- a/examples/mfcalc/local.mk +++ b/examples/mfcalc/local.mk @@ -26,10 +26,10 @@ mfcalc_sources = $(mfcalc_extracted) extracted += $(mfcalc_extracted) check_PROGRAMS += %D%/mfcalc -%C%_mfcalc_LDADD = -lm nodist_%C%_mfcalc_SOURCES = $(mfcalc_sources) - %C%_mfcalc_CPPFLAGS = -I$(top_builddir)/%D% +%C%_mfcalc_LDADD = -lm + dist_TESTS += %D%/mfcalc.test ## ------------ ## diff --git a/examples/rpcalc/local.mk b/examples/rpcalc/local.mk index 2c4ce2b0..622cda4c 100644 --- a/examples/rpcalc/local.mk +++ b/examples/rpcalc/local.mk @@ -26,10 +26,10 @@ rpcalc_sources = $(rpcalc_extracted) extracted += $(rpcalc_extracted) check_PROGRAMS += %D%/rpcalc -%C%_rpcalc_LDADD = -lm nodist_%C%_rpcalc_SOURCES = $(rpcalc_sources) - %C%_rpcalc_CPPFLAGS = -I$(top_builddir)/%D% +%C%_rpcalc_LDADD = -lm + dist_TESTS += %D%/rpcalc.test ## ------------ ## diff --git a/examples/test b/examples/test index a30d3616..a2439213 100755 --- a/examples/test +++ b/examples/test @@ -27,7 +27,18 @@ exit=true cwd=`pwd` # The exercised program. -prog=$cwd/examples/$me/$me +for p in $cwd/examples/$me/$me $cwd/examples/$me +do + if test -x "$p"; then + prog=$p + break + fi +done +if test x"$prog" = x; then + echo "$me: ERROR: cannot find program to exercise" + exit 1 +fi + # cleanup # ------- diff --git a/examples/variant.test b/examples/variant.test new file mode 100644 index 00000000..3bc2b397 --- /dev/null +++ b/examples/variant.test @@ -0,0 +1,19 @@ +#! /bin/sh + +# Copyright (C) 2018 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 . + +: >input +run 0 "{I have three numbers for you., 1, 2, 3, And that's all!}" diff --git a/examples/variant.yy b/examples/variant.yy index 6c8e4635..ff3b9506 100644 --- a/examples/variant.yy +++ b/examples/variant.yy @@ -50,7 +50,7 @@ typedef std::vector strings_type; std::ostream& operator<< (std::ostream& o, const strings_type& ss) { - o << '(' << &ss << ") {"; + o << '{'; const char *sep = ""; for (strings_type::const_iterator i = ss.begin(), end = ss.end(); i != end; ++i) @@ -75,7 +75,7 @@ typedef std::vector strings_type; %token <::std::string> TEXT; %token NUMBER; -%printer { yyoutput << $$; } <*>; +%printer { yyo << '(' << &$$ << ") " << $$; } <*>; %token END_OF_FILE 0; %type <::std::string> item; @@ -114,7 +114,7 @@ namespace yy { static int stage = -1; ++stage; - parser::location_type loc(0, stage + 1, stage + 1); + parser::location_type loc(YY_NULLPTR, stage + 1, stage + 1); switch (stage) { case 0: