diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-10-16 12:15:59 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-10-16 13:45:09 -0400 |
| commit | 9371874907c042b587b5b9598b82946138d3bf75 (patch) | |
| tree | f3bb5e69c4463f8f3b519a31a2d036402490cdfb | |
| parent | e088dc7df320eee30903ae713d574b9d16ad1407 (diff) | |
pktst: created + bump pk.h version to 0.9.4
| -rw-r--r-- | Makefile | 9 | ||||
| -rw-r--r-- | config.mk | 2 | ||||
| -rw-r--r-- | pk.h.in | 15 | ||||
| -rw-r--r-- | pktst.h | 166 | ||||
| -rw-r--r-- | test/pkstn.c | 41 | ||||
| -rw-r--r-- | test/pkstn.cpp | 63 |
6 files changed, 244 insertions, 52 deletions
@@ -3,7 +3,7 @@ include config.mk -.PHONY: pkmacros pkmem-types pkmem pkstr pkev pkarr pkstn pktmr test +.PHONY: pkmacros pkmem-types pkmem pkstr pkev pkiter pkarr pkstn pktmr pkuuid pkbktarr pkfuncinstr pktst test SRC = \ pkmacros.h \ @@ -18,6 +18,7 @@ SRC = \ pkbktarr.h \ pktmpln.h \ pkfuncinstr.h \ + pktst.h \ test/pkmacros.c \ test/pkmacros.cpp \ test/pkmem-types.c \ @@ -58,6 +59,7 @@ all: options .WAIT clean .WAIT \ pkbktarr \ pktmpln \ pkfuncinstr \ + pktst \ test/test-pkmem-types test/test-pkmem-types-cpp \ test/test-pkmem test/test-pkmem-cpp \ test/test-pkmacros test/test-pkmacros-cpp \ @@ -117,6 +119,8 @@ pktmpln: pktmpln.gch pktmpln.gchpp pkfuncinstr: pkfuncinstr.gch pkfuncinstr.gchpp +pktst: pktst.gch pktst.gchpp + build: pkmacros build: pkmem-types build: pkmem @@ -129,6 +133,7 @@ build: pktmr build: pkuuid build: pkbktarr build: pkfuncinstr +build: pktst echo "#ifndef PK_SINGLE_HEADER_FILE_H\n#define PK_SINGLE_HEADER_FILE_H" > pk.h cat pk.h.in \ pkmacros.h \ @@ -144,6 +149,7 @@ build: pkfuncinstr pkuuid.h \ pkbktarr.h \ pkfuncinstr.h \ + pktst.h \ >> pk.h echo "#endif /* PK_SINGLE_HEADER_FILE_H */" >> pk.h sed -i -r \ @@ -228,6 +234,7 @@ test: pkuuid test/test-pkuuid test/test-pkuuid-cpp test: pkbktarr test/test-pkbktarr test/test-pkbktarr-cpp test: pktmpln test: pkfuncinstr +test: pktst test: @echo "" ./test/test-pkmacros ; echo Result: $$? "\n" @@ -1,5 +1,5 @@ # pk.h version -VERSION = 0.9.3 +VERSION = 0.9.4 # paths PREFIX = /usr/local @@ -288,6 +288,18 @@ * } * ``` * +******************************************************************************** +* pktst.h: define PK_IMPL_TST before including pk.h to enable ad-hoc. +* +* Provides a simple testing framework +* +* Examples: +* ```c +* main() { +* pk_test_run_test_groups(&my_get_test_group_func, 1); +* } +* ``` +* *******************************************************************************/ #define PK_VERSION "@@PK_VERSION@@" @@ -320,4 +332,7 @@ # ifndef PK_IMPL_FUNCINSTR # define PK_IMPL_FUNCINSTR # endif +# ifndef PK_IMPL_TST +# define PK_IMPL_TST +# endif #endif @@ -0,0 +1,166 @@ +#ifndef PK_PKTST_H +#define PK_PKTST_H + +#include "pkmacros.h" /* deleteme */ + +typedef int (pk_test_func)(); +struct pk_test_group; +typedef struct pk_test_group *(pk_test_group_get)(); + +typedef void (pk_test_group_setup)(); +typedef void (pk_test_group_teardown)(); +typedef void (pk_test_setup)(); +typedef void (pk_test_teardown)(); + +struct pk_test { + const char *title; + pk_test_func *func; + int expected_result; +}; + +struct pk_test_group { + const char *title; + pk_test_group_setup *group_setup; + pk_test_group_teardown *group_teardown; + pk_test_setup *test_setup; + pk_test_teardown *test_teardown; + struct pk_test *tests; + unsigned char n_tests; +}; + +void pk_test_run_test_groups(pk_test_group_get **group_get_fns, unsigned long n_groups); + +#if defined(__cplusplus) +#include <iostream> +#define PK_TEST_ASSERT_BODY(expected, value) \ + std::cerr << "[pk-test] "; \ + std::cerr << "(" << __FILE__ << ":" << __LINE__ << ")"; \ + std::cerr << PK_CLR_FG_RED " Failed. " PK_CLR_RESET; \ + std::cerr << "Condition: \""; \ + std::cerr << PK_CLR_FG_BRIGHT_BLUE << #value << PK_CLR_RESET; \ + std::cerr << "\", Expected: \""; \ + std::cerr << PK_CLR_FG_GREEN << (expected) << PK_CLR_RESET; \ + std::cerr << "\", Got: \""; \ + std::cerr << PK_CLR_FG_RED << (value) << PK_CLR_RESET; \ + std::cerr << "\"." << std::endl; +template<typename T> +inline bool flt_equal(T a, T b, T epsilon) { + return abs(a - b) < epsilon; +} +#else /* __cplusplus */ +#include <stdio.h> +#define PK_TEST_ASSERT_BODY(expected, value) \ + fprintf(stderr,"[pk-test] (%s:%i) ", __FILE__, __LINE__); \ + fprintf(stderr,"%s ", PK_CLR_FG_RED "Failed. " PK_CLR_RESET); \ + fprintf(stderr,"Test condition \""); \ + fprintf(stderr,"%s\"\n",PK_CLR_FG_BRIGHT_BLUE #value PK_CLR_RESET); +#endif /* __cplusplus */ + +#define PK_TEST_ASSERT_EQ(expected, value) { \ + if ((value) != (expected)) { \ + PK_TEST_ASSERT_BODY(expected, value) \ + } \ +} +#define PK_TEST_ASSERT_EQ_RET(expected, value) { \ + if ((value) != (expected)) { \ + PK_TEST_ASSERT_BODY(expected, value) \ + return -1; \ + } \ +} +#define PK_TEST_ASSERT_EQ_EXIT(expected, value) { \ + if ((value) != (expected)) { \ + PK_TEST_ASSERT_BODY(expected, value) \ + exit(1); \ + } \ +} +#define PK_TEST_ASSERT_NEQ(expected, value) { \ + if ((value) == (expected)) { \ + PK_TEST_ASSERT_BODY(expected, value) \ + } \ +} +#define PK_TEST_ASSERT_NEQ_RET(expected, value) { \ + if ((value) == (expected)) { \ + PK_TEST_ASSERT_BODY(expected, value) \ + return -1; \ + } \ +} +#define PK_TEST_ASSERT_NEQ_EXIT(expected, value) { \ + if ((value) == (expected)) { \ + PK_TEST_ASSERT_BODY(expected, value) \ + exit(1); \ + } \ +} + +#ifdef PK_IMPL_TST + +#include "../pktmr.h" /* deleteme */ + +void pk_test_run_test_groups(pk_test_group_get **group_get_fns, unsigned long n_groups) { + int result; + unsigned long i; + unsigned int k, pass_count, total_test_count, total_test_pass_count, test_group_count, test_group_pass_count; + double elapsed_ms, group_ms, total_ms; + pk_tmr func_tmr, total_tmr; + pk_test_group *group; + + fprintf(stdout, "\r\n"); + fprintf(stdout, "[pk-test] Begin..\n"); + fprintf(stdout, "[pk-test] Running %04ld tests..\n", n_groups); + + i = 0; + total_ms = 0; + total_test_count = 0; + total_test_pass_count = 0; + test_group_count = 0; + test_group_pass_count = 0; + pk_tmr_start(total_tmr); + fprintf(stdout, "\r\n"); + for (i = 0; i < n_groups; ++i) { + test_group_count += 1; + pass_count = 0; + group_ms = 0; + group = group_get_fns[i](); + fprintf(stdout, "[pk-test][%s] Begin..\n", group->title); + if (group->group_setup != NULL) (group->group_setup)(); + for (k = 0; k < group->n_tests; ++k) { + total_test_count += 1; + fprintf(stdout, "[pk-test][%s][%s] Begin..\n", group->title, group->tests[k].title); + if (group->test_setup != NULL) (group->test_setup)(); + pk_tmr_start(func_tmr); + result = (group->tests[k].func)(); + pk_tmr_stop(func_tmr); + elapsed_ms = pk_tmr_duration_dbl_mili(func_tmr); + fprintf(stdout, "[pk-test][%s][%s] End.\n", group->title, group->tests[k].title); + group_ms += elapsed_ms; + total_ms += elapsed_ms; + fprintf(stdout, "[pk-test][%s][%s] Elapsed ms: '%f'.\n", group->title, group->tests[k].title, elapsed_ms); + if (result == group->tests[k].expected_result){ + total_test_pass_count += 1; + pass_count += 1; + fprintf(stdout, "[pk-test][%s][%s] %sPassed.%s\n", group->title, group->tests[k].title, PK_CLR_FG_GREEN, PK_CLR_RESET); + } else { + fprintf(stdout, "[pk-test][%s][%s] %sFailed.%s\n", group->title, group->tests[k].title, PK_CLR_FG_RED, PK_CLR_RESET); + fprintf(stdout, "[pk-test][%s][%s] Expected: '" PK_CLR_FG_GREEN "%i" PK_CLR_RESET "', Got: '" PK_CLR_FG_RED "%i" PK_CLR_RESET "'.\n", group->title, group->tests[k].title, group->tests[k].expected_result, result); + } + if (group->test_teardown != NULL) (group->test_teardown)(); + } + if (group->group_teardown != NULL) (group->group_teardown)(); + fprintf(stdout, "[pk-test][%s] End.\n", group->title); + fprintf(stdout, "[pk-test][%s] Tests completed: ( %s%04d%s / %04d ).\n", group->title, pass_count == group->n_tests ? PK_CLR_FG_GREEN : PK_CLR_FG_RED, pass_count, PK_CLR_RESET, group->n_tests); + fprintf(stdout, "[pk-test][%s] Elapsed ms: '%f'.\n\n", group->title, group_ms); + if (pass_count == group->n_tests) { + test_group_pass_count += 1; + } + } + pk_tmr_stop(total_tmr); + + fprintf(stdout, "[pk-test] End.\n"); + fprintf(stdout, "[pk-test] Tests completed: ( %s%04d%s / %04d ).\n", total_test_count == total_test_pass_count ? PK_CLR_FG_GREEN : PK_CLR_FG_RED, total_test_pass_count, PK_CLR_RESET, total_test_count); + fprintf(stdout, "[pk-test] Test groups completed: ( %s%04d%s / %04d ).\n", test_group_count == test_group_pass_count ? PK_CLR_FG_GREEN : PK_CLR_FG_RED, test_group_pass_count, PK_CLR_RESET, test_group_count); + fprintf(stdout, "[pk-test] Elapsed ms: '%f' (test fn sum).\n", total_ms); + fprintf(stdout, "[pk-test] Elapsed ms: '%f' (actual).\n\n", pk_tmr_duration_dbl_mili(total_tmr)); +} + +#endif /* PK_IMPL_TST */ + +#endif /* PK_PKTST_H */ diff --git a/test/pkstn.c b/test/pkstn.c index 92d982f..789a2be 100644 --- a/test/pkstn.c +++ b/test/pkstn.c @@ -2,6 +2,7 @@ #define PK_IMPL_STN #include "../pkstn.h" +#include "../pktst.h" #include <stdio.h> #include <stdlib.h> @@ -18,8 +19,8 @@ int main(int argc, char *argv[]) int64_t i = {0}; res = pk_stn_int64_t(&i, "-1", &s, 0); fprintf(stdout, "pkstn: stn_int64_t res: %ld\n", i); - if (res != PK_STN_RES_SUCCESS) exit(1); - if (-1 != i) exit(1); + PK_TEST_ASSERT_EQ_EXIT(PK_STN_RES_SUCCESS, res) + PK_TEST_ASSERT_EQ_EXIT(-1, i) } // stn_uint64_t @@ -27,8 +28,8 @@ int main(int argc, char *argv[]) uint64_t i = {0}; res = pk_stn_uint64_t(&i, "1", &s, 0); fprintf(stdout, "pkstn: stn_uint64_t res: %lu\n", i); - if (res != PK_STN_RES_SUCCESS) exit(1); - if (1 != i) exit(1); + PK_TEST_ASSERT_EQ_EXIT(PK_STN_RES_SUCCESS, res) + PK_TEST_ASSERT_EQ_EXIT(1, i) } // stn_int32_t @@ -36,8 +37,8 @@ int main(int argc, char *argv[]) int32_t i = {0}; res = pk_stn_int32_t(&i, "-1", &s, 0); fprintf(stdout, "pkstn: stn_int32_t res: %d\n", i); - if (res != PK_STN_RES_SUCCESS) exit(1); - if (-1 != i) exit(1); + PK_TEST_ASSERT_EQ_EXIT(PK_STN_RES_SUCCESS, res) + PK_TEST_ASSERT_EQ_EXIT(-1, i) } // stn_uint32_t @@ -45,8 +46,8 @@ int main(int argc, char *argv[]) uint32_t i = {0}; res = pk_stn_uint32_t(&i, "1", &s, 0); fprintf(stdout, "pkstn: stn_uint32_t res: %u\n", i); - if (res != PK_STN_RES_SUCCESS) exit(1); - if (1 != i) exit(1); + PK_TEST_ASSERT_EQ_EXIT(PK_STN_RES_SUCCESS, res) + PK_TEST_ASSERT_EQ_EXIT(1, i) } // stn_int16_t @@ -54,8 +55,8 @@ int main(int argc, char *argv[]) int16_t i = {0}; res = pk_stn_int16_t(&i, "-1", &s, 0); fprintf(stdout, "pkstn: stn_int16_t res: %d\n", i); - if (res != PK_STN_RES_SUCCESS) exit(1); - if (-1 != i) exit(1); + PK_TEST_ASSERT_EQ_EXIT(PK_STN_RES_SUCCESS, res) + PK_TEST_ASSERT_EQ_EXIT(-1, i) } // stn_uint16_t @@ -63,8 +64,8 @@ int main(int argc, char *argv[]) uint16_t i = {0}; res = pk_stn_uint16_t(&i, "1", &s, 0); fprintf(stdout, "pkstn: stn_uint16_t res: %u\n", i); - if (res != PK_STN_RES_SUCCESS) exit(1); - if (1 != i) exit(1); + PK_TEST_ASSERT_EQ_EXIT(PK_STN_RES_SUCCESS, res) + PK_TEST_ASSERT_EQ_EXIT(1, i) } // stn_int8_t @@ -72,8 +73,8 @@ int main(int argc, char *argv[]) int8_t i = {0}; res = pk_stn_int8_t(&i, "-1", &s, 0); fprintf(stdout, "pkstn: stn_int8_t res: %d\n", i); - if (res != PK_STN_RES_SUCCESS) exit(1); - if (-1 != i) exit(1); + PK_TEST_ASSERT_EQ_EXIT(PK_STN_RES_SUCCESS, res) + PK_TEST_ASSERT_EQ_EXIT(-1, i) } // stn_uint8_t @@ -81,8 +82,8 @@ int main(int argc, char *argv[]) uint8_t i = {0}; res = pk_stn_uint8_t(&i, "1", &s, 0); fprintf(stdout, "pkstn: stn_uint8_t res: %u\n", i); - if (res != PK_STN_RES_SUCCESS) exit(1); - if (1 != i) exit(1); + PK_TEST_ASSERT_EQ_EXIT(PK_STN_RES_SUCCESS, res) + PK_TEST_ASSERT_EQ_EXIT(1, i) } // stn_float @@ -90,8 +91,8 @@ int main(int argc, char *argv[]) float f = {0}; res = pk_stn_float(&f, "-1", &s); fprintf(stdout, "pkstn: stn_float res: %f\n", f); - if (res != PK_STN_RES_SUCCESS) exit(1); - if (-1 != f) exit(1); + PK_TEST_ASSERT_EQ_EXIT(PK_STN_RES_SUCCESS, res) + PK_TEST_ASSERT_EQ_EXIT(-1, f) } // stn_double @@ -99,8 +100,8 @@ int main(int argc, char *argv[]) double f = {0}; res = pk_stn_double(&f, "-1", &s); fprintf(stdout, "pkstn: stn_double res: %f\n", f); - if (res != PK_STN_RES_SUCCESS) exit(1); - if (-1 != f) exit(1); + PK_TEST_ASSERT_EQ_EXIT(PK_STN_RES_SUCCESS, res) + PK_TEST_ASSERT_EQ_EXIT(-1, f) } return 0; diff --git a/test/pkstn.cpp b/test/pkstn.cpp index 21f0319..443e4a5 100644 --- a/test/pkstn.cpp +++ b/test/pkstn.cpp @@ -2,6 +2,7 @@ #define PK_IMPL_STN #include "../pkstn.h" +#include "../pktst.h" #include <cstring> #include <iostream> @@ -58,49 +59,49 @@ void test() { if constexpr (t & TEST_SCALAR_NIL) { res = pk_stn(&i, STRNUM_NIL, &s); std::cout << "pkstn: TEST_SCALAR_NIL res: " << i << "\n"; - if (s != STRNUM_NIL) exit(1); - if (res != PK_STN_RES_INCONVERTIBLE) exit(1); + PK_TEST_ASSERT_EQ_EXIT(STRNUM_NIL, s); + PK_TEST_ASSERT_EQ_EXIT(PK_STN_RES_INCONVERTIBLE, res); } if constexpr (t & TEST_FLOATING_NIL) { res = pk_stn(&i, STRNUM_FLOAT_NIL, &s); std::cout << "pkstn: TEST_FLOATING_NIL res: " << i << "\n"; - if (s != STRNUM_FLOAT_NIL) exit(1); - if (res != PK_STN_RES_INCONVERTIBLE) exit(1); + PK_TEST_ASSERT_EQ_EXIT(STRNUM_FLOAT_NIL, s); + PK_TEST_ASSERT_EQ_EXIT(PK_STN_RES_INCONVERTIBLE, res); } if constexpr (t & TEST_SCALAR_ZED) { res = pk_stn(&i, STRNUM_ZED, &s); std::cout << "pkstn: TEST_SCALAR_ZED res: " << i << "\n"; - if (s != STRNUM_ZED + strlen(STRNUM_ZED)) exit(1); - if (res != PK_STN_RES_SUCCESS) exit(1); - if (T(VAL_SCALAR_ZED) != i) exit(1); + PK_TEST_ASSERT_EQ_EXIT(STRNUM_ZED + strlen(STRNUM_ZED), s); + PK_TEST_ASSERT_EQ_EXIT(PK_STN_RES_SUCCESS, res); + PK_TEST_ASSERT_EQ_EXIT(T(VAL_SCALAR_ZED), i); } if constexpr (t & TEST_FLOATING_ZED) { res = pk_stn(&i, STRNUM_FLOAT_ZED, &s); std::cout << "pkstn: TEST_FLOATING_ZED res: " << i << "\n"; - if (s != STRNUM_FLOAT_ZED + strlen(STRNUM_FLOAT_ZED)) exit(1); - if (res != PK_STN_RES_SUCCESS) exit(1); - if (T(VAL_FLOATING_ZED) != i) exit(1); + PK_TEST_ASSERT_EQ_EXIT(STRNUM_FLOAT_ZED + strlen(STRNUM_FLOAT_ZED), s); + PK_TEST_ASSERT_EQ_EXIT(PK_STN_RES_SUCCESS, res); + PK_TEST_ASSERT_EQ_EXIT(T(VAL_FLOATING_ZED), i); } if constexpr (t & TEST_SCALAR_ONE) { res = pk_stn(&i, STRNUM_ONE, &s); std::cout << "pkstn: TEST_SCALAR_ONE res: " << i << "\n"; - if (s != STRNUM_ONE + strlen(STRNUM_ONE)) exit(1); - if (res != PK_STN_RES_SUCCESS) exit(1); - if (T(VAL_SCALAR_ONE) != i) exit(1); + PK_TEST_ASSERT_EQ_EXIT(STRNUM_ONE + strlen(STRNUM_ONE), s); + PK_TEST_ASSERT_EQ_EXIT(PK_STN_RES_SUCCESS, res); + PK_TEST_ASSERT_EQ_EXIT(T(VAL_SCALAR_ONE), i); } if constexpr (t & TEST_FLOATING_ONE) { res = pk_stn(&i, STRNUM_FLOAT_ONE, &s); std::cout << "pkstn: TEST_FLOATING_ONE res: " << i << "\n"; - if (s != STRNUM_FLOAT_ONE + strlen(STRNUM_FLOAT_ONE)) exit(1); - if (res != PK_STN_RES_SUCCESS) exit(1); - if (T(VAL_FLOATING_ONE) != i) exit(1); + PK_TEST_ASSERT_EQ_EXIT(STRNUM_FLOAT_ONE + strlen(STRNUM_FLOAT_ONE), s); + PK_TEST_ASSERT_EQ_EXIT(PK_STN_RES_SUCCESS, res); + PK_TEST_ASSERT_EQ_EXIT(T(VAL_FLOATING_ONE), i); } if constexpr (t & TEST_SCALAR_ONE_MINUS) { res = pk_stn(&i, STRNUM_ONE_MINUS, &s); std::cout << "pkstn: TEST_SCALAR_ONE_MINUS res: " << i << "\n"; - if (s != STRNUM_ONE_MINUS + strlen(STRNUM_ONE_MINUS)) exit(1); - if (res != PK_STN_RES_SUCCESS) exit(1); - if (T(VAL_SCALAR_ONE_MINUS) != i) exit(1); + PK_TEST_ASSERT_EQ_EXIT(STRNUM_ONE_MINUS + strlen(STRNUM_ONE_MINUS), s); + PK_TEST_ASSERT_EQ_EXIT(PK_STN_RES_SUCCESS, res); + PK_TEST_ASSERT_EQ_EXIT(T(VAL_SCALAR_ONE_MINUS), i); } if constexpr (t & TEST_FLOATING_ONE_MINUS) { res = pk_stn(&i, STRNUM_FLOAT_ONE_MINUS, &s); @@ -108,40 +109,42 @@ void test() { if (s != STRNUM_FLOAT_ONE_MINUS + strlen(STRNUM_FLOAT_ONE_MINUS)) exit(1); if (res != PK_STN_RES_SUCCESS) exit(1); if (T(VAL_FLOATING_ONE_MINUS) != i) exit(1); + PK_TEST_ASSERT_EQ_EXIT(STRNUM_FLOAT_ONE_MINUS + strlen(STRNUM_FLOAT_ONE_MINUS), s); + PK_TEST_ASSERT_EQ_EXIT(PK_STN_RES_SUCCESS, res); } if constexpr (t & TEST_SCALAR_UNDERFLOW) { res = pk_stn(&i, STRNUM_UNDERFLOW, &s); std::cout << "pkstn: TEST_SCALAR_UNDERFLOW res: " << i << "\n"; - if (s != STRNUM_UNDERFLOW + strlen(STRNUM_UNDERFLOW)) exit(1); + PK_TEST_ASSERT_EQ_EXIT(STRNUM_UNDERFLOW + strlen(STRNUM_UNDERFLOW), s); if constexpr(std::is_unsigned_v<T> == true) { - if (res != PK_STN_RES_OVERFLOW) exit(1); + PK_TEST_ASSERT_EQ_EXIT(PK_STN_RES_OVERFLOW, res); } else { - if (res != PK_STN_RES_UNDERFLOW) exit(1); + PK_TEST_ASSERT_EQ_EXIT(PK_STN_RES_UNDERFLOW, res); } } if constexpr (t & TEST_FLOATING_UNDERFLOW) { res = pk_stn(&i, STRNUM_UNDERFLOW_FLOAT, &s); std::cout << "pkstn: TEST_FLOATING_UNDERFLOW res: " << i << "\n"; - if (s != STRNUM_UNDERFLOW_FLOAT + strlen(STRNUM_UNDERFLOW_FLOAT)) exit(1); - if (res != PK_STN_RES_UNDERFLOW) exit(1); + PK_TEST_ASSERT_EQ_EXIT(STRNUM_UNDERFLOW_FLOAT + strlen(STRNUM_UNDERFLOW_FLOAT), s); + PK_TEST_ASSERT_EQ_EXIT(PK_STN_RES_UNDERFLOW, res); } if constexpr (t & TEST_SCALAR_OVERFLOW) { res = pk_stn(&i, STRNUM_OVERFLOW, &s); std::cout << "pkstn: TEST_SCALAR_OVERFLOW res: " << i << "\n"; - if (s != STRNUM_OVERFLOW + strlen(STRNUM_OVERFLOW)) exit(1); - if (res != PK_STN_RES_OVERFLOW) exit(1); + PK_TEST_ASSERT_EQ_EXIT(STRNUM_OVERFLOW + strlen(STRNUM_OVERFLOW), s); + PK_TEST_ASSERT_EQ_EXIT(PK_STN_RES_OVERFLOW, res); } if constexpr (t & TEST_FLOATING_OVERFLOW) { res = pk_stn(&i, STRNUM_OVERFLOW_FLOAT, &s); std::cout << "pkstn: TEST_FLOATING_OVERFLOW res: " << i << "\n"; - if (s != STRNUM_OVERFLOW_FLOAT + strlen(STRNUM_OVERFLOW_FLOAT)) exit(1); - if (res != PK_STN_RES_OVERFLOW) exit(1); + PK_TEST_ASSERT_EQ_EXIT(STRNUM_OVERFLOW_FLOAT + strlen(STRNUM_OVERFLOW_FLOAT), s); + PK_TEST_ASSERT_EQ_EXIT(PK_STN_RES_OVERFLOW, res); } if constexpr (t & TEST_INCONVERTIBLE) { res = pk_stn(&i, STRNUM_INCONVERTIBLE, &s); std::cout << "pkstn: TEST_INCONVERTIBLE res: " << i << "\n"; - if (s != STRNUM_INCONVERTIBLE) exit(1); - if (res != PK_STN_RES_INCONVERTIBLE) exit(1); + PK_TEST_ASSERT_NEQ_EXIT(STRNUM_INCONVERTIBLE + strlen(STRNUM_INCONVERTIBLE), s); + PK_TEST_ASSERT_EQ_EXIT(PK_STN_RES_INCONVERTIBLE, res); } }; |
