# Run CMake / CTest C++ unit tests

name: ctest

on:
  push:
    paths:
      - '**.cc?'
      - '**.cpp'
      - '**.cxx'
      - '**.hh?'
      - '**.hpp'
      - '**.hxx'
      - '**/CMakeLists.txt'
      - '.github/workflows/ctest.yml'
  pull_request:
    paths:
      - '**.cc?'
      - '**.cpp'
      - '**.cxx'
      - '**.hh?'
      - '**.hpp'
      - '**.hxx'
      - '**/CMakeLists.txt'
      - '.github/workflows/ctest.yml'

jobs:
  ctest:
    runs-on: ${{ matrix.os }}
    name: Test C++ ${{ matrix.os }}

    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, windows-latest]

    steps:
    - uses: actions/checkout@v4
    - uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756
      if: startsWith(matrix.os,'windows')
    - uses: Bacondish2023/setup-googletest@49065d1f7a6d21f6134864dd65980fe5dbe06c73
      with:
        build-type: 'Release'
    - name: Build tests
      run: |
        cd test/cpp
        mkdir build
        cmake -S . -B build/ -DCMAKE_BUILD_TYPE=Release
        cmake --build build/ --config Release
        ls
    - name: Run tests
      run: |
        cd test/cpp
        ctest --test-dir build/ -C Release --output-on-failure
