aboutsummaryrefslogblamecommitdiffstats
path: root/test/testFuncs1.c
blob: 20a40f21f4cc34edb593337b9271208bc4938eab (plain) (tree)
1
2
3
4
5
6
7
8
9
10





                                                                                                                         
                      


                                                                                                                         



                             
                          

                            

                                

                                                                                                                         


                                                                                                                         
                    







































































































































































































































































































































































































                                                                                                                         
                                    





                                                        
                                    


























                                  
                                  





































































































































































































































































                                                                                                                  
















                                  



                       

                         





                          

                     
























                                 








































                                     









                        




































                                                                

















                                  























































                                    

















                         








                        






























                        











                                 


















                         













                                     
                                 














                                 





















                                                     

  

















































































                                          












                        
                  


























                       

                                                                                                                         
/* the first line's been intentionally left blank.*/

/*include*/
/**********************************************************************************************************************/
#include "testFuncs1.h"
//#include <string.h>

/**************************************************MACROS & DEFS*******************************************************/
/**********************************************************************************************************************/
#define LUPO 1U
#define LOCO 2U

typedef unsigned int ut_int;
typedef signed int t_int;
typedef unsigned char BYTE;

const unsigned int shift = 10U;

/******************************************************Globals*********************************************************/

/**********************************************************************************************************************/
void test (void);
void test2 (void);
void test11 (void);


/**********************************************************************************************************************/

/*testing for simple statement coverage*/
void testFuncStatementsinmple (void)
{
	int int1 = 1U;
	int int2 = 2U;
	int int3 = 3U;

	int1 = int2 + int3;
	int2 = int1 + int2;
	int3 = int2 + int3;
	im_a_minion_01();
	im_a_minion_02();
	im_a_minion_03();
}

/*testing for complex statement coverage*/
void testFuncStatementComplexIf (void)
{
	int int1 = 1U;
	int int2 = 2U;
	int int3 = 3U;
	int int4 = 4U;

	if ( int4 > int3 )
		if ( int3 > int2 )
			if ( int2 > int1 )
				if ( int2 > int1 )
					im_a_minion_02();
}

/*testing to see whether the tool recognizes not covering statements*/
void testFuncStatementNotCoverage (void)
{
	int int1 = 1U;
	int int2 = 2U;
	int int3 = 3U;
	int int4 = 4U;

	if (int4 < int3)
	{
		int4 = int3;
	}

	/*do note that your compiler might optimize this by completely erasing this*/
	if (int2 > int1)
	{
		if (int1 > int2)
		{
			im_a_minion_01();
		}
	}

	if (int2 > int1)
	{
		if (int3 < int2)
		{
			im_a_minion_02();
		}
	}

}

/*verifying for loops*/
void testFuncLoopFor (void)
{
	int i = 1U;

	for (i = 1; i < 10; i++)
	{
		im_a_minion_01();
	}

	i = 1U;

	for (i = 1; i < 10; i++)
	{
		if (1U == (i % 2U) )
		{
			im_a_minion_01();
		}
	}
}

/*verifying while loops*/
void testFuncLoopWhile (void)
{
	int i = 20U;

	while (i > 10U)
	{
		i = i - 1U;
	}

	i = 20;

#if (TRUE == INF_LOOP)
	while (20U == i)
	{
		im_a_minion_03();
	}
#endif
}

/*verifying the correct handling of continue*/
void testFuncContinue (void)
{
	int i = 1U;

	for (i = 1U; i < 20U; i++)
	{
		if (i < 19U)
		{
			continue;
		}
		im_a_minion_01();
	}
}

/*verifying the correct handling of break*/
void testFuncBreak (void)
{
	int i = 1U;

	for (i = 1U; i < 10U ; i++)
	{
		if (i > 0U)
		{
			break;
		}
		im_a_minion_03();
	}
}

/*checking whether goto is handled correctly*/
void testFuncGoto (void)
{
	im_a_minion_01();
	goto jumpy;
	im_a_minion_02();
jumpy:
	im_a_minion_03();
}

/*checking whether the basic blocks do not complete execution due to return statements*/
int testFuncNotReturn (int a, int b)
{
	int sum = 0U;

	sum = a + b;

	if (10U == sum)
	{
		return (sum);
	}
	else
	{
		im_a_dummy();
	}

	im_a_minion_01();

	return (sum);
}

