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.
This commit is contained in:
Akim Demaille
2018-11-14 21:03:18 +01:00
parent 7bd7644702
commit 8eb1d79333
2 changed files with 40 additions and 20 deletions

View File

@@ -539,6 +539,9 @@ main (int argc, char const* argv[])
return ]AT_NAME_PREFIX[parse (); return ]AT_NAME_PREFIX[parse ();
}]]) }]])
m4_define([AT_LANG_FOR_EACH_STD(c)],
[$1])
## ----- ## ## ----- ##
## C++. ## ## C++. ##
@@ -573,21 +576,24 @@ main (int argc, char const* argv[])
return p.parse (); return p.parse ();
}]]) }]])
m4_define([AT_LANG_FOR_EACH_STD(c++)],
[AT_FOR_EACH_CXX([$1])])
m4_define([AT_FOR_EACH_CXX], m4_define([AT_FOR_EACH_CXX],
[[at_for_each_cxx_CXXFLAGS_save=$CXXFLAGS [[at_for_each_std_CXXFLAGS_save=$CXXFLAGS
for at_cxx_std in '' \ for at_std in '' \
${CXX98_CXXFLAGS:+"$CXX98_CXXFLAGS"} \ ${CXX98_CXXFLAGS:+"$CXX98_CXXFLAGS"} \
${CXX03_CXXFLAGS:+"$CXX03_CXXFLAGS"} \ ${CXX03_CXXFLAGS:+"$CXX03_CXXFLAGS"} \
${CXX11_CXXFLAGS:+"$CXX11_CXXFLAGS"} \ ${CXX11_CXXFLAGS:+"$CXX11_CXXFLAGS"} \
${CXX14_CXXFLAGS:+"$CXX14_CXXFLAGS"} \ ${CXX14_CXXFLAGS:+"$CXX14_CXXFLAGS"} \
${CXX17_CXXFLAGS:+"$CXX17_CXXFLAGS"} \ ${CXX17_CXXFLAGS:+"$CXX17_CXXFLAGS"} \
${CXX2A_CXXFLAGS:+"$CXX2A_CXXFLAGS"} ${CXX2A_CXXFLAGS:+"$CXX2A_CXXFLAGS"}
do do
]AS_ECHO(["======== Testing with C++ standard flags: '$at_cxx_std'"])[ ]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[ ]$1[
done 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. ## ## Running Bison. ##
@@ -819,6 +826,11 @@ AT_CHECK([[$SHELL ../../../javacomp.sh ]$1],
[[0]], [ignore], [ignore])]) [[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]) # AT_LANG_COMPILE(OUTPUT, [SOURCES = OUTPUT.c], [EXTRA-COMPILER-FLAGS])
# --------------------------------------------------------------------- # ---------------------------------------------------------------------
# Compile SOURCES into OUTPUT. Skip if compiler does not work. # 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", # Skip unless this compiler supports at least C++ STD (e.g., "11",
# "14", etc.). # "14", etc.).
m4_define([AT_REQUIRE_CXX_VERSION], m4_define([AT_REQUIRE_CXX_STD],
[AT_DATA([check.cc], [AT_DATA([check.cc],
[[int main () [[int main ()
{ {
@@ -920,14 +932,19 @@ m4_define([AT_REQUIRE_CXX_VERSION],
[17], [201703], [17], [201703],
[2a], [201709], [2a], [201709],
[m4_fatal([$0: invalid arguments: $@])])[ [m4_fatal([$0: invalid arguments: $@])])[
return 77; return 1;
#else #else
return 0; return 0;
#endif #endif
} }
]]) ]])
AT_COMPILE_CXX([check]) AT_COMPILE_CXX([check])
AT_CHECK([@&t@./check]) AT_CHECK([@&t@./check], [ignore])
m4_ifval([$2],
[if test $at_status != 0; then
$2
fi],
[SKIP_IF([test $at_status != 0])])
]) ])

View File

@@ -78,7 +78,7 @@ m4_pushdef([_AT_TEST],
[ [
AT_SETUP([$1]) AT_SETUP([$1])
AT_KEYWORDS([api.value.type]) AT_KEYWORDS([api.value.type])
$7
AT_BISON_OPTION_PUSHDEFS([%debug $1 $2]) AT_BISON_OPTION_PUSHDEFS([%debug $1 $2])
AT_DATA_GRAMMAR([test.y], AT_DATA_GRAMMAR([test.y],
[[%debug [[%debug
@@ -104,9 +104,12 @@ start: $3;
]AT_MAIN_DEFINE[ ]AT_MAIN_DEFINE[
]]) ]])
AT_FULL_COMPILE([[test]]) AT_LANG_FOR_EACH_STD([
AT_PARSER_CHECK([[./test]], 0, [[$6 $7
AT_FULL_COMPILE([[test]])
AT_PARSER_CHECK([[./test]], 0, [[$6
]]) ]])
])
AT_BISON_OPTION_POPDEFS AT_BISON_OPTION_POPDEFS
AT_CLEANUP 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>> ]AT_VAL[.emplace <std::unique_ptr<std::string>>
(std::make_unique <std::string> ("two"));]], (std::make_unique <std::string> ("two"));]],
[10, two], [10, two],
[AT_REQUIRE_CXX_VERSION(14)])]) [AT_REQUIRE_CXX_STD(14, [echo "$at_std not supported"; continue])])])
]) ])
]) ])