bison-patches
[Top][All Lists]
Advanced

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

RFC: use assert in the test suite


From: Akim Demaille
Subject: RFC: use assert in the test suite
Date: Tue, 26 Jun 2012 11:03:10 +0200

Hi Paul,

About ten years ago, we got rid of assert, including in the
test suite.  Today, I don't think it makes sense, and it
definitely clutters the code, and makes the test suite logs
less usable.

The following message states that this is demanded by the
GNU Coding Standards.

http://lists.gnu.org/archive/html/bison-patches/2002-11/msg00121.html

I see no occurrence of assert in the current version of the
standards, but they state:

> In error checks that detect ``impossible'' conditions, just abort.
> There is usually no point in printing any message.  These checks
> indicate the existence of bugs.  Whoever wants to fix the bugs will have
> to read the source code and run a debugger.  So explain the problem with
> comments in the source.  The relevant data will be in variables, which
> are easy to examine with the debugger, so there is no point moving them
> elsewhere.

which can be read, indeed, as referring to assert too.

Yet I find avoiding assert useless and actually painful.  Would
you object to our using assert back?

From 4701446db74b2c76dbfb39e846b47003c50b6853 Mon Sep 17 00:00:00 2001
From: Akim Demaille <address@hidden>
Date: Tue, 26 Jun 2012 11:00:16 +0200
Subject: [PATCH] tests: use assert instead of plain abort.

* tests/actions.at, tests/calc.at, tests/conflicts.at,
* tests/cxx-type.at, tests/glr-regression.at, tests/input.at,
* tests/named-refs.at, tests/regression.at, tests/torture.at:
Prefer assert to abort.
---
 tests/actions.at        |  3 +--
 tests/calc.at           |  8 +++-----
 tests/conflicts.at      |  4 ++--
 tests/cxx-type.at       | 10 ++++------
 tests/glr-regression.at | 35 +++++++++++++++++------------------
 tests/input.at          |  4 ++--
 tests/named-refs.at     |  6 ++----
 tests/regression.at     |  8 ++++----
 tests/torture.at        | 30 ++++++++++++++----------------
 9 files changed, 49 insertions(+), 59 deletions(-)

