#                                               -*- cmake -*-

set (ADAPT_CHECK_TESTS_EXPONENT)
set (REPLACE_EOL " | cat ")
if (WIN32)
  # replace dos eols
  set (REPLACE_EOL " | tr -d '\\\\015' ")
endif ()


set (PYINSTALLCHECK_ENVIRONMENT "OPENTURNS_CONFIG_PATH=${INSTALL_DESTDIR}${SYSCONFIG_PATH}/openturns"
                                 "PYTHONPATH=${INSTALL_DESTDIR}${PYTHON_MODULE_PATH}${PATH_SEP}$ENV{PYTHONPATH}"
   )

# This macro compiles on the fly and run the corresponding post-installation test
# It can have two optional arguments PRE and POST followed by some shell command to be run
# before or after the test if needed
# PRE and POST options cn be repeated many times: the arguments will be run one after the other
# in the order of appearence. If one fails, the whole command fails.
macro (ot_pyinstallcheck_test TESTNAME)
  set (TESTNAME_TGT t_${TESTNAME})
  set (TESTNAME_SRC ${TESTNAME_TGT}.py)
  set (TESTNAME_LOC ${CMAKE_CURRENT_SOURCE_DIR}/${TESTNAME_SRC})
  set (_CMD)
  set (_PRE)
  set (_POST)
  set (_PARAMS)
  set (_IGNOREOUT OFF)
  foreach (_ARG ${ARGN})
    string (TOUPPER ${_ARG} ARG)
    if (${ARG} MATCHES PRE)
      set (_CMD PRE)
    elseif (${ARG} MATCHES POST)
      set (_CMD POST)
    elseif (${ARG} MATCHES PARAMS)
      set (_CMD PARAMS)
    elseif (${ARG} MATCHES IGNOREOUT)
      set (_IGNOREOUT ON)
    else (${ARG} MATCHES PRE)
      if (${_CMD} MATCHES PRE)
        set (_PRE "${_PRE} ${_ARG} && ")
      elseif (${_CMD} MATCHES POST)
        set (_POST "${_POST} && ${_ARG}")
      elseif (${_CMD} MATCHES PARAMS)
        set (_PARAMS "${_PARAMS} ${_ARG}")
      endif  (${_CMD} MATCHES PRE)
      set (_CMD)
    endif (${ARG} MATCHES PRE)
  endforeach (_ARG)

  if (_IGNOREOUT)
    set (COMMAND "(${PYTHON_EXECUTABLE} ${TESTNAME_LOC} ${_PARAMS} > /dev/null)")
  else (_IGNOREOUT)
    set (TESTNAME_OUT ${TESTNAME_TGT}.expout)
    get_source_file_property (OUTFILE_LOC ${TESTNAME_OUT} LOCATION)
    set (OUTFILE_LOC ${CMAKE_CURRENT_SOURCE_DIR}/${TESTNAME_OUT})
    set (COMMAND "(${PYTHON_EXECUTABLE} ${TESTNAME_LOC} ${_PARAMS} ${REPLACE_EOL} > ${CMAKE_CURRENT_BINARY_DIR}/${TESTNAME_TGT}.out) && diff -u ${OUTFILE_LOC} ${CMAKE_CURRENT_BINARY_DIR}/${TESTNAME_TGT}.out")
  endif (_IGNOREOUT)

  if (_PRE OR _POST)
    set (COMMAND "${_PRE}${COMMAND}${_POST}")
  endif (_PRE OR _POST)

  add_test (pyinstallcheck_${TESTNAME} "sh" "-c" "${COMMAND}")

  set_tests_properties (pyinstallcheck_${TESTNAME} PROPERTIES ENVIRONMENT "${PYINSTALLCHECK_ENVIRONMENT}")
  install (FILES ${TESTNAME_SRC}
            DESTINATION ${EXAMPLE_PATH}
            PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE
         )
endmacro (ot_pyinstallcheck_test)


## Python post-installation tests

# Common
if (LIBXML2_FOUND)
  ot_pyinstallcheck_test (Object_pickle)
endif ()
ot_pyinstallcheck_test (ComparisonOperator_std)
if (LIBXML2_FOUND)
ot_pyinstallcheck_test (Study_saveload)
endif ()
ot_pyinstallcheck_test (Path_std IGNOREOUT)
ot_pyinstallcheck_test (ResourceMap_std IGNOREOUT)
ot_pyinstallcheck_test (Catalog_std IGNOREOUT)

