C语言实现通用链表初步(三)----单元测试

前两节,我们已经完成了链表的一些操作,快来测试一下吧。

这里使用的单元测试工具名字叫“check”。


START_TEST(my_slist_1)
{
	struct student students[8] = {{"WangDong",18},{"LiuMing",19},{"SunYazhou",21},{"ChenYu",27},{"LiuXuewei",28},
	{"ZhangGuorong",47},{"LiuDehua",53},{"WangGuozhen",48}};
	struct slist_info list;
	slist_init(&list);
	int i = 0;
	for(;i<sizeof(students)/sizeof(students[0]);++i)
		list.insert_head(students+i,&list);
	list.for_each(&list,print_student);

我们先定义了一个数组,里面存放了姓名,年龄。接下来定义一个链表,并初始化。然后调用插入方法,依次插入。遍历一下,打印出来:

void print_student(void *data)
{
	struct student *p = data;
	printf("Name: %15s  Age:%d
",p->name,p->age);
	
}

用到了这个回调函数。看看打印的结果:

Name:     WangGuozhen  Age:48

Name:        LiuDehua  Age:53

Name:    ZhangGuorong  Age:47

Name:       LiuXuewei  Age:28

Name:          ChenYu  Age:27

Name:       SunYazhou  Age:21

Name:         LiuMing  Age:19

Name:        WangDong  Age:18


接着刚才这个测试用例,

struct node_info *p = list.find(&list,compare_student,&students[3]);
	list.del(p,&list);
	list.for_each(&list,print_student);

我们寻找某个节点(ChenYu),然后删除。

比较的回调函数是:

int compare_student(void *dest,void *src)
{
	struct student *p1 = dest;
	struct student *p2 = src;
	if(strcmp(p1->name,p2->name)==0)
		return 1;
	else
		return 0;
}


结果如图:

Name:     WangGuozhen  Age:48

Name:        LiuDehua  Age:53

Name:    ZhangGuorong  Age:47

Name:       LiuXuewei  Age:28

Name:       SunYazhou  Age:21

Name:         LiuMing  Age:19

Name:        WangDong  Age:18


再测试一下反转:

list.invert(&list);
	list.for_each_safe(&list,print_student);
}
END_TEST

结果是:

Name:        WangDong  Age:18

Name:         LiuMing  Age:19

Name:       SunYazhou  Age:21

Name:       LiuXuewei  Age:28

Name:    ZhangGuorong  Age:47

Name:        LiuDehua  Age:53

Name:     WangGuozhen  Age:48

测试成功!