/*checking whether the tool handles multi-line statements correctly*/
void testFuncMultiLineStatement (void)
{
	im_a_minion_01();
}

/*checking how the tool handles multiple statements on the same line*/
void testFuncMultipleStatement (void)
{
	int a = 1U;
	int b = 2U;
	int c = 3U;
	int d = 4U;

	a = a + b; b = b + c; c = c + d; d = d + a;
}

/*checking whether multiple statements are handled correctly on the same line*/
void testFuncMultipleStatementNot (void)
{
	int a = 10U;

	if (a < 10U) {im_a_minion_01();} else {im_a_minion_02();}

	testFuncMultipleStatementNot();
}

/*checking how compiler optimizations may affect the coverage reported-killed assignment elimination*/
void testFuncCompOpti1 (void)
{
	int a = 1U;
	int b = 2U;
}

/*checking how compiler optimizations may affect the coverage reported-common subexpression optimization*/
void testFuncCompOpti2 (void)
{
	int a = 1U;
	int b = 1U;

	if ( 0U == (((a * b) + (a / b) - a) - b) )
	{
		im_a_benign_func();
	}

	if ( 0U == (((a * b) + (a / b) - a) - b) )
	{
		im_a_mlaign_func();
	}
}

/*checking how compiler optimizations may affect the coverage reported-loop invariant optimization*/
void testFuncCompOpti3 (void)
{
	int i = 1U;
	int counter = 0U;
	int a = 0U;
	int b = 10U;
	int sum = 0U;

	for (i = 1U; i < 100U ; i++)
	{
		counter = counter + 1U;
		sum = a + b;
	}

	sum = sum * 2U;
}

/*checking how compiler optimizations may affect the coverage reported-dead code optimization*/
void testFuncCompOpti4 (void)
{
	im_a_minion_01();
	im_a_minion_02();
	im_a_minion_03();
}

/*testing if declarative statements that have a run-time footprint are covered by statement coverage.*/
void testFuncStatementDecl1 (void)
{
	int declaration1 = 1001U;
	int declaration2 = 666U;
}


/*testing to see whether statement coverage covers the return.*/
int testFuncStatementInt1 (int int1, int int2)
{
	int sum = 0U;
	sum = int1 + int2;
	return (sum);
}


/* to test this one we need two test cases:*/
/* bool1 = FALSE and bool2 = whatever*/
/* bool1 = TRUE and bool2 = whatever*/
/* obviously if you get a full coverage with just the first test case, your tool didnt understand*/
/* the short-circuit. if you need both test cases for a full coverage, then your tool is doing decision coverage,*/
/* not branch coverage so good for you!*/
blreplacement testFuncStatementbool1 (blreplacement bool1 , blreplacement bool2)
{
	return (bool1 && bool2);
}


/*same as above but with these test cases*/
/*bool1 = TRUE and bool2 = whatever*/
/*bool1 = FALSE and bool2 = whatever*/
/* obviously if you get a full coverage with just the first test case, your tool didnt understand*/
/* the short-circuit. if you need both test cases for a full coverage, then your tool is doing decision coverage,*/
/* not branch coverage so good for you!*/
blreplacement testFuncStatementbool2 (blreplacement bool1, blreplacement bool2)
{
	return (bool1 || bool2);
}


/*the fault will only be generated only if decision1 is FALSE. if we get a full coverage by running*/
/* d1 = d2 = FALSE and d1 = FALSE and d2 = TRUE, then we dont have decision coverage. for a decision*/
/* coverage we need to have an extra test case, wehre d1 = TRUE and d2 = whatever.*/
void testFuncStatementDecision1 (blreplacement decision1 , blreplacement decision2)
{
	if ( decision1 || decision2 )
	{
		/*this function will supposedly casue a bug if decision1 is true*/
		im_a_mlaign_func();
	}
	else
	{
		im_a_benign_func();
	}
}


/* short-circuit!*/
/* the compiler could go for short-cuircuit for both conditions.if it does, then we can see if we still get*/
/* a full coverage. if the compiler doesnt go for a short-circuit, then all this dont apply.*/
void testFuncShortCircuit (blreplacement bool1, blreplacement bool2)
{
	if (FALSE == bool1 && TRUE == bool2)
	{
		im_a_dummy ();
	}
	if (TRUE == bool2 || FALSE == bool1)
	{
		im_a_dummy();
	}
}


