99#include <unistd.h>
1010#endif
1111
12+ #ifdef _WIN32
13+ #define TEST_SLEEP (ms ) Sleep(ms)
14+ #else
15+ #define TEST_SLEEP (ms ) usleep(ms * 1000);
16+ #endif
17+
18+
19+ #define ENET_EXPAND (x ) x
20+ #define GET_MACRO (_1 , _2 , _3 , NAME , ...) NAME
21+
22+ #define OP_EQ (a , b ) ((a) == (b))
23+ #define OP_NE (a , b ) ((a) != (b))
24+ #define OP_CALL (op , a , b ) (op(a, b))
25+
26+ #define ASSERT_EQ (...) ENET_EXPAND( GET_MACRO(__VA_ARGS__, ASSERT_THAT_IMPL3, ASSERT_THAT_IMPL2)(ASSERT_EQ, OP_EQ, __VA_ARGS__) )
27+ #define ASSERT_NE (...) ENET_EXPAND( GET_MACRO(__VA_ARGS__, ASSERT_THAT_IMPL3, ASSERT_THAT_IMPL2)(ASSERT_NE, OP_NE, __VA_ARGS__) )
28+
29+ #define ASSERT_THAT_IMPL2 (cmd , op , a , b ) \
30+ do { \
31+ if (!OP_CALL(op, a, b)) { \
32+ entry->failed += 1; \
33+ fprintf(stderr, "%s(%s, %s)\n", #cmd, #a, #b); \
34+ fprintf(stderr, " Expected: %s\n", #b); \
35+ fprintf(stderr, " But was: %s\n", #a); \
36+ fprintf(stderr, "at %s:%d\n", __FILE__, __LINE__); \
37+ return; \
38+ } \
39+ } while (0)
40+
41+
42+ #define ASSERT_THAT_IMPL3 (cmd , op , a , b , m ) \
43+ do { \
44+ if (!OP_CALL(op, a, b)) { \
45+ entry->failed += 1; \
46+ fprintf(stderr, "%s\n", m); \
47+ fprintf(stderr, "%s(%s, %s)\n", #cmd, #a, #b); \
48+ fprintf(stderr, " Expected: %s\n", #b); \
49+ fprintf(stderr, " But was: %s\n", #a); \
50+ fprintf(stderr, "at %s:%d\n", __FILE__, __LINE__); \
51+ return; \
52+ } \
53+ } while (0)
54+
1255typedef struct _ENetTestEntry ENetTestEntry ;
1356
1457typedef void (* ENetUnitTestFunc )(ENetTestEntry * entry );
@@ -21,18 +64,14 @@ typedef struct _ENetTestEntry {
2164
2265#define MAX_TESTS 8096
2366
24- static ENetTestEntry enet_test_entries [MAX_TESTS ];
25- static int enet_test_count = 0 ;
26-
27- #ifdef _WIN32
28- #define ASSERT_SLEEP (ms ) Sleep(ms)
67+ #ifdef ENET_UNIT_IMPLEMENTATION
68+ ENetTestEntry enet_test_entries [MAX_TESTS ];
69+ int enet_test_count = 0 ;
2970#else
30- #define ASSERT_SLEEP (ms ) usleep(ms * 1000);
71+ extern ENetTestEntry enet_test_entries [MAX_TESTS ];
72+ extern int enet_test_count ;
3173#endif
3274
33- #define ENET_EXPAND (x ) x
34- #define GET_MACRO (_1 , _2 , _3 , NAME , ...) NAME
35- #define ASSERT_THAT (...) ENET_EXPAND( GET_MACRO(__VA_ARGS__, ASSERT_THAT_IMPL3, ASSERT_THAT_IMPL2)(__VA_ARGS__) )
3675
3776#define ENET_TEST_REGISTER (f ) \
3877 do { \
@@ -65,33 +104,10 @@ static void __cdecl func(void)
65104 } \
66105 static void enet_test_##func(ENetTestEntry * entry)
67106
68- #define ASSERT_THAT_IMPL3 (a , b , m ) do { \
69- if ((a) != (b)) { \
70- entry->failed += 1; \
71- fprintf(stderr, "%s\n", m); \
72- fprintf(stderr, "ASSERT_THAT(%s, %s)\n", #a, #b); \
73- fprintf(stderr, " Expected: %s\n", #b); \
74- fprintf(stderr, " But was: %s\n", #a); \
75- fprintf(stderr, "at %s:%d\n", __FILE__, __LINE__); \
76- return; \
77- } \
78- } while (0)
79-
80- #define ASSERT_THAT_IMPL2 (a , b ) do { \
81- if ((a) != (b)) { \
82- entry->failed += 1; \
83- fprintf(stderr, "ASSERT_THAT(%s, %s)\n", #a, #b); \
84- fprintf(stderr, " Expected: %s\n", #b); \
85- fprintf(stderr, " But was: %s\n", #a); \
86- fprintf(stderr, "at %s:%d\n", __FILE__, __LINE__); \
87- return; \
88- } \
89- } while (0)
90-
91107static int run_all_tests (void ) {
92108 int failed = 0 ;
93109 for (int i = 0 ; i < enet_test_count ; ++ i ) {
94- const char * prefix = "enet_test_" ;
110+ const char * prefix = "enet_test_" ;
95111 ENetTestEntry * entry = & enet_test_entries [i ];
96112
97113 const char * funcName = entry -> name + strlen (prefix );
0 commit comments