skiplist 1.1.0

Skiplist implementation in Rust for fast insertion and removal, including a normal skiplist, ordered skiplist, and skipmap.
Documentation
---
name: Test

permissions:
  contents: read

on:
  pull_request:
    branches:
      - main
    types:
      - opened
      - synchronize
      - reopened
      - ready_for_review
  push:
    branches:
      - main

env:
  RUST_BACKTRACE: '1'
  FORCE_COLOR: '1'
  NEXTEST_PROFILE: ci

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
  complete:
    name: Test completion check
    if: always()
    needs:
      - prek
      - clippy
      - format
      - test
      - benches
      - docs
      - examples
      - miri
      - coverage
    runs-on: ubuntu-latest

    steps:
      - name: Failed
        run: exit 1
        if: |
          contains(needs.*.result, 'failure') ||
          contains(needs.*.result, 'cancelled') ||
          contains(needs.*.result, 'timed_out') ||
          contains(needs.*.result, 'skipped')

  committed:
    name: Committed
    if: github.event_name == 'pull_request'
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd  # v6.0.2
        with:
          fetch-depth: 0

      - name: Check commit messages
        uses: crate-ci/committed@faeed42f2e10c244533a01525f13c4d8b6ce383f  # v1.1.11
        with:
          args: --no-merge-commit

  prek:
    name: Prek
    runs-on: ubuntu-latest

    steps:
      - name: Install prek
        uses: taiki-e/install-action@a37010ded18ff788be4440302bd6830b1ae50d8b  # v2.68.25
        with:
          tool: prek

      - name: Checkout
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd  # v6.0.2

      - name: Restore prek cache
        uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306  # v5.0.3
        with:
          path: ~/.cache/prek
          key: prek-${{ runner.os }}-${{ hashFiles('prek.toml') }}

      - name: Run prek
        env:
          SKIP: cargo-check,cargo-clippy,cargo-fmt
        run: prek run --all-files

  clippy:
    name: Clippy
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd  # v6.0.2

      - name: Install Rust (stable)
        uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy

      - name: Restore Rust cache
        uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4  # v2.9.1

      - name: Install cargo-hack
        uses: taiki-e/install-action@a37010ded18ff788be4440302bd6830b1ae50d8b  # v2.68.25
        with:
          tool: cargo-hack

      - name: Run clippy
        run: cargo hack --feature-powerset clippy --all-targets -- -D warnings

  format:
    name: Format
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd  # v6.0.2

      - name: Install Rust (nightly)
        uses: dtolnay/rust-toolchain@nightly
        with:
          components: rustfmt

      - name: Check formatting
        run: cargo fmt --check

  test:
    name: Test (${{ matrix.os }}, ${{ matrix.toolchain }})
    strategy:
      fail-fast: false
      matrix:
        include:
          - os: ubuntu-latest
            toolchain: stable
          - os: windows-latest
            toolchain: stable
          - os: macos-latest
            toolchain: stable
          - os: ubuntu-latest
            toolchain: beta
    runs-on: ${{ matrix.os }}

    steps:
      - name: Checkout
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd  # v6.0.2

      - name: Install Rust (${{ matrix.toolchain }})
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.toolchain }}

      - name: Restore Rust cache
        uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4  # v2.9.1

      - name: Install cargo-hack and cargo-nextest
        uses: taiki-e/install-action@a37010ded18ff788be4440302bd6830b1ae50d8b  # v2.68.25
        with:
          tool: cargo-hack,cargo-nextest

      - name: Run tests
        run: cargo hack --feature-powerset nextest run

  benches:
    name: Benchmarks
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd  # v6.0.2

      - name: Install Rust (stable)
        uses: dtolnay/rust-toolchain@stable

      - name: Restore Rust cache
        uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4  # v2.9.1

      - name: Test benchmarks
        run: cargo test --benches '/'

  docs:
    name: Docs
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd  # v6.0.2

      - name: Install Rust (stable)
        uses: dtolnay/rust-toolchain@stable

      - name: Restore Rust cache
        uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4  # v2.9.1

      - name: Test benchmarks
        run: cargo test --doc

  examples:
    name: Examples
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd  # v6.0.2

      - name: Install Rust (stable)
        uses: dtolnay/rust-toolchain@stable

      - name: Restore Rust cache
        uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4  # v2.9.1

      - name: Run getting_started
        run: cargo run --example getting_started

      - name: Run custom_ordering
        run: cargo run --example custom_ordering

      - name: Run float_keys
        run: cargo run --example float_keys

      - name: Run leaderboard
        run: cargo run --example leaderboard

  miri:
    name: Miri
    # Miri is slow, so we avoid running it unnecessarily
    if: github.event.pull_request.draft == false || github.event_name != 'pull_request'
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd  # v6.0.2

      - name: Install Rust (nightly)
        uses: dtolnay/rust-toolchain@nightly
        with:
          components: miri

      - name: Restore Rust cache
        uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4  # v2.9.1

      - name: Run Miri
        run: cargo miri test --all-features

  coverage:
    name: Coverage
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd  # v6.0.2

      - name: Install Rust (stable)
        uses: dtolnay/rust-toolchain@stable
        with:
          components: llvm-tools-preview

      - name: Restore Rust cache
        uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4  # v2.9.1

      - name: Install cargo-llvm-cov and cargo-nextest
        uses: taiki-e/install-action@a37010ded18ff788be4440302bd6830b1ae50d8b  # v2.68.25
        with:
          tool: cargo-llvm-cov,cargo-nextest

      - name: Generate coverage
        run: cargo llvm-cov nextest --all-features --lcov --output-path coverage.lcov

      - name: Upload coverage
        uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de  # v5.5.2
        with:
          files: coverage.lcov
          token: ${{ secrets.CODECOV_TOKEN || '' }}

      - name: Upload test results to Codecov
        if: ${{ !cancelled() }}
        uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3  # v1.2.1
        with:
          token: ${{ secrets.CODECOV_TOKEN || '' }}