# Type
ot_pyinstallcheck_test (Collection_std)
ot_pyinstallcheck_test (Description_std)
ot_pyinstallcheck_test (Indices_std)
ot_pyinstallcheck_test (Point_std)
ot_pyinstallcheck_test (Point_description)
ot_pyinstallcheck_test (Matrix_std)
ot_pyinstallcheck_test (SymmetricMatrix_lapack)
ot_pyinstallcheck_test (SquareMatrix_lapack)
ot_pyinstallcheck_test (SquareMatrix_std)
ot_pyinstallcheck_test (TriangularMatrix_std)
ot_pyinstallcheck_test (SymmetricMatrix_std)
ot_pyinstallcheck_test (Tensor_std)
ot_pyinstallcheck_test (ComplexTensor_std)
ot_pyinstallcheck_test (SymmetricTensor_std)
ot_pyinstallcheck_test (Matrix_solve)
ot_pyinstallcheck_test (Matrix_decomposition)
ot_pyinstallcheck_test (IdentityMatrix_std)
ot_pyinstallcheck_test (RegularGrid_std)
ot_pyinstallcheck_test (ComplexMatrix_std)
ot_pyinstallcheck_test (SquareComplexMatrix_std)
ot_pyinstallcheck_test (HermitianMatrix_std)
ot_pyinstallcheck_test (TriangularComplexMatrix_std)
ot_pyinstallcheck_test (Matrix_slice)
ot_pyinstallcheck_test (Matrix_operators)
if (NUMPY_FOUND)
  ot_pyinstallcheck_test (Matrix_numpy)
endif ()

# Func
ot_pyinstallcheck_test (SpecFunc_std)
ot_pyinstallcheck_test (Function_std)
ot_pyinstallcheck_test (ComposedFunction_std)
ot_pyinstallcheck_test (Function_python)
if (LIBXML2_FOUND)
ot_pyinstallcheck_test (Function_python_saveload)
endif ()
ot_pyinstallcheck_test (DatabaseFunction_std)
ot_pyinstallcheck_test (Function_operations)
ot_pyinstallcheck_test (ParametricFunction_std)

if (R_base_FOUND)
ot_pyinstallcheck_test (Function_draw)
endif ()
ot_pyinstallcheck_test (Function_history)
ot_pyinstallcheck_test (AggregatedEvaluation_std)
ot_pyinstallcheck_test (SymbolicEvaluation_std)
ot_pyinstallcheck_test (SymbolicGradient_std)
ot_pyinstallcheck_test (SymbolicHessian_std)
ot_pyinstallcheck_test (LinearFunction_std)
ot_pyinstallcheck_test (LinearEvaluation_std)
ot_pyinstallcheck_test (LinearCombinationEvaluation_std)
ot_pyinstallcheck_test (LinearCombinationGradient_std)
ot_pyinstallcheck_test (LinearCombinationHessian_std)
ot_pyinstallcheck_test (PiecewiseLinearEvaluation_std)
ot_pyinstallcheck_test (PiecewiseHermiteEvaluation_std)
ot_pyinstallcheck_test (QuadraticFunction_std)
ot_pyinstallcheck_test (QuadraticEvaluation_std)
ot_pyinstallcheck_test (LinearGradient_std)
ot_pyinstallcheck_test (AggregatedFunction_std)
ot_pyinstallcheck_test (SymbolicFunction_std)
ot_pyinstallcheck_test (DualLinearCombinationFunction_std)
ot_pyinstallcheck_test (IndicatorFunction_std)
ot_pyinstallcheck_test (LinearCombinationFunction_std)
ot_pyinstallcheck_test (ConstantGradient_std)
ot_pyinstallcheck_test (ConstantHessian_std)
ot_pyinstallcheck_test (Basis_std)
ot_pyinstallcheck_test (BasisSequence_std)
ot_pyinstallcheck_test (LARS_std)
ot_pyinstallcheck_test (FieldFunction_std)
ot_pyinstallcheck_test (FieldFunction_python)
ot_pyinstallcheck_test (ValueFunction_std)
ot_pyinstallcheck_test (VertexValueFunction_std)
ot_pyinstallcheck_test (VertexFunction_std)
ot_pyinstallcheck_test (FieldToPointFunction_std)
ot_pyinstallcheck_test (FieldToPointFunction_python)
ot_pyinstallcheck_test (PointToFieldFunction_std)
ot_pyinstallcheck_test (PointToFieldFunction_python)
ot_pyinstallcheck_test (BoxCoxEvaluation_std)
ot_pyinstallcheck_test (BoxCoxTransform_std)
ot_pyinstallcheck_test (InverseBoxCoxEvaluation_std)
ot_pyinstallcheck_test (InverseBoxCoxTransform_std)
ot_pyinstallcheck_test (TrendEvaluation_std)
ot_pyinstallcheck_test (TrendTransform_std)
ot_pyinstallcheck_test (InverseTrendEvaluation_std)
ot_pyinstallcheck_test (InverseTrendTransform_std)
ot_pyinstallcheck_test (ExpertMixture_std)
ot_pyinstallcheck_test (UniVariatePolynomial_std)
ot_pyinstallcheck_test (BasisFactory_std)
ot_pyinstallcheck_test (Field_std)
ot_pyinstallcheck_test (MonomialFunction_std)
ot_pyinstallcheck_test (MonomialFunctionFactory_std)
ot_pyinstallcheck_test (TensorizedUniVariateFunctionFactory_std)
ot_pyinstallcheck_test (PointToPointEvaluation_std)
ot_pyinstallcheck_test (PointToPointConnection_std)
ot_pyinstallcheck_test (PointToFieldConnection_std)
ot_pyinstallcheck_test (FieldToPointConnection_std)
ot_pyinstallcheck_test (FieldToFieldConnection_std)

