name: wai-ops differential (nightly) # Each integer decoder that decodes through the integer operator set # (wai/extensions/integer-operators.md) against its direct decode (the test-only # `legacy_int` feature), on random parameter sets and payloads, for an hour under each # build profile: with overflow checks on and with them off. Outside the planned breaks # of integer-operators §15.3 the two decode to the same bytes or both refuse, and the # direct decode never panics; under a planned break the decode through the operator set # refuses (wai/wai-rs/tests/int_ops_differential.rs). Today: wai.neural.int_synth, # wai.splat.int_codec, wai.audio.int_codec, wai.neural.int_hyper (whose decode is # also the keyframe of wai.video.int_hyper), wai.neural.int_mlicpp, wai.world.model's # integer renderer, against its direct renderer with the direct guard, and # wai.image.jpegai's scale path and entropy decodes, against its direct computation, # which panics (or, without overflow checks, may compute on) where the operator set # refuses a stream, and its hyper decoders, context stages and synthesis (the graphs of # integer-operators §13.6.2), against its direct networks, which compute on where the # operator set refuses a value past its i32 checks; and WIV1 (wai.video.int_motion, the P-frames of wai.video.int_hyper) # and WIR1 (the four int_refine capabilities), which decode through the stage operators # alone and make no planned break. # # Each night starts from its own seed, the date, which the log prints; a failing case # names its seed, and `WAI_DIFF_SEED=` re-runs it. The same tests run for a fixed # count on every push, in wai-conformance.yml's fast-kernel steps. # One run per branch at a time. A push supersedes the run before it. concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true on: schedule: - cron: '41 2 * * *' # A change to this file runs it for two minutes per profile, so a broken job is seen # before the night. pull_request: paths: - '.github/workflows/wai-ops-differential.yml' jobs: differential: name: differential · ${{ matrix.profile }} runs-on: linux timeout-minutes: 120 strategy: fail-fast: false matrix: profile: [debug, release] steps: - uses: actions/checkout@v4 # The docker image ships no Rust. - name: Install Rust 1.98.0 shell: bash run: | export PATH="$HOME/.cargo/bin:$PATH" command -v rustup >/dev/null 2>&1 || \ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.98.0 rustup toolchain install 1.98.0 --profile minimal rustup default 1.98.0 echo "$HOME/.cargo/bin" >> "$GITHUB_PATH" - name: Through the operator set against the direct decode, random sets and payloads working-directory: wai/wai-rs shell: bash env: WAI_DIFF_SECS: ${{ github.event_name == 'schedule' && '3600' || '120' }} run: | set -euo pipefail P="" if [ "${{ matrix.profile }}" = release ]; then P="--release"; fi export WAI_DIFF_SEED="$(date -u +%Y%m%d)" echo "WAI_DIFF_SECS=$WAI_DIFF_SECS WAI_DIFF_SEED=$WAI_DIFF_SEED" cargo test $P --locked --no-default-features --features legacy_int,splat_int,audio_int,world_int,video_int,staged --test int_ops_differential -- --nocapture