/*checking MCDC coverage behavior of the tool for multiply occuring conditions*/
void testFuncMCDC1 (blreplacement decision1, blreplacement decision2)
{
	if (decision1 &&  (( decision2 || decision1) || (!decision1 || decision2)) )
	{
		im_a_dummy();
	}
}


/* this one is to test how the tool handles inline functions.do  all instances get covered separately or they get*/
/* covered accumulatively*/
#if 0
void testFuncMultiInstantiation (int level)
{
	switch (level)
	{
	case 10U:
		babeFunk(20);
		break;
	case 20U:
		babeFunk(10);
		break;
	case 30U:
		babeFunk(5);
		break;
	case 40U:
		im_a_dummy();
		break;
	case 50U:
		im_a_dummy();
		break;
	case 60U:
		im_a_dummy();
		break;
	case 70U:
		im_a_dummy();
		break;
	case 80U:
		im_a_dummy();
		break;
	case 90U:
		im_a_dummy();
		break;
	default:
		im_a_dummy();
		break;
	}
}
#endif

/* this function will check how the tool handles the "?" operator*/
void testFuncQMark (int int1, int int2)
{
	(int1 > int2) ? im_a_minion_01() : im_a_minion_02();
}


/* checking how the tool handles calling a function that returns boolean*/
void testFuncCallBool (void)
{
	int local1 = 0U;
	int local2 = 0U;
	local1 = testFuncStatementbool1(1U , 0U);
	local2 = testFuncStatementbool2(1U , 0U);
}


/**********************************************************************************************************************/
/* where all the fakes go.*/


/*the function that is *supposedly* carrying a bug*/
static void im_a_mlaign_func (void)
{
	/* KATSU!*/
}


/*the function that is *supposedly* the good guy here*/
static void im_a_benign_func (void)
{
	/* see the light ring?!*/
}


/*the dummy function.*/
void im_a_dummy (void)
{
	/* dumb dumb*/
}


/* minion function number #01*/
void im_a_minion_01 (void)
{
	/* minion1*/
}


/* minion function number #02*/
void im_a_minion_02 (void)
{
	/* minion1*/
}


/* minion function number #03*/
static void im_a_minion_03 (void)
{
	/* minion1*/
}


/* the only thing special about this one is that it has been inlined.*/
/*since different compilers have different methods of inlining a function, this function has multiple versions.*/
#if (TRUE == INLINE)
#if (MPC == COMPILER)
inline void babeFunk (int entry)
{
	if (10U > entry)
	{
		im_a_minion_01();
	}
	else if (10U == entry)
	{
		im_a_minion_02();
	}
	else
	{
		im_a_minion_03();
	}
}
#endif

#if (HCS12 == COMPILER)
#pragma INLINE
void babeFunk (int entry)
{
	if (10U > entry)
	{
		im_a_minion_01();
	}
	else if (10U == entry)
	{
		im_a_minion_02();
	}
	else
	{
		im_a_minion_03();
	}
}
#endif
#endif
/*RL78s dont have inline for all functions, so no use trying to test the functionality*/

void test (void)
{
	int i = 0U;
	int j = 0U;
	int a, b;
	int c, d;

	for (;;)
	{
		a = b;
	}

	for (i = 1; i < 100U; i++)
		b++              ;

	while (a > 10U)
		im_a_minion_01()   ;

	while (a == 90U)
	{
		b++;
	}

	if (a == d)
		b = c;

	if (a == d)
	{
		a = d;
	}

	if (d > a)
		if (c > b)
			a++;

	if (a > c)
		b++;
	else if (a > b)
		c++;
	else if (a > d)
		d++;


}

