#include "mpdf_harness.h" #include "base/bdmbase.h" #include "base/user_info.h" #include "stat/exp_family.h" #include "mat_checks.h" #include "test_util.h" #include "UnitTest++.h" namespace bdm { template<> const ParticularUI &ParticularUI::factory ( ParticularUI ( "mpdf_harness" ) ); void mpdf_harness::test_config ( const char *config_file_name ) { RV::clear_all(); UIFile in ( config_file_name ); Array input; UI::get ( input, in, "data", UI::compulsory ); int sz = input.size(); CHECK ( sz > 0 ); for ( int i = 0; i < sz; ++i ) { input ( i )->test ( config_file_name, i ); } } void mpdf_harness::from_setting ( const Setting &set ) { hmpdf = UI::build ( set, "mpdf", UI::compulsory ); UI::get ( cond, set, "cond", UI::compulsory ); UI::get ( mean, set, "mean", UI::compulsory ); UI::get ( nsamples, set, "nsamples", UI::optional ); UI::get ( R, set, "R", UI::optional ); UI::get ( tolerance, set, "tolerance", UI::optional ); } void mpdf_harness::test ( const char *config_name, int idx ) { CurrentContext cc ( config_name, idx ); mat smp = hmpdf->samplecond_m ( cond, nsamples ); int n = smp.cols(); vec emu = smp * ones ( n ) / n; mat er = ( smp * smp.T() ) / n - outer_product ( emu, emu ); CHECK_CLOSE_EX ( mean, emu, tolerance ); if ( R.rows() > 0 ) { CHECK_CLOSE_EX ( R, er, tolerance ); } } }