aboutsummaryrefslogtreecommitdiff
path: root/src/monkey/seaspider/org/gnunet/seaspider/SeaspiderTest.c
blob: 5700f9915996eb932fe5d930e79c478aecb379f1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/**
 * @file seaspider/SeaspiderTest.c
 * @brief C file to test Seaspider's parsing
 */

/* include */
#include <stdio.h>


#define PRE_PROC_DIR 0

struct MyStruct {
	int member;
	struct MyStruct *part;
};


enum  MyEnum{
	enumMember1,
	enumMember2,
	enumMember3
};


static int fun(int arg1, int arg2)
{
	return arg1 + arg2;
}

/*
 * "inline" is a showstopper for the parser!
 * 
inline int funInline(int arg1, int arg2)
{
	return arg1 + arg2;
}
*/

int main(int args, const char * argv[])
{
	/* variables declarations */
	struct MyStruct whole;
	struct MyStruct part;
	enum MyEnum myEnum;
	int i;
	int x, y;
	
	/* Allocations and assignments */
	whole.member = 1;
	whole.part = &part;
	whole.part->member = 2;
	myEnum = enumMember3;
	x = 0, y = 1;
	
	/* block */
	{
		/* arithmetic and logic operations */
		float f = 20.0;		
		whole.part->member = (int)(whole.part->member + 5) - 6; // cast - multilevel assignment
	}
	
	/* for loop */
	for (i = 0; i < 2; i++) {
		/* conditional expressions */
		if ( x > 0) {
			while (y < 5) {
				y++;
			}
		} else if (x > 0 || y == 4) {
			do {
				y--;
			} while (y != 1);
		}
		else {
			switch (myEnum) {
			case enumMember1:
				fun(enumMember1, enumMember2);
				break;
			case enumMember2:
				fun(enumMember1, enumMember2 ? enumMember2 : enumMember1); // ternary operator
				break;
			default:
				fun(enumMember1, PRE_PROC_DIR); // preprocessing directive
				break;
			}
		}
	}
	
	return 1;
}