diff options
author | John Ankarström <john@ankarstrom.se> | 2022-08-15 22:22:20 +0200 |
---|---|---|
committer | John Ankarström <john@ankarstrom.se> | 2022-08-15 22:22:20 +0200 |
commit | 8877627ee3fcd5a8f0ce2fcccec7688973e9cb2d (patch) | |
tree | 6a57fcb19aa77dfece89b000ae656c9549e7c156 | |
parent | 509c461498f0e68a62c004778df890d56ebb2a09 (diff) | |
download | EpisodeBrowser-master.tar.gz |
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | c/main.cpp | 5 | ||||
-rw-r--r-- | c/test.cpp | 50 | ||||
-rw-r--r-- | c/test.h | 13 |
4 files changed, 69 insertions, 1 deletions
@@ -1,6 +1,6 @@ EXE = EpisodeBrowser.exe OBJ = b/datalistview.obj b/debug.obj b/episodelistview.obj b/wcharptr.obj b/win.obj -OBJ += b/layout.obj b/listview.obj b/pl.obj b/resource.obj +OBJ += b/layout.obj b/listview.obj b/pl.obj b/test.obj b/resource.obj PL = pl/cfg.pl pl/episode_data.pl pl/local_episodes.pl pl/track_episodes.pl CL = swipl-ld @@ -10,6 +10,7 @@ #include "episodelistview.h" #include "layout.h" #include "pl.h" +#include "test.h" #include "util.h" #ifdef DEBUG @@ -161,6 +162,10 @@ int WINAPI WinMain(const HINSTANCE hInstance, const HINSTANCE, char* const, cons g_elv->Update(); g_elv->RestoreFocus(); +#ifdef DEBUG + RunTests(); +#endif + MSG msg; while (GetMessage(&msg, nullptr, 0, 0) > 0) { if (IsDialogMessage(hWnd, &msg)) continue; diff --git a/c/test.cpp b/c/test.cpp new file mode 100644 index 0000000..9230974 --- /dev/null +++ b/c/test.cpp @@ -0,0 +1,50 @@ +#include "data.h" +#include "test.h" +#include "util.h" +#include "win.h" + +Test::Test(const char* name_) : name(name_) {} + +#define CAT(a, b) a##b +#define APPLY(a, ...) a(__VA_ARGS__) +#define TESTS struct APPLY(CAT, tests_, __COUNTER__) +#define TEST(id) }; struct id : public Test { id() : Test(#id) +#define FAIL(...) do { Sprintf(error, __VA_ARGS__); return; } while (0) + +TESTS +{ + TEST(StrcpyWithSmallerDestination) + { + char src[15], dst[10]; + Sprintf(src, "abcdefghijklmn"); + Strcpy(dst, src); + if (dst[8] != 'i') + FAIL("dst[8] is not 'i', but '%c'", dst[8]); + if (dst[9] != 0) + FAIL("dst is not NUL-terminated"); + } +}; + +int RunTests() +{ + const Test tests[] = { + StrcpyWithSmallerDestination{}, + }; + + printf("Results (%llu tests):\n", sizeof(tests)/sizeof(*tests)); + + int cFailed = 0; + for (const Test& t : tests) + { + const char* msg; + if (t.error[0]) { + msg = t.error; + cFailed++; + } else + msg = const_cast<char*>("SUCCESS"); + printf("%s: %s\n", t.name, msg); + } + printf("%d tests failed.\n", cFailed); + + return cFailed; +} diff --git a/c/test.h b/c/test.h new file mode 100644 index 0000000..5565b36 --- /dev/null +++ b/c/test.h @@ -0,0 +1,13 @@ +#ifndef TEST_H +#define TEST_H + +struct Test +{ + const char* name = {0}; + char error[64] = {0}; + Test(const char* name); +}; + +int RunTests(); + +#endif |