# 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.
#
#------------------------------------------------------------------------------
# R source file to run all commons-math R verification tests
#
# To run the test, install R, put this file and all other o.a.c.math R
# verification tests and the testfunctions utilities file into the same
# directory, launch R from this directory and then enter
# source("<name-of-this-file>")
#
# The KolmogorovSmirnov and Pareto distribution tests require the following
# packages to be installed:
#
# https://cran.r-project.org/web/packages/Matching/index.html
# https://cran.r-project.org/web/packages/VGAM/index.html
#
# To redirect output to a file, uncomment the following line, substituting
# another file path if you like (default behavior is to write the file to the
# current directory).
#
# sink("testResults")
#------------------------------------------------------------------------------
# distribution
source("binomialTestCases")
source("normalTestCases")
source("poissonTestCases")
source("paretoTestCases")
source("logNormalTestCases")
source("hypergeometricTestCases")
source("exponentialTestCases")
source("cauchyTestCases.R")
source("pascalTestCases")
source("TDistributionTestCases.R")
source("FDistributionTestCases.R")
source("GammaDistributionTestCases.R")
source("WeibullDistributionTestCases.R")
source("ChiSquareDistributionTestCases.R")
source("LevyDistributionTestCases.R")
source("gumbelTestCases.R")
source("laplaceTestCases.R")
source("logisticsTestCases.R")
source("nakagamiTestCases.R")
source("zipfTestCases")

# regression
source("regressionTestCases")

# inference
source("chiSquareTestCases")
source("anovaTestCases")
source("KolmogorovSmirnovTestCases.R")
source("TTestCases")

# descriptive
source("descriptiveTestCases")

# multiple regression
source("multipleOLSRegressionTestCases")

# covariance
source("covarianceTestCases")

# correlation
source("correlationTestCases")

#------------------------------------------------------------------------------
# if output has been diverted, change it back
if (sink.number()) {
    sink()
}
