indexmap 2.0.1

A hash table with consistent order and fast iteration.
Documentation
on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

name: Continuous integration

env:
  CARGO_TERM_COLOR: always
  CARGO_INCREMENTAL: 0

jobs:
  tests:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        include:
          - rust: 1.64.0 # MSRV
            features:
          - rust: stable
            features: arbitrary
          - rust: stable
            features: quickcheck
          - rust: stable
            features: rayon
          - rust: stable
            features: rustc-rayon
          - rust: stable
            features: serde
          - rust: stable
            features: std
          - rust: beta
            features:
          - rust: nightly
            bench: test build benchmarks

    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.rust }}
      - name: Tests
        run: |
          cargo build --verbose --features "${{ matrix.features }}"
          cargo doc --verbose --features "${{ matrix.features }}"
          cargo test --verbose --features "${{ matrix.features }}"
          cargo test --release --verbose --features "${{ matrix.features }}"
      - name: Tests (serde)
        if: matrix.features == 'serde'
        run: |
          cargo test --verbose -p test-serde
      - name: Test run benchmarks
        if: matrix.bench != ''
        run: cargo test -v --benches

  nostd_build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        include:
          - rust: 1.64.0
            target: thumbv6m-none-eabi
          - rust: stable
            target: thumbv6m-none-eabi

    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.rust }}
          target: ${{ matrix.target }}
      - name: Tests
        run: |
          cargo build -vv --target=${{ matrix.target }} --no-default-features
          cargo build -v -p test-nostd --target=${{ matrix.target }}

  clippy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@beta
        with:
          components: clippy
      - run: cargo clippy

  miri:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@nightly
        with:
          components: miri
      - run: cargo miri test

  minimal-versions:
    name: Check MSRV and minimal-versions
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: nightly
      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: 1.64.0 # MSRV
      - uses: taiki-e/install-action@v2
        with:
          tool: cargo-hack
      - run: cargo +nightly hack generate-lockfile --remove-dev-deps -Z direct-minimal-versions
      - name: Build
        run: cargo build --verbose --all-features

  # See hashbrown#457: it can actually work with 1.63.0
  relaxed-msrv:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@1.63.0
      - run: cargo test --verbose --ignore-rust-version