diff options
Diffstat (limited to 'test/testsuite.h')
-rw-r--r-- | test/testsuite.h | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/test/testsuite.h b/test/testsuite.h new file mode 100644 index 0000000..84c7815 --- /dev/null +++ b/test/testsuite.h @@ -0,0 +1,101 @@ +/* vi: set sw=4 ts=4: */ +/* + * Some simple macros for use in test applications. + * Copyright (C) 2000-2006 by Erik Andersen <andersen@uclibc.org> + * + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +#ifndef TESTSUITE_H +#define TESTSUITE_H + +#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; + +void error_msg(int result, int line, const char* file, const char* command) +{ + failures++; + + 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 __attribute__((unused)), const char* command __attribute__((unused))) +{ +#if 0 + printf("passed test: %s == 0\n", command); +#endif +} + +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); + } +} + +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 */ |