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}
425
426M_TEST_DEFINE(doPARv3IfXxX) {
427 struct mCore* core = *state;
428 struct mCheatDevice* device = core->cheatDevice(core);
429 assert_non_null(device);
430 struct mCheatSet* set = device->createSet(device, NULL);
431 assert_non_null(set);
432 GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
433 assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
434 assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY));
435 assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY));
436 assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
437 assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
438 assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
439 assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY));
440 assert_true(set->addLine(set, "88300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
441 assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY));
442 assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
443 assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
444
445 core->reset(core);
446 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
447 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
448 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
449 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0);
450 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0);
451
452 mCheatRefresh(device, set);
453 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
454 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
455 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
456 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
457 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
458
459 core->reset(core);
460 core->rawWrite8(core, 0x03000000, -1, 0x1);
461 mCheatRefresh(device, set);
462 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
463 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
464 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
465 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
466 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
467
468 core->reset(core);
469 core->rawWrite8(core, 0x03000001, -1, 0x1);
470 mCheatRefresh(device, set);
471 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
472 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
473 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
474 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
475 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
476
477 core->reset(core);
478 core->rawWrite8(core, 0x03000000, -1, 0x1);
479 core->rawWrite8(core, 0x03000001, -1, 0x1);
480 mCheatRefresh(device, set);
481 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
482 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
483 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
484 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
485 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
486}
487
488M_TEST_DEFINE(doPARv3IfXElse) {
489 struct mCore* core = *state;
490 struct mCheatDevice* device = core->cheatDevice(core);
491 assert_non_null(device);
492 struct mCheatSet* set = device->createSet(device, NULL);
493 assert_non_null(set);
494 GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
495 assert_true(set->addLine(set, "00300001 00000011", GBA_CHEAT_PRO_ACTION_REPLAY));
496 assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
497 assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
498 assert_true(set->addLine(set, "00300001 00000012", GBA_CHEAT_PRO_ACTION_REPLAY));
499 assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY));
500 assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
501 assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
502 assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
503
504 core->reset(core);
505 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
506 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
507 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
508
509 mCheatRefresh(device, set);
510 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
511 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x12);
512 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
513
514 core->reset(core);
515 core->rawWrite8(core, 0x03000000, -1, 0x1);
516 mCheatRefresh(device, set);
517 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
518 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x11);
519 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
520}
521
522M_TEST_DEFINE(doPARv3IfXElsexX) {
523 struct mCore* core = *state;
524 struct mCheatDevice* device = core->cheatDevice(core);
525 assert_non_null(device);
526 struct mCheatSet* set = device->createSet(device, NULL);
527 assert_non_null(set);
528 GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
529 assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
530 assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY));
531 assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY));
532 assert_true(set->addLine(set, "00300005 00000051", GBA_CHEAT_PRO_ACTION_REPLAY));
533 assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
534 assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
535 assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY));
536 assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY));
537 assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
538 assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY));
539 assert_true(set->addLine(set, "88300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
540 assert_true(set->addLine(set, "00300005 00000052", GBA_CHEAT_PRO_ACTION_REPLAY));
541 assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
542 assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
543
544 core->reset(core);
545 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
546 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
547 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
548 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0);
549 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0);
550 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0);
551
552 mCheatRefresh(device, set);
553 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
554 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
555 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
556 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
557 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
558 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
559
560 core->reset(core);
561 core->rawWrite8(core, 0x03000000, -1, 0x1);
562 mCheatRefresh(device, set);
563 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
564 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
565 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
566 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
567 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
568 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
569
570 core->reset(core);
571 core->rawWrite8(core, 0x03000001, -1, 0x1);
572 mCheatRefresh(device, set);
573 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
574 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
575 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
576 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
577 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
578 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
579
580 core->reset(core);
581 core->rawWrite8(core, 0x03000000, -1, 0x1);
582 core->rawWrite8(core, 0x03000001, -1, 0x1);
583 mCheatRefresh(device, set);
584 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
585 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
586 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
587 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
588 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
589 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
590}
591
592M_TEST_DEFINE(doPARv3IfXElsexXElse) {
593 struct mCore* core = *state;
594 struct mCheatDevice* device = core->cheatDevice(core);
595 assert_non_null(device);
596 struct mCheatSet* set = device->createSet(device, NULL);
597 assert_non_null(set);
598 GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
599 assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
600 assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY));
601 assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY));
602 assert_true(set->addLine(set, "00300005 00000051", GBA_CHEAT_PRO_ACTION_REPLAY));
603 assert_true(set->addLine(set, "00300006 00000061", GBA_CHEAT_PRO_ACTION_REPLAY));
604 assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
605 assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
606 assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY));
607 assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY));
608 assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
609 assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY));
610 assert_true(set->addLine(set, "88300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
611 assert_true(set->addLine(set, "00300005 00000052", GBA_CHEAT_PRO_ACTION_REPLAY));
612 assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY));
613 assert_true(set->addLine(set, "00300006 00000062", GBA_CHEAT_PRO_ACTION_REPLAY));
614 assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
615 assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
616
617 core->reset(core);
618 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
619 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
620 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
621 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0);
622 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0);
623 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0);
624 assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0);
625
626 mCheatRefresh(device, set);
627 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
628 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
629 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
630 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
631 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
632 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
633
634 core->reset(core);
635 core->rawWrite8(core, 0x03000000, -1, 0x1);
636 mCheatRefresh(device, set);
637 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
638 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
639 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
640 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
641 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
642 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
643 assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x61);
644
645 core->reset(core);
646 core->rawWrite8(core, 0x03000001, -1, 0x1);
647 mCheatRefresh(device, set);
648 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
649 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
650 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
651 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
652 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
653 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
654 assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x62);
655
656 core->reset(core);
657 core->rawWrite8(core, 0x03000000, -1, 0x1);
658 core->rawWrite8(core, 0x03000001, -1, 0x1);
659 mCheatRefresh(device, set);
660 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
661 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
662 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
663 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
664 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
665 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
666 assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x62);
667}
668
669M_TEST_DEFINE(doPARv3IfXContain1) {
670 struct mCore* core = *state;
671 struct mCheatDevice* device = core->cheatDevice(core);
672 assert_non_null(device);
673 struct mCheatSet* set = device->createSet(device, NULL);
674 assert_non_null(set);
675 GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
676 assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
677 assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY));
678 assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY));
679 assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
680 assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
681 assert_true(set->addLine(set, "08300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
682 assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY));
683 assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY));
684 assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
685 assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
686
687 core->reset(core);
688 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
689 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
690 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
691 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0);
692 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0);
693
694 mCheatRefresh(device, set);
695 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
696 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
697 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
698 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
699 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
700
701 core->reset(core);
702 core->rawWrite8(core, 0x03000000, -1, 0x1);
703 mCheatRefresh(device, set);
704 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
705 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
706 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
707 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
708 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
709
710 core->reset(core);
711 core->rawWrite8(core, 0x03000001, -1, 0x1);
712 mCheatRefresh(device, set);
713 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
714 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
715 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
716 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
717 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
718
719 core->reset(core);
720 core->rawWrite8(core, 0x03000000, -1, 0x1);
721 core->rawWrite8(core, 0x03000001, -1, 0x1);
722 mCheatRefresh(device, set);
723 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
724 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
725 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
726 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
727 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
728}
729
730M_TEST_DEFINE(doPARv3IfXContain1Else) {
731 struct mCore* core = *state;
732 struct mCheatDevice* device = core->cheatDevice(core);
733 assert_non_null(device);
734 struct mCheatSet* set = device->createSet(device, NULL);
735 assert_non_null(set);
736 GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
737 assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
738 assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY));
739 assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY));
740 assert_true(set->addLine(set, "00300005 00000051", GBA_CHEAT_PRO_ACTION_REPLAY));
741 assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
742 assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
743 assert_true(set->addLine(set, "08300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
744 assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY));
745 assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY));
746 assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY));
747 assert_true(set->addLine(set, "00300005 00000052", GBA_CHEAT_PRO_ACTION_REPLAY));
748 assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
749 assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
750
751 core->reset(core);
752 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
753 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
754 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
755 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0);
756 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0);
757 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0);
758
759 mCheatRefresh(device, set);
760 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
761 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
762 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
763 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
764 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
765 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
766
767 core->reset(core);
768 core->rawWrite8(core, 0x03000000, -1, 0x1);
769 mCheatRefresh(device, set);
770 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
771 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
772 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
773 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
774 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
775 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
776
777 core->reset(core);
778 core->rawWrite8(core, 0x03000001, -1, 0x1);
779 mCheatRefresh(device, set);
780 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
781 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
782 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
783 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
784 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
785 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
786
787 core->reset(core);
788 core->rawWrite8(core, 0x03000000, -1, 0x1);
789 core->rawWrite8(core, 0x03000001, -1, 0x1);
790 mCheatRefresh(device, set);
791 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
792 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
793 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
794 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
795 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
796 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
797}
798
799M_TEST_DEFINE(doPARv3IfXElseContain1) {
800 struct mCore* core = *state;
801 struct mCheatDevice* device = core->cheatDevice(core);
802 assert_non_null(device);
803 struct mCheatSet* set = device->createSet(device, NULL);
804 assert_non_null(set);
805 GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
806 assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
807 assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY));
808 assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY));
809 assert_true(set->addLine(set, "00300005 00000051", GBA_CHEAT_PRO_ACTION_REPLAY));
810 assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
811 assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
812 assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY));
813 assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY));
814 assert_true(set->addLine(set, "08300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
815 assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY));
816 assert_true(set->addLine(set, "00300005 00000052", GBA_CHEAT_PRO_ACTION_REPLAY));
817 assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
818 assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
819
820 core->reset(core);
821 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
822 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
823 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
824 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0);
825 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0);
826 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0);
827
828 mCheatRefresh(device, set);
829 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
830 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
831 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
832 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
833 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
834 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
835
836 core->reset(core);
837 core->rawWrite8(core, 0x03000000, -1, 0x1);
838 mCheatRefresh(device, set);
839 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
840 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
841 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
842 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
843 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
844 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
845
846 core->reset(core);
847 core->rawWrite8(core, 0x03000001, -1, 0x1);
848 mCheatRefresh(device, set);
849 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
850 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
851 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
852 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
853 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
854 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
855
856 core->reset(core);
857 core->rawWrite8(core, 0x03000000, -1, 0x1);
858 core->rawWrite8(core, 0x03000001, -1, 0x1);
859 mCheatRefresh(device, set);
860 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
861 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
862 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
863 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
864 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
865 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
866}
867
868M_TEST_DEFINE(doPARv3IfXContain1ElseContain1) {
869 struct mCore* core = *state;
870 struct mCheatDevice* device = core->cheatDevice(core);
871 assert_non_null(device);
872 struct mCheatSet* set = device->createSet(device, NULL);
873 assert_non_null(set);
874 GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
875 assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY));
876 assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY));
877 assert_true(set->addLine(set, "00300005 00000051", GBA_CHEAT_PRO_ACTION_REPLAY));
878 assert_true(set->addLine(set, "00300006 00000061", GBA_CHEAT_PRO_ACTION_REPLAY));
879 assert_true(set->addLine(set, "00300007 00000071", GBA_CHEAT_PRO_ACTION_REPLAY));
880 assert_true(set->addLine(set, "00300008 00000081", GBA_CHEAT_PRO_ACTION_REPLAY));
881 assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
882 assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY));
883 assert_true(set->addLine(set, "08300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
884 assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY));
885 assert_true(set->addLine(set, "00300005 00000052", GBA_CHEAT_PRO_ACTION_REPLAY));
886 assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY));
887 assert_true(set->addLine(set, "00300006 00000062", GBA_CHEAT_PRO_ACTION_REPLAY));
888 assert_true(set->addLine(set, "08300002 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
889 assert_true(set->addLine(set, "00300007 00000072", GBA_CHEAT_PRO_ACTION_REPLAY));
890 assert_true(set->addLine(set, "00300008 00000082", GBA_CHEAT_PRO_ACTION_REPLAY));
891 assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
892 assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
893
894 core->reset(core);
895 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
896 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
897 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
898 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0);
899 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0);
900 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0);
901 assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0);
902 assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0);
903 assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0);
904
905 mCheatRefresh(device, set);
906 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
907 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
908 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
909 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
910 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
911 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
912 assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x61);
913 assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x71);
914 assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x81);
915
916 core->reset(core);
917 core->rawWrite8(core, 0x03000000, -1, 0x1);
918 mCheatRefresh(device, set);
919 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
920 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
921 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
922 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
923 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
924 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
925 assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x62);
926 assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x72);
927 assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x82);
928
929 core->reset(core);
930 core->rawWrite8(core, 0x03000001, -1, 0x1);
931 mCheatRefresh(device, set);
932 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
933 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
934 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
935 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
936 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
937 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
938 assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x61);
939 assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x71);
940 assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x81);
941
942 core->reset(core);
943 core->rawWrite8(core, 0x03000002, -1, 0x1);
944 mCheatRefresh(device, set);
945 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
946 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
947 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x1);
948 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
949 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
950 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
951 assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x61);
952 assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x71);
953 assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x81);
954
955 core->reset(core);
956 core->rawWrite8(core, 0x03000000, -1, 0x1);
957 core->rawWrite8(core, 0x03000001, -1, 0x1);
958 mCheatRefresh(device, set);
959 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
960 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
961 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
962 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
963 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
964 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
965 assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x62);
966 assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x72);
967 assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x82);
968
969 core->reset(core);
970 core->rawWrite8(core, 0x03000000, -1, 0x1);
971 core->rawWrite8(core, 0x03000002, -1, 0x1);
972 mCheatRefresh(device, set);
973 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
974 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
975 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x1);
976 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
977 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
978 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
979 assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x62);
980 assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x71);
981 assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x82);
982
983 core->reset(core);
984 core->rawWrite8(core, 0x03000001, -1, 0x1);
985 core->rawWrite8(core, 0x03000002, -1, 0x1);
986 mCheatRefresh(device, set);
987 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
988 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
989 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x1);
990 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
991 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
992 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
993 assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x61);
994 assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x71);
995 assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x81);
996
997 core->reset(core);
998 core->rawWrite8(core, 0x03000000, -1, 0x1);
999 core->rawWrite8(core, 0x03000001, -1, 0x1);
1000 core->rawWrite8(core, 0x03000002, -1, 0x1);
1001 mCheatRefresh(device, set);
1002 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
1003 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
1004 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x1);
1005 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
1006 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
1007 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
1008 assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x62);
1009 assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x71);
1010 assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x82);
1011}
1012
1013M_TEST_SUITE_DEFINE_SETUP_TEARDOWN(GBACheats,
1014 cmocka_unit_test(createSet),
1015 cmocka_unit_test(addRawPARv3),
1016 cmocka_unit_test(doPARv3Assign),
1017 cmocka_unit_test(doPARv3Slide1),
1018 cmocka_unit_test(doPARv3Slide2),
1019 cmocka_unit_test(doPARv3Slide4),
1020 cmocka_unit_test(doPARv3If1),
1021 cmocka_unit_test(doPARv3If1x1),
1022 cmocka_unit_test(doPARv3If2),
1023 cmocka_unit_test(doPARv3If2x2),
1024 cmocka_unit_test(doPARv3If2Contain1),
1025 cmocka_unit_test(doPARv3IfX),
1026 cmocka_unit_test(doPARv3IfXxX),
1027 cmocka_unit_test(doPARv3IfXElse),
1028 cmocka_unit_test(doPARv3IfXElsexX),
1029 cmocka_unit_test(doPARv3IfXElsexXElse),
1030 cmocka_unit_test(doPARv3IfXContain1),
1031 cmocka_unit_test(doPARv3IfXContain1Else),
1032 cmocka_unit_test(doPARv3IfXElseContain1),
1033 cmocka_unit_test(doPARv3IfXContain1ElseContain1))