Rename test harness executable

This commit is contained in:
Antonio SJ Musumeci authored and trapexit committed 2026-08-04 22:55:20 -05:00
1 parent 0e9562eb2e
commit 636a8dd634
4 files changed
+28 -26

No files matched your search

+15 -15
View File
@@ -1,6 +1,6 @@
---
name: opera-test-harness
description: Use when running, automating, or debugging the 3DO libretro "opera" core with the test-harness binary, including terminal mode, controls, BIOS/core defaults, screenshots, ROMs, scripted input, and benchmarks.
description: Use when running, automating, or debugging the 3DO libretro "opera" core with the opera-test-harness binary, including terminal mode, controls, BIOS/core defaults, screenshots, ROMs, scripted input, and benchmarks.
---
# opera-test-harness
@@ -16,7 +16,7 @@ Trigger when:
- User asks to "run the core", "test the core", "boot a 3DO disc",
"capture a screenshot" of a 3DO game, or "benchmark" the core.
- User mentions `test-harness`, `test_harness.c`, "test harness" or
- User mentions `opera-test-harness`, `test_harness.c`, "test harness" or
headless core testing.
- User asks to script button presses or compare runs against a
baseline.
@@ -26,7 +26,7 @@ Trigger when:
From the repo root:
```sh
make harness # builds ./test-harness
make harness # builds ./opera-test-harness
```
The harness always compiles the vendored zlib encoder used by Kitty
@@ -36,20 +36,20 @@ graphics. It also depends on `tools/stb_image_write.h` and links
## BIOS
If `--core` is omitted, the harness looks for `opera_libretro.so`
beside the `test-harness` executable. If `--bios` is omitted, it
prefers `panafz1.bin` beside `test-harness`, then falls back to
beside the `opera-test-harness` executable. If `--bios` is omitted, it
prefers `panafz1.bin` beside `opera-test-harness`, then falls back to
filename search.
`--bios` accepts either a real path or a bare filename listed in
`BIOS_ROMS[]` (`tools/test_harness.c`). Bare filenames are searched
beside `test-harness`, then in RetroArch system dirs
beside `opera-test-harness`, then in RetroArch system dirs
(`RETROARCH_ROM_DIRS[]`). Use `--list-bios` to print recognized BIOS
ROMs and any resolved local paths.
## Canonical invocation
```sh
./test-harness \
./opera-test-harness \
--core ./opera_libretro.so \
--bios /path/to/panafz1.bin \
--title "/path/to/Game (USA).bin" \
@@ -62,7 +62,7 @@ ROMs and any resolved local paths.
```
`--core` and `--bios` are optional when the defaults are available
beside `test-harness` or in the configured BIOS search
beside `opera-test-harness` or in the configured BIOS search
paths. Everything else is optional.
## Key flags
@@ -135,7 +135,7 @@ Examples:
Example:
```sh
./test-harness --core ./opera_libretro.so --bios panafz1.bin \
./opera-test-harness --core ./opera_libretro.so --bios panafz1.bin \
--title /path/to/game.cue --frames 600 --wall-timeout 30 \
--option opera_random_seed=0xdeadbeef
```
@@ -207,7 +207,7 @@ Terminal implementation notes:
- `124` — `timeout`: `--wall-timeout` fired.
- `128+signal` — terminated by a handled process signal after cleanup.
The terse stderr line is `test-harness: <status>, frames=N, log=...,
The terse stderr line is `opera-test-harness: <status>, frames=N, log=...,
metrics=...`. Full detail lives in `metrics.json` under `status`,
`exit_code`, `frames_run`, `average_fps`, `speed_multiplier`,
`input_events[]`, `log_counts`, etc.
@@ -216,7 +216,7 @@ metrics=...`. Full detail lives in `metrics.json` under `status`,
### Boot-to-title screenshot
```sh
./test-harness --core ./opera_libretro.so --bios panafz1.bin \
./opera-test-harness --core ./opera_libretro.so --bios panafz1.bin \
--title "/path/to/Game.cue" --seconds 10 \
--screenshot /tmp/title.png --wall-timeout 30
```
@@ -234,14 +234,14 @@ Write a `inputs.txt` with one event per line and comments:
```
Then:
```sh
./test-harness --core ... --bios ... --title ... \
./opera-test-harness --core ... --bios ... --title ... \
--frames 2400 --input-file inputs.txt \
--screenshot-every 300=/tmp/frames --wall-timeout 60
```
### Multiple capture points plus contact sheet
```sh
./test-harness --core ... --bios ... --title ... \
./opera-test-harness --core ... --bios ... --title ... \
--frames 600 \
--screenshot-at 60=/tmp/01.png \
--screenshot-at 600=/tmp/end.png \
@@ -251,7 +251,7 @@ Then:
### Regression / benchmarking
Pin a stable frame window so rebuilds can be compared apples-to-apples:
```sh
./test-harness --core ... --bios ... --title ... \
./opera-test-harness --core ... --bios ... --title ... \
--frames 1800 \
--benchmark-start-frame 600 --benchmark-end-frame 1800 \
--cpu 2 --wall-timeout 120 \
@@ -286,6 +286,6 @@ the stable comparison numbers.
- **GPU threads are pinned with `--cpu`,** which also sets affinity
for any threads the core spawns.
- **Run artifacts go under `--output-dir`** (default
`./test-harness-runs/<YYYYMMDD-HHMMSS-pid>/`); the temp `work/`
`./opera-test-harness-runs/<YYYYMMDD-HHMMSS-pid>/`); the temp `work/`
subdir (system + save) is removed unless `--keep-work-dir` or
`--work-dir` is set.
+2
View File
@@ -9,4 +9,6 @@
*.a
/test-harness
/test-harness-runs/
/opera-test-harness
/opera-test-harness-runs/
.vscode/pro-deployer.json
+1 -1
View File
@@ -643,7 +643,7 @@ endif
%.o: %.c
$(CC) -c $(OBJOUT)$@ $< $(CFLAGS)
HARNESS_TARGET := test-harness
HARNESS_TARGET := opera-test-harness
HARNESS_ZLIB_DIR := $(DEPS_DIR)/zlib-1.3.1.2
HARNESS_ZLIB_CFLAGS := -I$(HARNESS_ZLIB_DIR)
HARNESS_ZLIB_SOURCES := \
+10 -10
View File
@@ -556,13 +556,13 @@ void
_print_usage(FILE *f_)
{
fprintf(f_,
"Usage: test-harness [--core ./opera_libretro.so] [--bios /path/to/bios.bin] [options]\n"
"Usage: opera-test-harness [--core ./opera_libretro.so] [--bios /path/to/bios.bin] [options]\n"
"\n"
"Core and BIOS:\n"
" --core PATH libretro core shared object to load; default\n"
" opera_libretro.so beside test-harness\n"
" opera_libretro.so beside opera-test-harness\n"
" --bios PATH recognized 3DO BIOS ROM; default panafz1.bin\n"
" beside test-harness, then filename search\n"
" beside opera-test-harness, then filename search\n"
"\n"
"Content and duration:\n"
" --title PATH optional iso/bin/chd/cue title path\n"
@@ -586,7 +586,7 @@ _print_usage(FILE *f_)
" (default 6)\n"
"\n"
"Artifacts:\n"
" --output-dir DIR default ./test-harness-runs/<timestamp-pid>\n"
" --output-dir DIR default ./opera-test-harness-runs/<timestamp-pid>\n"
" --log PATH default <output-dir>/run.log\n"
" --metrics PATH default <output-dir>/metrics.json\n"
" --audio PATH write stereo s16le WAV\n"
@@ -2045,13 +2045,13 @@ _default_output_dir(void)
strftime(stamp, sizeof(stamp), "%Y%m%d-%H%M%S", &tm_now);
snprintf(leaf, sizeof(leaf), "%s-%ld", stamp, (long)getpid());
if(_mkdir_p("test-harness-runs") != 0)
if(_mkdir_p("opera-test-harness-runs") != 0)
{
perror("mkdir test-harness-runs");
perror("mkdir opera-test-harness-runs");
exit(1);
}
return _xasprintf2("test-harness-runs", leaf);
return _xasprintf2("opera-test-harness-runs", leaf);
}
@@ -2093,7 +2093,7 @@ _prepare_paths(void)
fprintf(stderr, "unable to resolve BIOS path: %s\n", g_cfg.bios_path);
else
fprintf(stderr,
"unable to find BIOS file %s beside test-harness, "
"unable to find BIOS file %s beside opera-test-harness, "
"in the current directory, or common RetroArch "
"system directories\n",
g_cfg.bios_path);
@@ -8975,7 +8975,7 @@ main(int argc_,
if(exit_code == 0)
{
fprintf(stderr,
"test-harness: ok, frames=%" PRIu64
"opera-test-harness: ok, frames=%" PRIu64
", elapsed=%.3fs, fps=%.2f, log=%s, metrics=%s\n",
g_run.frames_run,
g_run.wall_seconds,
@@ -8986,7 +8986,7 @@ main(int argc_,
else
{
fprintf(stderr,
"test-harness: %s, frames=%" PRIu64
"opera-test-harness: %s, frames=%" PRIu64
", elapsed=%.3fs, fps=%.2f, log=%s, metrics=%s\n",
status,
g_run.frames_run,