# Stat
ot_pyinstallcheck_test (Sample_std)
ot_pyinstallcheck_test (Sample_computation)
ot_pyinstallcheck_test (Sample_slice)
ot_pyinstallcheck_test (Sample_split)
ot_pyinstallcheck_test (Sample_large)
ot_pyinstallcheck_test (Sample_bug14)
ot_pyinstallcheck_test (Sample_csv)
ot_pyinstallcheck_test (Sample_operators)
ot_pyinstallcheck_test (HistoryStrategy_std)
ot_pyinstallcheck_test (CovarianceMatrixLapack_std)
ot_pyinstallcheck_test (CorrelationMatrix_std)
if (R_rot_FOUND)
ot_pyinstallcheck_test (LinearModel_std)
ot_pyinstallcheck_test (LinearModelFactory_std)
endif ()
ot_pyinstallcheck_test (Field_draw)
ot_pyinstallcheck_test (ProcessSample_std)
ot_pyinstallcheck_test (RandomGenerator_std)
ot_pyinstallcheck_test (SobolSequence_std)
ot_pyinstallcheck_test (FaureSequence_std)
ot_pyinstallcheck_test (HaltonSequence_std)
ot_pyinstallcheck_test (HaselgroveSequence_std)
ot_pyinstallcheck_test (ReverseHaltonSequence_std)
ot_pyinstallcheck_test (TestResult_std)
ot_pyinstallcheck_test (CorrelationAnalysis_std)
ot_pyinstallcheck_test (TimeSeries_std)
ot_pyinstallcheck_test (ExponentialCauchy_std)
ot_pyinstallcheck_test (FilteringWindows_std)
ot_pyinstallcheck_test (WelchFactory_std)
ot_pyinstallcheck_test (ExponentialModel_std)
ot_pyinstallcheck_test (CovarianceModel_std)
ot_pyinstallcheck_test (ExponentiallyDampedCosineModel_std)
ot_pyinstallcheck_test (CauchyModel_std)
ot_pyinstallcheck_test (SecondOrderModel_std)
ot_pyinstallcheck_test (UserDefinedSpectralModel_std)
ot_pyinstallcheck_test (UserDefinedCovarianceModel_std)
ot_pyinstallcheck_test (UserDefinedStationaryCovarianceModel_std)
ot_pyinstallcheck_test (StationaryCovarianceModelFactory_std)
ot_pyinstallcheck_test (NonStationaryCovarianceModelFactory_std)
if (HMAT_FOUND)
ot_pyinstallcheck_test (HMatrix_std)
endif ()

# Geom
ot_pyinstallcheck_test (Domain_std)
ot_pyinstallcheck_test (Interval_std)
ot_pyinstallcheck_test (IntervalMesher_std)
ot_pyinstallcheck_test (LevelSet_std)
ot_pyinstallcheck_test (LevelSetMesher_std)
ot_pyinstallcheck_test (Mesh_std)

## Graph
if (R_base_FOUND)
ot_pyinstallcheck_test (BarPlot_std)
ot_pyinstallcheck_test (Cloud_std)
ot_pyinstallcheck_test (Contour_std)
ot_pyinstallcheck_test (Curve_std)
ot_pyinstallcheck_test (Drawable_std)
ot_pyinstallcheck_test (Graph_export)
ot_pyinstallcheck_test (Graph_mix)
ot_pyinstallcheck_test (Pairs_std)
ot_pyinstallcheck_test (Pie_std)
ot_pyinstallcheck_test (Polygon_std)
ot_pyinstallcheck_test (PolygonArray_std)
ot_pyinstallcheck_test (Staircase_std)
ot_pyinstallcheck_test (Text_std)
endif ()

## Diff
ot_pyinstallcheck_test (FiniteDifferenceStep_std)
ot_pyinstallcheck_test (CenteredFiniteDifferenceGradient_std)
ot_pyinstallcheck_test (CenteredFiniteDifferenceHessian_std)
ot_pyinstallcheck_test (NonCenteredFiniteDifferenceGradient_std)

