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(doPARv3If1) {
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, "00300001 00000011", GBA_CHEAT_PRO_ACTION_REPLAY));
86 assert_true(set->addLine(set, "08300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
87 assert_true(set->addLine(set, "00300001 00000012", GBA_CHEAT_PRO_ACTION_REPLAY));
88 assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
89
90 core->reset(core);
91 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
92 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
93
94 mCheatRefresh(device, set);
95 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
96 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x12);
97
98 core->reset(core);
99 core->rawWrite8(core, 0x03000000, -1, 0x1);
100 mCheatRefresh(device, set);
101 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
102 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x11);
103
104 set->deinit(set);
105}
106
107M_TEST_DEFINE(doPARv3If1x1) {
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, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
115 assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY));
116 assert_true(set->addLine(set, "08300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
117 assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
118 assert_true(set->addLine(set, "08300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
119 assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY));
120 assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
121
122 core->reset(core);
123 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
124 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
125 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
126 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0);
127
128 mCheatRefresh(device, set);
129 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
130 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
131 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
132 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
133
134 core->reset(core);
135 core->rawWrite8(core, 0x03000000, -1, 0x1);
136 mCheatRefresh(device, set);
137 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
138 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
139 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
140 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
141
142 core->reset(core);
143 core->rawWrite8(core, 0x03000001, -1, 0x1);
144 mCheatRefresh(device, set);
145 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
146 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
147 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
148 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
149
150 core->reset(core);
151 core->rawWrite8(core, 0x03000000, -1, 0x1);
152 core->rawWrite8(core, 0x03000001, -1, 0x1);
153 mCheatRefresh(device, set);
154 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
155 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
156 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
157 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
158
159 set->deinit(set);
160}
161
162M_TEST_DEFINE(doPARv3If2) {
163 struct mCore* core = *state;
164 struct mCheatDevice* device = core->cheatDevice(core);
165 assert_non_null(device);
166 struct mCheatSet* set = device->createSet(device, NULL);
167 assert_non_null(set);
168 GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
169 assert_true(set->addLine(set, "00300001 00000011", GBA_CHEAT_PRO_ACTION_REPLAY));
170 assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
171 assert_true(set->addLine(set, "48300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
172 assert_true(set->addLine(set, "00300001 00000012", GBA_CHEAT_PRO_ACTION_REPLAY));
173 assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
174 assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
175
176 core->reset(core);
177 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
178 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
179 assert_int_equal(core->rawRead8(core, 0x03000002, -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 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
185
186 core->reset(core);
187 core->rawWrite8(core, 0x03000000, -1, 0x1);
188 mCheatRefresh(device, set);
189 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
190 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x11);
191 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
192
193 set->deinit(set);
194}
195
196M_TEST_DEFINE(doPARv3If2x2) {
197 struct mCore* core = *state;
198 struct mCheatDevice* device = core->cheatDevice(core);
199 assert_non_null(device);
200 struct mCheatSet* set = device->createSet(device, NULL);
201 assert_non_null(set);
202 GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
203 assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
204 assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY));
205 assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY));
206 assert_true(set->addLine(set, "00300005 00000051", GBA_CHEAT_PRO_ACTION_REPLAY));
207 assert_true(set->addLine(set, "48300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
208 assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
209 assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY));
210 assert_true(set->addLine(set, "48300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
211 assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY));
212 assert_true(set->addLine(set, "00300005 00000052", GBA_CHEAT_PRO_ACTION_REPLAY));
213 assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
214
215 core->reset(core);
216 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
217 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
218 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
219 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0);
220 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0);
221 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0);
222
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), 0x22);
227 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
228 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
229 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
230
231 core->reset(core);
232 core->rawWrite8(core, 0x03000000, -1, 0x1);
233 mCheatRefresh(device, set);
234 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
235 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
236 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
237 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
238 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
239 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
240
241 core->reset(core);
242 core->rawWrite8(core, 0x03000001, -1, 0x1);
243 mCheatRefresh(device, set);
244 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
245 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
246 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
247 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
248 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
249 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
250
251 core->reset(core);
252 core->rawWrite8(core, 0x03000000, -1, 0x1);
253 core->rawWrite8(core, 0x03000001, -1, 0x1);
254 mCheatRefresh(device, set);
255 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
256 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
257 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
258 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
259 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
260 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
261 set->deinit(set);
262}
263
264M_TEST_DEFINE(doPARv3If2Contain1) {
265 struct mCore* core = *state;
266 struct mCheatDevice* device = core->cheatDevice(core);
267 assert_non_null(device);
268 struct mCheatSet* set = device->createSet(device, NULL);
269 assert_non_null(set);
270 GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
271 assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
272 assert_true(set->addLine(set, "48300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
273 assert_true(set->addLine(set, "08300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
274 assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
275 assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
276
277 core->reset(core);
278 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
279 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
280 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
281
282 mCheatRefresh(device, set);
283 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
284 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
285 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
286
287 core->reset(core);
288 core->rawWrite8(core, 0x03000000, -1, 0x1);
289 mCheatRefresh(device, set);
290 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
291 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
292 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
293
294 core->reset(core);
295 core->rawWrite8(core, 0x03000001, -1, 0x1);
296 mCheatRefresh(device, set);
297 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
298 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
299 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
300
301 core->reset(core);
302 core->rawWrite8(core, 0x03000000, -1, 0x1);
303 core->rawWrite8(core, 0x03000001, -1, 0x1);
304 mCheatRefresh(device, set);
305 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
306 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
307 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
308 set->deinit(set);
309}
310
311M_TEST_DEFINE(doPARv3IfX) {
312 struct mCore* core = *state;
313 struct mCheatDevice* device = core->cheatDevice(core);
314 assert_non_null(device);
315 struct mCheatSet* set = device->createSet(device, NULL);
316 assert_non_null(set);
317 GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
318 assert_true(set->addLine(set, "00300001 00000011", GBA_CHEAT_PRO_ACTION_REPLAY));
319 assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
320 assert_true(set->addLine(set, "00300001 00000012", GBA_CHEAT_PRO_ACTION_REPLAY));
321 assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
322 assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
323
324 core->reset(core);
325 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
326 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
327
328 mCheatRefresh(device, set);
329 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
330 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x12);
331
332 core->reset(core);
333 core->rawWrite8(core, 0x03000000, -1, 0x1);
334 mCheatRefresh(device, set);
335 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
336 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x11);
337}
338
339M_TEST_DEFINE(doPARv3IfXxX) {
340 struct mCore* core = *state;
341 struct mCheatDevice* device = core->cheatDevice(core);
342 assert_non_null(device);
343 struct mCheatSet* set = device->createSet(device, NULL);
344 assert_non_null(set);
345 GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
346 assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
347 assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY));
348 assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY));
349 assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
350 assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
351 assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
352 assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY));
353 assert_true(set->addLine(set, "88300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
354 assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY));
355 assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
356 assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
357
358 core->reset(core);
359 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
360 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
361 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
362 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0);
363 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0);
364
365 mCheatRefresh(device, set);
366 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
367 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
368 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
369 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
370 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
371
372 core->reset(core);
373 core->rawWrite8(core, 0x03000000, -1, 0x1);
374 mCheatRefresh(device, set);
375 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
376 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
377 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
378 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
379 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
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), 0x22);
387 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
388 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
389
390 core->reset(core);
391 core->rawWrite8(core, 0x03000000, -1, 0x1);
392 core->rawWrite8(core, 0x03000001, -1, 0x1);
393 mCheatRefresh(device, set);
394 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
395 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
396 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
397 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
398 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
399}
400
401M_TEST_DEFINE(doPARv3IfXElse) {
402 struct mCore* core = *state;
403 struct mCheatDevice* device = core->cheatDevice(core);
404 assert_non_null(device);
405 struct mCheatSet* set = device->createSet(device, NULL);
406 assert_non_null(set);
407 GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
408 assert_true(set->addLine(set, "00300001 00000011", GBA_CHEAT_PRO_ACTION_REPLAY));
409 assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
410 assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
411 assert_true(set->addLine(set, "00300001 00000012", GBA_CHEAT_PRO_ACTION_REPLAY));
412 assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY));
413 assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
414 assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
415 assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
416
417 core->reset(core);
418 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
419 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
420 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
421
422 mCheatRefresh(device, set);
423 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
424 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x12);
425 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
426
427 core->reset(core);
428 core->rawWrite8(core, 0x03000000, -1, 0x1);
429 mCheatRefresh(device, set);
430 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
431 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x11);
432 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
433}
434
435M_TEST_DEFINE(doPARv3IfXElsexX) {
436 struct mCore* core = *state;
437 struct mCheatDevice* device = core->cheatDevice(core);
438 assert_non_null(device);
439 struct mCheatSet* set = device->createSet(device, NULL);
440 assert_non_null(set);
441 GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
442 assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
443 assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY));
444 assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY));
445 assert_true(set->addLine(set, "00300005 00000051", GBA_CHEAT_PRO_ACTION_REPLAY));
446 assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
447 assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
448 assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY));
449 assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY));
450 assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
451 assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY));
452 assert_true(set->addLine(set, "88300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
453 assert_true(set->addLine(set, "00300005 00000052", GBA_CHEAT_PRO_ACTION_REPLAY));
454 assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
455 assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
456
457 core->reset(core);
458 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
459 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
460 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
461 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0);
462 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0);
463 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0);
464
465 mCheatRefresh(device, set);
466 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
467 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
468 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
469 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
470 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
471 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
472
473 core->reset(core);
474 core->rawWrite8(core, 0x03000000, -1, 0x1);
475 mCheatRefresh(device, set);
476 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
477 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
478 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
479 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
480 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
481 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
482
483 core->reset(core);
484 core->rawWrite8(core, 0x03000001, -1, 0x1);
485 mCheatRefresh(device, set);
486 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
487 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
488 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
489 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
490 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
491 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
492
493 core->reset(core);
494 core->rawWrite8(core, 0x03000000, -1, 0x1);
495 core->rawWrite8(core, 0x03000001, -1, 0x1);
496 mCheatRefresh(device, set);
497 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
498 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
499 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
500 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
501 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
502 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
503}
504
505M_TEST_DEFINE(doPARv3IfXElsexXElse) {
506 struct mCore* core = *state;
507 struct mCheatDevice* device = core->cheatDevice(core);
508 assert_non_null(device);
509 struct mCheatSet* set = device->createSet(device, NULL);
510 assert_non_null(set);
511 GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
512 assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
513 assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY));
514 assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY));
515 assert_true(set->addLine(set, "00300005 00000051", GBA_CHEAT_PRO_ACTION_REPLAY));
516 assert_true(set->addLine(set, "00300006 00000061", GBA_CHEAT_PRO_ACTION_REPLAY));
517 assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
518 assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
519 assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY));
520 assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY));
521 assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
522 assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY));
523 assert_true(set->addLine(set, "88300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
524 assert_true(set->addLine(set, "00300005 00000052", GBA_CHEAT_PRO_ACTION_REPLAY));
525 assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY));
526 assert_true(set->addLine(set, "00300006 00000062", GBA_CHEAT_PRO_ACTION_REPLAY));
527 assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
528 assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
529
530 core->reset(core);
531 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
532 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
533 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
534 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0);
535 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0);
536 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0);
537 assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0);
538
539 mCheatRefresh(device, set);
540 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
541 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
542 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
543 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
544 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
545 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
546
547 core->reset(core);
548 core->rawWrite8(core, 0x03000000, -1, 0x1);
549 mCheatRefresh(device, set);
550 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
551 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
552 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
553 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
554 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
555 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
556 assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x61);
557
558 core->reset(core);
559 core->rawWrite8(core, 0x03000001, -1, 0x1);
560 mCheatRefresh(device, set);
561 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
562 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
563 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
564 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
565 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
566 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
567 assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x62);
568
569 core->reset(core);
570 core->rawWrite8(core, 0x03000000, -1, 0x1);
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), 0x21);
576 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
577 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
578 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
579 assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x62);
580}
581
582M_TEST_DEFINE(doPARv3IfXContain1) {
583 struct mCore* core = *state;
584 struct mCheatDevice* device = core->cheatDevice(core);
585 assert_non_null(device);
586 struct mCheatSet* set = device->createSet(device, NULL);
587 assert_non_null(set);
588 GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
589 assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
590 assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY));
591 assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY));
592 assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
593 assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
594 assert_true(set->addLine(set, "08300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
595 assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY));
596 assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY));
597 assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
598 assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
599
600 core->reset(core);
601 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
602 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
603 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
604 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0);
605 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0);
606
607 mCheatRefresh(device, set);
608 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
609 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
610 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
611 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
612 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
613
614 core->reset(core);
615 core->rawWrite8(core, 0x03000000, -1, 0x1);
616 mCheatRefresh(device, set);
617 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
618 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
619 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
620 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
621 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
622
623 core->reset(core);
624 core->rawWrite8(core, 0x03000001, -1, 0x1);
625 mCheatRefresh(device, set);
626 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
627 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
628 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
629 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
630 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
631
632 core->reset(core);
633 core->rawWrite8(core, 0x03000000, -1, 0x1);
634 core->rawWrite8(core, 0x03000001, -1, 0x1);
635 mCheatRefresh(device, set);
636 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
637 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
638 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
639 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
640 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
641}
642
643M_TEST_DEFINE(doPARv3IfXContain1Else) {
644 struct mCore* core = *state;
645 struct mCheatDevice* device = core->cheatDevice(core);
646 assert_non_null(device);
647 struct mCheatSet* set = device->createSet(device, NULL);
648 assert_non_null(set);
649 GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
650 assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
651 assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY));
652 assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY));
653 assert_true(set->addLine(set, "00300005 00000051", GBA_CHEAT_PRO_ACTION_REPLAY));
654 assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
655 assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
656 assert_true(set->addLine(set, "08300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
657 assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY));
658 assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY));
659 assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY));
660 assert_true(set->addLine(set, "00300005 00000052", GBA_CHEAT_PRO_ACTION_REPLAY));
661 assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
662 assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
663
664 core->reset(core);
665 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
666 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
667 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
668 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0);
669 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0);
670 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0);
671
672 mCheatRefresh(device, set);
673 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
674 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
675 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
676 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
677 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
678 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
679
680 core->reset(core);
681 core->rawWrite8(core, 0x03000000, -1, 0x1);
682 mCheatRefresh(device, set);
683 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
684 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
685 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
686 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
687 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
688 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
689
690 core->reset(core);
691 core->rawWrite8(core, 0x03000001, -1, 0x1);
692 mCheatRefresh(device, set);
693 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
694 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
695 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
696 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
697 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
698 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
699
700 core->reset(core);
701 core->rawWrite8(core, 0x03000000, -1, 0x1);
702 core->rawWrite8(core, 0x03000001, -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), 0x1);
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 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
710}
711
712M_TEST_DEFINE(doPARv3IfXElseContain1) {
713 struct mCore* core = *state;
714 struct mCheatDevice* device = core->cheatDevice(core);
715 assert_non_null(device);
716 struct mCheatSet* set = device->createSet(device, NULL);
717 assert_non_null(set);
718 GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
719 assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY));
720 assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY));
721 assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY));
722 assert_true(set->addLine(set, "00300005 00000051", GBA_CHEAT_PRO_ACTION_REPLAY));
723 assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
724 assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY));
725 assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY));
726 assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY));
727 assert_true(set->addLine(set, "08300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
728 assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY));
729 assert_true(set->addLine(set, "00300005 00000052", GBA_CHEAT_PRO_ACTION_REPLAY));
730 assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
731 assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
732
733 core->reset(core);
734 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
735 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
736 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
737 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0);
738 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0);
739 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0);
740
741 mCheatRefresh(device, set);
742 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
743 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
744 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
745 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
746 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
747 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
748
749 core->reset(core);
750 core->rawWrite8(core, 0x03000000, -1, 0x1);
751 mCheatRefresh(device, set);
752 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
753 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
754 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
755 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
756 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
757 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
758
759 core->reset(core);
760 core->rawWrite8(core, 0x03000001, -1, 0x1);
761 mCheatRefresh(device, set);
762 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
763 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
764 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22);
765 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
766 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
767 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
768
769 core->reset(core);
770 core->rawWrite8(core, 0x03000000, -1, 0x1);
771 core->rawWrite8(core, 0x03000001, -1, 0x1);
772 mCheatRefresh(device, set);
773 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
774 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
775 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21);
776 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
777 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
778 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
779}
780
781M_TEST_DEFINE(doPARv3IfXContain1ElseContain1) {
782 struct mCore* core = *state;
783 struct mCheatDevice* device = core->cheatDevice(core);
784 assert_non_null(device);
785 struct mCheatSet* set = device->createSet(device, NULL);
786 assert_non_null(set);
787 GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW);
788 assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY));
789 assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY));
790 assert_true(set->addLine(set, "00300005 00000051", GBA_CHEAT_PRO_ACTION_REPLAY));
791 assert_true(set->addLine(set, "00300006 00000061", GBA_CHEAT_PRO_ACTION_REPLAY));
792 assert_true(set->addLine(set, "00300007 00000071", GBA_CHEAT_PRO_ACTION_REPLAY));
793 assert_true(set->addLine(set, "00300008 00000081", GBA_CHEAT_PRO_ACTION_REPLAY));
794 assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
795 assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY));
796 assert_true(set->addLine(set, "08300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
797 assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY));
798 assert_true(set->addLine(set, "00300005 00000052", GBA_CHEAT_PRO_ACTION_REPLAY));
799 assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY));
800 assert_true(set->addLine(set, "00300006 00000062", GBA_CHEAT_PRO_ACTION_REPLAY));
801 assert_true(set->addLine(set, "08300002 00000000", GBA_CHEAT_PRO_ACTION_REPLAY));
802 assert_true(set->addLine(set, "00300007 00000072", GBA_CHEAT_PRO_ACTION_REPLAY));
803 assert_true(set->addLine(set, "00300008 00000082", GBA_CHEAT_PRO_ACTION_REPLAY));
804 assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY));
805 assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY));
806
807 core->reset(core);
808 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0);
809 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
810 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
811 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0);
812 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0);
813 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0);
814 assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0);
815 assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0);
816 assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0);
817
818 mCheatRefresh(device, set);
819 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
820 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
821 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
822 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
823 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
824 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
825 assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x61);
826 assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x71);
827 assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x81);
828
829 core->reset(core);
830 core->rawWrite8(core, 0x03000000, -1, 0x1);
831 mCheatRefresh(device, set);
832 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
833 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
834 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
835 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
836 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
837 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
838 assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x62);
839 assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x72);
840 assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x82);
841
842 core->reset(core);
843 core->rawWrite8(core, 0x03000001, -1, 0x1);
844 mCheatRefresh(device, set);
845 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
846 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
847 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
848 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
849 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
850 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
851 assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x61);
852 assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x71);
853 assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x81);
854
855 core->reset(core);
856 core->rawWrite8(core, 0x03000002, -1, 0x1);
857 mCheatRefresh(device, set);
858 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
859 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
860 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x1);
861 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
862 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42);
863 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
864 assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x61);
865 assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x71);
866 assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x81);
867
868 core->reset(core);
869 core->rawWrite8(core, 0x03000000, -1, 0x1);
870 core->rawWrite8(core, 0x03000001, -1, 0x1);
871 mCheatRefresh(device, set);
872 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
873 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
874 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0);
875 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
876 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
877 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
878 assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x62);
879 assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x72);
880 assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x82);
881
882 core->reset(core);
883 core->rawWrite8(core, 0x03000000, -1, 0x1);
884 core->rawWrite8(core, 0x03000002, -1, 0x1);
885 mCheatRefresh(device, set);
886 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
887 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0);
888 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x1);
889 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
890 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
891 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
892 assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x62);
893 assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x71);
894 assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x82);
895
896 core->reset(core);
897 core->rawWrite8(core, 0x03000001, -1, 0x1);
898 core->rawWrite8(core, 0x03000002, -1, 0x1);
899 mCheatRefresh(device, set);
900 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
901 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
902 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x1);
903 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32);
904 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
905 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52);
906 assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x61);
907 assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x71);
908 assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x81);
909
910 core->reset(core);
911 core->rawWrite8(core, 0x03000000, -1, 0x1);
912 core->rawWrite8(core, 0x03000001, -1, 0x1);
913 core->rawWrite8(core, 0x03000002, -1, 0x1);
914 mCheatRefresh(device, set);
915 assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1);
916 assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1);
917 assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x1);
918 assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31);
919 assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41);
920 assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51);
921 assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x62);
922 assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x71);
923 assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x82);
924}
925
926M_TEST_SUITE_DEFINE_SETUP_TEARDOWN(GBACheats,
927 cmocka_unit_test(createSet),
928 cmocka_unit_test(addRawPARv3),
929 cmocka_unit_test(doPARv3Assign),
930 cmocka_unit_test(doPARv3If1),
931 cmocka_unit_test(doPARv3If1x1),
932 cmocka_unit_test(doPARv3If2),
933 cmocka_unit_test(doPARv3If2x2),
934 cmocka_unit_test(doPARv3If2Contain1),
935 cmocka_unit_test(doPARv3IfX),
936 cmocka_unit_test(doPARv3IfXxX),
937 cmocka_unit_test(doPARv3IfXElse),
938 cmocka_unit_test(doPARv3IfXElsexX),
939 cmocka_unit_test(doPARv3IfXElsexXElse),
940 cmocka_unit_test(doPARv3IfXContain1),
941 cmocka_unit_test(doPARv3IfXContain1Else),
942 cmocka_unit_test(doPARv3IfXElseContain1),
943 cmocka_unit_test(doPARv3IfXContain1ElseContain1))