Distribution class test results Distributions are tested firstCheck that the Fortran function calls are correct ---BetaDistribution--- The distribution has 2 parameters Testing introduction EXTERNAL G01EEF EXTERNAL G05FEF Testing generator function ifail = 0 CALL G05FEF(Param1, Param2, SIZE(Result variable), Result variable, ifail) IF (ifail /= 0) THEN WRITE (*, *) 'Error when trying to generate random numbers from beta distribution, parameters: a = ', Param1, 'b = ', Param2 STOP END IF Testing frequency function ifail = -1 CALL G01EEF(Point, Param1, Param2, 1.0_dp, temp_real, temp_real, Result variable, ifail) IF (ifail /= 0) THEN WRITE (*, *) 'Error when trying to calculate frequency of the beta distribution, parameters: a = ', Param1, 'b = ', Param2 STOP END IF ---BinomialDistribution--- The distribution has 2 parameters Testing introduction INTEGER G05EYF EXTERNAL G05EYF EXTERNAL G05EDF EXTERNAL G01BJF Testing generator function ifail = 0 ALLOCATE(binomial_reference(1 : NINT(20 + 20 * SQRT(Param1 * Param2 * (1 - Param2))))) CALL G05EDF(Param1, Param2, binomial_reference, SIZE(binomial_reference), ifail) IF (ifail /= 0) THEN WRITE (*, *) 'Error when trying to generate random numbers from binomial distribution, parameters: n = ', Param1, ' p = ', Param2 STOP END IF DO k=1, SIZE(Result variable) Result variable(k)=G05EYF(binomial_reference, SIZE(binomial_reference)) END DO Testing frequency function ifail=0 CALL G01BJF(Param1, Param2, Point, temp_real, temp_real, Result variable, ifail) IF (ifail /= 0) THEN WRITE (*, *) 'Error when trying to calculate frequency of the binomial distribution, parameters: n = ',Param1, 'p = ',Param2 STOP END IF ---ContinuousUniformDistribution--- The distribution has 2 parameters Testing introduction EXTERNAL G05FAF Testing generator function CALL G05FAF(Param1, Param2, SIZE(Result variable), Result variable) Testing frequency function IF (Point < Param1 .OR. Point > Param2) THEN Result variable = 0 ELSE Result variable = 1.0 / (Param2 - (Param1)) END IF ---DiscreteUniformDistribution--- The distribution has 2 parameters Testing introduction INTEGER G05DYF EXTERNAL G05DYF Testing generator function DO k=1, SIZE(Result variable) Result variable(k) = G05DYF(Param1, Param2) END DO Testing frequency function IF (Point < Param1 .OR. Point > Param2) THEN Result variable = 0 ELSE Result variable = 1.0 / (REAL(Param2) - (REAL(Param1)) + 1.0) END IF ---PoissonDistribution--- The distribution has 1 parameters Testing introduction EXTERNAL G01BKF EXTERNAL G05ECF INTEGER G05EYF EXTERNAL G05EYF Testing generator function ifail = 0 ALLOCATE(poisson_reference(1 : NINT(20 + 20 * SQRT(Param1)))) CALL G05ECF(Param1, poisson_reference, SIZE(poisson_reference), ifail) IF (ifail /= 0) THEN WRITE (*, *) 'Error when trying to generate random numbers from poisson distribution, parameters: mu = ', Param1 STOP END IF DO k=1, SIZE(Result variable) Result variable(k)=G05EYF(poisson_reference, SIZE(poisson_reference)) END DO Testing frequency function ifail=0 IF (Param1 > 1.0D+6) THEN CALL G01BKF( 1.0D+6, Point, temp_real, temp_real, Result variable, ifail) ELSE CALL G01BKF(Param1, Point, temp_real, temp_real, Result variable, ifail) END IF IF (ifail /= 0) THEN WRITE (*, *) 'Error when trying to calculate frequency of the poisson distribution, parameters: mu = ', Param1 STOP END IF ---------------------------------------------------------------------------- DistributionFactory tests. 1st test: check that factory returns right distributions. Testing factory with distribution names 'discrete_uniform', 'DISCRETE_UNIFOM', 'DiScReTe_UnIfOrM' PIANOS.datastructures.DiscreteUniformDistribution PIANOS.datastructures.DiscreteUniformDistribution PIANOS.datastructures.DiscreteUniformDistribution Testing factory with distribution names 'binomial', 'BINOMIAL', 'BiNoMiAl' PIANOS.datastructures.BinomialDistribution PIANOS.datastructures.BinomialDistribution PIANOS.datastructures.BinomialDistribution Testing factory with distribution names 'poisson', 'POISSON', 'PoIsSoN' PIANOS.datastructures.PoissonDistribution PIANOS.datastructures.PoissonDistribution PIANOS.datastructures.PoissonDistribution Testing factory with distribution names 'continuous_uniform', 'CONTINUOUS_UNIFORM', 'CoNtInUoUs_UnIfOrM' PIANOS.datastructures.ContinuousUniformDistribution PIANOS.datastructures.ContinuousUniformDistribution PIANOS.datastructures.ContinuousUniformDistribution Testing factory with distribution names 'beta', 'BETA', 'BeTa' PIANOS.datastructures.BetaDistribution PIANOS.datastructures.BetaDistribution PIANOS.datastructures.BetaDistribution ---------------------------------------------------------------------------- DistributionFactory test. 2nd test: non empty user defined distribution files. User defined distrubution files are syntaxly correct DistributionFactory should read the file and construct a correct UserDefinedDistribution object. UserDefinedDistribution and DistributionSkeleton are tested here too. User defined distribution file: 'user1.txt' --Testing ! user_alpha 2 real integer .true.-- Call name is user_AlpHa Generation code: CALL user_alpha_gen(Param1, Param2, Result) Frequency code: CALL user_alpha_freq(Param1, Param2, Point, Result) --Testing ! user_BETA 2 real integer .true.-- Call name is user_beta Generation code: CALL user_beta_gen(Param1, Param2, Result) Frequency code: CALL user_beta_freq(Param1, Param2, Point, Result) --Testing ! user_GaMmA 2 real integer .true.-- Call name is user_GAMMA Generation code: CALL user_gamma_gen(Param1, Param2, Result) Frequency code: CALL user_gamma_freq(Param1, Param2, Point, Result) --Testing ! USER_delta 2 real integer .true.-- Call name is user_delta Generation code: CALL user_delta_gen(Param1, Param2, Result) Frequency code: CALL user_delta_freq(Param1, Param2, Point, Result) --Testing ! UsEr_EtA 2 real interger .true.-- Call name is user_ETA Generation code: CALL user_eta_gen(Param1, Param2, Result) Frequency code: CALL user_eta_freq(Param1, Param2, Point, Result) --Testing ! user_theta 2 REAL INTEGER .true.-- Call name is user_TheTa Generation code: CALL user_theta_gen(Param1, Param2, Result) Frequency code: CALL user_theta_freq(Param1, Param2, Point, Result) --Testing ! user_iota 2 ReAl InTeGeR .true.-- Call name is user_iota Generation code: CALL user_iota_gen(Param1, Param2, Result) Frequency code: CALL user_iota_freq(Param1, Param2, Point, Result) --Testing ! user_kappa 1 integer .true.-- Call name is user_kappa Generation code: CALL user_kappa_gen(Param1, Result) Frequency code: CALL user_kappa_freq(Param1, Point, Result) --Testing ! user_lambda 3 real interger real .true.-- Call name is user_lambda Generation code: CALL user_lambda_gen(Param1, Param2, Param3, Result) Frequency code: CALL user_lambda_freq(Param1, Param2, Param3, Point, Result) --Testing ! user_mu 2 real interger .false.-- Call name is user_MU Generation code: Generator function was not found for MU --Testing ! user_nu 2 integer real .false.-- Call name is user_Nu Generation code: Generator function was not found for Nu --Testing ! user_xhi 2 real integer .FALSE.-- Call name is user_XhI Generation code: Generator function was not found for XhI --Testing ! user_tau 2 integer real .TRUE.-- Call name is user_taU Generation code: CALL user_tau_gen(Param1, Param2, Result) Frequency code: CALL user_tau_freq(Param1, Param2, Point, Result) --Testing ! user_phi 2 real integer .true.-- Call name is user_PHI Generation code: CALL user_phi_gen(Param1, Param2, Result) Frequency code: CALL user_phi_freq(Param1, Param2, Point, Result) --Testing !user_sigma 2 integer real .true.-- Call name is user_SigMa Generation code: CALL user_sigma_gen(Param1, Param2, Result) Frequency code: CALL user_sigma_freq(Param1, Param2, Point, Result) --Testing ! user_omega 2 REAL INTEGER .TRUE.-- Call name is user_omega Generation code: CALL user_omega_gen(Param1, Param2, Result) Frequency code: CALL user_omega_freq(Param1, Param2, Point, Result) ---------------------------------------------------------------------------- DistributionFactory test. 3rd test: invalid definition format. File: user2.txt Invalid format: !use_alpha 2 REAL REAL .TRUE. Result: Exception detected! PIANOS.exceptions.SyntaxException: Syntax error has been detected in user defined function file "tests/distributions/user2.txt" Line 1 has an incorrect function name. The function name needs to start with "user_" WORKING AS INTENDED! File: user3.txt Invalid format: !user_alpha 2 INTEGER .TRUE. Result: Exception detected! PIANOS.exceptions.SyntaxException: Syntax error has been detected in user defined function file "tests/distributions/user3.txt" Number of arguments does not corespond to number of parameters in line1 WORKING AS INTENDED! File: user4.txt Invalid format: !user_alpha 3 REAL REAL .TRUE. Result: Exception detected! PIANOS.exceptions.SyntaxException: Syntax error has been detected in user defined function file "tests/distributions/user4.txt" Number of arguments does not corespond to number of parameters in line1 WORKING AS INTENDED! File: user5.txt Invalid format: !user_alpha 2 REAL REAL TRUE Result: Exception detected! PIANOS.exceptions.SyntaxException: Syntax error has been detected in user defined function file "tests/distributions/user5.txt" Line 1 has an invalid boolean value. WORKING AS INTENDED! File: user5.txt Invalid format: !user_alpha 2 REAL REAL Result: Exception detected! PIANOS.exceptions.SyntaxException: Syntax error has been detected in user defined function file "tests/distributions/user6.txt" Number of arguments does not corespond to number of parameters in line1 WORKING AS INTENDED! ---------------------------------------------------------------------------- DistributionFactory test. 4th test: misc tests Testing of functions which are not defined in any document. Problem: 0 parameters for a function File: user7.txt Format: !user_alpha 0 .TRUE. Input accepted! Testing generator and frequency function! Generation code: CALL user_alpha_gen(Result) Frequency code: CALL user_alpha_freq(Point, Result) Conclusion: 0 parameters are allowed to a distribution Problem: distribution defined twice. File: user8.txt Format: !user_alpha 2 real integer .false. Format: !user_alpha 2 real integer .true.Exception detected! PIANOS.exceptions.SyntaxException: User defined distribution 'user_alpha' has been defined twice in the user defined distribution file! Please remove the second definition. WORKING AS INTENDED Test has been completed