name: CI on: push: branches: [main] pull_request: env: CARGO_TERM_COLOR: always RUSTFLAGS: -D warnings jobs: test: runs-on: ubuntu-latest strategy: fail-fast: false matrix: include: # The build most consumers get. - name: default features: "" profile: "" # Most numerical goldens need `approx` for assert_ulps_eq. - name: approx features: "--features approx" profile: "" # The parallel path, including tests/determinism.rs. - name: rayon features: "--features approx,rayon" profile: "" # Critical: debug_assert! is compiled out here, which is where the # tie/p_draw and score_sigma validation actually has to hold. - name: release features: "--features approx" profile: "--release" name: test (${{ matrix.name }}) steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v2 - run: cargo test ${{ matrix.profile }} ${{ matrix.features }} - run: cargo test ${{ matrix.profile }} ${{ matrix.features }} --doc determinism: name: determinism across thread counts runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v2 # Posteriors must be bit-identical regardless of how many rayon workers # run the color-group sweep. - run: | for threads in 1 2 4 8; do echo "== RAYON_NUM_THREADS=$threads ==" RAYON_NUM_THREADS=$threads cargo test --release \ --features approx,rayon --test determinism done lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: components: clippy - uses: Swatinem/rust-cache@v2 - run: cargo clippy --all-targets --all-features -- -D warnings format: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 # rustfmt.toml uses nightly-only options (imports_granularity). - uses: dtolnay/rust-toolchain@nightly with: components: rustfmt - run: cargo +nightly fmt --check msrv: name: minimum supported Rust version runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@1.85.0 - uses: Swatinem/rust-cache@v2 - run: cargo check --all-targets --features approx,rayon