123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- /*
- * Title : testutils
- * Author : Tim Brecht
- * Date : Thu Dec 23 21:19:00 EST 2004
- * Modified : Wed 1 Jan 2014 14:17:19 EST
- * Added TEST_EQUAL_ONE_OF
- * Fri Jun 28 22:37:24 EDT 2013 for use with OS161
- *
- * Some simple utilities that can be helpful for testing.
- * Feel free to add/modify this code to suit your needs.
- * NOTE: this hasn't been fully tested.
- *
- * See test-testutil, file1 and file2 for example use cases.
- */
- #include <stdio.h>
- #include "testutils.h"
- /* Used to track the number of tests and failures */
- static int test_num = 0;
- static int num_failures = 0;
- static int verbose = 0;
- /* Use to print the source file, function and line */
- static void
- print_location(const char *file, const char *func, int line, const char *in_test)
- {
- printf(" %s : function = %s, line = %d test was %s\n", file, func, line, in_test);
- }
- /* Check if val is equal to expected_val, if not it is an error */
- void
- test_equal(int val, int expected_val, const char *str,
- const char *file, const char *func, int line)
- {
- int failed = 0;
- char const *out = "SUCCESS";
- test_num++;
- if (val != expected_val) {
- num_failures++;
- failed = 1;
- out = "FAILURE";
- }
- if (failed || verbose) {
- printf("%s ON TEST = %d : Got %d : expected %d\n",
- out, test_num, val, expected_val);
- if (failed) {
- printf(" %s\n", str);
- }
- print_location(file, func, line, __FUNCTION__);
- }
- } /* test_equal */
- /* Check if val is equal to expected_val, if not it is an error */
- void
- test_equal_one_of(int val, int expected_val1, int expected_val2, const char *str,
- const char *file, const char *func, int line)
- {
- int failed = 0;
- char const *out = "SUCCESS";
- test_num++;
- if (val != expected_val1 && val != expected_val2) {
- num_failures++;
- failed = 1;
- out = "FAILURE";
- }
- if (failed || verbose) {
- printf("%s ON TEST = %d : Got %d : expected one of %d or %d\n",
- out, test_num, val, expected_val1, expected_val2);
- if (failed) {
- printf(" %s\n", str);
- }
- print_location(file, func, line, __FUNCTION__);
- }
- } /* test_equal */
- /* Check if val is > 0, if not it is an error */
- void
- test_positive(int val, const char *str,
- const char *file, const char *func, int line)
- {
- int failed = 0;
- char const *out = "SUCCESS";
- test_num++;
- if (val <= 0) {
- num_failures++;
- failed = 1;
- out = "FAILURE";
- }
- if (failed || verbose) {
- printf("%s ON TEST = %d : Got %d : expected Positive Value\n",
- out, test_num, val);
- if (failed) {
- printf(" %s\n", str);
- }
- print_location(file, func, line, __FUNCTION__);
- }
- }
- /* Check if val is < 0, if not it is an error */
- void
- test_negative(int val, const char *str,
- const char *file, const char *func, int line)
- {
- int failed = 0;
- char const *out = "SUCCESS";
- test_num++;
- if (val >= 0) {
- num_failures++;
- failed = 1;
- out = "FAILURE";
- }
- if (failed || verbose) {
- printf("%s ON TEST = %d : Got %d : expected Negative Value\n",
- out, test_num, val);
- if (failed) {
- printf(" %s\n", str);
- }
- print_location(file, func, line, __FUNCTION__);
- }
- }
- /* Check if val1 is not equal to val2, if not it is an error */
- void
- test_not_equal(int val1, int val2, const char *str,
- const char *file, const char *func, int line)
- {
- int failed = 0;
- char const *out = "SUCCESS";
- test_num++;
- if (val1 == val2) {
- num_failures++;
- failed = 1;
- out = "FAILURE";
- }
- if (failed || verbose) {
- printf("%s ON TEST = %d : Got %d : Expected anything but %d\n",
- out, test_num, val1, val2);
- if (failed) {
- printf(" %s\n", str);
- }
- print_location(file, func, line, __FUNCTION__);
- }
- }
- /* Reset the statistic counters */
- void
- test_reset_stats(void)
- {
- num_failures = 0;
- test_num = 0;
- }
- void
- test_verbose_on(void)
- {
- printf("TEST VERBOSE ON\n");
- verbose = 1;
- }
- void
- test_verbose_off(void)
- {
- printf("TEST VERBOSE OFF\n");
- verbose = 0;
- }
- void
- test_print_stats(const char *file, const char* func, int line)
- {
- printf("TEST STATS for %s : from function = %s, line = %d\n",
- file, func, line);
- printf(" Number of failures = %d Number of successes = %d Number of Tests = %d\n",
- num_failures, test_num - num_failures, test_num);
- printf("\n");
- }
- // #define UNIT_TEST
- #ifdef UNIT_TEST
- int
- main()
- {
- TEST_VERBOSE_ON();
- TEST_EQUAL(1, 1, "Should pass\n");
- TEST_EQUAL(1, 2, "Should fail\n");
- TEST_EQUAL_ONE_OF(1, 1, 2, "Should pass\n");
- TEST_EQUAL_ONE_OF(1, 2, 1, "Should pass\n");
- TEST_EQUAL_ONE_OF(1, 2, 3, "Should fail\n");
- TEST_NOT_EQUAL(1, 2, "Should pass\n");
- TEST_NOT_EQUAL(2, 1, "Should pass\n");
- TEST_NOT_EQUAL(2, 2, "Should fail\n");
- TEST_NEGATIVE(-1, "Should pass\n");
- TEST_NEGATIVE(0, "Should fail\n");
- TEST_NEGATIVE(1, "Should fail\n");
- TEST_POSITIVE(1, "Should pass\n");
- TEST_POSITIVE(0, "Should fail\n");
- TEST_POSITIVE(-1, "Should fail\n");
- TEST_STATS();
- printf("Should have 7 passes and 7 failures\n");
- }
- #endif /* UNIT_TEST */
|