Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 32 additions & 6 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -83,20 +83,46 @@ if(ENET_TEST)
# Default test
add_executable(enet_test test/build.c)
target_link_libraries(enet_test PRIVATE enet_test_interface)

# Test with more peers
add_executable(enet_test_extra_peers test/build.c)
target_link_libraries(enet_test_extra_peers PRIVATE enet_test_interface)
target_compile_definitions(enet_test_extra_peers PRIVATE ENET_USE_MORE_PEERS)

# Test unit
add_executable(enet_test_unit test/units/test_main.c)
target_link_libraries(enet_test_unit PRIVATE enet_test_interface)
target_include_directories(enet_test_unit INTERFACE
# enet test units
file(GLOB UNIT_TEST_SOURCES CONFIGURE_DEPENDS "test/units/*.c")
add_library(enet_test_units STATIC ${UNIT_TEST_SOURCES})
target_include_directories(enet_test_units PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/include
${CMAKE_CURRENT_SOURCE_DIR}/test/units/include
)
endif()

# enet test units run
add_executable(enet_test_unit_run test/unit_tests.c)
target_link_libraries(enet_test_unit_run PRIVATE
enet_test_interface
enet_test_units
)

if (MSVC)
target_link_options(enet_test_unit_run PRIVATE
"/WHOLEARCHIVE:enet_test_units"
)
elseif (APPLE)
target_link_libraries(enet_test_unit_run PRIVATE
"-Wl,-force_load,${CMAKE_BINARY_DIR}/libenet_test_units.a"
)
else()
target_link_libraries(enet_test_unit_run PRIVATE
"-Wl,--whole-archive" enet_test_units "-Wl,--no-whole-archive"
)
endif()

target_include_directories(enet_test_unit_run PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/include
${CMAKE_CURRENT_SOURCE_DIR}/test/units/include
)
endif ()

# -----------------------------
# 5) Installation
Expand Down
16 changes: 0 additions & 16 deletions test/resize.c

This file was deleted.

6 changes: 4 additions & 2 deletions test/units/test_main.c → test/unit_tests.c
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
#include <stdio.h>

#define ENET_UNIT_IMPLEMENTATION
#define ENET_IMPLEMENTATION

#include "enet.h"
#include "enet_unit.h"
#include "test_times.c"
#include "units/enet_unit.h"

int main() {
if (enet_initialize() != 0) {
Expand Down
87 changes: 53 additions & 34 deletions test/units/enet_unit.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,49 @@
#include <unistd.h>
#endif

#ifdef _WIN32
#define TEST_SLEEP(ms) Sleep(ms)
#else
#define TEST_SLEEP(ms) usleep(ms * 1000);
#endif


#define ENET_EXPAND(x) x
#define GET_MACRO(_1, _2, _3, NAME, ...) NAME

#define OP_EQ(a, b) ((a) == (b))
#define OP_NE(a, b) ((a) != (b))
#define OP_CALL(op, a, b) (op(a, b))

#define ASSERT_EQ(...) ENET_EXPAND( GET_MACRO(__VA_ARGS__, ASSERT_THAT_IMPL3, ASSERT_THAT_IMPL2)(ASSERT_EQ, OP_EQ, __VA_ARGS__) )
#define ASSERT_NE(...) ENET_EXPAND( GET_MACRO(__VA_ARGS__, ASSERT_THAT_IMPL3, ASSERT_THAT_IMPL2)(ASSERT_NE, OP_NE, __VA_ARGS__) )

#define ASSERT_THAT_IMPL2(cmd, op, a, b) \
do { \
if (!OP_CALL(op, a, b)) { \
entry->failed += 1; \
fprintf(stderr, "%s(%s, %s)\n", #cmd, #a, #b); \
fprintf(stderr, " Expected: %s\n", #b); \
fprintf(stderr, " But was: %s\n", #a); \
fprintf(stderr, "at %s:%d\n", __FILE__, __LINE__); \
return; \
} \
} while (0)


#define ASSERT_THAT_IMPL3(cmd, op, a, b, m) \
do { \
if (!OP_CALL(op, a, b)) { \
entry->failed += 1; \
fprintf(stderr, "%s\n", m); \
fprintf(stderr, "%s(%s, %s)\n", #cmd, #a, #b); \
fprintf(stderr, " Expected: %s\n", #b); \
fprintf(stderr, " But was: %s\n", #a); \
fprintf(stderr, "at %s:%d\n", __FILE__, __LINE__); \
return; \
} \
} while (0)

typedef struct _ENetTestEntry ENetTestEntry;

typedef void (*ENetUnitTestFunc)(ENetTestEntry *entry);
Expand All @@ -21,18 +64,15 @@ typedef struct _ENetTestEntry {

#define MAX_TESTS 8096

static ENetTestEntry enet_test_entries[MAX_TESTS];
static int enet_test_count = 0;

#ifdef _WIN32
#define ASSERT_SLEEP(ms) Sleep(ms)
#ifdef ENET_UNIT_IMPLEMENTATION
ENetTestEntry enet_test_entries[MAX_TESTS];
int enet_test_count = 0;
#else
#define ASSERT_SLEEP(ms) usleep(ms * 1000);
extern ENetTestEntry enet_test_entries[MAX_TESTS];
extern int enet_test_count;
#endif

#define ENET_EXPAND(x) x
#define GET_MACRO(_1, _2, _3, NAME, ...) NAME
#define ASSERT_THAT(...) ENET_EXPAND( GET_MACRO(__VA_ARGS__, ASSERT_THAT_IMPL3, ASSERT_THAT_IMPL2)(__VA_ARGS__) )
int run_all_tests(void);

#define ENET_TEST_REGISTER(f) \
do { \
Expand Down Expand Up @@ -65,33 +105,11 @@ static void __cdecl func(void)
} \
static void enet_test_##func(ENetTestEntry * entry)

#define ASSERT_THAT_IMPL3(a, b, m) do { \
if ((a) != (b)) { \
entry->failed += 1; \
fprintf(stderr, "%s\n", m); \
fprintf(stderr, "ASSERT_THAT(%s, %s)\n", #a, #b); \
fprintf(stderr, " Expected: %s\n", #b); \
fprintf(stderr, " But was: %s\n", #a); \
fprintf(stderr, "at %s:%d\n", __FILE__, __LINE__); \
return; \
} \
} while (0)

#define ASSERT_THAT_IMPL2(a, b) do { \
if ((a) != (b)) { \
entry->failed += 1; \
fprintf(stderr, "ASSERT_THAT(%s, %s)\n", #a, #b); \
fprintf(stderr, " Expected: %s\n", #b); \
fprintf(stderr, " But was: %s\n", #a); \
fprintf(stderr, "at %s:%d\n", __FILE__, __LINE__); \
return; \
} \
} while (0)

static int run_all_tests(void) {
#ifdef ENET_UNIT_IMPLEMENTATION
extern int run_all_tests(void) {
int failed = 0;
for (int i = 0; i < enet_test_count; ++i) {
const char* prefix = "enet_test_";
const char *prefix = "enet_test_";
ENetTestEntry *entry = &enet_test_entries[i];

const char *funcName = entry->name + strlen(prefix);
Expand All @@ -115,5 +133,6 @@ static int run_all_tests(void) {

return failed;
}
#endif

#endif
Loading
Loading