open-standards/.github/workflows/wai-quantum-registry.yml
Transaction Science 66359317c1
Some checks failed
wai-audit collector and player integration / does this change touch it (push) Successful in 17s
wai-quantum command line / does this change touch it (push) Successful in 21s
WAI operation catalogue / does this change touch it (push) Successful in 19s
wai-quantum contract / does this change touch it (push) Successful in 19s
wai-quantum docs, course and locales / does this change touch it (push) Successful in 13s
wai-quantum OpenQASM reader / does this change touch it (push) Successful in 19s
wai-quantum service / does this change touch it (push) Successful in 25s
wai-quantum extension points / does this change touch it (push) Successful in 24s
wai-quantum for Python / does this change touch it (push) Successful in 24s
WAI breaking changes and the conformance runner / WAI breaking · does this change touch WAI (push) Successful in 15s
wai-quantum variational and algorithm library / does this change touch it (push) Successful in 16s
wai-quantum service / service energy · linux packages (push) Failing after 11s
wai-quantum views in agent hosts / does this change touch it (push) Successful in 13s
wai-quantum verdicts and repairs / does this change touch it (push) Successful in 17s
wai-sink-android native sink library / does this change touch it (push) Successful in 17s
wai-sink-swift native sink package / does this change touch it (push) Successful in 17s
WAI Studio / does this change touch it (push) Successful in 18s
wai-quantum wasmQ / does this change touch it (push) Successful in 9s
wai-quantum editors / does this change touch it (push) Successful in 6m35s
wai-quantum error correction and mitigation / does this change touch it (push) Successful in 6m15s
wai-quantum for JavaScript / does this change touch it (push) Successful in 6m23s
wai-quantum other formats / does this change touch it (push) Successful in 6m27s
wai-quantum pulse and dynamics / does this change touch it (push) Successful in 6m20s
wai-quantum resource estimation / does this change touch it (push) Successful in 6m28s
wai-quantum studio and desktop / does this change touch it (push) Successful in 6m10s
wai-quantum contract / the policy is linked, and the deprecations page reads (push) Successful in 25s
wai-audit collector and player integration / collector · linux (push) Successful in 4m4s
wai-quantum docs, course and locales / the Studio's words in every locale · linux (push) Successful in 31s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Failing after 10m18s
wai-quantum variational and algorithm library / parameters, gradients, optimisers, VQE, QAOA and builders · linux-arm64, release (push) Successful in 4m11s
wai-quantum OpenQASM reader / corpus under wasm32-wasip2 (wasmtime) (push) Successful in 1m45s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (push) Successful in 5m28s
wai-quantum extension points / the registry and the example · linux-arm64 (push) Successful in 6m21s
wai-quantum docs, course and locales / the course and the command line's languages · linux (push) Successful in 4m58s
wai-quantum pulse and dynamics / the same bits · linux-arm64 (push) Successful in 2m30s
wai-quantum OpenQASM reader / reader and corpus · linux (push) Successful in 4m49s
WAI operation catalogue / the catalogue and every door · linux (push) Successful in 10m13s
wai-quantum extension points / the registry under wasm32-wasip2 (wasmtime) (push) Successful in 2m34s
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (push) Successful in 2m53s
wai-quantum contract / API compatibility · linux (push) Successful in 10m3s
wai-quantum variational and algorithm library / parameters, gradients, optimisers, VQE, QAOA and builders · linux, release (push) Successful in 2m54s
WAI Studio / the catalogue's actions, the unit tests and the core · linux (push) Successful in 1m29s
wai-quantum verdicts and repairs / the intent set and the verdict under wasm32-wasip2 (wasmtime) (push) Successful in 2m24s
wai-quantum service / service · linux (push) Failing after 7m15s
wai-quantum extension points / the registry and the example · linux (push) Successful in 6m25s
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (push) Successful in 5m52s
wai-quantum verdicts and repairs / verdicts, repairs and the intent set · linux (push) Successful in 4m47s
wai-quantum views in agent hosts / views · the page and its engine (push) Successful in 6m12s
wai-quantum contract / schemas and the committed tool lists · linux (push) Successful in 14m59s
wai-quantum views in agent hosts / views · a scripted host (push) Successful in 6m37s
wai-quantum for Python / python · linux (push) Successful in 9m30s
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (push) Successful in 2m9s
wai-quantum wasmQ / the reference modules rebuild to their modules of record · linux (push) Successful in 50s
wai-quantum docs, course and locales / every command and snippet in the docs · linux (push) Successful in 21m30s
wai-quantum wasmQ / profile, engines, reference modules, adversarial, vectors · linux (push) Successful in 4m37s
wai-quantum wasmQ / interpreter and vectors under wasm32-wasip2 (wasmtime) (push) Successful in 6m42s
wai-quantum other formats / the set under wasm32-wasip2 (wasmtime) (push) Successful in 2m8s
wai-quantum editors / editors · linux (push) Successful in 3m34s
wai-quantum pulse and dynamics / reader, simulator and pulse jobs under wasm32-wasip2 (wasmtime) (push) Successful in 1m28s
wai-quantum other formats / readers, writers and the set · linux (push) Successful in 4m36s
wai-quantum pulse and dynamics / reader, simulator and pulse jobs · linux, release (push) Successful in 2m26s
wai-quantum command line / command line · macos (push) Successful in 2m56s
wai-quantum for JavaScript / javascript · linux (push) Successful in 3m50s
wai-quantum for Python / python · macos (push) Successful in 3m20s
wai-quantum service / service · macos (push) Successful in 6m9s
wai-quantum error correction and mitigation / codes, decoders, texts and mitigation · linux, release (push) Successful in 7m26s
wai-quantum studio and desktop / desktop app · linux (push) Successful in 6m54s
wai-quantum studio and desktop / studio · browser (push) Successful in 8m56s
WAI Studio / Studio in WebKit · linux (push) Successful in 25m46s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (push) Successful in 8m49s
wai-quantum resource estimation / estimation and calibration · linux, release (push) Successful in 15m29s
wai-quantum wasmQ / profile, engines, reference modules, adversarial, vectors · macos (push) Successful in 2m32s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (push) Successful in 12m27s
WAI Studio / Studio in Chromium and Firefox · macos (push) Successful in 12m47s
wai-quantum pulse and dynamics / the same bits · macos (push) Successful in 59s
wai-quantum editors / editors · macos (push) Successful in 2m9s
wai-quantum studio and desktop / desktop app · macos (push) Successful in 3m32s
wai-quantum studio and desktop / desktop app · windows (push) Successful in 10m29s
wai-quantum command line / command line · linux (push) Failing after 1h0m3s
wai-quantum: devices whose two-qubit gate is XX(θ), and star devices whose qubits move into a resonator
Bring your own quantum refused two kinds of device. Both now compile exactly,
are checked before anything is sent, and are described, imported and driven
by the clients that reach them.

