//+------------------------------------------------------------------+
//|                                               TestInterfaces.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 program 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.                     |
//+------------------------------------------------------------------+
#include "TestInterfaces.mqh"

#define CHECK_RESULT if(!_TestResult) PrintFormat("Test %d failed",test); test++;
//+------------------------------------------------------------------+
//| Testing script                                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- total result
   bool _TotalResult=true;
//--- test result
   bool _TestResult;
   int  test=1;
//--- spoil scenario
   int  _spoil_scenario;
   Print("MQL5 interface tests. Please wait...");
   Print("0/152");
//--- testing
   TEST_Ablas_D_Gemm(_spoil_scenario,_TestResult,_TotalResult);          //1
   CHECK_RESULT
   TEST_Ablas_D_Syrk(_spoil_scenario,_TestResult,_TotalResult);          //2
   CHECK_RESULT
   TEST_Ablas_T_Complex(_spoil_scenario,_TestResult,_TotalResult);       //3
   CHECK_RESULT
   TEST_Sparse_D_1(_spoil_scenario,_TestResult,_TotalResult);            //4
   CHECK_RESULT
   TEST_Sparse_D_CRS(_spoil_scenario,_TestResult,_TotalResult);          //5
   CHECK_RESULT
   TEST_SolveSKS_D_1(_spoil_scenario,_TestResult,_TotalResult);          //6
   CHECK_RESULT
   TEST_LinCG_D_1(_spoil_scenario,_TestResult,_TotalResult);             //7
   CHECK_RESULT
   TEST_LinLSQR_D_1(_spoil_scenario,_TestResult,_TotalResult);           //8
   CHECK_RESULT
   TEST_NNeighbor_D_1(_spoil_scenario,_TestResult,_TotalResult);         //9
   CHECK_RESULT
   TEST_NNeighbor_T_2(_spoil_scenario,_TestResult,_TotalResult);         //10
   CHECK_RESULT
   TEST_NNeighbor_D_2(_spoil_scenario,_TestResult,_TotalResult);         //11
   CHECK_RESULT
   TEST_BaseStat_D_Base(_spoil_scenario,_TestResult,_TotalResult);       //12
   CHECK_RESULT
   TEST_BaseStat_D_C2(_spoil_scenario,_TestResult,_TotalResult);         //13
   CHECK_RESULT
   TEST_BaseStat_D_CM(_spoil_scenario,_TestResult,_TotalResult);         //14
   CHECK_RESULT
   TEST_BaseStat_D_CM2(_spoil_scenario,_TestResult,_TotalResult);        //15
   CHECK_RESULT
   TEST_BaseStat_T_Base(_spoil_scenario,_TestResult,_TotalResult);       //16
   CHECK_RESULT
   TEST_BaseStat_T_CovCorr(_spoil_scenario,_TestResult,_TotalResult);    //17
   CHECK_RESULT
   TEST_MatInv_D_R1(_spoil_scenario,_TestResult,_TotalResult);           //18
   CHECK_RESULT
   TEST_MatInv_D_C1(_spoil_scenario,_TestResult,_TotalResult);           //19
   CHECK_RESULT
   TEST_MatInv_D_SPD1(_spoil_scenario,_TestResult,_TotalResult);         //20
   CHECK_RESULT
   TEST_MatInv_D_HPD1(_spoil_scenario,_TestResult,_TotalResult);         //21
   CHECK_RESULT
   TEST_MatInv_T_R1(_spoil_scenario,_TestResult,_TotalResult);           //22
   CHECK_RESULT
   TEST_MatInv_T_C1(_spoil_scenario,_TestResult,_TotalResult);           //23
   CHECK_RESULT
   TEST_MatInv_E_SPD1(_spoil_scenario,_TestResult,_TotalResult);         //24
   CHECK_RESULT
   TEST_MatInv_E_HPD1(_spoil_scenario,_TestResult,_TotalResult);         //25
   CHECK_RESULT
   TEST_MinCG_D_1(_spoil_scenario,_TestResult,_TotalResult);             //26
   CHECK_RESULT
   TEST_MinCG_D_2(_spoil_scenario,_TestResult,_TotalResult);             //27
   CHECK_RESULT
   TEST_MinCG_NumDiff(_spoil_scenario,_TestResult,_TotalResult);         //28
   CHECK_RESULT
   TEST_MinCG_FTRIM(_spoil_scenario,_TestResult,_TotalResult);           //29
   CHECK_RESULT
   TEST_MinBLEIC_D_1(_spoil_scenario,_TestResult,_TotalResult);          //30
   CHECK_RESULT
   TEST_MinBLEIC_D_2(_spoil_scenario,_TestResult,_TotalResult);          //31
   CHECK_RESULT
   TEST_MinBLEIC_NumDiff(_spoil_scenario,_TestResult,_TotalResult);      //32
   CHECK_RESULT
   TEST_MinBLEIC_FTRIM(_spoil_scenario,_TestResult,_TotalResult);        //33
   CHECK_RESULT
   TEST_MCPD_Simple1(_spoil_scenario,_TestResult,_TotalResult);          //34
   CHECK_RESULT
   TEST_MCPD_Simple2(_spoil_scenario,_TestResult,_TotalResult);          //35
   CHECK_RESULT
   TEST_MinLBFGS_D_1(_spoil_scenario,_TestResult,_TotalResult);          //36
   CHECK_RESULT
   TEST_MinLBFGS_D_2(_spoil_scenario,_TestResult,_TotalResult);          //37
   CHECK_RESULT
   TEST_MinLBFGS_NumDiff(_spoil_scenario,_TestResult,_TotalResult);      //38
   CHECK_RESULT
   TEST_MinLBFGS_FTRIM(_spoil_scenario,_TestResult,_TotalResult);        //39
   CHECK_RESULT
   TEST_ODESolver_D1(_spoil_scenario,_TestResult,_TotalResult);          //40
   CHECK_RESULT
   TEST_FFT_Complex_D1(_spoil_scenario,_TestResult,_TotalResult);        //41
   CHECK_RESULT
   TEST_FFT_Complex_D2(_spoil_scenario,_TestResult,_TotalResult);        //42
   CHECK_RESULT
   TEST_FFT_Real_D1(_spoil_scenario,_TestResult,_TotalResult);           //43
   CHECK_RESULT
   TEST_FFT_Real_D2(_spoil_scenario,_TestResult,_TotalResult);           //44
   CHECK_RESULT
   TEST_FFT_Complex_E1(_spoil_scenario,_TestResult,_TotalResult);        //45
   CHECK_RESULT
   TEST_AutoGK_D1(_spoil_scenario,_TestResult,_TotalResult);             //46
   CHECK_RESULT
   TEST_PolInt_D_CalcDiff(_spoil_scenario,_TestResult,_TotalResult);     //47
   CHECK_RESULT
   TEST_PolInt_D_Conv(_spoil_scenario,_TestResult,_TotalResult);         //48
   CHECK_RESULT
   TEST_PolInt_D_Spec(_spoil_scenario,_TestResult,_TotalResult);         //49
   CHECK_RESULT
   TEST_PolInt_T_1(_spoil_scenario,_TestResult,_TotalResult);            //50
   CHECK_RESULT
