From 091e51fbbdc71f85facd44108901345ebf89b55d Mon Sep 17 00:00:00 2001 From: Steven H Johnson <shjohnson.pi@gmail.com> Date: Sun, 11 Nov 2018 22:49:58 -0500 Subject: [PATCH] Do full tests for my_sqrt with mocking. --- src/unit_tests | Bin 31608 -> 0 bytes tests/cunit/README.md | 3 + tests/cunit/cunit.c | 24 +++++++ tests/cunit/cunit.h | 113 ++++++++++++++++++++++++++++++++ tests/unit_tests/Makefile | 11 ++-- tests/unit_tests/mock_sqrt.c | 17 ++++- tests/unit_tests/mock_sqrt.h | 3 + tests/unit_tests/test_my_sqrt.c | 76 +++++++++++++++++---- 8 files changed, 230 insertions(+), 17 deletions(-) delete mode 100755 src/unit_tests create mode 100644 tests/cunit/README.md create mode 100644 tests/cunit/cunit.c create mode 100644 tests/cunit/cunit.h create mode 100644 tests/unit_tests/mock_sqrt.h diff --git a/src/unit_tests b/src/unit_tests deleted file mode 100755 index ff035a93ea140e83b2f57439eb874e1619dfceeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31608 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 diff --git a/tests/cunit/README.md b/tests/cunit/README.md new file mode 100644 index 0000000..12abd42 --- /dev/null +++ b/tests/cunit/README.md @@ -0,0 +1,3 @@ +Custom made C Unit Testing Library by Kapenga. + +Not to be confused with libcunit1. \ No newline at end of file diff --git a/tests/cunit/cunit.c b/tests/cunit/cunit.c new file mode 100644 index 0000000..07b520c --- /dev/null +++ b/tests/cunit/cunit.c @@ -0,0 +1,24 @@ +// cunit.c +// The global constants for cunit and cunit_init(), +// which should be called befoer using the unit test +// macros in cunit.h +#include <stdio.h> +#include "cunit.h" + +FILE *cunit_log; // when cunit test macors print resu +double cunit_dmacheps; + +int cunit_init() { +double dm; +double dmacheps = 0.5; + +cunit_log = stderr; +// a crude way for getting close to macheps +// should use a standard lib cal here +while( (1.0 + (dm = dmacheps/2.0) ) != 1.0 ) { + dmacheps = dm; +} +cunit_dmacheps = dmacheps; +return 0; +} + diff --git a/tests/cunit/cunit.h b/tests/cunit/cunit.h new file mode 100644 index 0000000..92b438a --- /dev/null +++ b/tests/cunit/cunit.h @@ -0,0 +1,113 @@ +#include <stdio.h> +#include <assert.h> +#include <math.h> + +extern FILE *cunit_log; +extern double cunit_dmacheps; + +int cunit_init(); + +#define cunit_open(log) { \ + if((cunit_log=fopen( log, "w") == NULL ) { \ + cunit_log = stderr; \ + } \ +} +#define cunit_close fclose(cunit_log) +#define cunit_flush() fflush(cunit_log) +#define cunit_date(str) { \ + fprintf(cunit_log, "%s LINE %d: DATE:%s TIME:%s :%s\n", \ + __FILE__ , __LINE__ , __DATE__ , __TIME__ , str ); \ +} +#define cunit_print(str) { \ + fprintf(cunit_log, "%s\n", str ); \ +} + +#define assert_true(str, a) { \ + if( !( a ) ) { \ + fprintf(cunit_log, "%s LINE %d: %s, %d != TRUE\n", \ + __FILE__ , __LINE__ , str , a ); \ + } \ +} + +#define assert_false(str, a) { \ + if( a ) { \ + fprintf(cunit_log, "%s LINE %d: %s, %d != FALSE\n", \ + __FILE__ , __LINE__ , str , a ); \ + } \ +} + +#define assert_eq(str,a,b) { \ + if( a != b ) { \ + fprintf(cunit_log, "%s LINE %d: %s, %d !== %d\n", \ + __FILE__ , __LINE__ , str , a , b ); \ + } \ +} +#define assert_neq(str,a,b) { \ + if( a == b ) { \ + fprintf(cunit_log, "%s LINE %d: %s, %d !!= %d\n", \ + __FILE__ , __LINE__ , str , a , b ); \ + } \ +} +#define assert_ge(str,a,b) { \ + if( a < b ) { \ + fprintf(cunit_log, "%s LINE %d: %s, %d !>= %d\n", \ + __FILE__ , __LINE__ , str , a , b ); \ + } \ +} +#define assert_gt(str,a,b) { \ + if( a <= b ) { \ + fprintf(cunit_log, "%s LINE %d: %s, %d !> %d\n", \ + __FILE__ , __LINE__ , str , a , b ); \ + } \ +} +#define assert_le(str,a,b) { \ + if( a > b ) { \ + fprintf(cunit_log, "%s LINE %d: %s, %d !<= %d\n", \ + __FILE__ , __LINE__ , str , a , b ); \ + } \ +} +#define assert_lt(str,a,b) { \ + if( a >= b ) { \ + fprintf(cunit_log, "%s LINE %d: %s, %d !< %d\n", \ + __FILE__ , __LINE__ , str , a , b ); \ + } \ +} +#define assert_feq(str,a,b) { \ + if( a != b ) { \ + fprintf(cunit_log, "%s LINE %d: %s, %24.16f !== %24.16f\n", \ + __FILE__ , __LINE__ , str , a , b ); \ + } \ +} +// eq subject to absolute error +#define assert_feqaerr(str,a,b,aerr) { \ + if( fabs(a - b) > aerr ) { \ + fprintf(cunit_log, "%s LINE %d: %s, %24.16f !== %24.16f err=%10.6e\n", \ + __FILE__ , __LINE__ , str , a , b , err); \ + } \ +} +// eq subject to relative error +// Perhaps it should check if a == b == 0.0 +#define assert_feqrerr(str,a,b,rerr) { \ + if( fabs(a - b)/(fabs(a) + fabs(b)) > rerr ) { \ + fprintf(cunit_log, "%s LINE %d: %s, %24.16f !>= %24.16f rerr=%10.6e\n", \ + __FILE__ , __LINE__ , str , a , b , rerr ); \ + } \ +} +#define assert_fgt(str,a,b) { \ + if( a <= b ) { \ + fprintf(cunit_log, "%s LINE %d: %s, %24.16f !> %24.16f\n", \ + __FILE__ , __LINE__ , str , a , b ); \ + } \ +} +#define assert_fle(str,a,b) { \ + if( a > b ) { \ + fprintf(cunit_log, "%s LINE %d: %s, %24.16f !<= %24.16f\n", \ + __FILE__ , __LINE__ , str , a , b ); \ + } \ +} +#define assert_flt(str,a,b) { \ + if( a >= b ) { \ + fprintf(cunit_log, "%s LINE %d: %s, %24.16f !< %24.16f\n", \ + __FILE__ , __LINE__ , str , a , b ); \ + } \ +} diff --git a/tests/unit_tests/Makefile b/tests/unit_tests/Makefile index 93e370f..2a78f14 100644 --- a/tests/unit_tests/Makefile +++ b/tests/unit_tests/Makefile @@ -4,7 +4,7 @@ LIBS = -lm CC = gcc CFLAGS = -Wall -pedantic -std=c99 -g SRC_DIR = ../../src -WRAPPED = -Wl,--wrap=sqrt +CUNIT_DIR = ../cunit .PHONY: default all clean test_unit_all @@ -14,15 +14,18 @@ all: default test_unit_all: test_my_sqrt.out ./test_my_sqrt.out -test_my_sqrt.out: my_sqrt.o test_my_sqrt.o mock_sqrt.o - ${CC} -o $@ $^ $(LIBS) $(WRAPPED) +test_my_sqrt.out: my_sqrt.o test_my_sqrt.o mock_sqrt.o cunit.o + ${CC} -o $@ $^ $(LIBS) -Wl,--wrap=sqrt my_sqrt.o: $(SRC_DIR)/my_sqrt.c $(SRC_DIR)/my_sqrt.h ${CC} -c -o $@ $< ${CFLAGS} -test_my_sqrt.o: test_my_sqrt.c +test_my_sqrt.o: test_my_sqrt.c mock_sqrt.h mock_sqrt.o: mock_sqrt.c +cunit.o: $(CUNIT_DIR)/cunit.c $(CUNIT_DIR)/cunit.h + ${CC} -c -o $@ $< ${CFLAGS} + clean: -rm -f *.o *.out diff --git a/tests/unit_tests/mock_sqrt.c b/tests/unit_tests/mock_sqrt.c index 376b8b4..2c04e79 100644 --- a/tests/unit_tests/mock_sqrt.c +++ b/tests/unit_tests/mock_sqrt.c @@ -1,4 +1,6 @@ -static short x = 0; +static double test_x = 0; +static double test_sqrt_x = 0; +static double test_x_input = 0; /** * Mocks sqrt function. @@ -6,5 +8,16 @@ static short x = 0; * Requires '-Wl,--wrap=sqrt' flag when linking. */ double __wrap_sqrt(double x) { - return 1.0f; + test_x_input = x; + return test_sqrt_x; } + +void mock_sqrt_setup(double x, double sqrt_x) { + test_x = x; + test_sqrt_x = sqrt_x; +} + +void mock_sqrt_get(double *x, double *sqrt_x) { + *x = test_x_input; + *sqrt_x = test_sqrt_x; +} \ No newline at end of file diff --git a/tests/unit_tests/mock_sqrt.h b/tests/unit_tests/mock_sqrt.h new file mode 100644 index 0000000..0f64be5 --- /dev/null +++ b/tests/unit_tests/mock_sqrt.h @@ -0,0 +1,3 @@ +// mock_sqrt.h +void mock_sqrt_setup(double x, double sqrt_x); +void mock_sqrt_get(double *x, double *sqrt_x); \ No newline at end of file diff --git a/tests/unit_tests/test_my_sqrt.c b/tests/unit_tests/test_my_sqrt.c index aaad03a..54ed2a6 100644 --- a/tests/unit_tests/test_my_sqrt.c +++ b/tests/unit_tests/test_my_sqrt.c @@ -1,23 +1,77 @@ #include <stdio.h> #include "../../src/my_sqrt.h" +#include "../cunit/cunit.h" +#include "mock_sqrt.h" + +void test_my_sqrt_4_returns_2() { + int my_sqrt_error = 0; + double mock_x_in = 4.0f; + double mock_x_out = 2.0f; + double passed_x_in = 0; + double passed_x_out = 0; + double x_out = 0; + + mock_sqrt_setup(mock_x_in, mock_x_out); + + my_sqrt_error = my_sqrt(mock_x_in, &x_out); + + mock_sqrt_get(&passed_x_in, &passed_x_out); + + assert_eq("my_sqrt returned error", 0, my_sqrt_error); + assert_feq("mock_sqrt did not get right argument", passed_x_in, mock_x_in); + assert_feq("my_sqrt modified mock_sqrt return value", passed_x_out, x_out); +} + +void test_my_sqrt_nan_has_error() { + int my_sqrt_error = 0; + double x_in = NAN; + double x_out = 0; + + mock_sqrt_setup(0, 0); + + my_sqrt_error = my_sqrt(x_in, &x_out); + + assert_neq("my_sqrt didn't return error", 0, my_sqrt_error); +} + +void test_my_sqrt_inf_has_error() { + int my_sqrt_error = 0; + double x_in = INFINITY; + double x_out = 0; + + mock_sqrt_setup(0, 0); + + my_sqrt_error = my_sqrt(x_in, &x_out); + + assert_neq("my_sqrt didn't return error", 0, my_sqrt_error); +} + +void test_my_sqrt_negative_returns_nan_and_sqrt_not_called() { + int my_sqrt_error = 0; + double x_in = -1.0f; + double x_out = 0; + + mock_sqrt_setup(0, 0); // zero will be returned if mock_sqrt called + + my_sqrt_error = my_sqrt(x_in, &x_out); + + assert_eq("my_sqrt returned error", 0, my_sqrt_error); + assert_true("Expected NAN", isnan(x_out)); +} /** - * TODO: This is a work in progress. - * - * Currently this shows that my_sqrt's sqrt() function has been mocked. - * It will always return 1, instead of computing the correct value of 2. + * Test my_sqrt by mocking the math library sqrt() function. */ int main(int argc, char *argv[]) { int error = 0; - int my_sqrt_error = 0; - double x = 4.0f; - double out = 0; - printf("Hello!\n"); + // init cunit + cunit_init(); - my_sqrt_error = my_sqrt(x, &out); - printf("my_sqrt_error: %d\n", my_sqrt_error); - printf("Computed value: %f\n", out); + test_my_sqrt_4_returns_2(); + test_my_sqrt_nan_has_error(); + test_my_sqrt_inf_has_error(); + test_my_sqrt_negative_returns_nan_and_sqrt_not_called(); return error; } -- GitLab