good_lp 1.15.1

Mixed Integer Linear Programming for Rust, with an user-friendly API. This crate allows modeling LP problems, and lets you solve them with various solvers.
Documentation
name: Rust

on:
  push:
    branches: [main]
    paths: ["**.rs", "Cargo.toml", ".github/workflows/rust.yml"]
  pull_request:
    branches: [main]

env:
  CARGO_TERM_COLOR: always

jobs:
  format:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt
      - name: Check formatting
        run: cargo fmt -- --check

  test-all-default:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - name: install deps
        run: NO_CPLEX=true ./build/setup.sh
      - name: Build with all default solvers (no cplex)
        run: cargo build --features all_default_solvers --tests
      - name: Run tests with all default solvers (no cplex)
        # test on a single thread. See: https://github.com/KardinalAI/coin_cbc/issues/9
        run: cargo test  --features all_default_solvers -- --test-threads=1

  test-microlp:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - name: install deps
        run: NO_CPLEX=true ./build/setup.sh
      - name: Build microlp
        run: cargo build --features microlp --tests
      - name: Run tests with microlp
        run: cargo test --no-default-features --features microlp

  test-microlp-wasm:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - uses: actions/setup-node@v4
        with:
          node-version: 22
      - name: install deps
        run: NO_CPLEX=true ./build/setup.sh && ./build/postsetup.sh
      - name: Run tests with microlp on WASM
        run: wasm-pack test --node --no-default-features --features microlp

  test-lpsolve:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - name: install deps
        run: NO_CPLEX=true ./build/setup.sh
      - name: Build microlp
        run: cargo build --features lpsolve --tests
      - name: Run tests with lpsolve
        run: cargo test --no-default-features --features lpsolve

  test-highs:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - name: install deps
        run: NO_CPLEX=true ./build/setup.sh
      - name: Build highs
        run: cargo build --features highs --tests
      - name: Run tests with highs
        run: cargo test --no-default-features --features highs

  test-lpsolvers:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - name: install deps
        run: NO_CPLEX=true ./build/setup.sh
      - name: Build lp_solvers
        run: cargo build --features lp-solvers --tests
      - name: Run tests with lp_solvers
        run: cargo test --no-default-features --features lp-solvers

  test-scip:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - name: install deps
        run: NO_CPLEX=true ./build/setup.sh
      - name: Build scip
        run: cargo build --features "scip,scip_bundled" --tests
      - name: Run tests with SCIP
        run: cargo test --no-default-features --features "scip,scip_bundled"

  test-cplex:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - name: install deps
        run: ./build/setup.sh
      - name: Build cplex
        run: cargo build --features cplex-rs --tests
      - name: Run tests with CPLEX
        run: cargo test --no-default-features --features cplex-rs

  test-clarabel:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - name: install deps
        run: NO_CPLEX=true ./build/setup.sh
      - name: Build clarabel
        run: cargo build --features clarabel --tests
      - name: Run tests with Clarabel
        run: cargo test --no-default-features --features clarabel

  test-clarabel-wasm:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - uses: actions/setup-node@v4
        with:
          node-version: 22
      - name: install deps
        run: NO_CPLEX=true ./build/setup.sh && ./build/postsetup.sh
      - name: Run tests with Clarabel on WASM
        run: wasm-pack test --node --no-default-features --features clarabel

  bench:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - name: install deps
        run: NO_CPLEX=true ./build/setup.sh
      - name: Run benchmarks
        run: cargo bench