#include #include #include #include "lily-test.h" #include "tests.h" const char *test_LILY_LOCATION() { // if you move this line, you MUST update the expected string! const char *location = LILY_LOCATION; int diff = strcmp(location, "tests/assertions.c:11"); if (diff != 0) return "LILY_LOCATION did not resolve correctly!"; return 0; } /* overarching assert function */ const char *test_assert_msg() { int val = setjmp(_lily_globals.env); if (val != 0) return "true assertion failed incorrectly!"; lily_assert_msg(true, LILY_LOCATION, "should not fail!"); int passed_thru = 0; _lily_globals.error_msg = NULL; _lily_globals.error_location = ""; val = setjmp(_lily_globals.env); if (passed_thru == 0) { passed_thru = 1; // another line that you SHOULD NOT MOVE! lily_assert_msg(false, LILY_LOCATION, "%s %s!", "should", "fail"); return "false assertion incorrectly succeeded!"; } else { if (strcmp(_lily_globals.error_msg, "should fail!") != 0) return "false assertion produced incorrect error message!"; if (strcmp(_lily_globals.error_location, "tests/assertions.c:37")) return "false assertion produced incorrect error location!"; } free(_lily_globals.error_msg); return 0; } /* basic asserts */ const char *test_assert_true() { int val = setjmp(_lily_globals.env); if (val != 0) return "true assertion failed incorrectly!"; lily_assert_true(true); int passed_thru = 0; _lily_globals.error_msg = NULL; _lily_globals.error_location = ""; val = setjmp(_lily_globals.env); if (passed_thru == 0) { passed_thru = 1; lily_assert_true(false); return "false assertion incorrectly succeeded!"; } else { if (strcmp(_lily_globals.error_msg, "false is not true") != 0) return "false assertion produced incorrect error message!"; } free(_lily_globals.error_msg); return 0; } const char *test_assert_false() { int val = setjmp(_lily_globals.env); if (val != 0) return "true assertion failed incorrectly!"; lily_assert_false(false); int passed_thru = 0; _lily_globals.error_msg = NULL; _lily_globals.error_location = ""; val = setjmp(_lily_globals.env); if (passed_thru == 0) { passed_thru = 1; lily_assert_false(true); return "false assertion incorrectly succeeded!"; } else { if (strcmp(_lily_globals.error_msg, "true is not false") != 0) return "false assertion produced incorrect error message!"; } free(_lily_globals.error_msg); return 0; } /* pointer assertions */ const char *test_assert_not_null() { int a = 5; int val = setjmp(_lily_globals.env); if (val != 0) return "true assertion failed incorrectly!"; lily_assert_not_null(&a); int passed_thru = 0; _lily_globals.error_msg = NULL; _lily_globals.error_location = ""; val = setjmp(_lily_globals.env); int *ptr = NULL; if (passed_thru == 0) { passed_thru = 1; lily_assert_not_null(ptr); return "false assertion incorrectly succeeded!"; } else { if (strcmp(_lily_globals.error_msg, "ptr is NULL") != 0) return "false assertion produced incorrect error message!"; } free(_lily_globals.error_msg); return 0; } const char *test_assert_null() { int a = 5; int *ptr = NULL; int val = setjmp(_lily_globals.env); if (val != 0) return "true assertion failed incorrectly!"; lily_assert_null(ptr); int passed_thru = 0; _lily_globals.error_msg = NULL; _lily_globals.error_location = ""; val = setjmp(_lily_globals.env); if (passed_thru == 0) { passed_thru = 1; lily_assert_null(&a); return "false assertion incorrectly succeeded!"; } else { char buf[256]; sprintf(buf, "&a (%p) is not NULL", &a); if (strcmp(_lily_globals.error_msg, buf) != 0) return "false assertion produced incorrect error message!"; } free(_lily_globals.error_msg); return 0; } const char *test_assert_ptr_equal() { int a = 0; int b = 0; int *ptr = &a; int val = setjmp(_lily_globals.env); if (val != 0) return "true assertion failed incorrectly!"; lily_assert_ptr_equal(&a, ptr); int passed_thru = 0; _lily_globals.error_msg = NULL; _lily_globals.error_location = ""; val = setjmp(_lily_globals.env); ptr = &b; if (passed_thru == 0) { passed_thru = 1; lily_assert_ptr_equal(&a, ptr); return "false assertion incorrectly succeeded!"; } else { char buf[256]; sprintf(buf, "&a (%p) is not equal to ptr (%p)", &a, &b); if (strcmp(_lily_globals.error_msg, buf) != 0) return "false assertion produced incorrect error message!"; } free(_lily_globals.error_msg); return 0; } const char *test_assert_ptr_not_equal() { int a = 0; int b = 0; int *ptr = &b; int val = setjmp(_lily_globals.env); if (val != 0) return "true assertion failed incorrectly!"; lily_assert_ptr_not_equal(&a, ptr); int passed_thru = 0; _lily_globals.error_msg = NULL; _lily_globals.error_location = ""; val = setjmp(_lily_globals.env); ptr = &a; if (passed_thru == 0) { passed_thru = 1; lily_assert_ptr_not_equal(&a, ptr); return "false assertion incorrectly succeeded!"; } else { char buf[256]; sprintf(buf, "&a (%p) is equal to ptr", &a); if (strcmp(_lily_globals.error_msg, buf) != 0) return "false assertion produced incorrect error message!"; } free(_lily_globals.error_msg); return 0; } /* integer assertions */ const char *test_assert_int_equal() { int a = 56; int b = 56; int val = setjmp(_lily_globals.env); if (val != 0) return "true assertion failed incorrectly!"; lily_assert_int_equal(a, b); int passed_thru = 0; _lily_globals.error_msg = NULL; _lily_globals.error_location = ""; val = setjmp(_lily_globals.env); a = 25; if (passed_thru == 0) { passed_thru = 1; lily_assert_int_equal(a, b); return "false assertion succeeded incorrectly!"; } else { if (strcmp(_lily_globals.error_msg, "a (25) is not equal to b (56)") != 0) return "false assertion produced incorrect error message!"; } free(_lily_globals.error_msg); return 0; } const char *test_assert_int_not_equal() { int a = 25; int b = 26; int val = setjmp(_lily_globals.env); if (val != 0) return "true assertion failed incorrectly!"; lily_assert_int_not_equal(a, b); int passed_thru = 0; _lily_globals.error_msg = NULL; _lily_globals.error_location = ""; val = setjmp(_lily_globals.env); b = 25; if (passed_thru == 0) { passed_thru = 1; lily_assert_int_not_equal(a, b); return "false assertion incorrectly succeeded!"; } else { if (strcmp(_lily_globals.error_msg, "a (25) is equal to b") != 0) return "false assertion produced incorrect error message!"; } free(_lily_globals.error_msg); return 0; }