158 lines
3.5 KiB
Bash
Executable file
158 lines
3.5 KiB
Bash
Executable file
#!/bin/zsh
|
|
GH_ACTION_OUTPUT_FILE=./.github/workflows/action.yml
|
|
FJ_ACTION_OUTPUT_FILE=./.forgejo/workflows/action.yml
|
|
TEST_SCRIPT_OUTPUT_FILE=./run-test-roms.sh
|
|
TEST_MD_FILE=./tests.md
|
|
|
|
cat >$TEST_MD_FILE << EOF
|
|
# Passing Tests
|
|
|
|
EOF
|
|
|
|
cat >$TEST_SCRIPT_OUTPUT_FILE << EOF
|
|
echo "Running Test Roms..."
|
|
|
|
if ! cargo build -p meowgb-tests --release ; then
|
|
exit
|
|
fi
|
|
|
|
TEST_TOTAL=0
|
|
TEST_SUCCESS=0
|
|
EOF
|
|
|
|
chmod +x $TEST_SCRIPT_OUTPUT_FILE
|
|
|
|
|
|
tee $GH_ACTION_OUTPUT_FILE $FJ_ACTION_OUTPUT_FILE >/dev/null << EOF
|
|
on:
|
|
- push
|
|
|
|
jobs:
|
|
main_test:
|
|
name: Test changes to main
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Install toolchain
|
|
run: curl https://sh.rustup.rs -sSf | sh -s -- --profile minimal --default-toolchain stable -y && echo "\$HOME/.cargo/bin" >> \$GITHUB_PATH
|
|
|
|
- name: Run cargo tests (meowgb-core)
|
|
run: cargo test -p meowgb-core
|
|
|
|
- name: Build release (meowgb-tests)
|
|
run: cargo build -p meowgb-tests --release
|
|
EOF
|
|
|
|
cat >>$TEST_MD_FILE << EOF
|
|
## Blargg's Test ROMs
|
|
|
|
EOF
|
|
|
|
for full_f in ./test-roms/blargg/roms/*.gb
|
|
do
|
|
f="${full_f##*/}"; f="${f%.*}";
|
|
TEST_CMD="./target/release/meowgb-tests test-roms/blargg/roms/$f.gb test -m 100000000 -s meowgb-tests/expected_output/$f.bin"
|
|
|
|
cat >>$TEST_SCRIPT_OUTPUT_FILE << EOF
|
|
|
|
echo "Running test ROM $full_f"
|
|
|
|
TEST_TOTAL=\$((TEST_TOTAL + 1))
|
|
|
|
if res=\$($TEST_CMD 2>&1 > /dev/null) ; then
|
|
TEST_SUCCESS=\$((TEST_SUCCESS + 1))
|
|
else
|
|
echo "Failed: \$res"
|
|
fi
|
|
EOF
|
|
|
|
cat >>$TEST_MD_FILE << EOF
|
|
* $f.gb - [ROM]($full_f) - [Expected Serial Output](./meowgb-tests/expected_output/$f.bin)
|
|
EOF
|
|
|
|
tee -a $GH_ACTION_OUTPUT_FILE $FJ_ACTION_OUTPUT_FILE >/dev/null << EOF
|
|
|
|
- name: Run test ROM (blargg $f)
|
|
if: always()
|
|
run: $TEST_CMD
|
|
EOF
|
|
done
|
|
|
|
cat >>$TEST_MD_FILE << EOF
|
|
|
|
## Mooneye Test Suite
|
|
|
|
EOF
|
|
|
|
for full_f in ./test-roms/mooneye-test-suite/roms/*.gb
|
|
do
|
|
f="${full_f##*/}"; f="${f%.*}";
|
|
TEST_CMD="./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/$f.gb test -m 100000000 -s meowgb-tests/expected_output/$f.bin"
|
|
|
|
cat >>$TEST_SCRIPT_OUTPUT_FILE << EOF
|
|
|
|
echo "Running test ROM $full_f"
|
|
|
|
TEST_TOTAL=\$((TEST_TOTAL + 1))
|
|
|
|
if res=\$($TEST_CMD 2>&1 > /dev/null) ; then
|
|
TEST_SUCCESS=\$((TEST_SUCCESS + 1))
|
|
else
|
|
echo "Failed: \$res"
|
|
fi
|
|
EOF
|
|
|
|
cat >>$TEST_MD_FILE << EOF
|
|
* $f.gb - [ROM]($full_f) - [Expected Serial Output](./meowgb-tests/expected_output/MBC1/$f.bin)
|
|
EOF
|
|
|
|
tee -a $GH_ACTION_OUTPUT_FILE $FJ_ACTION_OUTPUT_FILE >/dev/null << EOF
|
|
|
|
- name: Run test ROM (mooneye-test-suite $f)
|
|
if: always()
|
|
run: $TEST_CMD
|
|
EOF
|
|
done
|
|
|
|
cat >>$TEST_MD_FILE << EOF
|
|
|
|
### MBC1
|
|
|
|
EOF
|
|
|
|
for full_f in ./test-roms/mooneye-test-suite/roms/MBC1/**.gb
|
|
do
|
|
f="${full_f##*/}"; f="${f%.*}";
|
|
TEST_CMD="./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/$f.gb test -m 100000000 -s meowgb-tests/expected_output/MBC1/$f.bin"
|
|
|
|
cat >>$TEST_SCRIPT_OUTPUT_FILE << EOF
|
|
|
|
echo "Running test ROM $full_f"
|
|
|
|
TEST_TOTAL=\$((TEST_TOTAL + 1))
|
|
|
|
if res=\$($TEST_CMD 2>&1 > /dev/null) ; then
|
|
TEST_SUCCESS=\$((TEST_SUCCESS + 1))
|
|
else
|
|
echo "Failed: \$res"
|
|
fi
|
|
EOF
|
|
|
|
cat >>$TEST_MD_FILE << EOF
|
|
* $f.gb - [ROM]($full_f) - [Expected Serial Output](./meowgb-tests/expected_output/$f.bin)
|
|
EOF
|
|
|
|
tee -a $GH_ACTION_OUTPUT_FILE $FJ_ACTION_OUTPUT_FILE >/dev/null << EOF
|
|
|
|
- name: Run test ROM (mooneye-test-suite $f)
|
|
if: always()
|
|
run: $TEST_CMD
|
|
EOF
|
|
done
|
|
|
|
cat >>$TEST_SCRIPT_OUTPUT_FILE << EOF
|
|
|
|
echo "Succeeded in running \$TEST_SUCCESS/\$TEST_TOTAL"
|
|
EOF
|