/* 统一测试辅助头: * - 提供轻量断言宏,失败时打印上下文并返回 1 终止当前测试程序 * - 所有测试文件可直接 include 本头,减少重复样板代码 */ #ifndef DTU_TEST_COMMON_H #define DTU_TEST_COMMON_H /* 标准库依赖: * - stdio.h : fprintf * - stdlib.h : 通用工具(当前宏未直接使用,预留) * - string.h : strcmp */ #include #include #include /* 断言:表达式为真 * 失败输出:失败表达式 + 文件 + 行号 * 失败返回:1(约定 main 返回非 0 表示测试失败) */ #define ASSERT_TRUE(expr) \ do { \ if (!(expr)) { \ fprintf(stderr, "ASSERT_TRUE failed: %s (%s:%d)\n", #expr, __FILE__,\ __LINE__); \ return 1; \ } \ } while (0) /* 断言:两个整数值相等(按 int 比较) */ #define ASSERT_EQ_INT(expected, actual) \ do { \ int _exp = (int)(expected); \ int _act = (int)(actual); \ if (_exp != _act) { \ fprintf(stderr, \ "ASSERT_EQ_INT failed: expected=%d actual=%d (%s:%d)\n", \ _exp, _act, __FILE__, __LINE__); \ return 1; \ } \ } while (0) /* 断言:两个无符号 32 位值相等(按 unsigned int 比较) */ #define ASSERT_EQ_U32(expected, actual) \ do { \ unsigned int _exp = (unsigned int)(expected); \ unsigned int _act = (unsigned int)(actual); \ if (_exp != _act) { \ fprintf(stderr, \ "ASSERT_EQ_U32 failed: expected=%u actual=%u (%s:%d)\n", \ _exp, _act, __FILE__, __LINE__); \ return 1; \ } \ } while (0) /* 断言:两个 C 字符串内容相等(区分大小写) */ #define ASSERT_STREQ(expected, actual) \ do { \ if (strcmp((expected), (actual)) != 0) { \ fprintf(stderr, "ASSERT_STREQ failed: expected=\"%s\" actual=\"%s\" (%s:%d)\n", \ (expected), (actual), __FILE__, __LINE__); \ return 1; \ } \ } while (0) #endif