//--- 50 blocks were successful
   Print("50/152");
   TEST_PolInt_T_2(_spoil_scenario,_TestResult,_TotalResult);            //51
   CHECK_RESULT
   TEST_PolInt_T_3(_spoil_scenario,_TestResult,_TotalResult);            //52
   CHECK_RESULT
   TEST_PolInt_T_4(_spoil_scenario,_TestResult,_TotalResult);            //53
   CHECK_RESULT
   TEST_PolInt_T_5(_spoil_scenario,_TestResult,_TotalResult);            //54
   CHECK_RESULT
   TEST_PolInt_T_6(_spoil_scenario,_TestResult,_TotalResult);            //55
   CHECK_RESULT
   TEST_PolInt_T_7(_spoil_scenario,_TestResult,_TotalResult);            //56
   CHECK_RESULT
   TEST_PolInt_T_8(_spoil_scenario,_TestResult,_TotalResult);            //57
   CHECK_RESULT
   TEST_PolInt_T_9(_spoil_scenario,_TestResult,_TotalResult);            //58
   CHECK_RESULT
   TEST_PolInt_T_10(_spoil_scenario,_TestResult,_TotalResult);           //59
   CHECK_RESULT
   TEST_PolInt_T_11(_spoil_scenario,_TestResult,_TotalResult);           //60
   CHECK_RESULT
   TEST_PolInt_T_12(_spoil_scenario,_TestResult,_TotalResult);           //61
   CHECK_RESULT
   TEST_PolInt_T_13(_spoil_scenario,_TestResult,_TotalResult);           //62
   CHECK_RESULT
   TEST_Spline1D_D_Linear(_spoil_scenario,_TestResult,_TotalResult);     //63
   CHECK_RESULT
   TEST_Spline1D_D_Cubic(_spoil_scenario,_TestResult,_TotalResult);      //64
   CHECK_RESULT
   TEST_Spline1D_D_GridDiff(_spoil_scenario,_TestResult,_TotalResult);   //65
   CHECK_RESULT
   TEST_Spline1D_D_ConvDiff(_spoil_scenario,_TestResult,_TotalResult);   //66
   CHECK_RESULT
   TEST_MinQP_D_U1(_spoil_scenario,_TestResult,_TotalResult);            //67
   CHECK_RESULT
   TEST_MinQP_D_BC1(_spoil_scenario,_TestResult,_TotalResult);           //68
   CHECK_RESULT
   TEST_MinLM_D_V(_spoil_scenario,_TestResult,_TotalResult);             //69
   CHECK_RESULT
   TEST_MinLM_D_VJ(_spoil_scenario,_TestResult,_TotalResult);            //70
   CHECK_RESULT
   TEST_MinLM_D_FGH(_spoil_scenario,_TestResult,_TotalResult);           //71
   CHECK_RESULT
   TEST_MinLM_D_VB(_spoil_scenario,_TestResult,_TotalResult);            //72
   CHECK_RESULT
   TEST_MinLM_D_Restarts(_spoil_scenario,_TestResult,_TotalResult);      //73
   CHECK_RESULT
   TEST_MinLM_T_1(_spoil_scenario,_TestResult,_TotalResult);             //74
   CHECK_RESULT
   TEST_MinLM_T_2(_spoil_scenario,_TestResult,_TotalResult);             //75
   CHECK_RESULT
   TEST_LSFit_D_NLF(_spoil_scenario,_TestResult,_TotalResult);           //76
   CHECK_RESULT
   TEST_LSFit_D_NLFG(_spoil_scenario,_TestResult,_TotalResult);          //77
   CHECK_RESULT
   TEST_LSFit_D_NLFGH(_spoil_scenario,_TestResult,_TotalResult);         //78
   CHECK_RESULT
   TEST_LSFit_D_NLFB(_spoil_scenario,_TestResult,_TotalResult);          //79
   CHECK_RESULT
   TEST_LSFit_D_NLScale(_spoil_scenario,_TestResult,_TotalResult);       //80
   CHECK_RESULT
   TEST_LSFit_D_Lin(_spoil_scenario,_TestResult,_TotalResult);           //81
   CHECK_RESULT
   TEST_LSFit_D_Linc(_spoil_scenario,_TestResult,_TotalResult);          //82
   CHECK_RESULT
   TEST_LSFit_D_Pol(_spoil_scenario,_TestResult,_TotalResult);           //83
   CHECK_RESULT
   TEST_LSFit_D_Polc(_spoil_scenario,_TestResult,_TotalResult);          //84
   CHECK_RESULT
   TEST_LSFit_D_Spline(_spoil_scenario,_TestResult,_TotalResult);        //85
   CHECK_RESULT
   TEST_LSFit_T_PolFit_1(_spoil_scenario,_TestResult,_TotalResult);      //86
   CHECK_RESULT
   TEST_LSFit_T_PolFit_2(_spoil_scenario,_TestResult,_TotalResult);      //87
   CHECK_RESULT
   TEST_LSFit_T_PolFit_3(_spoil_scenario,_TestResult,_TotalResult);      //88
   CHECK_RESULT
   TEST_MatDet_D_1(_spoil_scenario,_TestResult,_TotalResult);            //89
   CHECK_RESULT
   TEST_MatDet_D_2(_spoil_scenario,_TestResult,_TotalResult);            //90
   CHECK_RESULT
   TEST_MatDet_D_3(_spoil_scenario,_TestResult,_TotalResult);            //91
   CHECK_RESULT
   TEST_MatDet_D_4(_spoil_scenario,_TestResult,_TotalResult);            //92
   CHECK_RESULT
   TEST_MatDet_D_5(_spoil_scenario,_TestResult,_TotalResult);            //93
   CHECK_RESULT
   TEST_MatDet_T_0(_spoil_scenario,_TestResult,_TotalResult);            //94
   CHECK_RESULT
   TEST_MatDet_T_1(_spoil_scenario,_TestResult,_TotalResult);            //95
   CHECK_RESULT
   TEST_MatDet_T_2(_spoil_scenario,_TestResult,_TotalResult);            //96
   CHECK_RESULT
   TEST_MatDet_T_3(_spoil_scenario,_TestResult,_TotalResult);            //97
   CHECK_RESULT
   TEST_MatDet_T_4(_spoil_scenario,_TestResult,_TotalResult);            //98
   CHECK_RESULT
   TEST_MatDet_T_5(_spoil_scenario,_TestResult,_TotalResult);            //99
   CHECK_RESULT
   TEST_MinQP_D_LC1(_spoil_scenario,_TestResult,_TotalResult);           //100
   CHECK_RESULT
