#-------------------------------------------------------------
#
# 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,
          federated.transform,
          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 }}.**

