Skip to content

Testing and Qualification

ziviDomeLive uses layered evidence because headless Java tests, a real OpenGL context, a projector and an external receiver answer different questions. Passing a lower layer never implies that a higher one passed.

flowchart LR
  C[Contract<br/>source + API snapshot] --> A[Automated<br/>unit + integration]
  A --> P[Package<br/>Processing install]
  P --> G[GPU visual<br/>projection + calibration]
  G --> B[Benchmark<br/>declared environment]
  B --> O[Output interoperability<br/>real receiver]

Evidence levels

Level Question answered Primary evidence What it does not prove
Contract Does documentation describe the source that exists? API snapshot, Javadocs, documentation validator Runtime correctness
Automated Are deterministic lifecycle, math, routing and metadata invariants preserved? JUnit and Gradle qualification suites GPU image quality or hardware support
Package Can an artist install and use the released Processing artifact? ZIP/PDEX structure check and clean-sketchbook run Projection quality on every GPU
GPU visual Are orientation, seams, calibration and environment behavior correct? CalibrationTool captures and observation record Performance or receiver interoperability
Benchmark What performance was observed under a declared workload? BenchmarkTool report with warm-up and environment General performance on untested systems
Native output Does the sender work with a named receiver/configuration? End-to-end NDI/Syphon/Spout record Other receivers, OS versions or networks

Automated contract

The repeatable baseline is:

./gradlew clean test build
./gradlew qualificationTests
python3 tools/validate_documentation.py --root .
python3 -m mkdocs build --strict
./gradlew attachJavadocsToSite --console=plain
python3 tools/validate_documentation.py --root . --site-dir site

Tests cover the public API shape, configure-before-setup ordering, switch/reload/disposal behavior, old-activation isolation, camera/quaternion math, timeline behavior, typed output lifecycle, render-state logic, metadata and package rules. Assertions should report deterministic facts; exact test totals belong to generated CI/release evidence, not evergreen prose.

The documentation validator additionally checks bilingual page parity, local links, Processing homepage fields, API-level membership, Mermaid configuration, release-note/history completeness, research-readiness gaps and the absence of provisional raster placeholders. With --site-dir site, it also crawls the exported HTML, stylesheets and canonical Javadocs route so missing local assets or localized 404s fail qualification.

Package installation

After ./gradlew buildReleaseArtifacts, validate the generated artifacts and then install the ZIP/PDEX into a clean Processing sketchbook:

python3 tools/validate_documentation.py \
  --root . \
  --package release/ziviDomeLive.zip \
  --release-dir release

Open reference/index.html, confirm all ten examples/tools are discoverable and compile/run them from the installed package. A repository-classpath run is not package-installation evidence.

GPU visual and calibration

Use CalibrationTool and representative scenes on a recorded OpenGL configuration. Inspect Standard, Domemaster, Equirectangular and Skybox views; record orientation, seams, pole behavior, dome diameter, lens offset, throw ratio and environment infinity.

Screenshots are evidence only when they identify version/commit, view, resolution, Processing/Java, OS, GPU/driver and calibration parameters. Editorial diagrams explain architecture but do not replace execution captures.

Benchmark

Use BenchmarkTool with declared warm-up, duration, resolution, enabled routes and metric mode. Archive the raw report before drawing conclusions. Compare like-for-like configurations and distinguish CPU wall time from GPU elapsed time.

Native output

NDI, Syphon and Spout qualification is end-to-end. Record sender and receiver versions, OS/architecture, native runtime, network or texture-sharing path, selected ViewType, resolution, duration, frame behavior and shutdown result. “Backend initialized” is not receiver interoperability evidence.

Research-quality reporting

For reproducible research or a future JOSS submission, every result should identify:

  • software version and immutable commit;
  • exact command or interaction protocol;
  • dependency/runtime versions and hardware environment;
  • input scene, view, resolution and calibration state;
  • raw artifact location plus a human-readable summary;
  • expected result, observed result, limitations and reviewer/date;
  • whether the evidence is automated, observational or externally reproduced.

The Research Software and JOSS Readiness page maps these artifacts to review concerns without claiming submission or acceptance.