#-------------------------------------------------------------
#
# 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: Run all tests starting with "${{ matrix.tests }}"
      uses: ./.github/action/
      id: test
      with:
        test-to-run: org.apache.sysds.test.functions.${{ matrix.tests }}.**

