range-set-blaze 0.7.0

Integer sets as fast, sorted integer ranges; Maps with integer-range keys; Full set operations
Documentation
name: test

on:
  push:
  schedule:
    - cron: '0 0 1 * *'
  pull_request:
  workflow_dispatch:
    
env:
  CARGO_TERM_COLOR: always
  CARGO_TARGET_WASM32_WASIP1_RUNNER: "wasmtime run --dir ."

permissions:
  contents: read

jobs:
  test_64_bit:
    name: Test Rust on 64-bit
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
    runs-on: ${{ matrix.os }}
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Setup Rust
        # Keep scheduled CI on the pinned baseline. Bump deliberately after checking
        # newer lints locally with `just clippy-latest`.
        uses: dtolnay/rust-toolchain@1.97.0
        with:
          components: rust-src
      - name: Test Rust Native (stable)
        run: |
          cargo clippy --verbose --all-targets --features std -- -D clippy::all -A deprecated
          cargo test --verbose
          cargo test --verbose --release
          cargo test --verbose --no-default-features
          cargo test --verbose --release --no-default-features
      - name: Test Rust Native (nightly)
        # Keep this nightly pinned, like the stable toolchain above. A floating
        # `nightly` breaks CI whenever upstream adds a new Clippy lint (as
        # `clippy::single_range_in_vec_init` did). Bump the date deliberately.
        run: |
          rustup toolchain install nightly-2026-09-15 --component clippy --allow-downgrade
          rustup override set nightly-2026-09-15
          cargo check --tests --features "float_nightly_experimental"
          cargo test --verbose --features from_slice
          cargo test --verbose --features cursor_nightly_experimental
          cargo test --verbose --no-default-features --features cursor_nightly_experimental
          cargo clippy --verbose --all-targets --features cursor_nightly_experimental -- -D clippy::all -A deprecated -A clippy::single_range_in_vec_init
          cargo test --verbose --all-features
      - name: Check dead links in documentation
        if: matrix.os == 'ubuntu-latest'
        run: |
          cargo install cargo-deadlinks
          RUSTDOCFLAGS="--cfg docsrs" cargo +nightly-2026-09-15 doc --no-deps --all-features
          RUST_LOG=error cargo deadlinks --dir target/doc/range_set_blaze
      - name: Audit dependencies (security & license)
        if: matrix.os == 'ubuntu-latest'
        run: |
          cargo install cargo-audit
          cargo install cargo-deny
          cargo audit
          cargo deny check

  test_32_bit_linux:
    name: Test on 32-bit Ubuntu
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Setup Rust
        uses: dtolnay/rust-toolchain@1.97.0
        with:
          components: rust-src
      - name: Test Rust 32-bit Ubuntu
        uses: awalsh128/cache-apt-pkgs-action@latest
        with:
          packages: libc6-dev-i386 linux-libc-dev libc6-i386 gcc-multilib
          version: 1
      - name: Ensure 32-bit toolchain installed
        # awalsh128/cache-apt-pkgs-action reports success even when its
        # internal apt-get install fails (e.g. a transient mirror 404), which
        # otherwise surfaces later as a confusing linker error. Retry a plain
        # apt-get install with a fresh package list as a safety net.
        run: |
          for i in 1 2 3; do
            sudo apt-get update && \
              sudo apt-get install -y --fix-missing libc6-dev-i386 linux-libc-dev libc6-i386 gcc-multilib && \
              break
            echo "apt-get install attempt $i failed, retrying..."
            sleep 10
          done
          dpkg -s libc6-dev-i386 gcc-multilib > /dev/null
      - name: run tests
        run: |
          rustup target add i686-unknown-linux-gnu
          cargo test --target i686-unknown-linux-gnu --verbose
          cargo test --target i686-unknown-linux-gnu --verbose --no-default-features

  test_wasm:
    name: Test WASM
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Setup Rust
        uses: dtolnay/rust-toolchain@1.97.0
        with:
          components: rust-src
      - name: Setup WASM/unknown
        uses: jetli/wasm-pack-action@v0.4.0
      - name: Test WASM/unknown
        run: |
          wasm-pack test --chrome --headless -- --no-default-features --verbose
          wasm-pack test --chrome --headless -- --features std --verbose
      - name: Install wasmtime
        uses: jcbhmr/setup-wasmtime@v2
      - name: Test WASM/wasip1
        run: |
          rustup target add wasm32-wasip1
          cargo test --target wasm32-wasip1 --verbose
          cargo test --target wasm32-wasip1 --verbose --no-default-features
      - name: Setup and check Embedded
        # Keep this nightly pinned, like the native nightly job. A floating
        # `nightly` here can break CI just as easily, since this also builds
        # with the nightly-only float_nightly_experimental feature.
        run: |
          rustup target add thumbv7m-none-eabi
          cargo check --target thumbv7m-none-eabi --no-default-features
          rustup toolchain install nightly-2026-09-15 --allow-downgrade
          rustup override set nightly-2026-09-15
          rustup target add thumbv7m-none-eabi
          cargo check --target thumbv7m-none-eabi --no-default-features
          cargo check --target thumbv7m-none-eabi --no-default-features --features float_nightly_experimental
          sudo apt-get update && sudo apt-get install qemu-system-arm
      - name: Test Embedded (in nightly)
        timeout-minutes: 3
        run: |
          cd tests/embedded
          cargo run
          cd ../..
          rustup override set stable

  test_msrv:
    name: Test MSRV (1.87)
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Setup Rust 1.87
        uses: dtolnay/rust-toolchain@1.87
      - name: Check MSRV compiles
        run: |
          # Explicitly bypass rust-toolchain.toml; otherwise this job could run 1.97.
          cargo +1.87 check --verbose
          cargo +1.87 check --verbose --no-default-features
          cargo +1.87 check --verbose --features std