如何使用结构体、函数指针和动态内存分配来组织和管理测试案例。
#include <stdio.h>
#include <stdlib.h>
// 定义一个结构体,用于存储测试相关的数据
typedef struct
{
int output; // 预期的输出结果
int a; // 第一个输入参数
int b; // 第二个输入参数
int (*TestEMFunc)(int, int); // 函数指针,指向一个接受两个int参数并返回一个int结果的函数
} T_EMTest;
// addFunc函数:创建一个T_EMTest类型的结构体实例,并初始化其成员
// 参数包括一个函数指针和两个整数输入以及一个预期的输出
T_EMTest* addFunc(int (*TestEMFunc)(int, int), int a, int b, int output)
{
T_EMTest* m_EMTest = (T_EMTest*)malloc(sizeof(T_EMTest)); // 动态分配内存
if (m_EMTest == NULL) { // 检查内存分配是否成功
fprintf(stderr, "Memory allocation failed\n");
exit(EXIT_FAILURE); // 分配失败则退出程序
}
m_EMTest->a = a; // 初始化结构体成员
m_EMTest->b = b;
m_EMTest->TestEMFunc = TestEMFunc;
m_EMTest->output = output;
return m_EMTest; // 返回指向结构体的指针
}
// runEMTest函数:执行一个测试案例,并释放分配的内存
void runEMTest(T_EMTest* p_EMTest)
{
if(p_EMTest != NULL)
{
int count = p_EMTest->TestEMFunc(p_EMTest->a, p_EMTest->b); // 调用函数指针指向的函数
if(count == p_EMTest->output)
{
printf("SUCCESS! \n"); // 如果返回值与预期输出相等,则测试成功
}
else
{
printf("FAIL! %d != %d \n", count, p_EMTest->output); // 否则,测试失败
}
free(p_EMTest); // 释放为测试案例分配的内存
}
}
// 一个简单的加法函数,用于测试
int add (int a, int b)
{
return a + b;
}
// 主函数
int main()
{
printf("app start \n"); // 程序开始
T_EMTest* m_EMTest = addFunc(add, 1, 2, 3); // 创建一个测试案例,期望add(1, 2)返回3
if (m_EMTest != NULL) { // 检查addFunc是否成功返回了非空指针
runEMTest(m_EMTest); // 执行测试案例
}
return 0; // 程序正常结束
}