## Optim
ot_pyinstallcheck_test (AbdoRackwitz_std)
ot_pyinstallcheck_test (Cobyla_std)
ot_pyinstallcheck_test (SQP_std)
ot_pyinstallcheck_test (TNC_std)
ot_pyinstallcheck_test (NearestPointChecker_std)
if (NLOPT_FOUND)
  ot_pyinstallcheck_test (NLopt_std)
  ot_pyinstallcheck_test (EfficientGlobalOptimization_std)
endif ()
ot_pyinstallcheck_test (MultiStart_std)

## Solver
ot_pyinstallcheck_test (Brent_std)
ot_pyinstallcheck_test (Bisection_std)
ot_pyinstallcheck_test (Secant_std)
ot_pyinstallcheck_test (RungeKutta_std)

# Algo
ot_pyinstallcheck_test (PenalizedLeastSquaresAlgorithm_std)
ot_pyinstallcheck_test (KFold_std)
ot_pyinstallcheck_test (CorrectedLeaveOneOut_std)
ot_pyinstallcheck_test (KDTree_std)
ot_pyinstallcheck_test (LeastSquaresMetaModelSelectionFactory_std)
ot_pyinstallcheck_test (KissFFT_std)
ot_pyinstallcheck_test (GaussKronrod_std)
ot_pyinstallcheck_test (GaussLegendre_std)
ot_pyinstallcheck_test (IteratedQuadrature_std)
ot_pyinstallcheck_test (DesignProxy_std)
ot_pyinstallcheck_test (LeastSquaresMethod_std)
ot_pyinstallcheck_test (KarhunenLoeveP1Algorithm_std)
ot_pyinstallcheck_test (KarhunenLoeveSVDAlgorithm_std)
ot_pyinstallcheck_test (KarhunenLoeveLifting_std)
ot_pyinstallcheck_test (KarhunenLoeveProjection_std)

## Model
ot_pyinstallcheck_test (Event_std)
ot_pyinstallcheck_test (StandardEvent_std)
ot_pyinstallcheck_test (Event_domain)
ot_pyinstallcheck_test (RandomVector_constant)
ot_pyinstallcheck_test (RandomVector_distribution)
ot_pyinstallcheck_test (RandomVector_composite)
ot_pyinstallcheck_test (RandomVector_conditional)
ot_pyinstallcheck_test (RandomVector_python)

## Process
ot_pyinstallcheck_test (WhiteNoise_std)
ot_pyinstallcheck_test (RandomWalk_std)
ot_pyinstallcheck_test (ARMAState_std)
ot_pyinstallcheck_test (ARMACoefficients_std)
ot_pyinstallcheck_test (ARMA_std)
ot_pyinstallcheck_test (GaussianProcess_std)
ot_pyinstallcheck_test (SpectralGaussianProcess_std)
ot_pyinstallcheck_test (CompositeProcess_std)
ot_pyinstallcheck_test (ARMALikelihoodFactory_std)
ot_pyinstallcheck_test (FunctionalBasisProcess_std)
ot_pyinstallcheck_test (WhittleFactory_std)
ot_pyinstallcheck_test (ConditionedGaussianProcess_std)
ot_pyinstallcheck_test (KarhunenLoeveQuadratureAlgorithm_std)

## Transformation
ot_pyinstallcheck_test (MarginalTransformationEvaluation_std)
ot_pyinstallcheck_test (MarginalTransformationGradient_std)
ot_pyinstallcheck_test (MarginalTransformationHessian_std)
ot_pyinstallcheck_test (InverseNatafIndependentCopulaEvaluation_std)
ot_pyinstallcheck_test (InverseNatafIndependentCopulaGradient_std)
ot_pyinstallcheck_test (InverseNatafIndependentCopulaHessian_std)
ot_pyinstallcheck_test (NatafIndependentCopulaEvaluation_std)
ot_pyinstallcheck_test (NatafIndependentCopulaGradient_std)
ot_pyinstallcheck_test (NatafIndependentCopulaHessian_std)
ot_pyinstallcheck_test (IsoProbabilisticTransformation_EllipticalDistribution)
ot_pyinstallcheck_test (IsoProbabilisticTransformation_EllipticalCopula)
ot_pyinstallcheck_test (IsoProbabilisticTransformation_IndependentCopula)
ot_pyinstallcheck_test (BoxCoxFactory_std)
ot_pyinstallcheck_test (BoxCoxFactory_glm)
ot_pyinstallcheck_test (TrendFactory_std)
ot_pyinstallcheck_test (DistributionTransformation_std)

