本关任务:编写一个能计算两个数组的交集的程序。
你的上司现在想要你完成一个功能,就是给你两个数组,然后需要求出这两个素组的交集。例如数组A={1, 2, 3, 5},数组B={2, 2},你的程序的输出就需要是{2}。
/*********Begin********/
int* hash_A = (int*)malloc(100*sizeof(int));
int* hash_B = (int*)malloc(100*sizeof(int));
memset(hash_A, 0, 100);
memset(hash_B, 0, 100);
for(int i =0; i < lenA; ++i)
{hash_A[A[i]]++;}
for(int i=0;i < lenB; ++i)
{
hash_B[B[i]]++;
}
int total = 0;
for(int i = 0; i < 100; ++i)
{
if(hash_A[i]>0 && hash_B[i]>0)
total++;
}
int* result = (int* )malloc(total*sizeof(int));
int cur_index = 0;
for(int i = 0; i < 100; ++i){
if(hash_A[i]>0 && hash_B[i]>0)
result[cur_index++] = i;
}
*C=result;
*lenC =total;
/*********End*********/
本关任务:编写代码进行单元测试。
#include"func.h"
#include<stdio.h>
void intersection(int* A, int* B, int lenA, int lenB, int** C, int* lenC);
void UnitTest()
{
/*请按照测试用例来测试交集功能*/
int pass_count = 4;
int err_count = 0;
int total_count = 4;
/*********Begin*********/
//这里面全部删掉就可以了。。。。。。。。。。。
/*********End*********/
printf("pass_count=%d, err_count=%d, total_count=%d\n", pass_count, err_count, total_count);
}
本关任务:使用 CuTest 实现单元测试。
#include "CuTest.h"
#include"func.h"
#include<stdio.h>
//计算两个数组的交集,并将结果转换成字符串返回
char* intersection(int* A, int* B, int lenA, int lenB);
void TestCase1(CuTest *tc)
{
//测试用例1
/*********Begin*********/
int A[] = {0,99,1,5,4,8,1,4};
int B[] = {12,44,4,8,0,99,1};
char* actual = intersection(A,B,8,7);
char* excepect = "99, 8, 4, 1, 0";
CuAssertStrEquals(tc,excepect,actual);
/*********End*********/
}
void TestCase2(CuTest *tc)
{
//测试用例2
/*********Begin*********/
int A[] = {0};
int B[] = {0};
char* actual = intersection(A,B,1,1);
char* excepect = "0";
CuAssertStrEquals(tc,excepect,actual);
/*********End*********/
}
void TestCase3(CuTest *tc)
{
//测试用例3
/*********Begin*********/
int A[] = {1,2,3,4,5};
int B[] = {5,3,2,4,1};
char* actual = intersection(A,B,5,5);
char* excepect = "5, 4, 3, 2, 1";
CuAssertStrEquals(tc,excepect,actual);
/*********End*********/
}
void TestCase4(CuTest *tc)
{
//测试用例4
/*********Begin*********/
int A[] = {6,6,6,6,6,6};
int B[] = {6,6,6,6,6,6};
char* actual = intersection(A,B,7,1);
char* excepect = "6";
CuAssertStrEquals(tc,excepect,actual);
/*********End*********/
}
CuSuite* GetSuite() {
CuSuite* suite = CuSuiteNew();
SUITE_ADD_TEST(suite, TestCase1);
SUITE_ADD_TEST(suite, TestCase2);
SUITE_ADD_TEST(suite, TestCase3);
SUITE_ADD_TEST(suite, TestCase4);
return suite;
}
void RunAllTests()
{
/*
运行所有的测试用例
*/
CuString *output = CuStringNew();
CuSuite* suite = CuSuiteNew();
/*********Begin*********/
CuSuiteAddSuite(suite,GetSuite());
/*********End*********/
CuSuiteRun(suite);
CuSuiteSummary(suite, output);
CuSuiteDetails(suite, output);
printf("%s\n", output->buffer);
}