- A fourth basis, prxrzxx: prx, rz and xx(θ) = exp(−iπθ·X⊗X), θ in turns.
  Each cz is one fully entangling xx(¼) between quarter-turn Y rotations,
  the Z rotations carried in the phases (the whole is a cz, which commutes
  with them), and inverse prx pairs dropped. xx takes 0 to ¼ turn and prx 0
  to ½; the check refuses an angle past them.
- Computational resonators (Coupling::with_resonators): a cz between a qubit
  that moves into a resonator and one coupled to it is move · cz · move.
  Routing swaps through such pairs, cancelling moves are dropped, no logical
  qubit is laid on a resonator, and only the cz bases go through one. A
  program uses a resonator in turn (resonator_discipline), and is simulated
  with the move's undefined phase at 1 and at e^{iπ/4}.
- Proofs by the engine's own equivalence check (a tableau, or every basis
  state): the cz as xx, the cz through a resonator under both phases, and
  whole compiled programs against their circuits.
- Targets: "resonator": true, prx/r with xx/rxx read as prxrzxx, moves
  costed in the expected success and the noise model; a new importer,
  dynamic-architecture; resonators read from move-only places, and from
  describe's resonators and moves.
- The provider protocol (§4, §5.1, §10): the basis, move, and describe's
  resonators and moves, within version 1; four refusal vectors; the schema;
  the reference provider's --basis prxrzxx and --star.
- Clients: cloud-tasks drives a processor of prx, xx and rz in its verbatim
  box; prx-circuits reads a star's resonators and moves and sends move. Both
  are tested against fakes of the services' contracts only.
- wai/quantum-conformance/native/: nine programs pinned and proved, five
  refused compiles, eight programs the check refuses.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-10 14:07:59 -05:00

272 lines
18 KiB
YAML

