name: PQC

on:
  - push
  - pull_request

jobs:
  unit-test:
    name: Unit tests
    runs-on: [ubuntu-20.04]
    env:
      CC: ${{ matrix.cc }}
      CXX: ${{ matrix.cxx }}
      CMAKE_FLAGS: ${{matrix.flags}}
    strategy:
      fail-fast: false
      max-parallel: 4
      matrix:
        name: [
          gcc-release-build,
          clang-release-build,
          gcc-debug-build,
          clang-debug-build,
          clang-debug-asan-build,
          clang-debug-msan-build,
        ]

        include:
          - name: gcc-release-build
            cc: gcc
            cxx: g++
            flags: -DCMAKE_BUILD_TYPE=Release
          - name: gcc-debug-build
            cc: gcc
            cxx: g++
            flags: -DCMAKE_BUILD_TYPE=Debug
          - name: clang-release-build
            cc: clang
            cxx: clang++
            flags: -DCMAKE_BUILD_TYPE=Release
          - name: clang-debug-build
            cc: /usr/bin/clang
            cxx: /usr/bin/clang++
            flags: -DCMAKE_BUILD_TYPE=Debug
          - name: clang-debug-asan-build
            cc: clang
            cxx: clang++
            flags: -DCMAKE_BUILD_TYPE=Release -DADDRSAN=1
          - name: clang-debug-msan-build
            cc: clang
            cxx: clang++
            flags: -DCMAKE_BUILD_TYPE=Release -DMEMSAN=1
    steps:
      - uses: actions/checkout@v1
        with:
          submodules: true
      - name: build
        run: |
          mkdir -p build
          cd build
          CC=${CC} CXX=${CXX} cmake ${CMAKE_FLAGS} ..
          make
      - name: run tests
        run: |
          cd build && ./ut
      - name: Build Rust bindings
        run: |
          cd src/rustapi/pqc-sys && cargo build
      - name: Run KAT tests
        run: |
          cd test/katrunner &&
          curl http://amongbytes.com/~flowher/permalinks/kat.zip --output kat.zip
          unzip kat.zip
          cargo run --release -- --katdir KAT
