//+------------------------------------------------------------------+
//|                                                  TestClasses.mq5 |
//|            Copyright 2003-2022 Sergey Bochkanov (ALGLIB project) |
//|                             Copyright 2012-2026, MetaQuotes Ltd. |
//|                                                     www.mql5.com |
//+------------------------------------------------------------------+
//| Implementation of ALGLIB library in MetaQuotes Language 5        |
//|                                                                  |
//| The features of the library include:                             |
//| - Linear algebra (direct algorithms, EVD, SVD)                   |
//| - Solving systems of linear and non-linear equations             |
//| - Interpolation                                                  |
//| - Optimization                                                   |
//| - FFT (Fast Fourier Transform)                                   |
//| - Numerical integration                                          |
//| - Linear and nonlinear least-squares fitting                     |
//| - Ordinary differential equations                                |
//| - Computation of special functions                               |
//| - Descriptive statistics and hypothesis testing                  |
//| - Data analysis - classification, regression                     |
//| - Implementing linear algebra algorithms, interpolation, etc.    |
//|   in high-precision arithmetic (using MPFR)                      |
//|                                                                  |
//| This file is free software; you can redistribute it and/or       |
//| modify it under the terms of the GNU General Public License as   |
//| published by the Free Software Foundation (www.fsf.org); either  |
//| version 2 of the License, or (at your option) any later version. |
//|                                                                  |
//| This program is distributed in the hope that it will be useful,  |
//| but WITHOUT ANY WARRANTY; without even the implied warranty of   |
//| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the     |
//| GNU General Public License for more details.                     |
//+------------------------------------------------------------------+
#define PrintElapsed(function,check,elapsed) PrintFormat("%-40s: %10s in %14s",function,(check ? "PASSED  " : "- FAILED -"),elapsed);

#include "TestClasses.mqh"

#ifndef _DEBUG
#property script_show_inputs
#endif

input bool InpSilent=true;   // Do not show extended log
input uint InpSeed=UINT_MAX; // Random seed
//+------------------------------------------------------------------+
//| Testing script                                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
   bool  check;
   ulong start_mcs;
   ulong stop_mcs;
//--- initialization
   bool silent=InpSilent;
   uint seed=GetTickCount();
   if(InpSeed!=UINT_MAX)
      seed=InpSeed;
//--- seed
   PrintFormat("RandomSeed = %u",seed);
//--- start time
   datetime start_time=TimeLocal();

