1 /* Copyright (c) 2013-2017 Jeffrey Pfau
2  *
3  * This Source Code Form is subject to the terms of the Mozilla Public
4  * License, v. 2.0. If a copy of the MPL was not distributed with this
5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #include "util/test/suite.h"
7 
8 #include <mgba/core/cheats.h>
9 #include <mgba/core/core.h>
10 #include <mgba/gba/core.h>
11 #include <mgba/internal/gba/cheats.h>
12 
13 #include "gba/cheats/parv3.h"
14 #include "gba/cheats/gameshark.h"
15 
cheatsSetup(void ** state)16 static int cheatsSetup(void** state) {
17 	struct mCore* core = GBACoreCreate();
18 	core->init(core);
19 	mCoreInitConfig(core, NULL);
20 	core->cheatDevice(core);
21 	*state = core;
22 	return 0;
23 }
24 
cheatsTeardown(void ** state)25 static int cheatsTeardown(void** state) {
26 	if (!*state) {
27 		return 0;
28 	}
29 	struct mCore* core = *state;
30 	mCoreConfigDeinit(&core->config);
31 	core->deinit(core);
32 	return 0;
33 }
34 
M_TEST_DEFINE(createSet)35 M_TEST_DEFINE(createSet) {
36 	struct mCore* core = *state;
37 	struct mCheatDevice* device = core->cheatDevice(core);
38 	assert_non_null(device);
39 	struct mCheatSet* set = device->createSet(device, NULL);
40 	assert_non_null(set);
41 	mCheatSetDeinit(set);
42 }
43 
M_TEST_DEFINE(addRawPARv3)44 M_TEST_DEFINE(addRawPARv3) {
45 	struct mCore* core = *state;
46 	struct mCheatDevice* device = core->cheatDevice(core);
47 	assert_non_null(device);
48 	struct mCheatSet* set = device->createSet(device, NULL);
49 	assert_non_null(set);
50 	GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
51 	assert_true(set->addLine(set, "80000000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
52 	assert_false(set->addLine(set, "43000000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
53 	mCheatSetDeinit(set);
54 }
55 
M_TEST_DEFINE(doPARv3Assign)56 M_TEST_DEFINE(doPARv3Assign) {
57 	struct mCore* core = *state;
58 	struct mCheatDevice* device = core->cheatDevice(core);
59 	assert_non_null(device);
60 	struct mCheatSet* set = device->createSet(device, NULL);
61 	assert_non_null(set);
62 	GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
63 	assert_true(set->addLine(set, "00300000 00000078", GBA_CHEAT_PRO_ACTION_REPLAY));
64 	assert_true(set->addLine(set, "02300002 00005678", GBA_CHEAT_PRO_ACTION_REPLAY));
65 	assert_true(set->addLine(set, "04300004 12345678", GBA_CHEAT_PRO_ACTION_REPLAY));
66 
67 	core->reset(core);
68 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
69 	assert_int_equal(core->rawRead16(core, 0x03000002, -1), 0);
70 	assert_int_equal(core->rawRead32(core, 0x03000004, -1), 0);
71 
72 	mCheatRefresh(device, set);
73 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x78);
74 	assert_int_equal(core->rawRead16(core, 0x03000002, -1), 0x5678);
75 	assert_int_equal(core->rawRead32(core, 0x03000004, -1), 0x12345678);
76 
77 	mCheatSetDeinit(set);
78 }
79 
M_TEST_DEFINE(doPARv3Slide1)80 M_TEST_DEFINE(doPARv3Slide1) {
81 	struct mCore* core = *state;
82 	struct mCheatDevice* device = core->cheatDevice(core);
83 	assert_non_null(device);
84 	struct mCheatSet* set = device->createSet(device, NULL);
85 	assert_non_null(set);
86 	GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
87 	assert_true(set->addLine(set, "00000000 80300000", GBA_CHEAT_PRO_ACTION_REPLAY));
88 	assert_true(set->addLine(set, "00000001 01020002", GBA_CHEAT_PRO_ACTION_REPLAY));
89 
90 	core->reset(core);
91 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
92 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
93 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
94 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0);
95 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0);
96 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0);
97 
98 	mCheatRefresh(device, set);
99 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 1);
100 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
101 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 2);
102 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0);
103 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0);
104 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0);
105 
106 	mCheatSetDeinit(set);
107 }
108 
M_TEST_DEFINE(doPARv3Slide2)109 M_TEST_DEFINE(doPARv3Slide2) {
110 	struct mCore* core = *state;
111 	struct mCheatDevice* device = core->cheatDevice(core);
112 	assert_non_null(device);
113 	struct mCheatSet* set = device->createSet(device, NULL);
114 	assert_non_null(set);
115 	GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
116 	assert_true(set->addLine(set, "00000000 82300000", GBA_CHEAT_PRO_ACTION_REPLAY));
117 	assert_true(set->addLine(set, "00000001 01020002", GBA_CHEAT_PRO_ACTION_REPLAY));
118 
119 	core->reset(core);
120 	assert_int_equal(core->rawRead16(core, 0x03000000, -1), 0);
121 	assert_int_equal(core->rawRead16(core, 0x03000002, -1), 0);
122 	assert_int_equal(core->rawRead16(core, 0x03000004, -1), 0);
123 	assert_int_equal(core->rawRead16(core, 0x03000006, -1), 0);
124 	assert_int_equal(core->rawRead16(core, 0x03000008, -1), 0);
125 	assert_int_equal(core->rawRead16(core, 0x0300000A, -1), 0);
126 
127 	mCheatRefresh(device, set);
128 	assert_int_equal(core->rawRead16(core, 0x03000000, -1), 1);
129 	assert_int_equal(core->rawRead16(core, 0x03000002, -1), 0);
130 	assert_int_equal(core->rawRead16(core, 0x03000004, -1), 2);
131 	assert_int_equal(core->rawRead16(core, 0x03000006, -1), 0);
132 	assert_int_equal(core->rawRead16(core, 0x03000008, -1), 0);
133 	assert_int_equal(core->rawRead16(core, 0x0300000A, -1), 0);
134 
135 	mCheatSetDeinit(set);
136 }
137 
M_TEST_DEFINE(doPARv3Slide4)138 M_TEST_DEFINE(doPARv3Slide4) {
139 	struct mCore* core = *state;
140 	struct mCheatDevice* device = core->cheatDevice(core);
141 	assert_non_null(device);
142 	struct mCheatSet* set = device->createSet(device, NULL);
143 	assert_non_null(set);
144 	GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
145 	assert_true(set->addLine(set, "00000000 84300000", GBA_CHEAT_PRO_ACTION_REPLAY));
146 	assert_true(set->addLine(set, "00000001 01020002", GBA_CHEAT_PRO_ACTION_REPLAY));
147 
148 	core->reset(core);
149 	assert_int_equal(core->rawRead32(core, 0x03000000, -1), 0);
150 	assert_int_equal(core->rawRead32(core, 0x03000004, -1), 0);
151 	assert_int_equal(core->rawRead32(core, 0x03000008, -1), 0);
152 	assert_int_equal(core->rawRead32(core, 0x0300000C, -1), 0);
153 	assert_int_equal(core->rawRead32(core, 0x03000010, -1), 0);
154 	assert_int_equal(core->rawRead32(core, 0x03000014, -1), 0);
155 
156 	mCheatRefresh(device, set);
157 	assert_int_equal(core->rawRead16(core, 0x03000000, -1), 1);
158 	assert_int_equal(core->rawRead16(core, 0x03000004, -1), 0);
159 	assert_int_equal(core->rawRead16(core, 0x03000008, -1), 2);
160 	assert_int_equal(core->rawRead16(core, 0x0300000C, -1), 0);
161 	assert_int_equal(core->rawRead16(core, 0x03000010, -1), 0);
162 	assert_int_equal(core->rawRead16(core, 0x03000014, -1), 0);
163 
164 	mCheatSetDeinit(set);
165 }
166 
M_TEST_DEFINE(doPARv3If1)167 M_TEST_DEFINE(doPARv3If1) {
168 	struct mCore* core = *state;
169 	struct mCheatDevice* device = core->cheatDevice(core);
170 	assert_non_null(device);
171 	struct mCheatSet* set = device->createSet(device, NULL);
172 	assert_non_null(set);
173 	GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
174 	assert_true(set->addLine(set, "00300001 00000011", GBA_CHEAT_PRO_ACTION_REPLAY));
175 	assert_true(set->addLine(set, "08300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
176 	assert_true(set->addLine(set, "00300001 00000012", GBA_CHEAT_PRO_ACTION_REPLAY));
177 	assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
178 
179 	core->reset(core);
180 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
181 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
182 
183 	mCheatRefresh(device, set);
184 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
185 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x12);
186 
187 	core->reset(core);
188 	core->rawWrite8(core, 0x03000000, -1, 0x1);
189 	mCheatRefresh(device, set);
190 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
191 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x11);
192 
193 	mCheatSetDeinit(set);
194 }
195 
M_TEST_DEFINE(doPARv3If1x1)196 M_TEST_DEFINE(doPARv3If1x1) {
197 	struct mCore* core = *state;
198 	struct mCheatDevice* device = core->cheatDevice(core);
199 	assert_non_null(device);
200 	struct mCheatSet* set = device->createSet(device, NULL);
201 	assert_non_null(set);
202 	GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
203 	assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
204 	assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY));
205 	assert_true(set->addLine(set, "08300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
206 	assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
207 	assert_true(set->addLine(set, "08300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
208 	assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY));
209 	assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
210 
211 	core->reset(core);
212 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
213 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
214 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
215 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0);
216 
217 	mCheatRefresh(device, set);
218 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
219 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
220 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
221 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
222 
223 	core->reset(core);
224 	core->rawWrite8(core, 0x03000000, -1, 0x1);
225 	mCheatRefresh(device, set);
226 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
227 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
228 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
229 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
230 
231 	core->reset(core);
232 	core->rawWrite8(core, 0x03000001, -1, 0x1);
233 	mCheatRefresh(device, set);
234 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
235 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
236 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
237 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
238 
239 	core->reset(core);
240 	core->rawWrite8(core, 0x03000000, -1, 0x1);
241 	core->rawWrite8(core, 0x03000001, -1, 0x1);
242 	mCheatRefresh(device, set);
243 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
244 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
245 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
246 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
247 
248 	mCheatSetDeinit(set);
249 }
250 
M_TEST_DEFINE(doPARv3If2)251 M_TEST_DEFINE(doPARv3If2) {
252 	struct mCore* core = *state;
253 	struct mCheatDevice* device = core->cheatDevice(core);
254 	assert_non_null(device);
255 	struct mCheatSet* set = device->createSet(device, NULL);
256 	assert_non_null(set);
257 	GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
258 	assert_true(set->addLine(set, "00300001 00000011", GBA_CHEAT_PRO_ACTION_REPLAY));
259 	assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
260 	assert_true(set->addLine(set, "48300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
261 	assert_true(set->addLine(set, "00300001 00000012", GBA_CHEAT_PRO_ACTION_REPLAY));
262 	assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
263 	assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
264 
265 	core->reset(core);
266 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
267 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
268 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
269 
270 	mCheatRefresh(device, set);
271 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
272 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x12);
273 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
274 
275 	core->reset(core);
276 	core->rawWrite8(core, 0x03000000, -1, 0x1);
277 	mCheatRefresh(device, set);
278 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
279 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x11);
280 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
281 
282 	mCheatSetDeinit(set);
283 }
284 
M_TEST_DEFINE(doPARv3If2x2)285 M_TEST_DEFINE(doPARv3If2x2) {
286 	struct mCore* core = *state;
287 	struct mCheatDevice* device = core->cheatDevice(core);
288 	assert_non_null(device);
289 	struct mCheatSet* set = device->createSet(device, NULL);
290 	assert_non_null(set);
291 	GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
292 	assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
293 	assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY));
294 	assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY));
295 	assert_true(set->addLine(set, "00300005 00000051", GBA_CHEAT_PRO_ACTION_REPLAY));
296 	assert_true(set->addLine(set, "48300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
297 	assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
298 	assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY));
299 	assert_true(set->addLine(set, "48300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
300 	assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY));
301 	assert_true(set->addLine(set, "00300005 00000052", GBA_CHEAT_PRO_ACTION_REPLAY));
302 	assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
303 
304 	core->reset(core);
305 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
306 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
307 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
308 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0);
309 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0);
310 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0);
311 
312 	mCheatRefresh(device, set);
313 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
314 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
315 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
316 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
317 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
318 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
319 
320 	core->reset(core);
321 	core->rawWrite8(core, 0x03000000, -1, 0x1);
322 	mCheatRefresh(device, set);
323 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
324 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
325 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
326 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
327 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
328 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
329 
330 	core->reset(core);
331 	core->rawWrite8(core, 0x03000001, -1, 0x1);
332 	mCheatRefresh(device, set);
333 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
334 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
335 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
336 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
337 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
338 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
339 
340 	core->reset(core);
341 	core->rawWrite8(core, 0x03000000, -1, 0x1);
342 	core->rawWrite8(core, 0x03000001, -1, 0x1);
343 	mCheatRefresh(device, set);
344 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
345 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
346 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
347 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
348 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
349 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
350 	mCheatSetDeinit(set);
351 }
352 
M_TEST_DEFINE(doPARv3If2Contain1)353 M_TEST_DEFINE(doPARv3If2Contain1) {
354 	struct mCore* core = *state;
355 	struct mCheatDevice* device = core->cheatDevice(core);
356 	assert_non_null(device);
357 	struct mCheatSet* set = device->createSet(device, NULL);
358 	assert_non_null(set);
359 	GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
360 	assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
361 	assert_true(set->addLine(set, "48300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
362 	assert_true(set->addLine(set, "08300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
363 	assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
364 	assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
365 
366 	core->reset(core);
367 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
368 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
369 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
370 
371 	mCheatRefresh(device, set);
372 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
373 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
374 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
375 
376 	core->reset(core);
377 	core->rawWrite8(core, 0x03000000, -1, 0x1);
378 	mCheatRefresh(device, set);
379 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
380 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
381 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
382 
383 	core->reset(core);
384 	core->rawWrite8(core, 0x03000001, -1, 0x1);
385 	mCheatRefresh(device, set);
386 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
387 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
388 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
389 
390 	core->reset(core);
391 	core->rawWrite8(core, 0x03000000, -1, 0x1);
392 	core->rawWrite8(core, 0x03000001, -1, 0x1);
393 	mCheatRefresh(device, set);
394 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
395 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
396 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
397 	mCheatSetDeinit(set);
398 }
399 
M_TEST_DEFINE(doPARv3IfX)400 M_TEST_DEFINE(doPARv3IfX) {
401 	struct mCore* core = *state;
402 	struct mCheatDevice* device = core->cheatDevice(core);
403 	assert_non_null(device);
404 	struct mCheatSet* set = device->createSet(device, NULL);
405 	assert_non_null(set);
406 	GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
407 	assert_true(set->addLine(set, "00300001 00000011", GBA_CHEAT_PRO_ACTION_REPLAY));
408 	assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
409 	assert_true(set->addLine(set, "00300001 00000012", GBA_CHEAT_PRO_ACTION_REPLAY));
410 	assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
411 	assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
412 
413 	core->reset(core);
414 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
415 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
416 
417 	mCheatRefresh(device, set);
418 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
419 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x12);
420 
421 	core->reset(core);
422 	core->rawWrite8(core, 0x03000000, -1, 0x1);
423 	mCheatRefresh(device, set);
424 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
425 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x11);
426 	mCheatSetDeinit(set);
427 }
428 
M_TEST_DEFINE(doPARv3IfXxX)429 M_TEST_DEFINE(doPARv3IfXxX) {
430 	struct mCore* core = *state;
431 	struct mCheatDevice* device = core->cheatDevice(core);
432 	assert_non_null(device);
433 	struct mCheatSet* set = device->createSet(device, NULL);
434 	assert_non_null(set);
435 	GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
436 	assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
437 	assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY));
438 	assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY));
439 	assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
440 	assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
441 	assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
442 	assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY));
443 	assert_true(set->addLine(set, "88300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
444 	assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY));
445 	assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
446 	assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
447 
448 	core->reset(core);
449 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
450 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
451 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
452 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0);
453 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0);
454 
455 	mCheatRefresh(device, set);
456 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
457 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
458 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
459 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
460 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
461 
462 	core->reset(core);
463 	core->rawWrite8(core, 0x03000000, -1, 0x1);
464 	mCheatRefresh(device, set);
465 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
466 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
467 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
468 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
469 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
470 
471 	core->reset(core);
472 	core->rawWrite8(core, 0x03000001, -1, 0x1);
473 	mCheatRefresh(device, set);
474 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
475 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
476 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
477 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
478 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
479 
480 	core->reset(core);
481 	core->rawWrite8(core, 0x03000000, -1, 0x1);
482 	core->rawWrite8(core, 0x03000001, -1, 0x1);
483 	mCheatRefresh(device, set);
484 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
485 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
486 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
487 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
488 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
489 	mCheatSetDeinit(set);
490 }
491 
M_TEST_DEFINE(doPARv3IfXElse)492 M_TEST_DEFINE(doPARv3IfXElse) {
493 	struct mCore* core = *state;
494 	struct mCheatDevice* device = core->cheatDevice(core);
495 	assert_non_null(device);
496 	struct mCheatSet* set = device->createSet(device, NULL);
497 	assert_non_null(set);
498 	GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
499 	assert_true(set->addLine(set, "00300001 00000011", GBA_CHEAT_PRO_ACTION_REPLAY));
500 	assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
501 	assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
502 	assert_true(set->addLine(set, "00300001 00000012", GBA_CHEAT_PRO_ACTION_REPLAY));
503 	assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY));
504 	assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
505 	assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
506 	assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
507 
508 	core->reset(core);
509 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
510 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
511 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
512 
513 	mCheatRefresh(device, set);
514 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
515 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x12);
516 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
517 
518 	core->reset(core);
519 	core->rawWrite8(core, 0x03000000, -1, 0x1);
520 	mCheatRefresh(device, set);
521 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
522 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x11);
523 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
524 	mCheatSetDeinit(set);
525 }
526 
M_TEST_DEFINE(doPARv3IfXElsexX)527 M_TEST_DEFINE(doPARv3IfXElsexX) {
528 	struct mCore* core = *state;
529 	struct mCheatDevice* device = core->cheatDevice(core);
530 	assert_non_null(device);
531 	struct mCheatSet* set = device->createSet(device, NULL);
532 	assert_non_null(set);
533 	GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
534 	assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
535 	assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY));
536 	assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY));
537 	assert_true(set->addLine(set, "00300005 00000051", GBA_CHEAT_PRO_ACTION_REPLAY));
538 	assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
539 	assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
540 	assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY));
541 	assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY));
542 	assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
543 	assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY));
544 	assert_true(set->addLine(set, "88300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
545 	assert_true(set->addLine(set, "00300005 00000052", GBA_CHEAT_PRO_ACTION_REPLAY));
546 	assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
547 	assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
548 
549 	core->reset(core);
550 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
551 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
552 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
553 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0);
554 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0);
555 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0);
556 
557 	mCheatRefresh(device, set);
558 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
559 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
560 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
561 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
562 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
563 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
564 
565 	core->reset(core);
566 	core->rawWrite8(core, 0x03000000, -1, 0x1);
567 	mCheatRefresh(device, set);
568 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
569 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
570 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
571 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
572 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
573 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
574 
575 	core->reset(core);
576 	core->rawWrite8(core, 0x03000001, -1, 0x1);
577 	mCheatRefresh(device, set);
578 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
579 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
580 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
581 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
582 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
583 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
584 
585 	core->reset(core);
586 	core->rawWrite8(core, 0x03000000, -1, 0x1);
587 	core->rawWrite8(core, 0x03000001, -1, 0x1);
588 	mCheatRefresh(device, set);
589 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
590 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
591 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
592 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
593 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
594 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
595 	mCheatSetDeinit(set);
596 }
597 
M_TEST_DEFINE(doPARv3IfXElsexXElse)598 M_TEST_DEFINE(doPARv3IfXElsexXElse) {
599 	struct mCore* core = *state;
600 	struct mCheatDevice* device = core->cheatDevice(core);
601 	assert_non_null(device);
602 	struct mCheatSet* set = device->createSet(device, NULL);
603 	assert_non_null(set);
604 	GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
605 	assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
606 	assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY));
607 	assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY));
608 	assert_true(set->addLine(set, "00300005 00000051", GBA_CHEAT_PRO_ACTION_REPLAY));
609 	assert_true(set->addLine(set, "00300006 00000061", GBA_CHEAT_PRO_ACTION_REPLAY));
610 	assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
611 	assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
612 	assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY));
613 	assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY));
614 	assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
615 	assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY));
616 	assert_true(set->addLine(set, "88300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
617 	assert_true(set->addLine(set, "00300005 00000052", GBA_CHEAT_PRO_ACTION_REPLAY));
618 	assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY));
619 	assert_true(set->addLine(set, "00300006 00000062", GBA_CHEAT_PRO_ACTION_REPLAY));
620 	assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
621 	assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
622 
623 	core->reset(core);
624 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
625 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
626 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
627 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0);
628 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0);
629 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0);
630 	assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0);
631 
632 	mCheatRefresh(device, set);
633 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
634 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
635 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
636 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
637 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
638 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
639 
640 	core->reset(core);
641 	core->rawWrite8(core, 0x03000000, -1, 0x1);
642 	mCheatRefresh(device, set);
643 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
644 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
645 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
646 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
647 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
648 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
649 	assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x61);
650 
651 	core->reset(core);
652 	core->rawWrite8(core, 0x03000001, -1, 0x1);
653 	mCheatRefresh(device, set);
654 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
655 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
656 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
657 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
658 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
659 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
660 	assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x62);
661 
662 	core->reset(core);
663 	core->rawWrite8(core, 0x03000000, -1, 0x1);
664 	core->rawWrite8(core, 0x03000001, -1, 0x1);
665 	mCheatRefresh(device, set);
666 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
667 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
668 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
669 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
670 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
671 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
672 	assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x62);
673 	mCheatSetDeinit(set);
674 }
675 
M_TEST_DEFINE(doPARv3IfXContain1)676 M_TEST_DEFINE(doPARv3IfXContain1) {
677 	struct mCore* core = *state;
678 	struct mCheatDevice* device = core->cheatDevice(core);
679 	assert_non_null(device);
680 	struct mCheatSet* set = device->createSet(device, NULL);
681 	assert_non_null(set);
682 	GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
683 	assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
684 	assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY));
685 	assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY));
686 	assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
687 	assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
688 	assert_true(set->addLine(set, "08300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
689 	assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY));
690 	assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY));
691 	assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
692 	assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
693 
694 	core->reset(core);
695 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
696 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
697 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
698 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0);
699 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0);
700 
701 	mCheatRefresh(device, set);
702 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
703 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
704 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
705 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
706 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
707 
708 	core->reset(core);
709 	core->rawWrite8(core, 0x03000000, -1, 0x1);
710 	mCheatRefresh(device, set);
711 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
712 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
713 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
714 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
715 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
716 
717 	core->reset(core);
718 	core->rawWrite8(core, 0x03000001, -1, 0x1);
719 	mCheatRefresh(device, set);
720 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
721 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
722 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
723 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
724 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
725 
726 	core->reset(core);
727 	core->rawWrite8(core, 0x03000000, -1, 0x1);
728 	core->rawWrite8(core, 0x03000001, -1, 0x1);
729 	mCheatRefresh(device, set);
730 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
731 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
732 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
733 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
734 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
735 	mCheatSetDeinit(set);
736 }
737 
M_TEST_DEFINE(doPARv3IfXContain1Else)738 M_TEST_DEFINE(doPARv3IfXContain1Else) {
739 	struct mCore* core = *state;
740 	struct mCheatDevice* device = core->cheatDevice(core);
741 	assert_non_null(device);
742 	struct mCheatSet* set = device->createSet(device, NULL);
743 	assert_non_null(set);
744 	GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
745 	assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
746 	assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY));
747 	assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY));
748 	assert_true(set->addLine(set, "00300005 00000051", GBA_CHEAT_PRO_ACTION_REPLAY));
749 	assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
750 	assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
751 	assert_true(set->addLine(set, "08300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
752 	assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY));
753 	assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY));
754 	assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY));
755 	assert_true(set->addLine(set, "00300005 00000052", GBA_CHEAT_PRO_ACTION_REPLAY));
756 	assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
757 	assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
758 
759 	core->reset(core);
760 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
761 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
762 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
763 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0);
764 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0);
765 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0);
766 
767 	mCheatRefresh(device, set);
768 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
769 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
770 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
771 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
772 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
773 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
774 
775 	core->reset(core);
776 	core->rawWrite8(core, 0x03000000, -1, 0x1);
777 	mCheatRefresh(device, set);
778 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
779 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
780 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
781 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
782 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
783 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
784 
785 	core->reset(core);
786 	core->rawWrite8(core, 0x03000001, -1, 0x1);
787 	mCheatRefresh(device, set);
788 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
789 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
790 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
791 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
792 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
793 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
794 
795 	core->reset(core);
796 	core->rawWrite8(core, 0x03000000, -1, 0x1);
797 	core->rawWrite8(core, 0x03000001, -1, 0x1);
798 	mCheatRefresh(device, set);
799 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
800 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
801 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
802 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
803 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
804 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
805 	mCheatSetDeinit(set);
806 }
807 
M_TEST_DEFINE(doPARv3IfXElseContain1)808 M_TEST_DEFINE(doPARv3IfXElseContain1) {
809 	struct mCore* core = *state;
810 	struct mCheatDevice* device = core->cheatDevice(core);
811 	assert_non_null(device);
812 	struct mCheatSet* set = device->createSet(device, NULL);
813 	assert_non_null(set);
814 	GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
815 	assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
816 	assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY));
817 	assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY));
818 	assert_true(set->addLine(set, "00300005 00000051", GBA_CHEAT_PRO_ACTION_REPLAY));
819 	assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
820 	assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
821 	assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY));
822 	assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY));
823 	assert_true(set->addLine(set, "08300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
824 	assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY));
825 	assert_true(set->addLine(set, "00300005 00000052", GBA_CHEAT_PRO_ACTION_REPLAY));
826 	assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
827 	assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
828 
829 	core->reset(core);
830 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
831 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
832 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
833 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0);
834 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0);
835 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0);
836 
837 	mCheatRefresh(device, set);
838 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
839 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
840 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
841 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
842 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
843 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
844 
845 	core->reset(core);
846 	core->rawWrite8(core, 0x03000000, -1, 0x1);
847 	mCheatRefresh(device, set);
848 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
849 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
850 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
851 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
852 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
853 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
854 
855 	core->reset(core);
856 	core->rawWrite8(core, 0x03000001, -1, 0x1);
857 	mCheatRefresh(device, set);
858 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
859 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
860 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
861 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
862 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
863 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
864 
865 	core->reset(core);
866 	core->rawWrite8(core, 0x03000000, -1, 0x1);
867 	core->rawWrite8(core, 0x03000001, -1, 0x1);
868 	mCheatRefresh(device, set);
869 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
870 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
871 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
872 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
873 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
874 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
875 	mCheatSetDeinit(set);
876 }
877 
M_TEST_DEFINE(doPARv3IfXContain1ElseContain1)878 M_TEST_DEFINE(doPARv3IfXContain1ElseContain1) {
879 	struct mCore* core = *state;
880 	struct mCheatDevice* device = core->cheatDevice(core);
881 	assert_non_null(device);
882 	struct mCheatSet* set = device->createSet(device, NULL);
883 	assert_non_null(set);
884 	GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
885 	assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY));
886 	assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY));
887 	assert_true(set->addLine(set, "00300005 00000051", GBA_CHEAT_PRO_ACTION_REPLAY));
888 	assert_true(set->addLine(set, "00300006 00000061", GBA_CHEAT_PRO_ACTION_REPLAY));
889 	assert_true(set->addLine(set, "00300007 00000071", GBA_CHEAT_PRO_ACTION_REPLAY));
890 	assert_true(set->addLine(set, "00300008 00000081", GBA_CHEAT_PRO_ACTION_REPLAY));
891 	assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
892 	assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY));
893 	assert_true(set->addLine(set, "08300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
894 	assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY));
895 	assert_true(set->addLine(set, "00300005 00000052", GBA_CHEAT_PRO_ACTION_REPLAY));
896 	assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY));
897 	assert_true(set->addLine(set, "00300006 00000062", GBA_CHEAT_PRO_ACTION_REPLAY));
898 	assert_true(set->addLine(set, "08300002 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
899 	assert_true(set->addLine(set, "00300007 00000072", GBA_CHEAT_PRO_ACTION_REPLAY));
900 	assert_true(set->addLine(set, "00300008 00000082", GBA_CHEAT_PRO_ACTION_REPLAY));
901 	assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
902 	assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
903 
904 	core->reset(core);
905 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
906 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
907 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
908 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0);
909 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0);
910 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0);
911 	assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0);
912 	assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0);
913 	assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0);
914 
915 	mCheatRefresh(device, set);
916 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
917 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
918 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
919 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
920 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
921 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
922 	assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x61);
923 	assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x71);
924 	assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x81);
925 
926 	core->reset(core);
927 	core->rawWrite8(core, 0x03000000, -1, 0x1);
928 	mCheatRefresh(device, set);
929 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
930 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
931 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
932 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
933 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
934 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
935 	assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x62);
936 	assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x72);
937 	assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x82);
938 
939 	core->reset(core);
940 	core->rawWrite8(core, 0x03000001, -1, 0x1);
941 	mCheatRefresh(device, set);
942 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
943 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
944 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
945 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
946 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
947 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
948 	assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x61);
949 	assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x71);
950 	assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x81);
951 
952 	core->reset(core);
953 	core->rawWrite8(core, 0x03000002, -1, 0x1);
954 	mCheatRefresh(device, set);
955 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
956 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
957 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x1);
958 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
959 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
960 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
961 	assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x61);
962 	assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x71);
963 	assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x81);
964 
965 	core->reset(core);
966 	core->rawWrite8(core, 0x03000000, -1, 0x1);
967 	core->rawWrite8(core, 0x03000001, -1, 0x1);
968 	mCheatRefresh(device, set);
969 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
970 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
971 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
972 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
973 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
974 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
975 	assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x62);
976 	assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x72);
977 	assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x82);
978 
979 	core->reset(core);
980 	core->rawWrite8(core, 0x03000000, -1, 0x1);
981 	core->rawWrite8(core, 0x03000002, -1, 0x1);
982 	mCheatRefresh(device, set);
983 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
984 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
985 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x1);
986 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
987 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
988 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
989 	assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x62);
990 	assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x71);
991 	assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x82);
992 
993 	core->reset(core);
994 	core->rawWrite8(core, 0x03000001, -1, 0x1);
995 	core->rawWrite8(core, 0x03000002, -1, 0x1);
996 	mCheatRefresh(device, set);
997 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
998 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
999 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x1);
1000 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
1001 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
1002 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
1003 	assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x61);
1004 	assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x71);
1005 	assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x81);
1006 
1007 	core->reset(core);
1008 	core->rawWrite8(core, 0x03000000, -1, 0x1);
1009 	core->rawWrite8(core, 0x03000001, -1, 0x1);
1010 	core->rawWrite8(core, 0x03000002, -1, 0x1);
1011 	mCheatRefresh(device, set);
1012 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
1013 	assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
1014 	assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x1);
1015 	assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
1016 	assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
1017 	assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
1018 	assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x62);
1019 	assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x71);
1020 	assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x82);
1021 	mCheatSetDeinit(set);
1022 }
1023 
M_TEST_DEFINE(doPARv3IfButton)1024 M_TEST_DEFINE(doPARv3IfButton) {
1025 	struct mCore* core = *state;
1026 	struct mCheatDevice* device = core->cheatDevice(core);
1027 	assert_non_null(device);
1028 	struct mCheatSet* set = device->createSet(device, NULL);
1029 	assert_non_null(set);
1030 	GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
1031 	assert_true(set->addLine(set, "00000000 10300000", GBA_CHEAT_PRO_ACTION_REPLAY));
1032 	assert_true(set->addLine(set, "00000001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
1033 
1034 	core->reset(core);
1035 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
1036 
1037 	mCheatRefresh(device, set);
1038 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
1039 
1040 	mCheatPressButton(device, true);
1041 	mCheatRefresh(device, set);
1042 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
1043 
1044 	mCheatPressButton(device, false);
1045 	mCheatRefresh(device, set);
1046 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
1047 
1048 	core->rawWrite8(core, 0x03000000, -1, 0);
1049 	mCheatRefresh(device, set);
1050 	assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
1051 	mCheatSetDeinit(set);
1052 }
1053 
1054 M_TEST_SUITE_DEFINE(GBACheats,
1055 	cmocka_unit_test_setup_teardown(createSet, cheatsSetup, cheatsTeardown),
1056 	cmocka_unit_test_setup_teardown(addRawPARv3, cheatsSetup, cheatsTeardown),
1057 	cmocka_unit_test_setup_teardown(doPARv3Assign, cheatsSetup, cheatsTeardown),
1058 	cmocka_unit_test_setup_teardown(doPARv3Slide1, cheatsSetup, cheatsTeardown),
1059 	cmocka_unit_test_setup_teardown(doPARv3Slide2, cheatsSetup, cheatsTeardown),
1060 	cmocka_unit_test_setup_teardown(doPARv3Slide4, cheatsSetup, cheatsTeardown),
1061 	cmocka_unit_test_setup_teardown(doPARv3If1, cheatsSetup, cheatsTeardown),
1062 	cmocka_unit_test_setup_teardown(doPARv3If1x1, cheatsSetup, cheatsTeardown),
1063 	cmocka_unit_test_setup_teardown(doPARv3If2, cheatsSetup, cheatsTeardown),
1064 	cmocka_unit_test_setup_teardown(doPARv3If2x2, cheatsSetup, cheatsTeardown),
1065 	cmocka_unit_test_setup_teardown(doPARv3If2Contain1, cheatsSetup, cheatsTeardown),
1066 	cmocka_unit_test_setup_teardown(doPARv3IfX, cheatsSetup, cheatsTeardown),
1067 	cmocka_unit_test_setup_teardown(doPARv3IfXxX, cheatsSetup, cheatsTeardown),
1068 	cmocka_unit_test_setup_teardown(doPARv3IfXElse, cheatsSetup, cheatsTeardown),
1069 	cmocka_unit_test_setup_teardown(doPARv3IfXElsexX, cheatsSetup, cheatsTeardown),
1070 	cmocka_unit_test_setup_teardown(doPARv3IfXElsexXElse, cheatsSetup, cheatsTeardown),
1071 	cmocka_unit_test_setup_teardown(doPARv3IfXContain1, cheatsSetup, cheatsTeardown),
1072 	cmocka_unit_test_setup_teardown(doPARv3IfXContain1Else, cheatsSetup, cheatsTeardown),
1073 	cmocka_unit_test_setup_teardown(doPARv3IfXElseContain1, cheatsSetup, cheatsTeardown),
1074 	cmocka_unit_test_setup_teardown(doPARv3IfXContain1ElseContain1, cheatsSetup, cheatsTeardown),
1075 	cmocka_unit_test_setup_teardown(doPARv3IfButton, cheatsSetup, cheatsTeardown))
1076