bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

tests: run the api.value.type tests for all C++ standards


From: Akim Demaille
Subject: tests: run the api.value.type tests for all C++ standards
Date: Fri, 16 Nov 2018 17:38:47 +0100

commit 8eb1d7933341ad6b83818e64a4d2befc4f2ee771
Author: Akim Demaille <address@hidden>
Date:   Wed Nov 14 21:03:18 2018 +0100

    tests: run the api.value.type tests for all C++ standards
    
    * tests/local.at (AT_LANG_FOR_EACH_STD): New.
    (AT_REQUIRE_CXX_VERSION): Rename as...
    (AT_REQUIRE_CXX_STD): this.
    Accept an argument for what to do when the requirement is not met.
    * tests/types.at (api.value.type): Check all the C++ stds.

diff --git a/tests/local.at b/tests/local.at
index 3b7356b5..b31b7719 100644
--- a/tests/local.at
+++ b/tests/local.at
@@ -539,6 +539,9 @@ main (int argc, char const* argv[])
   return ]AT_NAME_PREFIX[parse ();
 }]])
 
+m4_define([AT_LANG_FOR_EACH_STD(c)],
+[$1])
+
 
 ## ----- ##
 ## C++.  ##
@@ -573,21 +576,24 @@ main (int argc, char const* argv[])
   return p.parse ();
 }]])
 
+m4_define([AT_LANG_FOR_EACH_STD(c++)],
+[AT_FOR_EACH_CXX([$1])])
+
 m4_define([AT_FOR_EACH_CXX],
-[[at_for_each_cxx_CXXFLAGS_save=$CXXFLAGS
-for at_cxx_std in '' \
-                  ${CXX98_CXXFLAGS:+"$CXX98_CXXFLAGS"} \
-                  ${CXX03_CXXFLAGS:+"$CXX03_CXXFLAGS"} \
-                  ${CXX11_CXXFLAGS:+"$CXX11_CXXFLAGS"} \
-                  ${CXX14_CXXFLAGS:+"$CXX14_CXXFLAGS"} \
-                  ${CXX17_CXXFLAGS:+"$CXX17_CXXFLAGS"} \
-                  ${CXX2A_CXXFLAGS:+"$CXX2A_CXXFLAGS"}
+[[at_for_each_std_CXXFLAGS_save=$CXXFLAGS
+for at_std in '' \
+              ${CXX98_CXXFLAGS:+"$CXX98_CXXFLAGS"} \
+              ${CXX03_CXXFLAGS:+"$CXX03_CXXFLAGS"} \
+              ${CXX11_CXXFLAGS:+"$CXX11_CXXFLAGS"} \
+              ${CXX14_CXXFLAGS:+"$CXX14_CXXFLAGS"} \
+              ${CXX17_CXXFLAGS:+"$CXX17_CXXFLAGS"} \
+              ${CXX2A_CXXFLAGS:+"$CXX2A_CXXFLAGS"}
 do
   ]AS_ECHO(["======== Testing with C++ standard flags: '$at_cxx_std'"])[
-  CXXFLAGS="$at_for_each_cxx_CXXFLAGS_save $at_cxx_std"
+  CXXFLAGS="$at_for_each_std_CXXFLAGS_save $at_std"
   ]$1[
 done
-CXXFLAGS=$at_for_each_cxx_CXXFLAGS_save
+CXXFLAGS=$at_for_each_std_CXXFLAGS_save
 ]])
 
 ## ------ ##
@@ -619,7 +625,8 @@ m4_define([AT_MAIN_DEFINE(java)],
   }
 }]])
 
-
+m4_define([AT_LANG_FOR_EACH_STD(java)],
+[$1])
 
 ## --------------- ##
 ## Running Bison.  ##
@@ -819,6 +826,11 @@ AT_CHECK([[$SHELL ../../../javacomp.sh ]$1],
          [[0]], [ignore], [ignore])])
 
 
+# AT_LANG_FOR_EACH_STD(BODY)
+# -------------------------------
+m4_define([AT_LANG_FOR_EACH_STD],  [AT_LANG_DISPATCH([$0], $@)])
+
+
 # AT_LANG_COMPILE(OUTPUT, [SOURCES = OUTPUT.c], [EXTRA-COMPILER-FLAGS])
 # ---------------------------------------------------------------------
 # Compile SOURCES into OUTPUT.  Skip if compiler does not work.
@@ -904,11 +916,11 @@ AT_PARSER_CHECK([./c-and-cxx])
 ])
 
 
-# AT_REQUIRE_CXX_VERSION(STD)
-# ---------------------------
+# AT_REQUIRE_CXX_STD(STD, [IF-FAIL = SKIP])
+# -----------------------------------------
 # Skip unless this compiler supports at least C++ STD (e.g., "11",
 # "14", etc.).
-m4_define([AT_REQUIRE_CXX_VERSION],
+m4_define([AT_REQUIRE_CXX_STD],
 [AT_DATA([check.cc],
 [[int main ()
 {
@@ -920,14 +932,19 @@ m4_define([AT_REQUIRE_CXX_VERSION],
     [17], [201703],
     [2a], [201709],
     [m4_fatal([$0: invalid arguments: address@hidden)])[
-  return 77;
+  return 1;
 #else
   return 0;
 #endif
 }
 ]])
 AT_COMPILE_CXX([check])
-AT_CHECK([@&address@hidden/check])
+AT_CHECK([@&address@hidden/check], [ignore])
+m4_ifval([$2],
+         [if test $at_status != 0; then
+            $2
+          fi],
+         [SKIP_IF([test $at_status != 0])])
 ])
 
 
diff --git a/tests/types.at b/tests/types.at
index 69bc9819..84d3e222 100644
--- a/tests/types.at
+++ b/tests/types.at
@@ -78,7 +78,7 @@ m4_pushdef([_AT_TEST],
 [
 AT_SETUP([$1])
 AT_KEYWORDS([api.value.type])
-$7
+
 AT_BISON_OPTION_PUSHDEFS([%debug $1 $2])
 AT_DATA_GRAMMAR([test.y],
 [[%debug
@@ -104,9 +104,12 @@ start: $3;
 ]AT_MAIN_DEFINE[
 ]])
 
-AT_FULL_COMPILE([[test]])
-AT_PARSER_CHECK([[./test]], 0, [[$6
+AT_LANG_FOR_EACH_STD([
+  $7
+  AT_FULL_COMPILE([[test]])
+  AT_PARSER_CHECK([[./test]], 0, [[$6
 ]])
+])
 
 AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
@@ -282,7 +285,7 @@ m4_foreach([b4_skel], [[yacc.c], [glr.c], [lalr1.cc], 
[glr.cc]],
                ]AT_VAL[.emplace <std::unique_ptr<std::string>>
                  (std::make_unique <std::string> ("two"));]],
             [10, two],
-            [AT_REQUIRE_CXX_VERSION(14)])])
+            [AT_REQUIRE_CXX_STD(14, [echo "$at_std not supported"; 
continue])])])
   ])
 ])
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]