name: Test ML-KEM i.e. NIST FIPS 203

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

jobs:
  build:
    runs-on: ${{matrix.os}}
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest]
        compiler: [g++, clang++]
        build_type: [debug, release]
        test_type: [standard, asan, ubsan]
      max-parallel: 4

    steps:
      - uses: actions/checkout@v5

      - name: Setup Google-Test
        run: |
          pushd ~
          git clone https://github.com/google/googletest.git -b v1.17.0
          pushd googletest
          mkdir build
          pushd build
          cmake .. -DBUILD_GMOCK=OFF
          make
          sudo make install
          popd
          popd
          popd

      - name: Build and Test (${{ matrix.compiler }}, ${{ matrix.build_type }}, ${{ matrix.test_type }})
        run: |
          CXX=${{ matrix.compiler }}
          if [[ ${{ matrix.test_type }} == "standard" ]]; then
            make test -j
          else
            make ${{ matrix.build_type }}_${{ matrix.test_type }}_test -j
          fi

      - name: Run Examples
        if: ${{ matrix.test_type == 'standard' && matrix.build_type == 'release' }}
        run: |
          CXX=${{ matrix.compiler }} make example -j
