kryst 3.2.1

Krylov subspace and preconditioned iterative solvers for dense and sparse linear systems, with shared and distributed memory parallelism.
name: ci

on:
  push:
  pull_request:

jobs:
  fmt:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - run: cargo fmt --all -- --check

  test:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        include:
          - name: no-default
            cmd: cargo test --no-default-features
          - name: default
            cmd: cargo test
          - name: complex
            cmd: cargo test --features complex
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - run: ${{ matrix.cmd }}

  docs:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        include:
          - name: default
            cmd: cargo test --doc
          - name: complex
            cmd: cargo test --doc --features complex
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - run: ${{ matrix.cmd }}

  examples:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        include:
          - name: default
            cmd: cargo build --examples
          - name: complex
            cmd: cargo build --examples --features complex
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - run: ${{ matrix.cmd }}

  clippy:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        include:
          - name: default
            cmd: cargo clippy -- -D warnings
          - name: no-default
            cmd: cargo clippy --no-default-features -- -D warnings
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy
      - uses: Swatinem/rust-cache@v2
      - run: ${{ matrix.cmd }}

  mpi:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2

      - name: Install OpenMPI
        run: |
          sudo apt-get update
          sudo apt-get install -y openmpi-bin libopenmpi-dev

      - name: Doc tests (MPI)
        run: cargo test --doc --features mpi

      - name: Build MPI examples
        run: cargo build --examples --features mpi

      - name: MPI smoke tests (2 ranks)
        env:
          RUST_TEST_THREADS: "1"
          RUST_LOG: "kryst=debug"
        run: |
          mpirun -n 2 --oversubscribe \
            cargo test --features mpi --test mpi_smoke -- --nocapture --test-threads=1

      - name: MPI + complex smoke tests (2 ranks)
        env:
          RUST_TEST_THREADS: "1"
          RUST_LOG: "kryst=debug"
        run: |
          mpirun -n 2 --oversubscribe \
            cargo test --features "mpi,complex" --test mpi_smoke -- --nocapture --test-threads=1

  invariants:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - run: cargo test --features invariants --test context_smoke -- --nocapture