|
ferencd@0
|
1 #include "tests.h"
|
|
ferencd@0
|
2 #include "gtest/gtest.h"
|
|
ferencd@0
|
3
|
|
ferencd@0
|
4 /*
|
|
ferencd@0
|
5 * Test for handling various variable definitions
|
|
ferencd@0
|
6 */
|
|
ferencd@0
|
7
|
|
ferencd@0
|
8 /* Define a one dim array, set the first element to a value, and see that it
|
|
ferencd@0
|
9 is as expected */
|
|
ferencd@0
|
10 TEST(VariableDefinitions, SimpleIndexedOperationInt)
|
|
ferencd@0
|
11 {
|
|
ferencd@0
|
12 SCRIPT_START
|
|
ferencd@0
|
13 " \
|
|
ferencd@0
|
14 int a[10]; \
|
|
ferencd@0
|
15 a[1] = 2; \
|
|
ferencd@0
|
16 int b = a[1]; \
|
|
ferencd@0
|
17 "
|
|
ferencd@0
|
18 SCRIPT_END
|
|
ferencd@0
|
19
|
|
ferencd@0
|
20 ASSERT_EQ(2, VAR_INT(b));
|
|
ferencd@0
|
21
|
|
ferencd@0
|
22 SCRIPT_SHUTDOWN;
|
|
ferencd@0
|
23 }
|
|
ferencd@0
|
24
|
|
ferencd@0
|
25 /* Define an int variable as a substring */
|
|
ferencd@0
|
26 TEST(VariableDefinitions, IntFromSubstring)
|
|
ferencd@0
|
27 {
|
|
ferencd@0
|
28 SCRIPT_START
|
|
ferencd@0
|
29 " \
|
|
ferencd@0
|
30 string a = \"12456789\"; \
|
|
ferencd@0
|
31 int t = a[1,3]; \
|
|
ferencd@0
|
32 int t2 = a[3,4]; \
|
|
ferencd@0
|
33 int t3 = a[3]; \
|
|
ferencd@0
|
34 int t4 = a[3, a.len - 1]; \
|
|
ferencd@0
|
35 "
|
|
ferencd@0
|
36 SCRIPT_END
|
|
ferencd@0
|
37
|
|
ferencd@0
|
38 ASSERT_EQ(245, VAR_INT(t));
|
|
ferencd@0
|
39 ASSERT_EQ(56, VAR_INT(t2));
|
|
ferencd@0
|
40 ASSERT_EQ(5, VAR_INT(t3));
|
|
ferencd@0
|
41 ASSERT_EQ(56789, VAR_INT(t4));
|
|
ferencd@0
|
42 SCRIPT_SHUTDOWN
|
|
ferencd@0
|
43 }
|
|
ferencd@0
|
44
|
|
ferencd@0
|
45 /* Define a one dim array, set the first element to a value, and see that it
|
|
ferencd@0
|
46 is as expected */
|
|
ferencd@0
|
47 TEST(VariableDefinitions, SimpleIndexedOperationByte)
|
|
ferencd@0
|
48 {
|
|
ferencd@0
|
49 SCRIPT_START
|
|
ferencd@0
|
50 " \
|
|
ferencd@0
|
51 byte a[10]; \
|
|
ferencd@0
|
52 a[1] = 2; \
|
|
ferencd@0
|
53 byte b = a[1]; \
|
|
ferencd@0
|
54 "
|
|
ferencd@0
|
55 SCRIPT_END
|
|
ferencd@0
|
56
|
|
ferencd@0
|
57 ASSERT_EQ(2, VAR_BYTE(b));
|
|
ferencd@0
|
58
|
|
ferencd@0
|
59 SCRIPT_SHUTDOWN;
|
|
ferencd@0
|
60 }
|
|
ferencd@0
|
61
|
|
ferencd@0
|
62 TEST(VariableDefinitions, ComplicatedIndexedOperationInt)
|
|
ferencd@0
|
63 {
|
|
ferencd@0
|
64 SCRIPT_START
|
|
ferencd@0
|
65 " \
|
|
ferencd@0
|
66 int[] fun() \
|
|
ferencd@0
|
67 { \
|
|
ferencd@0
|
68 int t = 12; \
|
|
ferencd@0
|
69 int result[t]; \
|
|
ferencd@0
|
70 result[0] = 9; \
|
|
ferencd@0
|
71 return result; \
|
|
ferencd@0
|
72 } \
|
|
ferencd@0
|
73 int b[] =fun(); \
|
|
ferencd@0
|
74 int a = b[0]; \
|
|
ferencd@0
|
75 "
|
|
ferencd@0
|
76 SCRIPT_END
|
|
ferencd@0
|
77
|
|
ferencd@0
|
78 ASSERT_EQ(9, VAR_INT(a));
|
|
ferencd@0
|
79
|
|
ferencd@0
|
80 SCRIPT_SHUTDOWN;
|
|
ferencd@0
|
81 }
|
|
ferencd@0
|
82
|
|
ferencd@0
|
83 /* Define a simple integer type variable, assign a value to it. */
|
|
ferencd@0
|
84 TEST(VariableDefinitions, SimpleInt)
|
|
ferencd@0
|
85 {
|
|
ferencd@0
|
86 SCRIPT_START
|
|
ferencd@0
|
87 " \
|
|
ferencd@0
|
88 int a; \
|
|
ferencd@0
|
89 a = 2; \
|
|
ferencd@0
|
90 "
|
|
ferencd@0
|
91 SCRIPT_END
|
|
ferencd@0
|
92
|
|
ferencd@0
|
93 ASSERT_EQ(2, VAR_INT(a));
|
|
ferencd@0
|
94
|
|
ferencd@0
|
95 SCRIPT_SHUTDOWN;
|
|
ferencd@0
|
96 }
|
|
ferencd@0
|
97
|
|
ferencd@0
|
98
|
|
ferencd@0
|
99 /* Define a simple byte type variable, assign a value to it. */
|
|
ferencd@0
|
100 TEST(VariableDefinitions, SimpleByte)
|
|
ferencd@0
|
101 {
|
|
ferencd@0
|
102 SCRIPT_START
|
|
ferencd@0
|
103 " \
|
|
ferencd@0
|
104 byte a; \
|
|
ferencd@0
|
105 a = 2; \
|
|
ferencd@0
|
106 "
|
|
ferencd@0
|
107 SCRIPT_END
|
|
ferencd@0
|
108
|
|
ferencd@0
|
109 ASSERT_EQ(2, VAR_BYTE(a));
|
|
ferencd@0
|
110
|
|
ferencd@0
|
111 SCRIPT_SHUTDOWN;
|
|
ferencd@0
|
112 }
|
|
ferencd@0
|
113
|
|
ferencd@0
|
114 /* Define a string variable. Use the [] operator to change the second
|
|
ferencd@0
|
115 character in it.*/
|
|
ferencd@0
|
116 TEST(VariableDefinitions, StringIndexedOperation)
|
|
ferencd@0
|
117 {
|
|
ferencd@0
|
118 SCRIPT_START
|
|
ferencd@0
|
119 " \
|
|
ferencd@0
|
120 string b = \"AABB\"; \
|
|
ferencd@0
|
121 b[1] = \"c\"; \
|
|
ferencd@0
|
122 "
|
|
ferencd@0
|
123 SCRIPT_END
|
|
ferencd@0
|
124
|
|
ferencd@0
|
125 SCRIPT_ASSERT_STREQ("AcBB", b);
|
|
ferencd@0
|
126
|
|
ferencd@0
|
127 SCRIPT_SHUTDOWN;
|
|
ferencd@0
|
128 }
|
|
ferencd@0
|
129
|
|
ferencd@0
|
130 /* Define a string variable, use the [,] operator to change a part from it.
|
|
ferencd@0
|
131 The second indexe should be greater than the first one */
|
|
ferencd@0
|
132 TEST(VariableDefinitions, StringSubstringIndexedOperation1)
|
|
ferencd@0
|
133 {
|
|
ferencd@0
|
134 SCRIPT_START
|
|
ferencd@0
|
135 " \
|
|
ferencd@0
|
136 string b = \"AABB\"; \
|
|
ferencd@0
|
137 b[1,2] = \"cc\"; \
|
|
ferencd@0
|
138 "
|
|
ferencd@0
|
139 SCRIPT_END
|
|
ferencd@0
|
140
|
|
ferencd@0
|
141 SCRIPT_ASSERT_STREQ("AccB", b);
|
|
ferencd@0
|
142
|
|
ferencd@0
|
143 SCRIPT_SHUTDOWN;
|
|
ferencd@0
|
144 }
|
|
ferencd@0
|
145
|
|
ferencd@0
|
146 /* Define a string variable, use the [,] operator to change a part of it.
|
|
ferencd@0
|
147 The second index should be greater than the length of the string.
|
|
ferencd@0
|
148 Expected outcome is that the end of the string will be removed and
|
|
ferencd@0
|
149 it will end with the new string. */
|
|
ferencd@0
|
150 TEST(VariableDefinitions, StringSubstringIndexedOperation2)
|
|
ferencd@0
|
151 {
|
|
ferencd@0
|
152 SCRIPT_START
|
|
ferencd@0
|
153 " \
|
|
ferencd@0
|
154 string b = \"AABB\"; \
|
|
ferencd@0
|
155 b[1,5] = \"cc\"; \
|
|
ferencd@0
|
156 "
|
|
ferencd@0
|
157 SCRIPT_END
|
|
ferencd@0
|
158
|
|
ferencd@0
|
159 SCRIPT_ASSERT_STREQ("Acc", b);
|
|
ferencd@0
|
160
|
|
ferencd@0
|
161 SCRIPT_SHUTDOWN;
|
|
ferencd@0
|
162 }
|
|
ferencd@0
|
163
|
|
ferencd@0
|
164 /* Define a string and use the substring operation on it to set the characters
|
|
ferencd@0
|
165 between [x,y] to a specific string*/
|
|
ferencd@0
|
166 TEST(VariableDefinitions, StringSubstringIndexedOperation3)
|
|
ferencd@0
|
167 {
|
|
ferencd@0
|
168 SCRIPT_START
|
|
ferencd@0
|
169 " \
|
|
ferencd@0
|
170 string b = \"AABB\"; \
|
|
ferencd@0
|
171 b[1,3] = \"cc\"; \
|
|
ferencd@0
|
172 "
|
|
ferencd@0
|
173 SCRIPT_END
|
|
ferencd@0
|
174
|
|
ferencd@0
|
175 SCRIPT_ASSERT_STREQ("Acc", b);
|
|
ferencd@0
|
176
|
|
ferencd@0
|
177 SCRIPT_SHUTDOWN;
|
|
ferencd@0
|
178 }
|
|
ferencd@0
|
179
|
|
ferencd@0
|
180 TEST(VariableDefinitions, StringSubstringIndexedOperationInsertion)
|
|
ferencd@0
|
181 {
|
|
ferencd@0
|
182 SCRIPT_START
|
|
ferencd@0
|
183 " \
|
|
ferencd@0
|
184 string b = \"ABCD\"; \
|
|
ferencd@0
|
185 b[1,1] = \"cc\"; \
|
|
ferencd@0
|
186 "
|
|
ferencd@0
|
187 SCRIPT_END
|
|
ferencd@0
|
188
|
|
ferencd@0
|
189 SCRIPT_ASSERT_STREQ("AccCD", b);
|
|
ferencd@0
|
190
|
|
ferencd@0
|
191 SCRIPT_SHUTDOWN;
|
|
ferencd@0
|
192 }
|
|
ferencd@0
|
193
|
|
ferencd@0
|
194
|
|
ferencd@0
|
195 TEST(VariableDefinitions, UsingVarFromAboveScope)
|
|
ferencd@0
|
196 {
|
|
ferencd@0
|
197 SCRIPT_START
|
|
ferencd@0
|
198 " \
|
|
ferencd@0
|
199 int b; \
|
|
ferencd@0
|
200 for(int i=0; i<10; i++) \
|
|
ferencd@0
|
201 { \
|
|
ferencd@0
|
202 int a; \
|
|
ferencd@0
|
203 a = a + i; \
|
|
ferencd@0
|
204 b += a; \
|
|
ferencd@0
|
205 } \
|
|
ferencd@0
|
206 "
|
|
ferencd@0
|
207 SCRIPT_END
|
|
ferencd@0
|
208
|
|
ferencd@0
|
209 ASSERT_EQ(1+2+3+4+5+6+7+8+9, VAR_INT(b));
|
|
ferencd@0
|
210
|
|
ferencd@0
|
211 SCRIPT_SHUTDOWN;
|
|
ferencd@0
|
212 }
|
|
ferencd@0
|
213
|