name: wai-quantum extension points
# The registry (wai/wai-quantum/src/engine/registry/): the traits a simulation
# method, a compiler pass, a noise channel and a program format implement, the
# built-ins registered through them, and a host's own registered beside them.
# The registry's tests hold every built-in to the bytes it gave (the pinned
# job digests, through the built-in registry and through one holding a host's
# components), auto to the order it always tried, the built-in channels and
# passes to what they declare, and a host's method, pass, channel and format
# to what the engine checks of them: each refusal with its code, and its
# identity sealed in the receipt of every result it took part in, marked as
# registered. They run under the full feature set and under the contract
# workflow's, natively on both Linux architectures and under wasm32-wasip2 by
# wasmtime. The example written outside the engine against its public traits
# (wai/wai-quantum/examples/extension_points.rs) is tested and run end to end.
concurrency:
group: ${{ github.workflow }}-${{ github.event_name == 'push' && github.sha || github.ref }}
cancel-in-progress: true
on:
push:
branches: [main]
paths:
- 'wai/wai-quantum/**'
- 'wai/quantum-conformance/native/**'
- 'rust-toolchain.toml'
- '.github/workflows/wai-quantum-registry.yml'
pull_request:
paths:
- 'wai/wai-quantum/**'
- 'wai/quantum-conformance/native/**'
- 'rust-toolchain.toml'
- '.github/workflows/wai-quantum-registry.yml'
jobs:
relevant:
name: does this change touch it
runs-on: gate
outputs:
run: ${{ steps.gate.outputs.run }}
steps:
- uses: actions/checkout@v5
with:
fetch-depth: 0
- id: gate
run: |
set -euo pipefail
r=$(python3 scripts/pr-touches-paths.py .github/workflows/wai-quantum-registry.yml \
"${{ github.event.pull_request.base.sha }}" \
"${{ github.event.pull_request.head.sha }}")
echo "this change touches the registry: $r"
echo "run=$r" >> "$GITHUB_OUTPUT"
native:
name: the registry and the example · ${{ matrix.runner }}
needs: relevant
if: needs.relevant.outputs.run == 'true'
strategy:
fail-fast: false
matrix:
runner: [linux, linux-arm64]
runs-on: ${{ matrix.runner }}
timeout-minutes: 60
steps:
- uses: actions/checkout@v5
- name: Install Rust 1.99.1
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.99.1
rustup toolchain install 1.99.1 --profile minimal
rustup default 1.99.1
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
# A module filter is satisfied by any one test of the module, so each
# test is required by name to have run.
- name: The registry's tests, under the full feature set and the contract's
shell: bash
working-directory: wai/wai-quantum
run: |
set -euo pipefail
cargo test --locked --release --features full --lib engine::registry:: 2>&1 | tee "$RUNNER_TEMP/full.log"
cargo test --locked --release --no-default-features --features quantum_engine,quantum_receipt,quantum_qec,quantum_noise --lib engine::registry:: 2>&1 | tee "$RUNNER_TEMP/contract.log"
for log in full contract; do
grep -qE '^test result: ok\. 13 passed; 0 failed' "$RUNNER_TEMP/$log.log" || { echo "::error::the registry's tests did not all pass ($log)"; exit 1; }
for t in every_built_in_registers_through_its_trait_in_a_fixed_order \
auto_tries_the_built_ins_in_the_order_it_did \
the_pinned_jobs_give_their_bytes_through_any_registry \
the_built_in_channels_are_valid_channels \
the_built_in_passes_give_what_they_declare \
a_registered_method_is_planned_run_and_named_in_its_result \
the_receipt_seals_a_registered_component_s_identity \
registration_refuses_what_it_cannot_hold \
a_registered_method_s_result_is_held_to_the_contract \
a_registered_channel_runs_on_the_density_matrix_and_is_refused_elsewhere \
a_registered_pass_is_checked_by_the_engine \
a_registered_front_end_converts_and_feeds_a_job \
a_built_in_s_declaration_is_what_its_trait_says; do
grep -q "^test engine::registry::tests::$t \.\.\. ok$" "$RUNNER_TEMP/$log.log" || { echo "::error::$t did not run ($log)"; exit 1; }
done
done
- name: Device targets and native programs, the xx basis and computational resonators among them
shell: bash
working-directory: wai/wai-quantum
run: |
set -euo pipefail
# The compiler to each basis (prx rz xx among them) and through a star's
# resonator, each program checked under both of a move's phases; the
# targets that import, place, model and run them; and the native vectors
# (wai/quantum-conformance/native/), each program pinned and proved the
# circuit's unitary by the engine's equivalence check, or refused as it says.
cargo test --locked --release --features full --lib -- quantum_toolchain::native:: engine::targets:: 2>&1 | tee "$RUNNER_TEMP/targets.log"
grep -qE '^test result: ok\. [1-9][0-9]* passed; 0 failed' "$RUNNER_TEMP/targets.log" || { echo "::error::the native compiler's or the targets' tests did not pass"; exit 1; }
for t in quantum_toolchain::native::tests::the_xx_basis_writes_each_cz_as_one_fully_entangling_xx \
quantum_toolchain::native::tests::a_cz_through_a_resonator_is_move_cz_move \
quantum_toolchain::native::tests::random_circuits_route_through_a_resonator \
quantum_toolchain::native::tests::the_resonator_discipline_refuses_what_a_move_cannot_do \
quantum_toolchain::native::tests::an_xx_or_prx_angle_out_of_its_range_is_refused \
engine::targets::tests::the_engine_s_equivalence_check_proves_the_xx_and_move_decompositions \
engine::targets::tests::xx_and_star_targets_compile_exactly_and_reproduce_the_ideal_distribution \
engine::targets::tests::a_star_target_routes_through_its_most_reliable_mover \
engine::targets::tests::star_and_xx_documents_import_and_round_trip \
engine::targets::tests::every_built_in_target_reads_round_trips_and_keeps_its_hash; do
grep -q "^test $t \.\.\. ok$" "$RUNNER_TEMP/targets.log" || { echo "::error::$t did not run"; exit 1; }
done
cargo test --locked --release --features full --test native_conformance 2>&1 | tee "$RUNNER_TEMP/native.log"
grep -q '^test every_native_vector_compiles_is_proved_or_is_refused_as_it_says \.\.\. ok$' "$RUNNER_TEMP/native.log" || { echo "::error::the native vectors did not pass"; exit 1; }
- name: The built-ins' bytes, the refusal table, the job layer and the planner under a contract beside them
shell: bash
working-directory: wai/wai-quantum
run: |
set -euo pipefail
cargo test --locked --release --features full --lib -- engine::job:: engine::refusal:: engine::catalog:: engine::compile:: engine::formats:: engine::planner:: 2>&1 | tee "$RUNNER_TEMP/engine.log"
grep -qE '^test result: ok\. [1-9][0-9]* passed; 0 failed' "$RUNNER_TEMP/engine.log" || { echo "::error::the engine's tests did not pass"; exit 1; }
for t in engine::job::tests::a_job_that_asks_for_no_verdict_gives_the_bytes_it_gave \
engine::refusal::tests::the_documented_table_is_the_table \
engine::planner::tests::what_the_routes_cost_is_the_same_bytes_on_every_host \
engine::planner::tests::nothing_falls_back_from_exact_to_approximate \
engine::planner::tests::nothing_falls_back_between_a_simulator_and_a_device \
engine::planner::tests::every_rule_a_verifier_holds_a_local_contract_job_to_is_broken_once_and_found_alone \
engine::planner::tests::every_rule_a_verifier_holds_a_provider_s_contract_job_to_is_broken_once_and_found_alone \
engine::planner::tests::an_energy_ceiling_is_held_by_a_live_reading_and_a_stopped_run_says_so \
engine::planner::tests::a_shadow_is_a_method_s_run_of_exactly_the_job_s_program \
engine::planner::tests::a_shadow_the_host_says_failed_is_run_again \
engine::planner::tests::under_a_contract_a_provider_is_used_only_where_it_allows_one \
engine::planner::tests::what_a_price_may_state_is_bounded_and_past_it_is_an_unknown \
engine::planner::tests::a_local_route_is_free_and_kept_states_exactly_the_charge \
engine::planner::tests::auto_is_what_the_routes_give_and_cannot_be_lowered \
engine::planner::tests::a_device_target_s_job_names_its_method_beside_the_host_s_providers \
engine::planner::tests::a_named_approximate_simulator_runs_under_a_contract_that_names_no_class \
engine::planner::tests::the_sampling_bound_holds_for_sparse_and_dense_outcomes \
engine::planner::tests::a_named_provider_s_routes_carry_the_class_their_shadow_has \
engine::planner::tests::a_built_in_route_and_a_result_are_held_to_their_method_s_classes \
engine::planner::tests::what_a_receipt_states_of_itself_is_of_its_form \
engine::planner::tests::recheck_plans_the_shadow_again_and_leaves_the_host_s_routes_to_the_host \
engine::planner::tests::a_target_s_and_a_pulse_program_s_deadline_is_reported_kept; do
grep -q "^test $t \.\.\. ok$" "$RUNNER_TEMP/engine.log" || { echo "::error::$t did not run"; exit 1; }
done
# A gate held whole through a job, and the meter that holds a matrix
# product job, each test by name.
for t in engine::catalog::whole_tests::what_takes_standard_gates_gives_what_it_gave \
engine::catalog::whole_tests::a_job_on_the_state_vectors_holds_the_gate_whole \
engine::catalog::whole_tests::the_bit_exact_method_keeps_its_bits_unless_asked \
engine::catalog::whole_tests::a_job_can_ask_for_standard_gates \
engine::catalog::whole_tests::every_other_method_takes_standard_gates \
engine::catalog::whole_tests::past_the_standard_form_only_the_state_vectors_take_it \
engine::catalog::whole_tests::a_gate_in_a_program_that_measures_runs_whole \
engine::catalog::whole_tests::a_verdict_holds_a_whole_run_to_its_intent \
engine::catalog::whole_tests::a_registered_method_sees_standard_gates \
engine::catalog::whole_tests::a_bit_exact_result_states_its_global_phase \
engine::catalog::whole_tests::an_angle_below_the_table_is_stated \
engine::catalog::whole_tests::a_named_matrix_product_job_is_held_to_the_bond_it_reaches \
engine::catalog::whole_tests::a_gate_too_large_for_standard_gates_is_refused_before_they_are_written \
engine::catalog::whole_tests::a_tiny_phase_under_many_controls_is_not_read_as_clifford \
engine::catalog::whole_tests::a_verdict_with_no_intent_holds_a_run_past_the_standard_form \
engine::catalog::whole_tests::a_named_method_on_standard_gates_refuses_as_the_reader_does \
engine::catalog::whole_tests::lint_counts_a_program_s_steps_in_standard_gates \
engine::catalog::whole_tests::the_refusal_past_16_controls_names_the_option \
engine::catalog::whole_tests::options_controls_is_read_and_not_ignored \
engine::catalog::whole_tests::the_stated_phase_is_relative_to_the_state_vector \
engine::catalog::whole_tests::the_bit_exact_whole_form_gives_the_state_vector_s_amplitudes \
engine::catalog::whole_tests::a_bit_exact_result_s_accuracy_members_hold_what_they_say \
engine::catalog::whole_tests::the_meter_stops_a_job_that_passes_its_budget \
engine::catalog::whole_tests::a_metered_plan_states_the_work_its_meter_allows \
engine::catalog::tests::the_mps_plan_bounds_its_run; do
grep -q "^test $t \.\.\. ok$" "$RUNNER_TEMP/engine.log" || { echo "::error::$t did not run"; exit 1; }
done
cargo test --locked --release --features full --lib -- quantum_mpsim:: quantum_sv::tests::a_gate_under_controls quantum::tests::the_walk_under_controls 2>&1 | tee "$RUNNER_TEMP/meter.log"
for t in quantum_mpsim::tests::the_meter_counts_the_bonds_reached_and_changes_nothing \
quantum_mpsim::tests::the_meter_charges_each_move_of_the_center \
quantum_mpsim::tests::a_far_gate_stops_at_the_update_that_passes_the_budget \
quantum_mpsim::tests::an_update_is_priced_at_the_bond_it_spans \
quantum_mpsim::tests::the_bound_holds_the_meter \
quantum_sv::tests::a_gate_under_controls_is_its_dense_gate_on_any_thread_count \
quantum_sv::tests::a_gate_under_controls_must_fit_the_register \
quantum::tests::the_walk_under_controls_gives_the_scan_s_bits; do
grep -q "^test $t \.\.\. ok$" "$RUNNER_TEMP/meter.log" || { echo "::error::$t did not run"; exit 1; }
done
- name: The example, tested and run
shell: bash
working-directory: wai/wai-quantum
run: |
set -euo pipefail
cargo test --locked --release --features quantum_engine,quantum_receipt --example extension_points 2>&1 | tee "$RUNNER_TEMP/example.log"
grep -qE '^test result: ok\. 3 passed; 0 failed' "$RUNNER_TEMP/example.log" || { echo "::error::the example's tests did not pass"; exit 1; }
cargo run --locked --release --features quantum_engine,quantum_receipt --example extension_points > "$RUNNER_TEMP/walk.txt"
cat "$RUNNER_TEMP/walk.txt"
for want in 'the job planned on "basis_table"' 'counts {"100":100}' '"origin": "registered"'; do
grep -qF "$want" "$RUNNER_TEMP/walk.txt" || { echo "::error::the example's walk-through does not say: $want"; exit 1; }
done
wasip2:
name: the registry under wasm32-wasip2 (wasmtime)
needs: relevant
if: needs.relevant.outputs.run == 'true'
runs-on: linux
timeout-minutes: 60
steps:
- uses: actions/checkout@v5
- name: Install Rust 1.99.1 with the wasm32-wasip2 target
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.99.1
rustup toolchain install 1.99.1 --profile minimal
rustup default 1.99.1
rustup target add --toolchain 1.99.1 wasm32-wasip2
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
# The release binary, pinned by version and SHA-256, rather than a build from source.
# Every WAI workflow that runs wasmtime pins this one version, and every run passes
# -W nan-canonicalization=y -W relaxed-simd-deterministic=y: every NaN a float
# instruction makes is the canonical one, and each relaxed SIMD instruction has one
# behaviour on every host. A stock wasmtime leaves both off. The fixed relaxed
# behaviour is the engine's own: on 50.0.1 relaxed_madd is fused (measured on arm64 and
# x86_64), where WebAssembly's deterministic profile prescribes the unfused result.
# The repository checks (scripts/check-wasmtime-pin.py) fail a workflow that pins another
# release or runs wasmtime without both settings.
- name: Install wasmtime 50.0.1
shell: bash
run: |
set -euo pipefail
[ "$(uname -m)" = x86_64 ] || { echo "::error::the pinned wasmtime archive is x86_64; this host is $(uname -m)"; exit 1; }
if ! command -v xz >/dev/null 2>&1; then
SUDO=""; [ "$(id -u)" -ne 0 ] && SUDO="sudo"
$SUDO apt-get update -qq
$SUDO apt-get install -y -qq xz-utils
fi
v=50.0.1
f="wasmtime-v$v-x86_64-linux.tar.xz"
curl --proto '=https' --tlsv1.2 -sSfL -o "$RUNNER_TEMP/$f" \
"https://github.com/bytecodealliance/wasmtime/releases/download/v$v/$f"
echo "685466455dd42a14774a86c36c8f2e45cbb9bd6d92a850139315df60a75498a5 $RUNNER_TEMP/$f" | sha256sum -c -
tar -xJf "$RUNNER_TEMP/$f" -C "$RUNNER_TEMP"
echo "$RUNNER_TEMP/wasmtime-v$v-x86_64-linux" >> "$GITHUB_PATH"
# A debug build, so integer overflow panics instead of wrapping.
- name: The registry's tests under wasmtime
shell: bash
working-directory: wai/wai-quantum
env:
CARGO_TARGET_WASM32_WASIP2_RUNNER: wasmtime run -W nan-canonicalization=y -W relaxed-simd-deterministic=y
run: |
set -euo pipefail
cargo test --locked --target wasm32-wasip2 --features full --lib engine::registry:: 2>&1 | tee "$RUNNER_TEMP/wasip2.log"
grep -qE '^test result: ok\. 13 passed; 0 failed' "$RUNNER_TEMP/wasip2.log" || { echo "::error::the registry's tests did not all pass under wasip2"; exit 1; }
# The browser's engine runs a gate under controls by this path too.
cargo test --locked --target wasm32-wasip2 --features full --lib quantum_sv::tests::a_gate_under_controls 2>&1 | tee "$RUNNER_TEMP/wasip2-sv.log"
for t in quantum_sv::tests::a_gate_under_controls_is_its_dense_gate_on_any_thread_count \
quantum_sv::tests::a_gate_under_controls_must_fit_the_register; do
grep -q "^test $t \.\.\. ok$" "$RUNNER_TEMP/wasip2-sv.log" || { echo "::error::$t did not run under wasip2"; exit 1; }
done