## Distribution
ot_pyinstallcheck_test (AliMikhailHaqCopula_std)
ot_pyinstallcheck_test (AliMikhailHaqCopulaFactory_std)
ot_pyinstallcheck_test (Arcsine_std)
ot_pyinstallcheck_test (ArcsineFactory_std)
ot_pyinstallcheck_test (BayesDistribution_std)
ot_pyinstallcheck_test (Bernoulli_std)
ot_pyinstallcheck_test (BernoulliFactory_std)
ot_pyinstallcheck_test (BernsteinCopulaFactory_std)
ot_pyinstallcheck_test (Beta_std)
ot_pyinstallcheck_test (BetaFactory_std)
ot_pyinstallcheck_test (Binomial_std)
ot_pyinstallcheck_test (BinomialFactory_std)
ot_pyinstallcheck_test (Burr_std)
ot_pyinstallcheck_test (BurrFactory_std)
ot_pyinstallcheck_test (Chi_std)
ot_pyinstallcheck_test (ChiFactory_std)
ot_pyinstallcheck_test (ChiSquare_std)
ot_pyinstallcheck_test (ChiSquareFactory_std)
ot_pyinstallcheck_test (ClaytonCopula_std)
ot_pyinstallcheck_test (ClaytonCopulaFactory_std)
ot_pyinstallcheck_test (ComposedCopula_std)
ot_pyinstallcheck_test (ComposedDistribution_std)
ot_pyinstallcheck_test (ComposedDistribution_large)
ot_pyinstallcheck_test (CompositeDistribution_std)
ot_pyinstallcheck_test (ConditionalDistribution_std)
ot_pyinstallcheck_test (CumulativeDistributionNetwork_std)
ot_pyinstallcheck_test (Dirac_std)
ot_pyinstallcheck_test (DiracFactory_std)
ot_pyinstallcheck_test (Dirichlet_std)
ot_pyinstallcheck_test (DirichletFactory_std)
ot_pyinstallcheck_test (Epanechnikov_std)
ot_pyinstallcheck_test (Exponential_std)
ot_pyinstallcheck_test (ExponentialFactory_std)
ot_pyinstallcheck_test (FarlieGumbelMorgensternCopula_std)
ot_pyinstallcheck_test (FarlieGumbelMorgensternCopulaFactory_std)
ot_pyinstallcheck_test (FrankCopula_std)
ot_pyinstallcheck_test (FrankCopulaFactory_std)
ot_pyinstallcheck_test (FisherSnedecor_std)
ot_pyinstallcheck_test (FisherSnedecorFactory_std)
ot_pyinstallcheck_test (Frechet_std)
ot_pyinstallcheck_test (Gamma_std)
ot_pyinstallcheck_test (GammaFactory_std)
ot_pyinstallcheck_test (GeneralizedPareto_std)
ot_pyinstallcheck_test (GeneralizedParetoFactory_std)
ot_pyinstallcheck_test (Geometric_std)
ot_pyinstallcheck_test (GeometricFactory_std)
ot_pyinstallcheck_test (Gumbel_std)
ot_pyinstallcheck_test (GumbelFactory_std)
ot_pyinstallcheck_test (GumbelCopula_std)
ot_pyinstallcheck_test (GumbelCopulaFactory_std)
ot_pyinstallcheck_test (Histogram_std)
ot_pyinstallcheck_test (HistogramFactory_std)
ot_pyinstallcheck_test (IndependentCopula_std)
ot_pyinstallcheck_test (InverseChiSquare_std)
ot_pyinstallcheck_test (InverseGamma_std)
ot_pyinstallcheck_test (InverseNormal_std)
ot_pyinstallcheck_test (InverseNormalFactory_std)
ot_pyinstallcheck_test (InverseWishart_std)
ot_pyinstallcheck_test (KPermutationsDistribution_std)
ot_pyinstallcheck_test (KernelMixture_std)
ot_pyinstallcheck_test (KernelSmoothing_std)
ot_pyinstallcheck_test (Laplace_std)
ot_pyinstallcheck_test (LaplaceFactory_std)
ot_pyinstallcheck_test (Logistic_std)
ot_pyinstallcheck_test (LogisticFactory_std)
ot_pyinstallcheck_test (LogNormal_std)
ot_pyinstallcheck_test (LogNormalFactory_std)
ot_pyinstallcheck_test (LogUniform_std)
ot_pyinstallcheck_test (LogUniformFactory_std)
ot_pyinstallcheck_test (OrderStatisticsMarginalChecker_std)
#ot_pyinstallcheck_test (MarginalDistribution_std)
ot_pyinstallcheck_test (MaximumEntropyOrderStatisticsDistribution_std)
ot_pyinstallcheck_test (MaximumEntropyOrderStatisticsCopula_std)
ot_pyinstallcheck_test (MaximumLikelihoodFactory_std)
ot_pyinstallcheck_test (MeixnerDistribution_std)
ot_pyinstallcheck_test (MeixnerDistributionFactory_std)
ot_pyinstallcheck_test (MethodOfMomentsFactory_std)
ot_pyinstallcheck_test (MinCopula_std)
ot_pyinstallcheck_test (Mixture_std)
ot_pyinstallcheck_test (Multinomial_std)
ot_pyinstallcheck_test (MultinomialFactory_std)
ot_pyinstallcheck_test (NegativeBinomial_std)
ot_pyinstallcheck_test (NegativeBinomialFactory_std)
ot_pyinstallcheck_test (NonCentralChiSquare_std)
ot_pyinstallcheck_test (NonCentralStudent_std)
ot_pyinstallcheck_test (Normal_std)
ot_pyinstallcheck_test (NormalFactory_std)
ot_pyinstallcheck_test (Normal_large)
ot_pyinstallcheck_test (NormalCopula_std)
ot_pyinstallcheck_test (NormalCopulaFactory_std)
ot_pyinstallcheck_test (Normal_wrongarg)
ot_pyinstallcheck_test (NormalGamma_std)
ot_pyinstallcheck_test (ParametrizedDistribution_std)
ot_pyinstallcheck_test (Poisson_std)
ot_pyinstallcheck_test (PoissonFactory_std)
ot_pyinstallcheck_test (PosteriorDistribution_std)
ot_pyinstallcheck_test (RandomMixture_std)
ot_pyinstallcheck_test (RandomMixture_simplification)
ot_pyinstallcheck_test (RandomMixture_grid1d)
ot_pyinstallcheck_test (RandomMixture_grid2d)
ot_pyinstallcheck_test (RandomMixture_grid3d)
ot_pyinstallcheck_test (Rayleigh_std)
ot_pyinstallcheck_test (RayleighFactory_std)
ot_pyinstallcheck_test (Rice_std)
ot_pyinstallcheck_test (RiceFactory_std)
ot_pyinstallcheck_test (Skellam_std)
ot_pyinstallcheck_test (SkellamFactory_std)
ot_pyinstallcheck_test (SklarCopula_std)
ot_pyinstallcheck_test (Student_std)
ot_pyinstallcheck_test (StudentFactory_std)
ot_pyinstallcheck_test (Trapezoidal_std)
ot_pyinstallcheck_test (TrapezoidalFactory_std)
ot_pyinstallcheck_test (Triangular_std)
ot_pyinstallcheck_test (TriangularFactory_std)
ot_pyinstallcheck_test (TruncatedDistribution_std)
ot_pyinstallcheck_test (TruncatedNormal_std)
ot_pyinstallcheck_test (TruncatedNormalFactory_std)
ot_pyinstallcheck_test (Uniform_std)
ot_pyinstallcheck_test (UniformFactory_std)
ot_pyinstallcheck_test (UserDefined_std)
ot_pyinstallcheck_test (UserDefinedFactory_std)
ot_pyinstallcheck_test (VonMises_std)
ot_pyinstallcheck_test (Weibull_std)
ot_pyinstallcheck_test (WeibullFactory_std)
ot_pyinstallcheck_test (Wishart_std)
ot_pyinstallcheck_test (ZipfMandelbrot_std)
ot_pyinstallcheck_test (DistributionParameters_std)
ot_pyinstallcheck_test (DistFunc_beta)
ot_pyinstallcheck_test (DistFunc_gamma)
ot_pyinstallcheck_test (DistFunc_kfactor)
ot_pyinstallcheck_test (DistFunc_kolmogorov)
ot_pyinstallcheck_test (DistFunc_noncentralchisquare)
ot_pyinstallcheck_test (DistFunc_noncentralstudent)
ot_pyinstallcheck_test (DistFunc_normal)
ot_pyinstallcheck_test (DistFunc_poisson)
ot_pyinstallcheck_test (DistFunc_student)
if (R_base_FOUND)
ot_pyinstallcheck_test (Distribution_draw)
endif ()
ot_pyinstallcheck_test (Distribution_python)
ot_pyinstallcheck_test (Distribution_arithmetic)
if (SCIPY_FOUND)
  ot_pyinstallcheck_test (Distribution_scipy)