//--- 100 blocks were successful
   Print("100/152");
   TEST_MinQP_D_U2(_spoil_scenario,_TestResult,_TotalResult);            //101
   CHECK_RESULT
   TEST_MinQP_D_NonConvex(_spoil_scenario,_TestResult,_TotalResult);     //102
   CHECK_RESULT
   TEST_MinLP_Basic(_spoil_scenario,_TestResult,_TotalResult);           //103
   CHECK_RESULT
   TEST_MinNLC_D_Inequality(_spoil_scenario,_TestResult,_TotalResult);   //104
   CHECK_RESULT
   TEST_MinBC_D_1(_spoil_scenario,_TestResult,_TotalResult);             //105
   CHECK_RESULT
   TEST_MinBC_NumDif(_spoil_scenario,_TestResult,_TotalResult);          //106
   CHECK_RESULT
   TEST_IDW_D_MSTAB(_spoil_scenario,_TestResult,_TotalResult);           //107
   CHECK_RESULT
   TEST_IDW_D_Serialize(_spoil_scenario,_TestResult,_TotalResult);       //108
   CHECK_RESULT
   TEST_Parametric_RDP(_spoil_scenario,_TestResult,_TotalResult);        //109
   CHECK_RESULT
   TEST_Spline2D_Bilinear(_spoil_scenario,_TestResult,_TotalResult);     //110
   CHECK_RESULT
   TEST_Spline2D_Bicubic(_spoil_scenario,_TestResult,_TotalResult);      //111
   CHECK_RESULT
   TEST_Spline2D_Unpack(_spoil_scenario,_TestResult,_TotalResult);       //112
   CHECK_RESULT
   TEST_Spline2D_CopyTrans(_spoil_scenario,_TestResult,_TotalResult);    //113
   CHECK_RESULT
   TEST_Spline3D_Trilinear(_spoil_scenario,_TestResult,_TotalResult);    //114
   CHECK_RESULT
   TEST_Spline3D_Vector(_spoil_scenario,_TestResult,_TotalResult);       //115
   CHECK_RESULT
   TEST_Clst_AHC(_spoil_scenario,_TestResult,_TotalResult);              //116
   CHECK_RESULT
   TEST_Clst_Linkage(_spoil_scenario,_TestResult,_TotalResult);          //117
   CHECK_RESULT
   TEST_Clst_Distance(_spoil_scenario,_TestResult,_TotalResult);         //118
   CHECK_RESULT
   TEST_Clst_KClusters(_spoil_scenario,_TestResult,_TotalResult);        //119
   CHECK_RESULT
   TEST_RandomForest_CLS(_spoil_scenario,_TestResult,_TotalResult);      //120
   CHECK_RESULT
   TEST_RandomForest_Reg(_spoil_scenario,_TestResult,_TotalResult);      //121
   CHECK_RESULT
   TEST_Filters_D_SMA(_spoil_scenario,_TestResult,_TotalResult);         //122
   CHECK_RESULT
   TEST_Filters_D_EMA(_spoil_scenario,_TestResult,_TotalResult);         //123
   CHECK_RESULT
   TEST_Filters_D_LRMA(_spoil_scenario,_TestResult,_TotalResult);        //124
   CHECK_RESULT
   TEST_SSA_D_Basic(_spoil_scenario,_TestResult,_TotalResult);           //125
   CHECK_RESULT
   TEST_SSA_D_Forecast(_spoil_scenario,_TestResult,_TotalResult);        //126
   CHECK_RESULT
   TEST_KNN_Reg(_spoil_scenario,_TestResult,_TotalResult);               //127
   CHECK_RESULT
   TEST_NN_Regr(_spoil_scenario,_TestResult,_TotalResult);               //128
   CHECK_RESULT
   TEST_NN_Regr_N(_spoil_scenario,_TestResult,_TotalResult);             //129
   CHECK_RESULT
   TEST_NN_Cls2(_spoil_scenario,_TestResult,_TotalResult);               //130
   CHECK_RESULT
   TEST_NN_Cls3(_spoil_scenario,_TestResult,_TotalResult);               //131
   CHECK_RESULT
   TEST_NN_TrainerObject(_spoil_scenario,_TestResult,_TotalResult);      //132
   CHECK_RESULT
   TEST_NN_Ensembles_ES(_spoil_scenario,_TestResult,_TotalResult);       //133
   CHECK_RESULT
   TEST_MinNLC_D_Equality(_spoil_scenario,_TestResult,_TotalResult);     //134
   CHECK_RESULT
   TEST_MinNLC_D_Mixed(_spoil_scenario,_TestResult,_TotalResult);        //135
   CHECK_RESULT
   TEST_MinNS_D_Unconstrained(_spoil_scenario,_TestResult,_TotalResult); //136
   CHECK_RESULT
   TEST_MinNS_D_Diff(_spoil_scenario,_TestResult,_TotalResult);          //137
   CHECK_RESULT
   TEST_MinNS_D_BC(_spoil_scenario,_TestResult,_TotalResult);            //138
   CHECK_RESULT
   TEST_MinNS_D_NLC(_spoil_scenario,_TestResult,_TotalResult);           //139
   CHECK_RESULT
   TEST_Spline2D_Fit_Blocklls(_spoil_scenario,_TestResult,_TotalResult); //140
   CHECK_RESULT
   TEST_Spline2d_Vector(_spoil_scenario,_TestResult,_TotalResult);       //141
   CHECK_RESULT
   TEST_RBF_D_HRBF(_spoil_scenario,_TestResult,_TotalResult);            //142
   CHECK_RESULT
   TEST_RBF_D_Vector(_spoil_scenario,_TestResult,_TotalResult);          //143
   CHECK_RESULT
   TEST_RBF_D_PolTerm(_spoil_scenario,_TestResult,_TotalResult);         //144
   CHECK_RESULT
   TEST_RBF_D_Serialize(_spoil_scenario,_TestResult,_TotalResult);       //145
   CHECK_RESULT
   TEST_Clst_KMeans(_spoil_scenario,_TestResult,_TotalResult);           //146
   CHECK_RESULT
   TEST_LinReg_D_Basic(_spoil_scenario,_TestResult,_TotalResult);        //147
   CHECK_RESULT
   TEST_SSA_D_Realtime(_spoil_scenario,_TestResult,_TotalResult);        //148
   CHECK_RESULT
   TEST_KNN_Cls(_spoil_scenario,_TestResult,_TotalResult);               //149
   CHECK_RESULT
   TEST_Spline1D_D_Monotone(_spoil_scenario,_TestResult,_TotalResult);   //150
   CHECK_RESULT
   TEST_LSFit_T_4pl(_spoil_scenario,_TestResult,_TotalResult);           //151
   CHECK_RESULT
   TEST_LSFit_T_5pl(_spoil_scenario,_TestResult,_TotalResult);           //152
   CHECK_RESULT
//--- all blocks were successful
   Print("152/152");
//--- print total result
   Print("Result = ",_TotalResult);
  }
//+------------------------------------------------------------------+
