jak-project/test/offline
Hat Kid 459d83f755
decomp: tomb-* files, target-indax, grunt-mech, breakable-wall, pillar-collapse, mechtest-obs, ruins-obs (#2114)
Manual patches in:

- `tomb-boulder`: a few `ppointer->handle`s (I think) were not being
decompiled properly (all used in combination with `clone-anim-once`)
- `ruins-obs`, `pillar-collapse`: `art-joint-anim` casts
- `tomb-beetle`: commented out a call to `shadow-control-method-14` that
was crashing the game when spawning the beetles
- `grunt-mech`: commented out `(.mula.s)` instruction

Notes:
- `enemy-info`'s `idle-anim-script` is most likely a `(pointer
idle-control-frame)`, however, some `nav-enemy-info` labels set it to
`#f` (first encountered in `tomb-beetle`, but also present in `hal`,
`roboguard` and `metalkor-setup`), which crashes the decompiler. This
may become a problem in the future when we eventually get to these
files. For this PR, I made `tomb-beetle` decompile with
`idle-anim-script` set to `#f` and have not noticed any issues/crashes
with that.
- `tomb-boulder` compiles and doesn't crash, but when trying to play the
Daxter chase sequence, the boulder sometimes either spawns at the origin
or spawns in the correct place, but doesn't move.

Co-authored-by: water <awaterford111445@gmail.com>
2023-01-14 13:53:31 -05:00
..
config decomp: tomb-* files, target-indax, grunt-mech, breakable-wall, pillar-collapse, mechtest-obs, ruins-obs (#2114) 2023-01-14 13:53:31 -05:00
data offline-tests: fail on comparison in offline-tests (#2095) 2023-01-04 18:26:59 -05:00
framework goalc/repl: cleanup of goalc/REPL code and some QoL improvements (#2104) 2023-01-07 11:24:02 -05:00
CMakeLists.txt offline-test: Partition by DGO and colorize/condense output (#2045) 2022-12-22 13:41:33 -05:00
offline_test_main.cpp tests: make the offline tests aware of the current terminals row count (#2105) 2023-01-07 10:35:12 -05:00
readme.md [goalc] fix mod bug and add div tests (#1296) 2022-04-11 20:53:24 -04:00

Offline Reference Test

The offline reference test runs the decompiler on all files that have a corresponding _REF.gc, then compiles them. The test passes if all files compile and all decompiler outputs match the _REF.gc.

The purpose of the offline reference test is:

  • To make sure the output of the decompiler can be compiled
  • To let us easily see "what source should change, if I changed this type?". This allows us to safely update types without worrying that we forgot to update some other file.

This test doesn't run as part of CI, so it relies on us running it manually. As a result, from time to time, it can be broken on master.

Running the test

Just run offline-test in the build directory. It takes about a minute and will display diffs of any files that don't match and compiler errors on the first failing file.

What to do if the diff test fails

First, manually read the diff and make sure that it's a good change.

If so, re-run the offline-test program with the --dump-mode flag. It will save copies of any differing output in a failures folder (make sure this is empty before running). To apply these to the _REF.gc files automatically, there's a python script that you can run like this:

cd jak-project/build
python3 ../scripts/update_decomp_reference.py ./failures ../test/decompiler/referenc

Next, make sure the actual .gc files in goal_src/ are updated, if they need to be. For large changes, this part can be pretty annoying. There is a update-goal-src.py script that is helpful for huge changes.

What to do if the compile test fails

Ideally we'd make all code compile successfully without any manual changes. But sometimes there's just one function that doesn't work in a big file, and you'd like to get the rest of it. There's a config.jsonc file in the test/offline folder that lets you identify functions by name to skip compiling in the ref tests.