endif ()

## Bayesian
ot_pyinstallcheck_test (CalibrationStrategy_std)
ot_pyinstallcheck_test (RandomWalkMetropolisHastings_std)
ot_pyinstallcheck_test (RandomWalkMetropolisHastings_regression IGNOREOUT)

## Classification
ot_pyinstallcheck_test (MixtureClassifier_std)

## Experiments
ot_pyinstallcheck_test (Axial_std)
ot_pyinstallcheck_test (Box_std)
ot_pyinstallcheck_test (Composite_std)
ot_pyinstallcheck_test (Factorial_std)
ot_pyinstallcheck_test (BootstrapExperiment_std)
ot_pyinstallcheck_test (FixedExperiment_std)
ot_pyinstallcheck_test (GaussProductExperiment_std)
ot_pyinstallcheck_test (ImportanceSamplingExperiment_std)
ot_pyinstallcheck_test (SpaceFilling_std)
ot_pyinstallcheck_test (OptimalLHSExperiment_ishigami IGNOREOUT)
ot_pyinstallcheck_test (OptimalLHSExperiment_std)
ot_pyinstallcheck_test (MonteCarloLHS_std)
ot_pyinstallcheck_test (SimulatedAnnealingLHS_std)
ot_pyinstallcheck_test (LHSExperiment_std)
ot_pyinstallcheck_test (LowDiscrepancyExperiment_std)
ot_pyinstallcheck_test (MonteCarloExperiment_std)
ot_pyinstallcheck_test (MinMax_computation)
ot_pyinstallcheck_test (CombinatorialGenerator_std)
ot_pyinstallcheck_test (Experiment_python)