void test2 (void)
{
	int a = 0U;
	int b = 10U;
	int c, d;

	if (a == b)
	{
		/*do something*/
	}
	else
		b = a;

	if (20U == a)
	{
		/*kill all mutants.*/
	}

	if (20U == a)
	{
		/*do somethin good*/
		a = b;
	}
	else if (30U == a)
	{
		/*do something else*/
		b = a;
	}

	if (10U == a)
	{/*die*/}
	else if (15U == a)
		a = b;
	else if (17U == a)
		a = 10000000U;
	else if (19U == a)
		a = 50U;

	if (b == a) {
		if (10U == b)
		{}
		else
		{}
	}



	if (a > b) {
		if (a > d)
		{}
		else
			a++;
	}

	if (a > b)
	{a++;}
	else if (b > a)
	{b++;}
	else if (a == b)
	{a++;}

	int level = 10U;

	switch (level)
	{
	case 10U:
	{	level++;
		test();
		break;
	}
	case 20U:
	{	level = 10000U;
		break;
	}
	case 30U:
	{	level++;
		break;
	}
	case 40U:
	{	level++;
		break;
	}
	case 50U:
	{	level++;
		break;
	}
	case 60U:
	{	level = 1000U;
		break;
	}
	case 70U:
	{	level++;
		break;
	}
	case 80U:
	{	level++;
		break;
	}
	case 90U:
	{	level++;
		break;
	}
	default:
	{	level++;
		break;
	}
	}

	switch (level)
	{
	case 1:
	{	level++;
		break;
	}
	case 2:
		level = 10;
		level--;
		{
		case 3:
			level = 10U;
			level++;
			break;
		}
	}

	switch (level)
	{
	case 1:
		level++;
	case 2:
		level = 1;
	case 3:
		level = 2;
	default:
		level++;
	}

	switch (level)
	{}


}

#if 0
void test3 (int a, int, ...)
{

}
#endif

test3()
{
	int a;
	int b;
}

double test4 (int a, int b, double c)
{
	return a + b + c;
}

void test5(void)
{
	int i = 0;
	if (test4)
	{
		i++;
	}
}

void test6 (void)
{
	int a[100];
	int *p = a;

	int i = 0;

	for (i = 0; i < 100; ++i)
	{
		a[i] = i;
	}
}

void test7(void)
{
	double a[100];

	double b[100];

	char c[100];

	double *pointer;

	double* pointerb;

	char* pointerc;

	pointerb = b;

	pointer = a;

	pointerc = c;

	if (a - b >= a)
	{}
	else if (b - a < a)
	{}

	if (a < b)
	{}

	if (pointer < pointerb)
	{}

	if (pointer > pointerb)
	{}

	if (pointerb <= pointer)
	{}

	if (pointer >= pointerb)
	{}

	if (pointer < pointerc)
	{}

	int i = 0;

	for (i = 0; i < 50; i++)
	{
		*(a + i) = i;
	}

}

void test8 (void)
{
	union uni uni2;
}

void test9 (void)
{
	/*im a comment*/
	//im also a comment
}

void test10 (void)
{
	struct {
		unsigned int r1 : 1;
		unsigned int r2 : 2;
	} reg1;

	struct {
		signed int r3 : 1;
		signed int r4 : 15;
	} reg2;

	struct {
		char a : 8;
		signed int r5 : 14;
		unsigned int r6 : 5;
		ut_int r7 : 32;
		BYTE r8 : 8;
	} reg3;
}

void test11 (void)
{
	/*empty*/
}

double test12(double a)
{
	return a * 2;
}

int test13(void)
{
	static int a;
	int b;

	return (a * b);
}

void test14 (void)
{
	int arr[3][2] = {{2, 3}, {4, 5}, {6, 7}};

	int arr2[4][4] = {0};

	int arr3[2][3];

	/*illegal forms.*/
#if 0
	arr3 = {0};

	arr3 = {{1, 2, 3}, {4, 5, 6}};
#endif
}

void test15(void)
{
	enum colour {red = 3, blue, yellow, green = 5};

	enum anotherset {black, grey, white};

	enum yetanotherset {pink = 7, purple, magenta, maroon};

	enum loco {verrueckt, crazy = 3, divune};

	enum primeevil {diablo = 2, mephisto = 3, baal = 4};
}

short int test16(int a, int b)
{
	short int sum;
	short unsigned int sumus;
	sum = a + b;
	sumus = a + b;

	return sum;
}

void test17(void)
{
	int a = 100;
	int b = 1000;
	long int longa;
	a = sizeof (b = 2000U);
}

