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