name: Test

on:
  - push
  - pull_request

jobs:

  test_linux:
    name: Test (Linux)
    runs-on: ubuntu-latest
    env:
      OS: Linux
    strategy:
      matrix:
        include:
        - python-version: 3.5
          python-release: v3.5
          python-impl: CPython
        - python-version: 3.6
          python-release: v3.6
          python-impl: CPython
        - python-version: 3.7
          python-release: v3.7
          python-impl: CPython
        - python-version: 3.8
          python-release: v3.8
          python-impl: CPython
        - python-version: 3.9
          python-release: v3.9
          python-impl: CPython
        - python-version: pypy-3.6
          python-release: v3.6
          python-impl: PyPy
        - python-version: pypy-3.7
          python-release: v3.7
          python-impl: PyPy
    steps:
    - name: Checkout code
      uses: actions/checkout@v2
      with:
        submodules: true
    - name: Cache Python requirements
      uses: actions/cache@v2
      with:
        path: ~/.cache/pip
        key: ${{ runner.os }}-pip-${{ matrix.python-version }}
        restore-keys: ${{ runner.os }}-pip-${{ matrix.python-version }}
    - name: Cache built C files
      uses: actions/cache@v2
      with:
        path: build
        key: ${{ runner.os }}-build-${{ matrix.python-version }}
        restore-keys: ${{ runner.os }}-build-${{ matrix.python-version }}
    - name: Setup Python ${{ matrix.python-version }}
      uses: actions/setup-python@v2
      with:
        python-version: ${{ matrix.python-version }}
    - name: Update pip
      run: python -m pip install -U pip wheel setuptools
    - name: Install Python requirements
      run: python -m pip install -r .github/workflows/requirements.txt
    - name: "Install Boost::math"
      run: sudo apt-get install -y libboost-math-dev
    - name: Build C extension
      run: python setup.py build_ext --inplace --debug
    - name: Install numpy
      run: python -m pip install numpy
      if: ${{ !startsWith(matrix.python-version, 'pypy') }}
    - name: Install tests requirements
      run: python -m pip install -r pyfastani/tests/requirements.txt
    - name: Test with coverage
      run: python -m coverage run -m unittest discover -vv
    - name: Upload to Codecov
      uses: codecov/codecov-action@v1
      with:
        flags: ${{ matrix.python-impl }},${{ matrix.python-release }},${{ env.OS }}
        name: test-python-${{ matrix.python-version }}
        fail_ci_if_error: true
        token: ${{ secrets.CODECOV_TOKEN }}

  test_osx:
    name: Test (OSX)
    runs-on: macos-latest
    env:
      OS: OSX
    strategy:
      matrix:
        include:
        - python-version: 3.5
          python-release: v3.5
          python-impl: CPython
        - python-version: 3.6
          python-release: v3.6
          python-impl: CPython
        - python-version: 3.7
          python-release: v3.7
          python-impl: CPython
        - python-version: 3.8
          python-release: v3.8
          python-impl: CPython
        - python-version: 3.9
          python-release: v3.9
          python-impl: CPython
        - python-version: pypy-3.6
          python-release: v3.6
          python-impl: PyPy
        - python-version: pypy-3.7
          python-release: v3.7
          python-impl: PyPy
    steps:
    - name: Checkout code
      uses: actions/checkout@v2
      with:
        submodules: true
    - name: Cache Python requirements
      uses: actions/cache@v2
      with:
        path: ~/.cache/pip
        key: ${{ runner.os }}-pip-${{ matrix.python-version }}
        restore-keys: ${{ runner.os }}-pip-${{ matrix.python-version }}
    - name: Cache built C files
      uses: actions/cache@v2
      with:
        path: build
        key: ${{ runner.os }}-build-${{ matrix.python-version }}
        restore-keys: ${{ runner.os }}-build-${{ matrix.python-version }}
    - name: Setup Python ${{ matrix.python-version }}
      uses: actions/setup-python@v2
      with:
        python-version: ${{ matrix.python-version }}
    - name: Update pip
      run: python -m pip install -U pip wheel setuptools
    - name: Install Python requirements
      run: python -m pip install -r .github/workflows/requirements.txt
    - name: "Install Boost::math"
      run: brew install boost
    - name: Build C extension
      run: python setup.py build_ext --inplace --debug
    - name: Install numpy
      if: ${{ !startsWith(matrix.python-version, 'pypy') }}
      run: python -m pip install numpy
    - name: Install tests requirements
      run: python -m pip install -r pyfastani/tests/requirements.txt
    - name: Test with coverage
      run: python -m coverage run -m unittest discover -vv
    - uses: codecov/codecov-action@v1
      with:
        flags: ${{ matrix.python-impl }},${{ matrix.python-release }},${{ env.OS }}
        name: test-python-${{ matrix.python-version }}
        fail_ci_if_error: true
        token: ${{ secrets.CODECOV_TOKEN }}

  # test_windows:
  #   name: Test (Windows)
  #   runs-on: windows-latest
  #   env:
  #     OS: Windows
  #   strategy:
  #     matrix:
  #       include:
  #       - python-version: 3.5
  #         python-release: v3.5
  #         python-impl: CPython
  #       - python-version: 3.6
  #         python-release: v3.6
  #         python-impl: CPython
  #       - python-version: 3.7
  #         python-release: v3.7
  #         python-impl: CPython
  #       - python-version: 3.8
  #         python-release: v3.8
  #         python-impl: CPython
  #       - python-version: 3.9
  #         python-release: v3.9
  #         python-impl: CPython
  #       - python-version: pypy-3.6
  #         python-release: v3.6
  #         python-impl: PyPy
  #       - python-version: pypy-3.7
  #         python-release: v3.7
  #         python-impl: PyPy
  #   steps:
  #   - name: Checkout code
  #     uses: actions/checkout@v2
  #     with:
  #       submodules: true
  #   - name: Cache built C files
  #     uses: actions/cache@v2
  #     with:
  #       path: build
  #       key: ${{ runner.os }}-build-${{ matrix.python-version }}
  #       restore-keys: ${{ runner.os }}-build-${{ matrix.python-version }}
  #   - name: Setup Python ${{ matrix.python-version }}
  #     uses: actions/setup-python@v2
  #     with:
  #       python-version: ${{ matrix.python-version }}
  #       architecture: x64
  #   - name: Update pip
  #     run: python -m pip install -U pip wheel setuptools
  #   - name: Install Python requirements
  #     run: python -m pip install -r .github/workflows/requirements.txt
  #   - name: Build C extension
  #     run: python setup.py build_ext --inplace
  #   - name: Install tests requirements
  #     run: python -m pip install -r pyfastani/tests/requirements.txt
  #   - name: Test with coverage
  #     run: python -m coverage run -m unittest discover -vv
  #   - name: Upload to Codecov
  #     uses: codecov/codecov-action@v1
  #     with:
  #       flags: ${{ matrix.python-impl }},${{ matrix.python-release }},${{ env.OS }}
  #       name: test-python-${{ matrix.python-version }}
  #       fail_ci_if_error: true
  #       token: ${{ secrets.CODECOV_TOKEN }}