## OrthogonalBasis
ot_pyinstallcheck_test (LinearEnumerateFunction_std)
ot_pyinstallcheck_test (HyperbolicAnisotropicEnumerateFunction_std)
ot_pyinstallcheck_test (CharlierFactory_std)
ot_pyinstallcheck_test (ChebychevFactory_std)
ot_pyinstallcheck_test (HermiteFactory_std)
ot_pyinstallcheck_test (HistogramPolynomialFactory_std)
ot_pyinstallcheck_test (JacobiFactory_std)
ot_pyinstallcheck_test (KrawtchoukFactory_std)
ot_pyinstallcheck_test (LaguerreFactory_std)
ot_pyinstallcheck_test (LegendreFactory_std)
ot_pyinstallcheck_test (MeixnerFactory_std)
ot_pyinstallcheck_test (SoizeGhanemFactory_std)
ot_pyinstallcheck_test (OrthonormalizationAlgorithm_std)
ot_pyinstallcheck_test (AdaptiveStieltjesAlgorithm_std)
ot_pyinstallcheck_test (StandardDistributionPolynomialFactory_std)
ot_pyinstallcheck_test (OrthogonalBasis_std)
ot_pyinstallcheck_test (OrthogonalUniVariatePolynomialFunctionFactory_std)
ot_pyinstallcheck_test (FourierSeriesFactory_std)
ot_pyinstallcheck_test (HaarWaveletFactory_std)

## Algorithm
ot_pyinstallcheck_test (TaylorExpansionMoments_std)

## Analytical
ot_pyinstallcheck_test (Analytical_std)
ot_pyinstallcheck_test (AnalyticalResult_std)
ot_pyinstallcheck_test (FORM_std)
if (R_base_FOUND)
ot_pyinstallcheck_test (FORM_draw)
endif ()
ot_pyinstallcheck_test (FORM_sensitivity)
ot_pyinstallcheck_test (FORM_interval)
ot_pyinstallcheck_test (SORM_std)
ot_pyinstallcheck_test (StrongMaximumTest_std)
ot_pyinstallcheck_test (StrongMaximumTest_other)
ot_pyinstallcheck_test (StrongMaximumTest_tabulatedValues)

## MetaModel
ot_pyinstallcheck_test (LinearTaylor_std)
ot_pyinstallcheck_test (LinearLeastSquares_std)
ot_pyinstallcheck_test (QuadraticLeastSquares_std)
ot_pyinstallcheck_test (QuadraticTaylor_std)
ot_pyinstallcheck_test (FunctionalChaos_ishigami)
ot_pyinstallcheck_test (FunctionalChaos_ishigami_sparse)
if (NOT MINGW)# FIXME: bad_alloc when run from Makefile with the new archive, ok from ctest
ot_pyinstallcheck_test (FunctionalChaos_ishigami_database)
endif ()
ot_pyinstallcheck_test (FunctionalChaos_gsobol)
ot_pyinstallcheck_test (FunctionalChaos_gsobol_sparse)
ot_pyinstallcheck_test (FunctionalChaos_nd)
ot_pyinstallcheck_test (KrigingAlgorithm_std)
ot_pyinstallcheck_test (KrigingRandomVector_std)
ot_pyinstallcheck_test (MetaModelValidation_std)
ot_pyinstallcheck_test (GeneralLinearModelAlgorithm_std)
if (HMAT_FOUND)
  ot_pyinstallcheck_test (KrigingAlgorithm_std_hmat)
  ot_pyinstallcheck_test (GeneralLinearModelAlgorithm_std_hmat)
