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