//--- check class CHighQualityRand                                            // 1
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestHQRndUnit::TestHQRnd(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CHighQualityRand",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CTSort                                                      // 2
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestTSortUnit::TestTSort(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CTSort",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CNearestNeighbor                                            // 3
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestNearestNeighborUnit::TestNearestNeighbor(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CNearestNeighbor",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CAblas                                                      // 4
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestAblasUnit::TestAblas(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CAblas",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CBaseStat                                                   // 5
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestBaseStatUnit::TestBaseStat(seed);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CBaseStat",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CBdSS                                                       // 6
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestBdSSUnit::TestBdSS(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CBdSS",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CDForest                                                    // 7
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestDForestUnit::TestDForest(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CDForest",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CBlas                                                       // 8
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestBlasUnit::TestBlas(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CBlas",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CKMeans                                                     // 9
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestKMeansUnit::TestKMeans(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CKMeans",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CHblas                                                      // 10
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestHblasUnit::TestHblas(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CHblas",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CReflections                                                // 11
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestReflectionsUnit::TestReflections(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CReflections",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CComplexReflections                                         // 12
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestCReflectionsUnit::TestCReflections(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CComplexReflections",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CSblas                                                      // 13
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestSblasUnit::TestSblas(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CSblas",check,GetElapsed(stop_mcs-start_mcs));

//--- check class COrtFac                                                     // 14
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestOrtFacUnit::TestOrtFac(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("COrtFac",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CEigenVDetect                                               // 15
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestEVDUnit::TestEVD(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CEigenVDetect",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CMatGen                                                     // 16
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestMatGenUnit::TestMatGen(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CMatGen",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CTrFac                                                      // 17
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestTrFacUnit::TestTrFac(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CTrFac",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CTrLinSolve                                                 // 18
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestTrLinSolveUnit::TestTrLinSolve(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CTrLinSolve",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CSafeSolve                                                  // 19
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestSafeSolveUnit::TestSafeSolve(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CSafeSolve",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CRCond                                                      // 20
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestRCondUnit::TestRCond(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CRCond",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CMatInv                                                     // 21
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestMatInvUnit::TestMatInv(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CMatInv",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CLDA                                                        // 22
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestLDAUnit::TestLDA(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CLDA",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CGammaFunc                                                  // 23
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestGammaFuncUnit::TestGammaFunc(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CGammaFunc",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CBdSingValueDecompose                                       // 24
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestBdSVDUnit::TestBdSVD(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CBdSingValueDecompose",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CSingValueDecompose                                         // 25
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestSVDUnit::TestSVD(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CSingValueDecompose",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CLinReg                                                     // 26
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestLinRegUnit::TestLinReg(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CLinReg",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CXblas                                                      // 27
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestXBlasUnit::TestXBlas(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CXblas",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CDenseSolver                                                // 28
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestDenseSolverUnit::TestDenseSolver(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CDenseSolver",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CMinCG                                                      // 30
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestMinCGUnit::TestMinCG(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CMinCG",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CMinBLEIC                                                   // 31
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestMinBLEICUnit::TestMinBLEIC(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CMinBLEIC",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CMarkovCPD                                                  // 32
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestMCPDUnit::TestMCPD(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CMarkovCPD",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CFbls                                                       // 33
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestFblsUnit::TestFbls(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CFbls",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CMinLBFGS                                                   // 34
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestMinLBFGSUnit::TestMinLBFGS(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CMinLBFGS",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CMLPTrain                                                   // 35
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestMLPTrainUnit::TestMLPTrain(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CMLPTrain",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CMLPE                                                       // 36
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestMLPEUnit::TestMLPE(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CMLPE",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CPCAnalysis                                                 // 37
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestPCAUnit::TestPCA(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CPCAnalysis",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CODESolver                                                  // 38
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestODESolverUnit::TestODESolver(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CODESolver",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CFastFourierTransform                                       // 39
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestFFTUnit::TestFFT(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CFastFourierTransform",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CConv                                                       // 40
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestConvUnit::TestConv(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CConv",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CCorr                                                       // 41
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestCorrUnit::TestCorr(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CCorr",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CFastHartleyTransform                                       // 42
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestFHTUnit::TestFHT(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CFastHartleyTransform",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CGaussQ                                                     // 43
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestGQUnit::TestGQ(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CGaussQ",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CGaussKronrodQ                                              // 44
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestGKQUnit::TestGKQ(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CGaussKronrodQ",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CAutoGK                                                     // 45
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestAutoGKUnit::TestAutoGK(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CAutoGK",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CIDWInt                                                     // 46
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestIDWIntUnit::TestIDWInt(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CIDWInt",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CRatInt                                                     // 47
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestRatIntUnit::TestRatInt(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CRatInt",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CPolInt                                                     // 48
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestPolIntUnit::TestPolInt(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CPolInt",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CSpline1D                                                   // 49
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestSpline1DUnit::TestSpline1D(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CSpline1D",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CMinLM                                                      // 50
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestMinLMUnit::TestMinLM(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CMinLM",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CLSFit                                                      // 51
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestLSFitUnit::TestLSFit(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CLSFit",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CPSpline                                                    // 52
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestPSplineUnit::TestPSpline(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CPSpline",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CSpline2D                                                   // 53
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestSpline2DUnit::TestSpline2D(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CSpline2D",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CSpdGEVD                                                    // 54
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestSpdGEVDUnit::TestSpdGEVD(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CSpdGEVD",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CInverseUpdate                                              // 55
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestInverseUpdateUnit::TestInverseUpdate(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CInverseUpdate",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CSchur                                                      // 56
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestSchurUnit::TestSchur(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CSchur",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CNlEq                                                       // 57
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestNlEqUnit::TestNlEq(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CNlEq",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CChebyshev                                                  // 58
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestChebyshevUnit::TestChebyshev(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CChebyshev",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CHermite                                                    // 59
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestHermiteUnit::TestHermite(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CHermite",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CLaguerre                                                   // 60
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestLaguerreUnit::TestLaguerre(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CLaguerre",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CLegendre                                                   // 61
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestLegendreUnit::TestLegendre(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CLegendre",check,GetElapsed(stop_mcs-start_mcs));

//--- check class AlglibBasics                                                // 62
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestAlglibBasicsUnit::TestAlglibBasics(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("AlglibBasics",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CSparse                                                     // 63
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestSparseUnit::TestSparse(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CSparse",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CAblasF                                                     // 64
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestAblasFUnit::TestAblasF(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CAblasF",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CPolynomialSolver                                           // 65
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestPolynomialSolverUnit::TestPolynomialSolver(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CPolynomialSolver",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CDirectSparseSolvers                                        // 66
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestDirectSparseSolversUnit::TestDirectSparseSolvers(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CDirectSparseSolvers",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CIterativeSparse                                            // 67
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestIterativeSparseUnit::TestIterativeSparse(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CIterativeSparse",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CLinCG                                                      // 68
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestLinCGUnit::TestLinCG(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CLinCG",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CNormEstimator                                              // 69
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestNormEstimatorUnit::TestNormEstimator(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CNormEstimator",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CLinLSQR                                                    // 70
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestLinLSQRUnit::TestLinLSQR(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CLinLSQR",check,GetElapsed(stop_mcs-start_mcs));

//--- check class COptServ                                                    // 71
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestOptservUnit::TestOptserv(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("COptServ",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CCQModels                                                   // 72
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestCQModelsUnit::TestCQModels(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CCQModels",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CSNNLS                                                      // 73
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestSNNLSUnit::TestSNNLS(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CSNNLS",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CSActiveSets                                                // 74
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestSActiveSetsUnit::TestSActiveSets(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CSActiveSets",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CMinQP                                                      // 75
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestMinQPUnit::TestMinQP(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CMinQP",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CMinLP                                                      // 76
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestMinLPUnit::TestMinLP(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CMinLP",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CMinNLC                                                     // 77
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestMinNLCUnit::TestMinNLC(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CMinNLC",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CMinNS                                                      // 78
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestMinNSUnit::TestMinNS(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CMinNS",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CMinBC                                                      // 79
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestMinBCUnit::TestMinBC(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CMinBC",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CNormalDistr                                                // 80
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestNormalDistrUnit::TestNormalDistr(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CNormalDistr",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CWilcoxonSignedRank                                         // 81
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestWSRUnit::TestWSR(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CWilcoxonSignedRank",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CMannWhitneyU                                               // 82
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestMannWhitneyUUnit::TestMannWhitneyU(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CMannWhitneyU",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CSignTest                                                   // 83
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestSTestUnit::TestSTest(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CSignTest",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CStudentTests                                               // 84
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestStudentTestsUnit::TestStudentTests(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CStudentTests",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CFitSphere                                                  // 85
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestFitSphereUnit::TestFitSphere(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CFitSphere",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CSpline3D                                                   // 86
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestSpline3DUnit::TestSpline3D(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CSpline3D",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CRBF                                                        // 87
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestRBFUnit::TestRBF(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CRBF",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CMLPBase                                                    // 88
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestMLPBaseUnit::TestMLPBase(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CMLPBase",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CFilters                                                    // 89
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestFiltersUnit::TestFilters(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CFilters",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CSSA                                                        // 90
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestSSAUnit::TestSSA(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CSSA",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CKNN                                                        // 91
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestKNNUnit::TestKNN(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CKNN",check,GetElapsed(stop_mcs-start_mcs));

//--- check class CClustering                                                 // 92
   _RandomSeed=seed;
   start_mcs=GetMicrosecondCount();
   check=CTestClusteringUnit::TestClustering(silent);
   stop_mcs=GetMicrosecondCount();
   PrintElapsed("CClustering",check,GetElapsed(stop_mcs-start_mcs));

//--- finish time
   ulong elapsed_time=TimeLocal()-start_time;
   int   seconds=(int)elapsed_time%60;
   int   minutes=(int)elapsed_time/60;
   PrintFormat("Test passed in %d min %02d sec",minutes,seconds);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string GetElapsed(ulong microseconds)
  {
   int    sec=int(microseconds/1000000);
   int    mcs=int(microseconds%1000000);
   string elapsed=StringFormat("%d.%06d sec",sec,mcs);

   return(elapsed);
  }
//+------------------------------------------------------------------+