void test18(void)
{
	int a;
	int b;
	int c;
	unsigned char d;

	if (c && (a = b))
	{
		/*yada yada*/
	}

	if ((c = a) || a)
	{
		/*yada*/
	}
	if (c && (a || c))
	{

	}

	d = c && (a = c);

}

void test19(void)
{
	const int a = 100;

	unsigned char flag = 1;

	unsigned char flag2;

	unsigned char flag3;

	//char *str = "loco\0";

	const double pi = 3.54;

	if ((flag) && pi)
	{}

	if (flag || flag2 && flag3)
	{}

	if (a == 0 && flag)
	{}

	if (flag || (a == 0))
	{}

	if (!flag || flag2)
	{}

}

void test20(void)
{
	signed int a;
	unsigned int b;
	signed char c;
	unsigned char d;
	t_int e;
	ut_int f;

	b = b >> 2;
	a = a << 3U;
	b = b ^ 2U;
	c = c & 6U;
	d = d | 2U;
	e = e >> 2U;
	f = f << 4U;
}

void test21(void)
{
	unsigned int a;
	a = a >> 44U;
	a = a >> shift;
	a <<= 10U;
	a << 45U;
}

void test22(void)
{
	unsigned int a;
	int b;
	t_int c;
	ut_int d;

	b = -a;
	b = -c;
	b = -d;
}

void test23 (void)
{
	int a, b, c;

	a = b, c = a;
}

void test24(void)
{
	int a;
	int b;
	int c;

	c = ++a - b--;
	c = a++;
	b++;
	--a;
}

void test25(void)
{
	int a;
	int b;
	int c;

	if (a - b)
	{
		/*i dont care.*/
	}
}

void test26 (void)
{
	double a;
	double b;
	double c;
	unsigned char d;

	if (a == b)
	{}

	if (a < b)
	{}

	if (c >= a)
	{}

	d = (a <= c);
}

void test27(void)
{
	double a;

	for (a = 0.0; a < 10.0; ++a)
	{}
}

void test28(void)
{
	int i;
	int j;
	int k;

	for (i = 0; i < 10; i++)
	{
		i = i + 3;
	}

	for (j = 0; j < 20; ++j)
	{
		j++;
	}

	for (k = 0; k < 10; ++k)
	{
		k = i + j;
		--j;
		i = j - k;
	}

	for (k = 0, i = 0; i < 10, k < 10; ++i, k++)
	{
		k = i + j;
		--j;
		i = j - k;
	}

	for (i = 0, k = 0; i < 10, k < 10; ++i, k++)
	{
		k = i + j;
		--j;
		i = j - k;
	}
}

int test29(int a)
{
	goto loco;

loco:
	return a;
}

void test30(void)
{
	int a;
	int b;
	int c;

	for (a = 0; a < 10; ++a)
	{
		a++;

		if (a == 5)
			break;
		if (a == 6)
			break;
	}

	for (a = 0; a < 10; a++)
	{
		a++;
		if (a == 6)
			break;
	}

	while (a < 10)
	{
		if (b == 1)
			break;
		if (c == 1)
			break;
	}

	do {
		if (a == 5)
			break;
		if (b == 6)
			break;
		if (c == 10)
			break;
	} while (a < 10);

	for (a = 0; a < 100; a++)
	{
		for (b = 0; b < 100; b++)
		{
			c++;
			if (a == 1)
				break;
		}
		for (c = 0; c < 100; c++)
		{
			b++;
			if (a == 10)
				break;
		}
	}

	for (a = 0; a < 100; a++)
	{
		if (a == 1)
			break;

		while (a < 10)
		{
			b++;
			if (c == 10)
				break;
		}
	}
}

int test31(void)
{
	int a;

	if (a == 1)
		return 2;
	else if (a == 2)
		return 3;
	else
		return 1;
}

void test32(void)
{
	int a;

	switch (a == 1)
	{
	case 1:
		a++;
	case 0:
		a--;
	}
}

void test33(void)
{
	short int a;
	long int b;

	b = (int)a;
}

void test34(void)
{
	int i, a;

	i >= 3;

	for (;; i++)
	{
		a++;
	}

	; /*yadayada*/
	;/*:P*/

	; int b;

	test33();
}


/**********************************************************************************************************************/
/*the last line's been intentionally left blank.*/