diff --git a/tests/actions.at b/tests/actions.at
index e5a885d..0cf2e75 100644
--- a/tests/actions.at
+++ b/tests/actions.at
@@ -324,8 +324,7 @@ static
   AT_LOC.last_line = AT_LOC.last_column = AT_LOC.first_line + 9;
 ])[
 
-  if (! (0 <= c && c <= strlen (source)))
-    abort ();
+  assert (0 <= c && c <= strlen (source));
   if (source[c])
     printf ("sending: '%c'", source[c]);
   else
diff --git a/tests/calc.at b/tests/calc.at
index 836c3a3..58e7e89 100644
--- a/tests/calc.at
+++ b/tests/calc.at
@@ -45,7 +45,7 @@ m4_define([_AT_DATA_CALC_Y],
        [m4_fatal([$0: Invalid arguments: address@hidden)])dnl
 
 m4_pushdef([AT_CALC_MAIN],
-[#include <stdlib.h> /* abort */
+[#include <assert.h>
 #if HAVE_UNISTD_H
 # include <unistd.h>
 #else
@@ -98,10 +98,8 @@ main (int argc, const char **argv)
   status = ]AT_NAME_PREFIX[parse (]AT_PARAM_IF([[&result, &count]])[);
   if (fclose (input))
     perror ("fclose");
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 ]])
diff --git a/tests/conflicts.at b/tests/conflicts.at
index 54df051..cafa333 100644
--- a/tests/conflicts.at
+++ b/tests/conflicts.at
@@ -57,6 +57,7 @@ AT_DATA_GRAMMAR([input.y],
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <assert.h>
 
 #define YYERROR_VERBOSE 1
 ]AT_YYERROR_DEFINE[
@@ -67,8 +68,7 @@ static int
 yylex (void)
 {
   static size_t toknum;
-  if (! (toknum <= strlen (input)))
-    abort ();
+  assert (toknum <= strlen (input));
   return input[toknum++];
 }
 
diff --git a/tests/cxx-type.at b/tests/cxx-type.at
index e172033..f5e7c55 100644
--- a/tests/cxx-type.at
+++ b/tests/cxx-type.at
@@ -122,12 +122,12 @@ declarator : ID
 #include <stdlib.h>
 #include <string.h>
 #include <stdarg.h>
+#include <assert.h>
 
 int
 main (int argc, char **argv)
 {
-  if (argc != 2)
-    abort ();
+  assert (argc == 2);
   if (!freopen (argv[1], "r", stdin))
     return 3;
   return yyparse ();
@@ -152,8 +152,7 @@ main (int argc, char **argv)
 
   while (1)
     {
-      if (feof (stdin))
-        abort ();
+      assert (!feof (stdin));
       c = getchar ();
       switch (c)
         {
@@ -182,8 +181,7 @@ main (int argc, char **argv)
                   {
                     buffer[i++] = c;
                     colNum += 1;
-                    if (i == sizeof buffer - 1)
-                      abort ();
+                    assert (i != sizeof buffer - 1);
                     c = getchar ();
                   }
                 while (isalnum (c) || c == '_');
diff --git a/tests/glr-regression.at b/tests/glr-regression.at
index 479303d..288de25 100644
--- a/tests/glr-regression.at
+++ b/tests/glr-regression.at
@@ -32,6 +32,7 @@ AT_DATA_GRAMMAR([glr-regr1.y],
 %{
 #include <stdio.h>
 #include <stdlib.h>
+#include <assert.h>
 
 #define YYSTYPE int
 static YYSTYPE exprMerge (YYSTYPE x0, YYSTYPE x1);
@@ -80,8 +81,7 @@ yylex (void)
   for (;;)
     {
       int ch;
-      if (feof (stdin))
-       abort ();
+      assert (!feof (stdin));
       ch = getchar ();
       if (ch == EOF)
        return 0;
@@ -128,6 +128,7 @@ AT_DATA_GRAMMAR([glr-regr2a.y],
   #include <stdio.h>
   #include <stdlib.h>
   #include <string.h>
+  #include <assert.h>
   ]AT_YYERROR_DECLARE[
   ]AT_YYLEX_DECLARE[
 %}
@@ -177,8 +178,7 @@ yylex (void)
 {
   char buf[50];
   char *s;
-  if (feof (stdin))
-    abort ();
+  assert (!feof (stdin));
   switch (fscanf (input, " %1[a-z,]", buf))
   {
   case 1:
@@ -190,8 +190,7 @@ yylex (void)
   }
   if (fscanf (input, "%49s", buf) != 1)
     return 0;
-  if (sizeof buf - 1 <= strlen (buf))
-    abort ();
+  assert (strlen (buf) < sizeof buf - 1);
   s = (char *) malloc (strlen (buf) + 1);
   strcpy (s, buf);
   yylval = s;
@@ -242,6 +241,7 @@ AT_DATA_GRAMMAR([glr-regr3.y],
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdarg.h>
+#include <assert.h>
 
 static int MergeRule (int x0, int x1);
 ]AT_YYERROR_DECLARE[
@@ -302,8 +302,7 @@ int T[] = { T1, T2, T3, T4 };
 int yylex (void)
 {
   char inp[3];
-  if (feof (stdin))
-    abort ();
+  assert (!feof (stdin));
   if (fscanf (input, "%2s", inp) == EOF)
     return 0;
   switch (inp[0])
@@ -935,6 +934,7 @@ AT_DATA_GRAMMAR([glr-regr12.y],
 
 %{
 # include <stdlib.h>
+# include <assert.h>
   static int merge (YYSTYPE, YYSTYPE);
   ]AT_YYERROR_DECLARE[
   ]AT_YYLEX_DECLARE[
@@ -1003,8 +1003,7 @@ yylex (void)
 {
   static int const input[] = { PARENT_RHS_AFTER, 0 };
   static size_t toknum;
-  if (! (toknum < sizeof input / sizeof *input))
-    abort ();
+  assert (toknum < sizeof input / sizeof *input);
   if (input[toknum] == PARENT_RHS_AFTER)
     parent_rhs_after_value = 1;
   return input[toknum++];
@@ -1064,6 +1063,7 @@ AT_DATA_GRAMMAR([glr-regr13.y],
 
 %{
   #include <stdio.h>
+  #include <assert.h>
   ]AT_YYERROR_DECLARE[
   ]AT_YYLEX_DECLARE[
   static void print_lookahead (char const *);
@@ -1122,8 +1122,7 @@ yylex (void)
 {
   static char const input[] = "ab";
   static size_t toknum;
-  if (! (toknum < sizeof input))
-    abort ();
+  assert (toknum < sizeof input);
   yylloc.first_line = yylloc.last_line = 1;
   yylloc.first_column = yylloc.last_column = toknum + 1;
   yylval.value = input[toknum] + 'A' - 'a';
@@ -1212,6 +1211,7 @@ AT_DATA_GRAMMAR([glr-regr14.y],
 %{
   #include <stdlib.h>
   #include <stdio.h>
+  #include <assert.h>
   ]AT_YYERROR_DECLARE[
   ]AT_YYLEX_DECLARE[
   static void print_lookahead (char const *);
@@ -1328,8 +1328,7 @@ yylex (void)
 {
   static char const input[] = "abcdddd";
   static size_t toknum;
-  if (! (toknum < sizeof input))
-    abort ();
+  assert (toknum < sizeof input);
   yylloc.first_line = yylloc.last_line = 1;
   yylloc.first_column = yylloc.last_column = toknum + 1;
   yylval.value = input[toknum] + 'A' - 'a';
@@ -1492,6 +1491,7 @@ AT_DATA_GRAMMAR([glr-regr16.y],
 
 %{
 # include <stdlib.h>
+# include <assert.h>
   ]AT_YYERROR_DECLARE[
   ]AT_YYLEX_DECLARE[
   static int lookahead_value = 0;
@@ -1512,8 +1512,7 @@ yylex (void)
 {
   static char const input[] = "ab";
   static size_t toknum;
-  if (! (toknum < sizeof input))
-    abort ();
+  assert (toknum < sizeof input);
   if (input[toknum] == 'b')
     lookahead_value = 1;
   return input[toknum++];
@@ -1593,6 +1592,7 @@ empty1: ;
 empty2: ;
 
 %%
+# include <assert.h>
 
 static void
 yyerror (YYLTYPE *locp, char const *msg)
@@ -1606,8 +1606,7 @@ yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
 {
   static char const input[] = "ab";
   static size_t toknum;
-  if (! (toknum < sizeof input))
-    abort ();
+  assert (toknum < sizeof input);
   lvalp->dummy = 0;
   llocp->first_line = llocp->last_line = 2;
   llocp->first_column = toknum + 1;
diff --git a/tests/input.at b/tests/input.at
index 6d8d552..0ed8635 100644
--- a/tests/input.at
+++ b/tests/input.at
@@ -442,6 +442,7 @@ char apostrophe = '\'';
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <assert.h>
 %}
 /* %{ and %} can be here too. */
 
@@ -509,8 +510,7 @@ yylex (void)
 #output "; /* "
   */
   static size_t toknum;
-  if (! (toknum < sizeof input))
-    abort ();
+  assert (toknum < sizeof input);
   yylval = value_as_yystype (input[toknum]);
   return input[toknum++];
 }
diff --git a/tests/named-refs.at b/tests/named-refs.at
index c9b91a0..3ccf1f6 100644
--- a/tests/named-refs.at
+++ b/tests/named-refs.at
@@ -162,10 +162,8 @@ int main (int argc, const char **argv)
     }
   status = yyparse ();
   fclose (input);
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 ]])
diff --git a/tests/regression.at b/tests/regression.at
index 4208153..ac7d55e 100644
--- a/tests/regression.at
+++ b/tests/regression.at
@@ -910,6 +910,7 @@ yyparse ()
 }
 ])
 
+#include <assert.h>
 static int
 yylex (AT_LALR1_CC_IF([int *lval], [void]))
 [{
@@ -919,8 +920,7 @@ yylex (AT_LALR1_CC_IF([int *lval], [void]))
     };
   static size_t toknum;
   ]AT_LALR1_CC_IF([*lval = 0; /* Pacify GCC.  */])[
-  if (! (toknum < sizeof tokens / sizeof *tokens))
-    abort ();
+  assert (toknum < sizeof tokens / sizeof *tokens);
   return tokens[toknum++];
 }]
 
@@ -995,6 +995,7 @@ yyparse ()
 }
 ])[
 
+#include <assert.h>
 static int
 yylex (]AT_LALR1_CC_IF([int *lval], [void])[)
 {
@@ -1004,8 +1005,7 @@ yylex (]AT_LALR1_CC_IF([int *lval], [void])[)
     };
   static size_t toknum;
   ]AT_LALR1_CC_IF([*lval = 0; /* Pacify GCC.  */])[
-  if (! (toknum < sizeof tokens / sizeof *tokens))
-    abort ();
+  assert (toknum < sizeof tokens / sizeof *tokens);
   return tokens[toknum++];
 }
 
diff --git a/tests/torture.at b/tests/torture.at
index a8837b2..338c164 100644
--- a/tests/torture.at
+++ b/tests/torture.at
@@ -56,6 +56,7 @@ print <<EOF;
 %{
 #include <stdio.h>
 #include <stdlib.h>
+#include <assert.h>
 #define MAX $max
 ]AT_YYLEX_DECLARE[
 ]AT_YYERROR_DECLARE[
@@ -77,8 +78,8 @@ for my $size (1 .. $max)
 print <<EOF;
 %%
 input:
-  exp        { if (address@hidden|@1 != 0) abort (); \$\$ = address@hidden|@1; 
}
-| input exp  { if (address@hidden|@2 != address@hidden|@1 + 1) abort (); \$\$ 
= address@hidden|@2; }
+  exp        { assert (address@hidden|@1 == 0); \$\$ = address@hidden|@1; }
+| input exp  { assert (address@hidden|@2 == address@hidden|@1 + 1); \$\$ = 
address@hidden|@2; }
 ;
 
 exp:
@@ -192,6 +193,7 @@ print
 
 print <<\EOF;
 %%
+#include <assert.h>
 ]AT_YYERROR_DEFINE[
 static int
 yylex (void)
@@ -199,8 +201,7 @@ yylex (void)
   static int counter = 1;
   if (counter <= MAX)
     return counter++;
-  if (counter++ != MAX + 1)
-    abort ();
+  assert (counter++ == MAX + 1);
   return 0;
 }
 
@@ -328,8 +329,7 @@ yylex (void)
   static int counter = 1;
   if (counter > MAX)
     {
-      if (counter++ != MAX + 1)
-       abort ();
+      assert (counter++ == MAX + 1);
       return 0;
     }
   if (return_token)
@@ -401,11 +401,11 @@ AT_DATA([input.y],
 exp: WAIT_FOR_EOF exp | ;
 %%
 ]AT_YYERROR_DEFINE[
+#include <assert.h>
 static int
 yylex (void)
 {
-  if (yylval < 0)
-    abort ();
+  assert (0 <= yylval);
   if (yylval--)
     return WAIT_FOR_EOF;
   else
@@ -417,13 +417,12 @@ main (int argc, const char **argv)
 {
   char *endp;
   YYSTYPE yylval_init;
-  if (argc != 2)
-    abort ();
+  assert (argc == 2);
   yylval_init = strtol (argv[1], &endp, 10);
-  if (! (argv[1] != endp
-        && 0 <= yylval_init && yylval_init <= INT_MAX
-        && errno != ERANGE))
-    abort ();
+  assert (argv[1] != endp);
+  assert (0 <= yylval_init);
+  assert (yylval_init <= INT_MAX);
+  assert (errno != ERANGE);
   yydebug = 1;
   {
     int count;
@@ -438,8 +437,7 @@ main (int argc, const char **argv)
 [[        new_status = yypull_parse (ps);
 ]],
 [[        new_status = yyparse ();
-]])[        if (count > 0 && new_status != status)
-          abort ();
+]])[        assert (0 <= count || new_status == status);
         status = new_status;
       }
 ]m4_bmatch([$2], [%push-],
-- 
1.7.11.1






reply via email to

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