[or-cvs] Fix test.h to have once-only evalutation of arguments

Nick Mathewson nickm at seul.org
Thu Apr 17 01:55:16 UTC 2003


Update of /home/or/cvsroot/src/common
In directory moria.mit.edu:/tmp/cvs-serv24015/src/common

Modified Files:
	test.h 
Log Message:
Fix test.h to have once-only evalutation of arguments

Index: test.h
===================================================================
RCS file: /home/or/cvsroot/src/common/test.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- test.h	16 Apr 2003 15:24:09 -0000	1.3
+++ test.h	17 Apr 2003 01:55:13 -0000	1.4
@@ -20,7 +20,7 @@
   STMT_END
 
 #define test_assert(expr)                                       \
-  STMT_BEGIN \
+  STMT_BEGIN                                                    \
   if(expr) { printf("."); } else {                              \
     printf("\nFile %s: line %d (%s): assertion failed: (%s)\n", \
       __FILE__,                                                 \
@@ -31,55 +31,65 @@
   } STMT_END
 
 #define test_eq(expr1, expr2)                                   \
-  STMT_BEGIN if(expr1==expr2) { printf("."); } else {                \
+  STMT_BEGIN                                                    \
+    long v1=(long)(expr1), v2=(long)(expr2);                    \
+    if(v1==v2) { printf("."); } else {                          \
     printf("\nFile %s: line %d (%s): Assertion failed: (%s==%s)\n"\
            "      (%ld != %ld)\n",                              \
       __FILE__,                                                 \
       __LINE__,                                                 \
       __PRETTY_FUNCTION__,                                      \
       #expr1, #expr2,                                           \
-      (long)expr1, (long)expr2);                                \
+      v1, v2);                                                  \
     return;                                                     \
   } STMT_END
 
 #define test_neq(expr1, expr2)                                  \
-  STMT_BEGIN if(expr1!=expr2) { printf("."); } else {                \
+  STMT_BEGIN                                                    \
+    long v1=(long)(expr1), v2=(long)(expr2);                    \
+    if(v1!=v2) { printf("."); } else {                          \
     printf("\nFile %s: line %d (%s): Assertion failed: (%s!=%s)\n"\
            "      (%ld == %ld)\n",                              \
       __FILE__,                                                 \
       __LINE__,                                                 \
       __PRETTY_FUNCTION__,                                      \
       #expr1, #expr2,                                           \
-      (long)expr1, (long)expr2);                                \
+      v1, v2);                                                  \
     return;                                                     \
   } STMT_END
 
 #define test_streq(expr1, expr2)                                \
-  STMT_BEGIN if(!strcmp(expr1,expr2)) { printf("."); } else {        \
+  STMT_BEGIN                                                    \
+    char *v1=(expr1), *v2=(expr2);                              \
+    if(!strcmp(v1,v2)) { printf("."); } else {                  \
     printf("\nFile %s: line %d (%s): Assertion failed: (%s==%s)\n"\
            "      (%s != %s)\n",                                \
       __FILE__,                                                 \
       __LINE__,                                                 \
       __PRETTY_FUNCTION__,                                      \
       #expr1, #expr2,                                           \
-      expr1, expr2);                                            \
+      v1, v2);                                                  \
     return;                                                     \
   } STMT_END
 
 #define test_strneq(expr1, expr2)                               \
-  STMT_BEGIN if(strcmp(expr1,expr2)) { printf("."); } else {         \
+  STMT_BEGIN                                                    \
+    char *v1=(expr1), *v2=(expr2);                              \
+    if(strcmp(v1,v2)) { printf("."); } else {                   \
     printf("\nFile %s: line %d (%s): Assertion failed: (%s!=%s)\n"\
            "      (%s == %s)\n",                                \
       __FILE__,                                                 \
       __LINE__,                                                 \
       __PRETTY_FUNCTION__,                                      \
       #expr1, #expr2,                                           \
-      expr1, expr2);                                            \
+      v1, v2);                                                  \
     return;                                                     \
   } STMT_END
 
 #define test_memeq(expr1, expr2, len)                           \
-  STMT_BEGIN if(!memcmp(expr1,expr2,len)) { printf("."); } else {    \
+  STMT_BEGIN                                                    \
+    void *v1=(expr1), *v2=(expr2);                              \
+    if(!memcmp(v1,v2,(len))) { printf("."); } else {            \
     printf("\nFile %s: line %d (%s): Assertion failed: (%s==%s)\n", \
       __FILE__,                                                 \
       __LINE__,                                                 \
@@ -89,7 +99,9 @@
   } STMT_END
 
 #define test_memneq(expr1, expr2, len)                           \
-  STMT_BEGIN if(memcmp(expr1,expr2,len)) { printf("."); } else {    \
+  STMT_BEGIN                                                    \
+    void *v1=(expr1), *v2=(expr2);                              \
+    if(memcmp(v1,v2,(len))) { printf("."); } else {             \
     printf("\nFile %s: line %d (%s): Assertion failed: (%s!=%s)\n", \
       __FILE__,                                                 \
       __LINE__,                                                 \



More information about the tor-commits mailing list