#-------------------------------------------------------------
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#
#-------------------------------------------------------------

name: Function Test

on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master

jobs:
  applicationsTests:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        tests: [
          aggregate,
          append,
          binary.frame,
          binary.matrix,
          binary.matrix_full_cellwise,
          binary.matrix_full_other,
          binary.scalar,
          binary.tensor,
          blocks,
          builtin,
          caching,
          codegen,
          codegenalg.partone,
          codegenalg.parttwo,
          countDistinct,
          data.misc,
          data.rand,
          data.tensor,
          dnn,
          federated.algorithms,
          federated.primitives,
          frame,
          indexing,
          io,
          jmlc,
          lineage,
          misc,
          mlcontext,
          nary,
          paramserv,
          parfor,
          quaternary,
          recompile,
          reorg,
          rewrite,
          ternary,
          transform,
          unary.matrix,
          unary.scalar,
          updateinplace,
          vect
          ]
        os: [ubuntu-latest]
    name:  Func Test ${{ matrix.tests }} 
    steps:
    - name: Checkout Repository
      uses: actions/checkout@v2

    - name: Cache Maven Dependencies
      uses: actions/cache@v1
      with:
        path: ~/.m2/repository
        key: ${{ runner.os }}-maven-test-${{ hashFiles('**/pom.xml') }}
        restore-keys: |
          ${{ runner.os }}-maven-test-

    - name: Run all tests starting with "${{ matrix.tests }}"
      uses: ./.github/action/
      id: test
      with:
        test-to-run: org.apache.sysds.test.functions.${{ matrix.tests }}.**