endif ()
if (NLOPT_FOUND)
  ot_pyinstallcheck_test (GeneralLinearModelAlgorithm_nlopt)
endif ()
ot_pyinstallcheck_test (CanonicalTensorEvaluation_std IGNOREOUT)
ot_pyinstallcheck_test (CanonicalTensorGradient_std IGNOREOUT)
ot_pyinstallcheck_test (TensorApproximationAlgorithm_std)

## Sensitivity
ot_pyinstallcheck_test (ANCOVA_std)
ot_pyinstallcheck_test (FAST_std)
ot_pyinstallcheck_test (SobolIndicesAlgorithm_std)
ot_pyinstallcheck_test (SobolIndicesExperiment_std)

## Simulation
ot_pyinstallcheck_test (Wilks_std)
ot_pyinstallcheck_test (SimulationSensitivityAnalysis_std)
ot_pyinstallcheck_test (ProbabilitySimulationAlgorithm_std)
if (R_base_FOUND)
ot_pyinstallcheck_test (ProbabilitySimulationAlgorithm_draw)
endif ()
ot_pyinstallcheck_test (ProbabilitySimulationAlgorithm_sensitivity)
ot_pyinstallcheck_test (LHS_std)
ot_pyinstallcheck_test (DirectionalSampling_std)
ot_pyinstallcheck_test (PostAnalyticalControlledImportanceSampling_std)
ot_pyinstallcheck_test (SubsetSampling_R-S)
ot_pyinstallcheck_test (SubsetSampling_Waarts_system_series)
ot_pyinstallcheck_test (AdaptiveDirectionalSampling_flood)
ot_pyinstallcheck_test (AdaptiveDirectionalSampling_hyperplane)
ot_pyinstallcheck_test (AdaptiveDirectionalSampling_std)

## StatTests
if (R_rot_FOUND)
ot_pyinstallcheck_test (VisualTest_std)
ot_pyinstallcheck_test (FittingTest_std)
ot_pyinstallcheck_test (HypothesisTest_std)
ot_pyinstallcheck_test (HypothesisTest_correlation)
ot_pyinstallcheck_test (NormalityTest_std)
ot_pyinstallcheck_test (LinearModelTest_std)
endif ()
ot_pyinstallcheck_test (DickeyFullerTest_std)

## Waarts
ot_pyinstallcheck_test (Waarts_25_quadratic_terms)
# ot_pyinstallcheck_test (Waarts_concave)
# ot_pyinstallcheck_test (Waarts_convex)
# ot_pyinstallcheck_test (Waarts_discontinuous_lsf)
# ot_pyinstallcheck_test (Waarts_noisy_lsf)
# ot_pyinstallcheck_test (Waarts_RS2)
ot_pyinstallcheck_test (Waarts_system_series)
ot_pyinstallcheck_test (Waarts_saddle)

## Misc
if (NBCONVERT_FOUND AND MATPLOTLIB_FOUND AND R_rot_FOUND)
  ot_pyinstallcheck_test (notebook IGNOREOUT)
endif ()
if (MATPLOTLIB_FOUND)
  ot_pyinstallcheck_test (Viewer IGNOREOUT)
endif ()
ot_pyinstallcheck_test (features IGNOREOUT)

# FIXME: check_get_line_col fails through wine on newer native version
if (NOT WIN32)
  ot_pyinstallcheck_test (coupling_tools)
endif ()


if (MUPARSER_FOUND AND MATPLOTLIB_FOUND AND SCIPY_FOUND AND R_rot_FOUND AND NLOPT_FOUND)
  # on py3k/swig<3.0.0, doctest fails with "NameError: Unknown C global variable"
  if (PYTHON_VERSION_MAJOR VERSION_EQUAL "2" OR SWIG_VERSION VERSION_GREATER "3")
    # source modules
    file (GLOB modules ${PROJECT_SOURCE_DIR}/python/src/*.py)
    # swig modules
    foreach (module ${OPENTURNS_PYTHON_MODULES})
      list (APPEND modules ${PROJECT_BINARY_DIR}/python/src/${module}.py)
    endforeach ()
    foreach (module ${modules})
      get_filename_component (module_name ${module} NAME_WE)
      add_test (pyinstallcheck_docstring_${module_name} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/t_docstring.py ${module})
      set_tests_properties (pyinstallcheck_docstring_${module_name} PROPERTIES ENVIRONMENT "${PYINSTALLCHECK_ENVIRONMENT}")
    endforeach()
  endif ()
endif ()

add_custom_target (pyinstallcheck COMMAND ${CMAKE_CTEST_COMMAND} -R "^pyinstallcheck_"
                    COMMENT "Run Python post-installation tests")
add_dependencies (installcheck pyinstallcheck)
