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