|
| 1 | +#include <stdio.h> |
| 2 | +#include <stdlib.h> |
| 3 | +#include <string.h> |
| 4 | + |
| 5 | +// Colors for test output |
| 6 | +#define MANSI_COLOR_RED "\x1b[31m" |
| 7 | +#define MANSI_COLOR_GREEN "\x1b[32m" |
| 8 | +#define MANSI_COLOR_RESET "\x1b[0m" |
| 9 | + |
| 10 | +// Counter for total tests run |
| 11 | +static int m_total_tests = 0; |
| 12 | +static int m_passed_tests = 0; |
| 13 | + |
| 14 | +// Print test results |
| 15 | +#define MTEST_PRINT_RESULTS() \ |
| 16 | + MLogf("\nTest Results: %d/%d passed\n", m_passed_tests, m_total_tests) |
| 17 | + |
| 18 | +// Assert equality for integers |
| 19 | +#define MASSERT_INT_EQ(actual, expected) do { \ |
| 20 | + m_total_tests++; \ |
| 21 | + if ((expected) == (actual)) { \ |
| 22 | + m_passed_tests++; \ |
| 23 | + MLogf(MANSI_COLOR_GREEN "PASS" MANSI_COLOR_RESET ": %s:%d - Expected %d, got %d", \ |
| 24 | + __FILE__, __LINE__, (expected), (actual)); \ |
| 25 | + } else { \ |
| 26 | + MLogf(MANSI_COLOR_RED "FAIL" MANSI_COLOR_RESET ": %s:%d - Expected %d, got %d", \ |
| 27 | + __FILE__, __LINE__, (expected), (actual)); \ |
| 28 | + } \ |
| 29 | +} while(0) |
| 30 | + |
| 31 | +// Assert equality for strings |
| 32 | +#define MASSERT_STR_EQUALS(expected, actual) do { \ |
| 33 | + m_total_tests++; \ |
| 34 | + if (strcmp((expected), (actual)) == 0) { \ |
| 35 | + m_passed_tests++; \ |
| 36 | + MLogf(MANSI_COLOR_GREEN "PASS" MANSI_COLOR_RESET ": %s:%d - Expected \"%s\", got \"%s\"\n", \ |
| 37 | + __FILE__, __LINE__, (expected), (actual)); \ |
| 38 | + } else { \ |
| 39 | + MLogf(MANSI_COLOR_RED "FAIL" MANSI_COLOR_RESET ": %s:%d - Expected \"%s\", got \"%s\"\n", \ |
| 40 | + __FILE__, __LINE__, (expected), (actual)); \ |
| 41 | + } \ |
| 42 | +} while(0) |
| 43 | + |
| 44 | +// Assert true |
| 45 | +#define MASSERT_TRUE(condition) do { \ |
| 46 | + m_total_tests++; \ |
| 47 | + if (condition) { \ |
| 48 | + m_passed_tests++; \ |
| 49 | + MLogf(MANSI_COLOR_GREEN "PASS" MANSI_COLOR_RESET ": %s:%d - Condition is true\n", \ |
| 50 | + __FILE__, __LINE__); \ |
| 51 | + } else { \ |
| 52 | + MLogf(MANSI_COLOR_RED "FAIL" MANSI_COLOR_RESET ": %s:%d - Expected true, got false\n", \ |
| 53 | + __FILE__, __LINE__); \ |
| 54 | + } \ |
| 55 | +} while(0) |
| 56 | + |
| 57 | +// Assert false |
| 58 | +#define MASSERT_FALSE(condition) do { \ |
| 59 | + m_total_tests++; \ |
| 60 | + if (!(condition)) { \ |
| 61 | + m_passed_tests++; \ |
| 62 | + MLogf(MANSI_COLOR_GREEN "PASS" MANSI_COLOR_RESET ": %s:%d - Condition is false\n", \ |
| 63 | + __FILE__, __LINE__); \ |
| 64 | + } else { \ |
| 65 | + MLogf(MANSI_COLOR_RED "FAIL" MANSI_COLOR_RESET ": %s:%d - Expected false, got true\n", \ |
| 66 | + __FILE__, __LINE__); \ |
| 67 | + } \ |
| 68 | +} while(0) |
| 69 | + |
| 70 | +// Assert floating point equality within epsilon |
| 71 | +#define MASSERT_FLOAT(expected, actual, epsilon) do { \ |
| 72 | + m_total_tests++; \ |
| 73 | + float diff = (expected) - (actual); \ |
| 74 | + if (diff < 0) diff = -diff; \ |
| 75 | + if (diff <= epsilon) { \ |
| 76 | + m_passed_tests++; \ |
| 77 | + MLogf(MANSI_COLOR_GREEN "PASS" MANSI_COLOR_RESET ": %s:%d - Expected %f, got %f (within %f)\n", \ |
| 78 | + __FILE__, __LINE__, (float)(expected), (float)(actual), (float)(epsilon)); \ |
| 79 | + } else { \ |
| 80 | + MLogf(MANSI_COLOR_RED "FAIL" MANSI_COLOR_RESET ": %s:%d - Expected %f, got %f (epsilon %f)\n", \ |
| 81 | + __FILE__, __LINE__, (float)(expected), (float)(actual), (float)(epsilon)); \ |
| 82 | + } \ |
| 83 | +} while(0) |
| 84 | + |
| 85 | +#define MTEST_FUNC(x) { MLogf(">>> %s", #x); (x); } |
0 commit comments