OSDN Git Service

test: Fix math .c dependency
[uclinux-h8/uClibc.git] / test / testsuite.h
index 9181cc5..84c7815 100644 (file)
 /* vi: set sw=4 ts=4: */
 /*
  * Some simple macros for use in test applications.
+ * Copyright (C) 2000-2006 by Erik Andersen <andersen@uclibc.org>
  *
- * Copyright (C) 2000 by Lineo, inc.
- * Written by Erik Andersen <andersen@lineo.com>, <andersee@debian.org>
- *
- * 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 2 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, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
  */
 
+#ifndef TESTSUITE_H
+#define TESTSUITE_H
 
-void error_msg(int result, int line, const char* file, const char* msg, ...);
-void success_msg(int result, const char* msg, ...);
-void stop_testing(void)  __attribute__((noreturn));;
+#ifdef __NO_TESTCODE__
+extern size_t test_number;
+#endif
 
+extern void init_testsuite(const char* testname);
+extern void done_testing(void) __attribute__((noreturn));
+extern void success_msg(int result, const char* command);
+extern void error_msg(int result, int line, const char* file, const char* command);
 
+#ifndef __NO_TESTCODE__
 
+size_t test_number = 0;
 static int failures = 0;
 
-
-#define TEST_STRING_OUTPUT( command, expected_result, message, args...) \
-       do { \
-               int result=strcmp( command, expected_result); \
-               if ( result != 0 ) \
-                       success_msg( result, message, ## args); \
-               else \
-                       error_msg(result, __LINE__, __FILE__, message, ## args); \
-       } while (0)
-               
-
-#define TEST_NUMERIC_OUTPUT( command, expected_result, message, args...) \
-       do { \
-               int result=(command); \
-               if ( result == expected_result ) \
-                       success_msg( result, message, ## args); \
-               else \
-                       error_msg(result, __LINE__, __FILE__, message, ## args); \
-       } while (0)
-               
-
-#define TEST_SUCCESS(command, message, args...)        TEST_NUMERIC_OUTPUT( command, EXIT_SUCCESS, message, ## args)
-
-
-
-void error_msg(int result, int line, const char* file, const char* msg, ...)
+void error_msg(int result, int line, const char* file, const char* command)
 {
-       va_list p;
        failures++;
 
-       va_start(p, msg);
-       printf("FAILED TEST ");
-       vprintf(msg, p);
-       va_end(p);
-       printf(" AT LINE: %d, FILE: %s\n", line, file);
-}   
+       printf("\nFAILED TEST %lu: \n\t%s\nResult: %d",
+                       (unsigned long)test_number, command, result);
+       printf("AT LINE: %d, FILE: %s\n\n", line, file);
+}
 
-void success_msg(int result, const char* msg, ...)
+void success_msg(int result __attribute__((unused)), const char* command __attribute__((unused)))
 {
 #if 0
-       va_list p;
-       va_start(p, msg);
-       printf("passed test: ");
-       vprintf(msg, p);
-       va_end(p);
-       printf("\n");
+       printf("passed test: %s == 0\n", command);
 #endif
 }
 
-void stop_testing(void)
+void done_testing(void)
 {
     if (0 < failures) {
                printf("Failed %d tests\n", failures);
                exit(EXIT_FAILURE);
        } else {
                printf("All functions tested sucessfully\n");
-               exit( EXIT_SUCCESS );
+               exit(EXIT_SUCCESS);
        }
 }
+
+void init_testsuite(const char* testname)
+{
+       printf("%s", testname);
+       test_number = 0;
+       failures = 0;
+#if !defined(__UCLIBC__) || defined(__UCLIBC_DYNAMIC_ATEXIT__)
+       atexit(done_testing);
+#endif
+}
+
+#endif /* __NO_TESTCODE__ */
+
+
+#define TEST_STRING_OUTPUT(command, expected_result) \
+       do { \
+               int result = strcmp(command, expected_result); \
+               test_number++; \
+               if (result == expected_result) { \
+                       success_msg(result, "command"); \
+               } else { \
+                       error_msg(result, __LINE__, __FILE__, command); \
+               }; \
+       } while (0)
+
+#define TEST_NUMERIC(command, expected_result) \
+       do { \
+               int result = (command); \
+               test_number++; \
+               if (result == expected_result) { \
+                       success_msg(result, # command); \
+               } else { \
+                       error_msg(result, __LINE__, __FILE__, # command); \
+               }; \
+       } while (0)
+
+#define TEST(command) \
+       do { \
+               int result = (command); \
+               test_number++; \
+               if (result == 1) { \
+                       success_msg(result, # command); \
+               } else { \
+                       error_msg(result, __LINE__, __FILE__,  # command); \
+               }; \
+       } while (0)
+
+#define STR_CMD(cmd) cmd
+
+#endif /* TESTSUITE_H */