orx-parallel 4.0.0

Performant parallel computations with an expressive iterator API.
Documentation
# Updated workflow (based on .github/workflows/ci.yml at ref d04ad7abce0c67776a7189001f706535e3e5c402)
name: Rust

on:
  push:
    branches: ["main"]
  pull_request:
    branches: ["main"]

env:
  CARGO_TERM_COLOR: always

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        toolchain: ["stable", "nightly"]
        features:
          [
            "",
            "--no-default-features",
            "--no-default-features --features std",
            "--no-default-features --features persistent-pool-rayon",
            "--no-default-features --features transient-pool",
          ]

    steps:
      - uses: actions/checkout@v4

      - name: Cache cargo registry & target
        uses: actions/cache@v4
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            target
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}-stable-${{ matrix.features || 'default' }}

      - name: Install toolchain
        uses: dtolnay/rust-toolchain@nightly
        with:
          components: clippy

      - name: Build
        run: cargo build --verbose ${{ matrix.features }}

      - name: Test
        run: cargo test --verbose ${{ matrix.features }} --features long-tests

      - name: Clippy
        run: cargo clippy --all-targets ${{ matrix.features }} -- -D warnings --verbose

  miri:
    name: Miri
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install nightly toolchain
        uses: dtolnay/rust-toolchain@nightly

      - name: Install miri
        run: rustup component add --toolchain nightly-x86_64-unknown-linux-gnu miri

      - name: Miri with BasicPool (default)
        env:
          MIRIFLAGS: -Zmiri-ignore-leaks
        run: cargo +nightly miri test --lib --bins --tests --verbose --no-default-features --features std

      - name: Miri with OncePool (transient-pool)
        run: cargo +nightly miri test --lib --bins --tests --verbose --no-default-features --features transient-pool

  wasm:
    name: Check (wasm)
    runs-on: ubuntu-latest
    needs: build
    strategy:
      matrix:
        wasm-features: ["--no-default-features --features wasm"]
    env:
      CARGO_TERM_COLOR: always

    steps:
      - uses: actions/checkout@v4

      - name: Cache cargo registry & target
        uses: actions/cache@v4
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            target
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}-nightly-wasm-${{ matrix.wasm-features || 'default' }}

      - name: Install nightly toolchain with wasm target and rust-src
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: nightly
          targets: wasm32-unknown-unknown
          components: rust-src

      - name: Check-wasm
        env:
          RUSTFLAGS: >-
            -C target-feature=+atomics,+bulk-memory,+mutable-globals
            -C link-arg=--shared-memory
            -C link-arg=--max-memory=1073741824
            -C link-arg=--import-memory
            -C link-arg=--export=__heap_base
            -C link-arg=--export=__wasm_init_tls
            -C link-arg=--export=__tls_size
            -C link-arg=--export=__tls_align
            -C link-arg=--export=__tls_base
        run: cargo +nightly check --verbose --target wasm32-unknown-unknown ${{ matrix.wasm-features }} -Z build-std=panic_abort,std

      - name: Build-wasm
        env:
          RUSTFLAGS: >-
            -C target-feature=+atomics,+bulk-memory,+mutable-globals
            -C link-arg=--shared-memory
            -C link-arg=--max-memory=1073741824
            -C link-arg=--import-memory
            -C link-arg=--export=__heap_base
            -C link-arg=--export=__wasm_init_tls
            -C link-arg=--export=__tls_size
            -C link-arg=--export=__tls_align
            -C link-arg=--export=__tls_base
        run: cargo +nightly build --verbose --target wasm32-unknown-unknown ${{ matrix.wasm-features }} -Z build-std=panic_abort,std

      - name: Test-wasm
        env:
          RUSTFLAGS: >-
            -C target-feature=+atomics,+bulk-memory,+mutable-globals
            -C link-arg=--shared-memory
            -C link-arg=--max-memory=1073741824
            -C link-arg=--import-memory
            -C link-arg=--export=__heap_base
            -C link-arg=--export=__wasm_init_tls
            -C link-arg=--export=__tls_size
            -C link-arg=--export=__tls_align
            -C link-arg=--export=__tls_base
        run: cargo +nightly test --verbose --target wasm32-unknown-unknown ${{ matrix.wasm-features }} -Z build-std=panic_abort,std --no-run

  test-32:
    name: Test (i686)
    runs-on: ubuntu-latest
    needs: build
    env:
      CARGO_TERM_COLOR: always

    steps:
      - uses: actions/checkout@v4

      - name: Cache cargo registry & target
        uses: actions/cache@v4
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            target
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}-stable-i686

      - name: Install Rust toolchain
        uses: dtolnay/rust-toolchain@nightly
        with:
          components: clippy

      - name: Set up QEMU for multi-arch Docker
        uses: docker/setup-qemu-action@v2

      - name: Install Docker Buildx
        uses: docker/setup-buildx-action@v2

      - name: Install cross
        run: cargo install --locked cross

      - name: Run tests for i686 target via cross
        run: |
          # Run unit tests under QEMU inside Docker so i686 test binaries are executed reliably.
          # Uses the glibc i686 target by default. Change to i686-unknown-linux-musl if you require musl.
          cross test --target i686-unknown-linux-gnu --verbose