Changeset 1064 for library/tests/testsuite
- Timestamp:
- 06/09/10 14:00:40 (15 years ago)
- Location:
- library/tests/testsuite
- Files:
-
- 17 modified
Legend:
- Unmodified
- Added
- Removed
-
library/tests/testsuite/LQG_test.cpp
r737 r1064 6 6 7 7 TEST ( LQG_test ) { 8 9 10 11 12 13 14 8 LQG reg; 9 shared_ptr<StateSpace<chmat> > stsp = new StateSpace<chmat>; 10 // 2 x 1 x 1 11 stsp-> set_parameters ( eye ( 2 ), ones ( 2, 1 ), ones ( 1, 2 ), ones ( 1, 1 ), /* Q,R */ eye ( 2 ), eye ( 1 ) ); 12 reg.set_system ( stsp ); // A, B, C 13 reg.set_control_parameters ( eye ( 1 ), eye ( 1 ), vec_1 ( 1.0 ), 6 ); //Qy, Qu, horizon 14 reg.validate(); 15 15 16 17 18 16 reg.redesign(); 17 double reg_apply = reg.ctrlaction ( "0.5, 1.1", "0.0" ) ( 0 ); /*convert vec to double*/ 18 CHECK_CLOSE ( reg_apply, -0.248528137234392, 0.0001 ); 19 19 } 20 20 21 21 TEST ( to_state_test ) { 22 23 24 25 26 27 28 29 22 mlnorm<fsqmat> ml; 23 mat A = "1.1, 2.3"; 24 ml.set_parameters ( A, vec_1 ( 1.3 ), eye ( 1 ) ); 25 RV yr = RV ( "y", 1 ); 26 RV ur = RV ( "u", 1 ); 27 ml.set_rv ( yr ); 28 yr.t_plus ( -1 ); 29 ml.set_rvc ( concat ( yr, ur ) ); 30 30 31 32 31 shared_ptr<StateCanonical > Stsp = new StateCanonical; 32 Stsp->connect_mlnorm ( ml ); 33 33 34 35 36 37 38 39 34 /* results from 35 [A,B,C,D]=tf2ss([2.3 0],[1 -1.1]) 36 */ 37 CHECK_CLOSE_EX ( Stsp->_A().get_row ( 0 ), vec ( "1.1" ), 0.0001 ); 38 CHECK_CLOSE_EX ( Stsp->_C().get_row ( 0 ), vec ( "2.53" ), 0.0001 ); 39 CHECK_CLOSE_EX ( Stsp->_D().get_row ( 0 ), vec ( "2.30" ), 0.0001 ); 40 40 } 41 41 42 42 TEST ( to_state_arx_test ) { 43 44 45 46 47 48 49 43 mlnorm<chmat> ml; 44 mat A = "1.1, 2.3, 3.4"; 45 ml.set_parameters ( A, vec_1 ( 1.3 ), eye ( 1 ) ); 46 RV yr = RV ( "y", 1 ); 47 RV ur = RV ( "u", 1 ); 48 ml.set_rv ( yr ); 49 ml.set_rvc ( concat ( yr.copy_t ( -1 ), concat ( ur, ur.copy_t ( -1 ) ) ) ); 50 50 51 52 53 54 51 shared_ptr<StateFromARX> Stsp = new StateFromARX; 52 RV xrv; 53 RV urv; 54 Stsp->connect_mlnorm ( ml, xrv, urv ); 55 55 56 57 58 59 60 61 56 /* results from 57 [A,B,C,D]=tf2ss([2.3 0],[1 -1.1]) 58 */ 59 CHECK_CLOSE_EX ( Stsp->_A().get_row ( 0 ), vec ( "1.1, 3.4, 1.3" ), 0.0001 ); 60 CHECK_CLOSE_EX ( Stsp->_B().get_row ( 0 ), vec ( "2.3" ), 0.0001 ); 61 CHECK_CLOSE_EX ( Stsp->_C().get_row ( 0 ), vec ( "1, 0, 0" ), 0.0001 ); 62 62 } 63 63 64 64 TEST ( arx_LQG_test ) { 65 66 67 68 69 70 71 72 73 74 65 mlnorm<chmat> ml; 66 mat A = "1.81, -.81, .00468, .00438"; 67 ml.set_parameters ( A, vec_1 ( 0.0 ), 0.00001*eye ( 1 ) ); 68 RV yr = RV ( "y", 1 ); 69 RV ur = RV ( "u", 1 ); 70 RV rgr = yr.copy_t ( -1 ); 71 rgr.add ( yr.copy_t ( -2 ) ); 72 rgr.add ( yr.copy_t ( -2 ) ); 73 rgr.add ( ur.copy_t ( -1 ) ); 74 rgr.add ( ur ); 75 75 76 77 78 76 ml.set_rv ( yr ); 77 ml.set_rvc ( rgr ); 78 ml.validate(); 79 79 80 81 82 83 80 shared_ptr<StateFromARX> Stsp = new StateFromARX; 81 RV xrv; 82 RV urv; 83 Stsp->connect_mlnorm ( ml, xrv, urv ); 84 84 85 86 87 88 85 LQG L; 86 L.set_system ( Stsp ); 87 L.set_control_parameters ( eye ( 1 ), sqrt ( 1.0 / 1000 ) *eye ( 1 ), vec_1 ( 0.0 ), 100 ); 88 L.validate(); 89 89 90 91 90 L.redesign(); 91 cout << L.to_string() << endl; 92 92 } -
library/tests/testsuite/arx_straux_test.cpp
r722 r1064 6 6 TEST ( arx_straux_test ) { 7 7 8 8 UIFile F ( "arx_straux_test.cfg" ); 9 9 10 11 12 13 14 15 16 17 10 Setting &tests = F.getRoot() ["tests"]; 11 for ( int i = 0; i < tests.getLength(); i++ ) { 12 mat A; 13 mat B; 14 ivec o1_ok; 15 UI::get ( A, tests[i], "A", UI::compulsory ); 16 UI::get ( B, tests[i], "B", UI::compulsory ); 17 UI::get ( o1_ok, tests[i], "o1", UI::compulsory ); 18 18 19 19 //when updateing matrices do not forget to update CHECK_EQUAL below!!! 20 20 21 22 23 24 21 ldmat Ld0 ( 3 ); 22 Ld0.ldform ( A, ones ( A.rows() ) ); 23 ldmat Ld1 ( 3 ); 24 Ld1.ldform ( A + B, ones ( A.rows() ) ); 25 25 26 26 27 28 29 30 31 27 ivec belief = vec_1 ( 2 ); // default belief 28 int nbest = 3; // nbest: how many regressors are returned 29 int nrep = 5; // nrep: number of random repetions of structure estimation 30 double lambda = 0.9; 31 int k = 2; 32 32 33 33 //[strout, rgrsout, statistics] = 34 34 // straux1(L, d, nu, L0, d0, nu0, belief, nbest, max_nrep, lambda, 35 35 // order_k); 36 37 36 Array<str_aux> o2; 37 ivec o1 = straux1 ( Ld1, 20, Ld0, 10, belief, nbest, nrep, lambda, k, o2 ); 38 38 39 39 //o1 is messed up in matlab's straux 40 41 42 43 40 sort ( o1_ok ); 41 sort ( o1 ); 42 CHECK_EQUAL ( o1_ok, o1 ); 43 } 44 44 45 45 } -
library/tests/testsuite/datalink_test.cpp
r737 r1064 6 6 7 7 TEST ( datalink_test ) { 8 9 10 11 12 8 // RV names are global, and a, b and c are already taken by a 9 // different test... 10 RV a = RV ( "{dla }", "2" ); 11 RV b = RV ( "{dlb }" ); 12 RV c = RV ( "{dlc }" ); 13 13 14 15 14 RV ab = a; 15 ab.add ( b ); 16 16 17 18 17 RV abc = ab; 18 abc.add ( c ); 19 19 20 21 22 23 24 25 26 27 28 20 datalink dl ( ab, abc ); 21 vec total ( "0 37 42 66" ); 22 vec filtered = dl.pushdown ( total ); 23 int exp_f[] = { 0, 37, 42 }; 24 int exp_sz = sizeof ( exp_f ) / sizeof ( exp_f[0] ); 25 CHECK_EQUAL ( exp_sz, filtered.size() ); 26 for ( int i = 0; i < exp_sz; ++i ) { 27 CHECK_EQUAL ( exp_f[i], filtered ( i ) ); 28 } 29 29 30 31 32 33 30 datalink unnamed; 31 unnamed.set_connection ( 1, 2, ivec ( "0" ) ); 32 filtered = unnamed.pushdown ( vec ( "37 42" ) ); 33 CHECK_EQUAL ( vec ( "37" ), filtered ); 34 34 } 35 35 36 36 TEST ( datalink_m2e_test ) { 37 38 39 37 RV a = RV ( "{dla }", "2" ); 38 RV b = RV ( "{dlb }" ); 39 RV c = RV ( "{dlc }" ); 40 40 41 42 41 RV ab = a; 42 ab.add ( b ); 43 43 44 45 44 RV ba = a; 45 ba.add ( b ); 46 46 47 48 47 RV abc = ab; 48 abc.add ( c ); 49 49 50 51 52 53 54 55 50 datalink_m2e dl; 51 dl.set_connection ( ba, c, abc ); 52 vec total ( "0 37 42 66" ); 53 vec cond = dl.get_cond ( total ); 54 CHECK_EQUAL ( 1, cond.size() ); 55 CHECK_EQUAL ( 66, cond ( 0 ) ); 56 56 57 58 59 57 vec big ( 4 ); 58 dl.pushup_cond ( big, vec ( "2 3 5" ), vec ( "7" ) ); 59 CHECK_EQUAL ( vec ( "2 3 5 7" ), big ); 60 60 } 61 61 62 62 TEST ( datalink_m2m_test ) { 63 64 65 63 RV a = RV ( "{dla }", "2" ); 64 RV b = RV ( "{dlb }" ); 65 RV c = RV ( "{dlc }" ); 66 66 67 68 67 datalink_m2m dl; 68 dl.set_connection ( a, concat ( b, c ), concat ( a, b ), c ); 69 69 70 71 70 vec val ( "1 1.5 2" ); 71 vec cond ( "3" ); 72 72 73 74 75 76 77 78 79 73 vec p = dl.pushdown ( val ); 74 double exp_p[] = { 1.0, 1.5 }; 75 int exp_sz = sizeof ( exp_p ) / sizeof ( exp_p[0] ); 76 CHECK_EQUAL ( exp_sz, p.size() ); 77 for ( int i = 0; i < exp_sz; ++i ) { 78 CHECK_EQUAL ( exp_p[i], p ( i ) ); 79 } 80 80 81 82 83 84 85 86 87 81 vec dlcond = dl.get_cond ( val, cond ); 82 int exp_c[] = { 2, 3 }; 83 exp_sz = sizeof ( exp_c ) / sizeof ( exp_c[0] ); 84 CHECK_EQUAL ( exp_sz, dlcond.size() ); 85 for ( int i = 0; i < exp_sz; ++i ) { 86 CHECK_EQUAL ( exp_c[i], dlcond ( i ) ); 87 } 88 88 } 89 89 90 90 TEST ( datalink_buffered_test ) { 91 92 93 94 95 96 91 RV a = RV ( "{dl_a }" ); 92 RV b = RV ( "{dlb }" ); 93 RV ab = concat ( a, b ); 94 RV aa = a; 95 a.t_plus ( -1 ); 96 aa.add ( a ); 97 97 98 98 99 100 99 datalink_buffered dl; 100 dl.set_connection ( concat ( aa, b ), ab ); 101 101 102 103 104 102 vec val_up ( "1 2" ); 103 dl.store_data ( val_up ); 104 val_up = "3 4"; 105 105 106 106 107 108 109 107 vec p = dl.pushdown ( val_up ); 108 vec exp_p = " 3, 1, 4 "; 109 CHECK_EQUAL ( exp_p, p ); 110 110 111 111 } -
library/tests/testsuite/datasource_test.cpp
r907 r1064 7 7 8 8 TEST ( EpdfDS_test ) { 9 10 9 UIFile uif ( "epdfds.cfg" ); 10 shared_ptr<EpdfDS> ds = UI::build<EpdfDS> ( uif, "ds" ); 11 11 12 13 14 15 16 17 18 19 12 vec mean = zeros ( 2 ); 13 vec dt = zeros ( 2 ); 14 for ( int i = 0; i < 100; i++ ) { 15 ds->step(); 16 ds->getdata ( dt ); 17 mean += dt; 18 } 19 CHECK_CLOSE_EX ( vec_2 ( 1.0, 2.0 ) , mean / 100, 1e-2 ); 20 20 } 21 21 22 22 TEST ( PdfDS_test ) { 23 23 UIFile uif ( "pdfds.cfg" ); 24 24 25 25 shared_ptr<PdfDS> ds = UI::build<PdfDS> ( uif, "ds", UI::compulsory ); 26 26 27 28 29 30 31 32 33 34 27 vec dt = zeros ( 2 ); 28 vec ut = "1.0"; 29 ds->write ( ut ); 30 for ( int i = 0; i < 100; i++ ) { 31 ds->step(); 32 } 33 ds->getdata ( dt ); 34 CHECK_CLOSE ( -0.2 , dt ( 0 ), 1e-4 ); 35 35 36 37 38 39 40 41 42 36 ut = "2.0"; 37 ds->write ( ut ); 38 for ( int i = 0; i < 100; i++ ) { 39 ds->step(); 40 } 41 ds->getdata ( dt ); 42 CHECK_CLOSE ( -0.4 , dt ( 0 ), 1e-4 ); 43 43 } 44 44 45 45 TEST ( StateDS_test ) { 46 47 48 46 RV y ( "y", 1 ); 47 RV u ( "u", 1 ); 48 RV x ( "x", 2 ); 49 49 50 51 52 53 54 50 shared_ptr<mlnorm<fsqmat> > IM = new mlnorm<fsqmat>; 51 IM->set_parameters ( mat ( "1 2 0.5; 0 1 0.3" ), zeros ( 2 ), fsqmat ( 1e-10*eye ( 2 ) ) ); 52 IM->set_rv ( x ); 53 IM->set_rvc ( concat ( x.copy_t ( -1 ), u ) ); 54 IM->validate(); 55 55 56 57 58 59 60 56 shared_ptr<mlnorm<fsqmat> > OM = new mlnorm<fsqmat>; 57 OM->set_parameters ( mat ( "1 0" ), zeros ( 1 ), fsqmat ( 1e-10*eye ( 1 ) ) ); 58 OM->set_rv ( y ); 59 OM->set_rvc ( x ); 60 OM->validate(); 61 61 62 63 64 62 StateDS sds; 63 sds.set_parameters ( IM, OM ); 64 sds.validate(); 65 65 66 67 68 69 70 66 for ( int t = 1; t < 10; t++ ) { 67 sds.write ( vec_1 ( double ( t ) ) ); 68 // TODO ZDE TO SPADNE 69 sds.step(); 70 } 71 71 72 73 74 72 vec dt; 73 sds.getdata ( dt ); 74 CHECK_CLOSE ( vec ( "94.5, 94.5, 13.5, 9" ), dt, 1e-2 ); 75 75 } -
library/tests/testsuite/egiw_test.cpp
r722 r1064 13 13 14 14 TEST ( egiw_test ) { 15 15 epdf_harness::test_config ( "egiw.cfg" ); 16 16 } 17 17 18 18 TEST ( egiw_1_2_test ) { 19 20 21 22 19 // Setup model 20 double mu = 1.1; //unit step parametr 21 double b = 3.0; // sequence of <1 -1 1 -1...> 22 double s = 0.1; 23 23 24 24 25 26 27 28 29 25 // TEST 1x1 EGIW 26 mat V ( 3, 3 ); 27 V ( 0, 0 ) = pow ( mu, 2 ) + pow ( b, 2 ) + s; 28 V ( 1, 0 ) = mu; 29 V ( 2, 0 ) = b; 30 30 31 32 33 31 V ( 0, 1 ) = V ( 1, 0 ); 32 V ( 1, 1 ) = 1.0; 33 V ( 2, 1 ) = 0.0; 34 34 35 36 37 35 V ( 0, 2 ) = V ( 2, 0 ); 36 V ( 1, 2 ) = V ( 2, 1 ); 37 V ( 2, 2 ) = 1.0; 38 38 39 39 double nu = 20; 40 40 41 42 43 41 egiw E ( 1, nu * V, nu ); 42 CHECK_CLOSE ( vec ( "1.1 3.0 0.142857" ), E.mean(), epsilon ); 43 CHECK_CLOSE ( 7.36731, E.lognc(), epsilon ); 44 44 45 46 47 45 int n = 100; 46 rectangular_support Sup; 47 Sup.set_parameters ( "{[-2.,4.], [1.,5.], [0.,2.]} ", n*ones_i ( E.dimension() ) ); 48 48 49 50 51 52 53 49 double summ = exp ( E.evallog ( Sup.first_vec() ) ); 50 // sum all likelihood at all points of support 51 for ( int k = 1; k < Sup.points(); k++ ) { // ALL b 52 summ += exp ( E.evallog ( Sup.next_vec() ) ); 53 } 54 54 55 55 CHECK_CLOSE ( 1.0, summ*prod ( Sup._steps() ), 0.01 ); 56 56 } 57 57 -
library/tests/testsuite/emix_test.cpp
r799 r1064 16 16 17 17 TEST ( emix_test ) { 18 18 pdf_harness::test_config ( "emix.cfg" ); 19 19 } 20 20 21 21 TEST ( emix_1_test ) { 22 23 24 25 22 RV x ( "{emixx }" ); 23 RV y ( "{emixy }" ); 24 RV xy = concat ( x, y ); 25 vec mu0 ( "1.00054 1.0455" ); 26 26 27 28 29 27 enorm_ldmat_ptr E1; 28 E1->set_rv ( xy ); 29 E1->set_parameters ( mu0 , mat ( "0.740142 -0.259015; -0.259015 1.0302" ) ); 30 30 31 32 33 31 enorm_ldmat_ptr E2; 32 E2->set_rv ( xy ); 33 E2->set_parameters ( "-1.2 -0.1" , mat ( "1 0.4; 0.4 0.5" ) ); 34 34 35 36 35 epdf_array A1 ( 1 ); 36 A1 ( 0 ) = E1; 37 37 38 39 40 41 42 38 emix M1; 39 M1.set_rv ( xy ); 40 M1._Coms() = A1; 41 M1._w() = vec_1(1.0); 42 M1.validate(); 43 43 44 45 46 47 48 44 // test if ARX and emix with one ARX are the same 45 epdf_ptr Mm = M1.marginal ( y ); 46 epdf_ptr Am = E1->marginal ( y ); 47 pdf_ptr Mc = M1.condition ( y ); 48 pdf_ptr Ac = E1->condition ( y ); 49 49 50 51 52 53 54 55 56 50 mlnorm<ldmat> *wacnd = dynamic_cast<mlnorm<ldmat> *> ( Ac.get() ); 51 CHECK ( wacnd ); 52 if ( wacnd ) { 53 CHECK_CLOSE ( mat ( "-0.349953" ), wacnd->_A(), epsilon ); 54 CHECK_CLOSE ( vec ( "1.39564" ), wacnd->_mu_const(), epsilon ); 55 CHECK_CLOSE ( mat ( "0.939557" ), wacnd->_R(), epsilon ); 56 } 57 57 58 59 60 61 62 58 double same = -1.46433; 59 CHECK_CLOSE ( same, Mm->evallog ( vec_1 ( 0.0 ) ), epsilon ); 60 CHECK_CLOSE ( same, Am->evallog ( vec_1 ( 0.0 ) ), epsilon ); 61 CHECK_CLOSE ( 0.145974, Mc->evallogcond ( vec_1 ( 0.0 ), vec_1 ( 0.0 ) ), epsilon ); 62 CHECK_CLOSE ( -1.92433, Ac->evallogcond ( vec_1 ( 0.0 ), vec_1 ( 0.0 ) ), epsilon ); 63 63 64 65 66 67 64 // mixture with two components 65 epdf_array A2 ( 2 ); 66 A2 ( 0 ) = E1; 67 A2 ( 1 ) = E2; 68 68 69 70 71 72 73 69 emix M2; 70 M2.set_rv ( xy ); 71 M2._Coms() = A2; 72 M2._w() = vec_2(.5,.5); 73 M2.validate(); 74 74 75 76 75 // mixture normalization 76 CHECK_CLOSE ( 1.0, normcoef ( &M2, vec ( "-3 3 " ), vec ( "-3 3 " ) ), 0.1 ); 77 77 78 79 78 int N = 6; 79 mat Smp = M2.sample_mat ( N ); 80 80 81 82 83 81 vec exp_ll ( "-5.0 -2.53563 -2.62171 -5.0 -2.53563 -2.62171" ); 82 vec ll = M2.evallog_mat ( Smp ); 83 CHECK_CLOSE ( exp_ll, ll, 5.0 ); 84 84 85 85 check_mean ( M2, N, 0.5*mu0+0.5*vec("-1.2 -0.1"), 1.0 ); 86 86 87 88 87 mat observedR ( "0.740142 -0.259015; -0.259015 1.0302" ); 88 check_covariance ( M2, N, observedR, 2.0 ); 89 89 90 91 92 93 90 epdf_ptr Mg = M2.marginal ( y ); 91 CHECK ( Mg.get() ); 92 pdf_ptr Cn = M2.condition ( x ); 93 CHECK ( Cn.get() ); 94 94 95 96 95 // marginal mean 96 CHECK_CLOSE ( vec ( "0.5" ), Mg->mean(), 0.1 ); 97 97 } 98 98 99 99 100 100 static void check_mean ( emix &distrib_obj, int nsamples, const vec &mean, double tolerance ) { 101 102 103 104 105 106 107 108 109 110 111 112 113 114 101 int tc = 0; 102 Array<vec> actual ( CurrentContext::max_trial_count ); 103 do { 104 mat smp = distrib_obj.sample_mat ( nsamples ); 105 vec emu = sum ( smp, 2 ) / nsamples; 106 actual ( tc ) = emu; 107 ++tc; 108 } while ( ( tc < CurrentContext::max_trial_count ) && 109 !UnitTest::AreClose ( mean, actual ( tc - 1 ), tolerance ) ); 110 if ( ( tc == CurrentContext::max_trial_count ) && 111 ( !UnitTest::AreClose ( mean, actual ( CurrentContext::max_trial_count - 1 ), tolerance ) ) ) { 112 UnitTest::MemoryOutStream stream; 113 UnitTest::TestDetails details ( *UnitTest::CurrentTest::Details(), __LINE__ ); 114 stream << "Expected " << mean << " +/- " << tolerance << " but was " << actual; 115 115 116 117 116 UnitTest::CurrentTest::Results()->OnTestFailure ( details, stream.GetText() ); 117 } 118 118 } 119 119 120 120 static void check_covariance ( emix &distrib_obj, int nsamples, const mat &R, double tolerance ) { 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 121 int tc = 0; 122 Array<mat> actual ( CurrentContext::max_trial_count ); 123 do { 124 mat smp = distrib_obj.sample_mat ( nsamples ); 125 vec emu = sum ( smp, 2 ) / nsamples; 126 mat er = ( smp * smp.T() ) / nsamples - outer_product ( emu, emu ); 127 actual ( tc ) = er; 128 ++tc; 129 } while ( ( tc < CurrentContext::max_trial_count ) && 130 !UnitTest::AreClose ( R, actual ( tc - 1 ), tolerance ) ); 131 if ( ( tc == CurrentContext::max_trial_count ) && 132 ( !UnitTest::AreClose ( R, actual ( CurrentContext::max_trial_count - 1 ), tolerance ) ) ) { 133 UnitTest::MemoryOutStream stream; 134 UnitTest::TestDetails details ( *UnitTest::CurrentTest::Details(), __LINE__ ); 135 stream << "Expected " << R << " +/- " << tolerance << " but was " << actual; 136 136 137 138 137 UnitTest::CurrentTest::Results()->OnTestFailure ( details, stream.GetText() ); 138 } 139 139 } -
library/tests/testsuite/epdf_test.cpp
r1033 r1064 9 9 10 10 TEST ( egamma_test ) { 11 11 epdf_harness::test_config ( "egamma.cfg" ); 12 12 } 13 13 14 14 TEST ( enorm_test ) { 15 epdf_harness::test_config ( "enorm.cfg" ); 15 epdf_harness::test_config ( "enorm.cfg" ); 16 16 } 17 17 18 18 TEST ( estudent_test ) { 19 19 epdf_harness::test_config ( "estudent.cfg" ); 20 20 } 21 21 22 22 // not using epdf_harness because eprod isn't configurable (yet?) 23 23 TEST ( eprod_test ) { 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 24 25 RV a ( "{eprod_a }", "1" ); 26 RV b ( "{eprod_b }", "2" ); 27 28 egamma_ptr g0; 29 g0->set_parameters ( vec ( "2" ), vec ( "2" ) ); 30 g0->validate(); 31 g0->set_rv ( a ); 32 33 egamma_ptr g1; 34 g1->set_parameters ( vec ( "100000 10000" ), vec ( "10000 1000" ) ); 35 g1->validate(); 36 g1->set_rv ( b ); 37 38 Array<shared_ptr<epdf> > coms ( 2 ); 39 coms ( 0 ) = g0; 40 coms ( 1 ) = g1; 41 42 eprod p; 43 // set_parameters doesn't say so, but it actually requires 44 // pointers in the array to outlast the eprod instance... 45 p.set_parameters ( coms ); 46 p.validate(); 47 48 CHECK_EQUAL ( vec ( "1 10 10" ), p.mean() ); 49 CHECK_EQUAL ( vec ( "0 0 0" ), p.variance() ); 50 50 } 51 51 52 52 TEST ( ewishart_test ) { 53 54 55 56 57 58 59 60 61 62 63 64 65 53 mat wM = "1.1 0.9; 0.9 1.0"; 54 eWishartCh eW; 55 eW.set_parameters ( wM / 100, 100 ); 56 eW.validate(); 57 mat mea = zeros ( 2, 2 ); 58 mat Ch; 59 for ( int i = 0; i < 100; i++ ) { 60 Ch = eW.sample_mat(); 61 mea += Ch.T() * Ch; 62 } 63 64 mat actual = mea / 100; 65 CHECK_CLOSE ( wM, actual, 0.1 ); 66 66 } 67 67 68 68 TEST ( rwiwishart_test ) { 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 69 mat wM = "1.0 0.9; 0.9 1.0"; 70 rwiWishartCh rwW; 71 rwW.set_parameters ( 2, 0.1, "1 1", 0.9 ); 72 rwW.validate(); 73 mat mea = zeros ( 2, 2 ); 74 mat wMch = chol ( wM ); 75 mat Ch ( 2, 2 ); 76 77 for ( int i = 0; i < 100; i++ ) { 78 vec tmp = rwW.samplecond ( vec ( wMch._data(), 4 ) ); 79 copy_vector ( 4, tmp._data(), Ch._data() ); 80 mea += Ch.T() * Ch; 81 82 } 83 84 mat observed ( "0.99464 0.885458; 0.885458 1.01853" ); 85 mat actual = mea / 100; 86 CHECK_CLOSE ( observed, actual, 0.1 ); 87 87 } 88 88 89 89 TEST ( dirich_test ) { 90 90 epdf_harness::test_config ( "edirich.cfg" ); 91 91 } 92 92 TEST ( ebeta_test ) { 93 93 epdf_harness::test_config ( "ebeta.cfg" ); 94 94 } -
library/tests/testsuite/logger_test.cpp
r916 r1064 15 15 16 16 int get_file_size ( const char *fname ) { 17 18 19 20 21 22 17 struct stat st; 18 if ( stat ( fname, &st ) ) { 19 std::string msg = "can't stat "; 20 msg += fname; 21 throw std::runtime_error ( msg ); 22 } 23 23 24 25 26 27 28 29 24 int sz = static_cast<int> ( st.st_size ); 25 if ( sz != st.st_size ) { 26 std::string msg = fname; 27 msg += " too big"; 28 throw std::runtime_error ( msg ); 29 } 30 30 31 31 return sz; 32 32 } 33 33 34 34 class log_tester : public root 35 35 { 36 36 LOG_LEVEL(log_tester,logr,logth,logpol); 37 37 public: 38 39 38 RV th, r; 39 int pol, i; 40 40 41 42 43 44 41 log_tester() { 42 th = RV ( "{alog blog }" ); 43 r = RV ( "{r }", "2" ); 44 pol = 11; 45 45 46 47 48 49 46 log_level[logr] = true; 47 log_level[logth] = true; 48 log_level[logpol] = true; 49 } 50 50 51 52 53 54 55 56 57 51 void log_register( logger &L, const string prefix ) { 52 root::log_register( L, prefix ); 53 L.add_vector( log_level, logr, r, prefix ); 54 L.add_vector( log_level, logth, th, prefix ); 55 L.add_setting( log_level, logpol, prefix, 0 ); 56 L.add_setting( log_level, logpol, prefix, 1 ); 57 } 58 58 59 60 61 62 63 64 65 59 void log_write() const { 60 root::log_write(); 61 log_level.store( logr, vec_2 ( ( double ) i, ( double ) ( i + 1 ) ) ); 62 log_level.store( logth, vec_2 ( ( double ) ( 100 - i ), ( double ) ( i - 50 ) ) ); 63 log_level.store( logpol, pol, 0 ); 64 log_level.store( logpol, pol^2, 1 ); 65 } 66 66 67 67 }; 68 68 69 69 TEST ( memlog_test ) { 70 71 70 string ls ( "memlog_test" ); 71 remove_all ( ls.c_str() ); 72 72 73 73 memlog logger ( 100, ls ); 74 74 75 75 76 log_tester tester; 77 tester.log_register( logger, "memlog" ); 78 79 logger.init(); 76 log_tester tester; 77 tester.log_register( logger, "memlog" ); 80 78 81 for ( tester.i = 0; tester.i < 10; tester.i++ ) { 82 tester.log_write(); 83 logger.step(); 84 } 79 logger.init(); 85 80 86 logger.finalize(); 81 for ( tester.i = 0; tester.i < 10; tester.i++ ) { 82 tester.log_write(); 83 logger.step(); 84 } 87 85 88 CHECK_EQUAL ( get_file_size ( "logger_test.matrix" ), get_file_size ( ( ls + ".it" ).c_str() ) ); 89 CHECK_EQUAL ( get_file_size ( ( ls + ".cfg.check" ).c_str() ), get_file_size ( ( ls + ".cfg" ).c_str() ) ); 86 logger.finalize(); 87 88 CHECK_EQUAL ( get_file_size ( "logger_test.matrix" ), get_file_size ( ( ls + ".it" ).c_str() ) ); 89 CHECK_EQUAL ( get_file_size ( ( ls + ".cfg.check" ).c_str() ), get_file_size ( ( ls + ".cfg" ).c_str() ) ); 90 90 } 91 91 … … 93 93 94 94 95 96 97 98 95 string ls ( "exp" ); 96 remove_all ( ls.c_str() ); 97 makedir ( ls, false ); 98 remove_all ( "dirfilelog_files" ); 99 99 100 100 dirfilelog logger ( "dirfilelog_files", 10 ); 101 101 102 103 tester.log_register( logger, "dirfilelog" ); 102 log_tester tester; 103 tester.log_register( logger, "dirfilelog" ); 104 104 105 105 logger.init(); 106 106 107 108 109 110 107 for ( tester.i = 0; tester.i < 150; tester.i++ ) { 108 tester.log_write(); 109 logger.step(); 110 } 111 111 112 112 logger.finalize(); 113 113 114 115 116 114 std::string expected ( load_test_file ( "logger_test_dirfile_format.matrix" ) ); 115 std::string actual ( load_test_file ( "dirfilelog_files/format" ) ); 116 CHECK_EQUAL ( expected, actual ); 117 117 } -
library/tests/testsuite/merger_test.cpp
r722 r1064 9 9 10 10 TEST ( merger_base_test ) { 11 11 RV x ( "{xmerger }", "1" ); 12 12 13 13 RV z ( x ); 14 14 15 16 17 18 15 enorm_fsqmat_ptr f1; 16 f1->set_rv ( x ); 17 enorm_fsqmat_ptr f2; 18 f2->set_rv ( x ); 19 19 20 21 20 f1->set_parameters ( "-5", mat ( "2" ) ); 21 f2->set_parameters ( "5", mat ( "10" ) ); 22 22 23 24 25 23 pdf_array A ( 2 ); 24 A ( 0 ) = f1; 25 A ( 1 ) = f2; 26 26 27 28 29 27 int Npoints = 100; 28 mat x_grid ( 1, Npoints ); 29 x_grid.set_row ( 0, linspace ( -10.0, 10.0 ) ); 30 30 31 32 33 34 35 31 vec l_f1 = f1->evallog_mat ( x_grid ); 32 vec l_f2 = f2->evallog_mat ( x_grid ); 33 mat lW ( 2, Npoints ); 34 lW.set_row ( 0, l_f1 ); 35 lW.set_row ( 1, l_f2 ); 36 36 37 38 39 40 37 merger_base M ( A ); 38 enorm<fsqmat> g0; 39 g0.set_rv ( x ); 40 g0.set_parameters ( vec ( "0.0" ), mat ( "100.0" ) ); 41 41 42 43 44 42 M.set_method ( LOGNORMAL, 1.2 ); 43 M.set_support ( g0, 200 ); 44 M.merge (); 45 45 46 46 vec m2 = M.merge_points ( lW ); 47 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 48 vec exp_f1 ( "-7.51551 -7.02066 " 49 "-6.54622 -6.09219 " 50 "-5.65856 -5.24534 " 51 "-4.85252 -4.48011 -4.1281 " 52 "-3.7965 -3.48531 -3.19452 " 53 "-2.92414 -2.67417 -2.4446 -2.23544 -2.04668 " 54 "-1.87833 -1.73039 -1.60285 -1.49572 -1.40899 -1.34267 -1.29676 -1.27125 -1.26615 -1.28145 -1.31717 -1.37328 -1.4498 -1.54673 -1.66407 -1.80181 -1.95996 " 55 "-2.13851 -2.33747 -2.55683 -2.79661 " 56 "-3.05678 -3.33737 -3.63836 -3.95975 " 57 "-4.30155 -4.66376 " 58 "-5.04638 -5.4494 -5.87282 " 59 "-6.31665 -6.78089 " 60 "-7.26554 -7.77059 " 61 "-8.29604 -8.84191 " 62 "-9.40818 -9.99485 " 63 "-10.6019 " 64 "-11.2294 -11.8773 " 65 "-12.5456 " 66 "-13.2343 -13.9434 " 67 "-14.6729 " 68 "-15.4229 " 69 "-16.1932 -16.9839 " 70 "-17.7951 " 71 "-18.6266 " 72 "-19.4786 " 73 "-20.3509 " 74 "-21.2437 " 75 "-22.1569 " 76 "-23.0905 " 77 "-24.0444 " 78 "-25.0188 " 79 "-26.0136 " 80 "-27.0288 " 81 "-28.0644 " 82 "-29.1205 " 83 "-30.1969 " 84 "-31.2937 " 85 "-32.4109 " 86 "-33.5486 " 87 "-34.7066 " 88 "-35.8851 " 89 "-37.0839 " 90 "-38.3032 " 91 "-39.5429 " 92 "-40.8029 " 93 "-42.0834 " 94 "-43.3843 " 95 "-44.7056 " 96 "-46.0473 " 97 "-47.4094 " 98 "-48.7919 " 99 "-50.1948 " 100 "-51.6182 " 101 "-53.0619 " 102 "-54.526 " 103 "-56.0106 " 104 "-57.5155" ); 105 CHECK_CLOSE ( exp_f1, l_f1, epsilon ); 106 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 107 vec exp_f2 ( "-13.3202 -13.0192 " 108 "-12.7223 -12.4295 -12.1408 " 109 "-11.8561 -11.5755 -11.299 -11.0266 " 110 "-10.7582 -10.494 -10.2338 " 111 "-9.97772 -9.7257 -9.47777 -9.23391 " 112 "-8.99414 -8.75845 -8.52684 -8.29931 -8.07587 " 113 "-7.8565 -7.64122 -7.43002 -7.22289 -7.01985 " 114 "-6.82089 -6.62602 -6.43522 -6.2485 -6.06587 " 115 "-5.88732 -5.71284 -5.54245 -5.37614 -5.21392 -5.05577 " 116 "-4.9017 -4.75172 -4.60581 -4.46399 -4.32625 -4.19259 -4.06301 " 117 "-3.93752 -3.8161 -3.69876 -3.58551 -3.47634 -3.37125 -3.27024 -3.17331 -3.08046 " 118 "-2.99169 -2.90701 -2.8264 -2.74988 -2.67744 -2.60908 -2.5448 -2.4846 -2.42849 -2.37645 -2.3285 -2.28462 -2.24483 -2.20912 -2.17749 -2.14994 -2.12648 -2.10709 -2.09179 -2.08056 -2.07342 -2.07036 -2.07138 -2.07648 -2.08566 -2.09893 -2.11627 -2.1377 -2.16321 -2.1928 -2.22647 -2.26422 -2.30605 -2.35196 -2.40196 -2.45603 -2.51419 -2.57643 -2.64275 -2.71315 -2.78763 -2.8662 -2.94884 " 119 "-3.03557 -3.12637 -3.22126 -3.32023" ); 120 CHECK_CLOSE ( exp_f2, l_f2, epsilon ); 121 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 122 vec exp_m2 ( "-7.95304 -7.47281 -7.01175 " 123 "-6.56987 -6.14716 " 124 "-5.74362 -5.35927 " 125 "-4.99408 -4.64808 -4.32125 -4.01359 " 126 "-3.72511 -3.45581 -3.20568 " 127 "-2.97473 -2.76295 -2.57035 -2.39692 -2.24267 -2.1076 " 128 "-1.9917 -1.89498 -1.81743 -1.75905 -1.71986 -1.69984 -1.69899 -1.71732 -1.75483 -1.81151 -1.88736 -1.9824 " 129 "-2.0966 -2.22999 -2.38255 -2.55428 -2.74519 -2.95528 " 130 "-3.18454 -3.43298 -3.70059 -3.98738 " 131 "-4.2008 -4.10829 -4.0211 " 132 "-3.93921 -3.86263 -3.79137 -3.72542 -3.66478 -3.60945 -3.55944 -3.51473 -3.47534 -3.44126 -3.41249 -3.38903 -3.37088 -3.35805 -3.35053 -3.34831 -3.35141 -3.35983 -3.37355 -3.39259 -3.41693 -3.44659 -3.48156 -3.52185 -3.56744 -3.61835 -3.67457 -3.73609 -3.80294 -3.87509 -3.95255 " 133 "-4.03533 -4.12342 -4.21682 -4.31553 -4.41955 -4.52889 -4.64353 -4.76349 -4.88876 " 134 "-5.01934 -5.15524 -5.29644 -5.44296 -5.59479 -5.75193 -5.91438 " 135 "-6.08214 -6.25522 -6.4336 -6.6173 -6.80631 " 136 "-7.00064 -7.20027 -7.40522" ); 137 CHECK_CLOSE ( exp_m2, m2, epsilon ); 138 138 } 139 139 140 140 TEST ( merger_base_sources_test ) { 141 141 UIFile in ( "merger.cfg" ); 142 142 143 144 143 shared_ptr<merger_base> mb = 144 UI::build<merger_base> ( in, "Merger", UI::compulsory ); 145 145 146 147 148 146 pdf_array sources; 147 UI::get ( sources, in, "Sources", UI::compulsory ); 148 mb->set_sources ( sources ); 149 149 150 151 152 150 shared_ptr<rectangular_support> support = 151 UI::build<rectangular_support> ( in, "Support", UI::compulsory ); 152 mb->set_support ( *support ); 153 153 154 155 156 154 mb->merge(); 155 vec m = mb->mean(); 156 CHECK_EQUAL ( 2, m.size() ); 157 157 } 158 158 159 159 TEST ( merger_base_sources_error_test ) { 160 160 UIFile in ( "merger_error.cfg" ); 161 161 162 163 164 165 166 167 168 162 pdf_array sources; 163 try { 164 UI::get ( sources, in, "Sources", UI::compulsory ); 165 CHECK ( false ); 166 } catch ( UISettingException &exc ) { 167 CHECK ( exc.what() ); 168 } 169 169 } -
library/tests/testsuite/pdf_test.cpp
r721 r1064 10 10 11 11 TEST ( mgamma_test ) { 12 12 pdf_harness::test_config ( "mgamma.cfg" ); 13 13 } 14 14 15 15 TEST ( mlnorm_test ) { 16 16 pdf_harness::test_config ( "mlnorm.cfg" ); 17 17 } 18 18 19 19 TEST ( mprod_test ) { 20 20 pdf_harness::test_config ( "mprod.cfg" ); 21 21 } 22 22 23 23 TEST ( mmix_test ) { 24 24 pdf_harness::test_config ( "mmix.cfg" ); 25 25 } -
library/tests/testsuite/randun_test.cpp
r738 r1064 6 6 7 7 TEST ( randun_test ) { 8 9 10 11 8 // matlab output obtained by 9 // >>clear all 10 // >>randun(10); 11 vec matlab_out = " 0.695964974209650, 0.083321541586575, 0.385149445564090, 0.206731595660901, 0.537928272754852, 0.960480190795139, 0.790566693893898, 0.054424274738144, 0.708785523990535, 0.558301708920999"; 12 12 13 14 15 13 //ASSUMING randun was not used yet! 14 vec x = randun ( 10 ); 15 CHECK_CLOSE ( matlab_out, x, 1e-6 ); 16 16 } 17 17 -
library/tests/testsuite/rectangular_support_test.cpp
r722 r1064 8 8 9 9 TEST ( rectangular_support_test ) { 10 11 10 rectangular_support rs; 11 CHECK_EQUAL ( rs.first_vec(), vec ( 0 ) ); 12 12 13 14 15 16 17 18 19 20 13 Array<vec> range ( 2 ); 14 range ( 0 ) = vec ( "0 1" ); 15 range ( 1 ) = vec ( "-1 1" ); 16 ivec gridsize ( 2 ); 17 gridsize ( 0 ) = 10; 18 gridsize ( 1 ) = 20; 19 rs.set_parameters ( range, gridsize ); 20 CHECK_EQUAL ( 200, rs.points() ); 21 21 22 23 22 vec v = rs.get_vec ( ivec ( "1 2" ) ); 23 CHECK_CLOSE ( vec ( "0.15 -0.75" ), v, epsilon ); 24 24 } 25 25 -
library/tests/testsuite/rv_test.cpp
r1008 r1064 7 7 8 8 TEST ( rv_test ) { 9 9 RV::clear_all(); 10 10 11 12 13 14 15 11 RV a = RV ( "{a_in_test_rv }", "3" ); 12 CHECK ( a.equal ( a ) ); 13 CHECK_EQUAL ( 1, a.length() ); 14 CHECK_EQUAL ( 3, a.size ( 0 ) ); 15 CHECK_EQUAL ( std::string ( "a_in_test_rv" ), a.name ( 0 ) ); 16 16 17 18 19 17 RV b = RV ( "{b_in_test_rv }", "2" ); 18 CHECK ( !b.equal ( a ) ); 19 CHECK_EQUAL ( 0, b.mint() ); 20 20 21 22 23 21 RV c = RV ( "{c_in_test_rv }" ); 22 CHECK_EQUAL ( 1, c.length() ); 23 CHECK_EQUAL ( 1, c.size ( 0 ) ); 24 24 25 26 27 25 RV trv = RV ( "{e_in_test_rv f_in_test_rv }", "1 2", "3 4" ); 26 CHECK_EQUAL ( 2, trv.length() ); 27 CHECK_EQUAL ( 3, trv.mint() ); 28 28 29 30 31 32 33 34 35 36 37 29 // add a and b 30 RV ab = a; 31 bool added = ab.add ( b ); 32 CHECK ( added ); 33 CHECK_EQUAL ( 2, ab.length() ); 34 CHECK_EQUAL ( 3, ab.size ( 0 ) ); 35 CHECK_EQUAL ( std::string ( "a_in_test_rv" ), ab.name ( 0 ) ); 36 CHECK_EQUAL ( 2, ab.size ( 1 ) ); 37 CHECK_EQUAL ( std::string ( "b_in_test_rv" ), ab.name ( 1 ) ); 38 38 39 40 41 39 std::stringstream abss; 40 abss << ab; 41 CHECK_EQUAL ( std::string ( "[a_in_test_rv(3)_{0}; b_in_test_rv(2)_{0}; ]" ), abss.str() ); 42 42 43 44 45 46 47 48 43 // concat a, b and c 44 RV abc = concat ( ab, c ); 45 CHECK_EQUAL ( 3, abc.length() ); 46 std::stringstream abcss; 47 abcss << abc; 48 CHECK_EQUAL ( std::string ( "[a_in_test_rv(3)_{0}; b_in_test_rv(2)_{0}; c_in_test_rv(1)_{0}; ]" ), abcss.str() ); 49 49 50 51 52 53 54 55 56 57 58 59 50 // structure of a, b, c 51 str s = abc.tostr(); 52 int exp_ids[] = { 1, 1, 1, 2, 2, 3 }; 53 int exp_sz = sizeof ( exp_ids ) / sizeof ( exp_ids[0] ); 54 CHECK_EQUAL ( exp_sz, s.ids.size() ); 55 CHECK_EQUAL ( exp_sz, s.times.size() ); 56 for ( int i = 0; i < exp_sz; ++i ) { 57 CHECK_EQUAL ( exp_ids[i], s.ids ( i ) ); 58 CHECK_EQUAL ( 0, s.times ( i ) ); 59 } 60 60 61 62 63 64 61 RV slice = abc ( 1, 2 ); 62 CHECK_EQUAL ( 1, slice.length() ); 63 CHECK_EQUAL ( 3, slice.size ( 0 ) ); 64 CHECK_EQUAL ( std::string ( "a_in_test_rv" ), slice.name ( 0 ) ); 65 65 66 67 68 69 66 // find a in abc 67 ivec f = a.findself ( abc ); 68 CHECK_EQUAL ( 1, f.length() ); 69 CHECK_EQUAL ( 0, f ( 0 ) ); 70 70 71 72 73 74 75 76 77 78 79 71 // find abc in a 72 f = abc.findself ( a ); 73 int exp_indices[] = { 0, -1, -1 }; 74 CHECK_EQUAL ( 3, f.length() ); 75 for ( unsigned i = 0; 76 i < sizeof ( exp_indices ) / sizeof ( exp_indices[0] ); 77 ++i ) { 78 CHECK_EQUAL ( exp_indices[i], f ( i ) ); 79 } 80 80 81 82 83 84 85 81 // subtract b from abc 82 RV ac = abc.subt ( b ); 83 std::stringstream acss; 84 acss << ac; 85 CHECK_EQUAL ( std::string ( "[a_in_test_rv(3)_{0}; c_in_test_rv(1)_{0}; ]" ), acss.str() ); 86 86 87 88 89 90 91 92 93 94 87 // data index of ac in abc 88 ivec di = ac.dataind ( abc ); 89 int exp_di[] = { 0, 1, 2, 5 }; 90 exp_sz = sizeof ( exp_di ) / sizeof ( exp_di[0] ); 91 CHECK_EQUAL ( exp_sz, di.size() ); 92 for ( int i = 0; i < exp_sz; ++i ) { 93 CHECK_EQUAL ( exp_di[i], di ( i ) ); 94 } 95 95 96 97 98 99 100 96 // subselect 97 RV bc = abc ( ivec ( "1 2" ) ); 98 std::stringstream bcss; 99 bcss << bc; 100 CHECK_EQUAL ( std::string ( "[b_in_test_rv(2)_{0}; c_in_test_rv(1)_{0}; ]" ), bcss.str() ); 101 101 102 102 #if 0 103 104 105 106 107 103 // actually doesn't select, just reorders the variables - 104 // wonder if that's correct... 105 bc = abc ( 1, 2 ); 106 bcss << bc; 107 CHECK_EQUAL ( std::string ( "2(2)=b_in_test_rv_{0}; 3(1)=c_in_test_rv_{0}; " ), bcss.str() ); 108 108 #endif 109 109 110 111 112 110 // Copy indices between ba and ab 111 RV ba = b; 112 ba.add ( a ); 113 113 114 115 116 114 ivec ai; 115 ivec bi; 116 ba.dataind ( ac, ai, bi ); 117 117 118 119 120 121 122 123 124 125 118 int exp_ai[] = { 2, 3, 4 }; 119 exp_sz = sizeof ( exp_ai ) / sizeof ( exp_ai[0] ); 120 CHECK_EQUAL ( exp_sz, ai.size() ); 121 for ( unsigned i = 0; 122 i < sizeof ( exp_ai ) / sizeof ( exp_ai[0] ); 123 ++i ) { 124 CHECK_EQUAL ( exp_ai[i], ai ( i ) ); 125 } 126 126 127 128 129 130 131 132 133 134 127 int exp_bi[] = { 0, 1, 2 }; 128 exp_sz = sizeof ( exp_bi ) / sizeof ( exp_bi[0] ); 129 CHECK_EQUAL ( exp_sz, bi.size() ); 130 for ( unsigned i = 0; 131 i < sizeof ( exp_bi ) / sizeof ( exp_bi[0] ); 132 ++i ) { 133 CHECK_EQUAL ( exp_bi[i], bi ( i ) ); 134 } 135 135 136 137 138 139 140 141 142 143 144 136 // check uniqueness 137 RV join = a; 138 join.add ( b ); 139 RV tmp = a; 140 tmp.t_plus ( 1 ); 141 join.add ( tmp ); 142 tmp = b; 143 tmp.t_plus ( -1 ); 144 join.add ( tmp ); 145 145 146 147 146 CHECK_EQUAL ( unique ( join._ids() ), vec_2 ( a.id ( 0 ), b.id ( 0 ) ) ); // find only ids of a and b 147 CHECK_EQUAL ( unique_complement ( join._ids(), vec_1 ( a.id ( 0 ) ) ), vec_1 ( b.id ( 0 ) ) ); // complemnet of a in previous is b 148 148 149 150 151 149 //test if unique names work 150 RV uniq1 ( "y", 1 ); 151 RV uniq2 ( "y", 1 ); 152 152 153 153 CHECK_EQUAL ( uniq1.id ( 0 ), uniq2.id ( 0 ) ); 154 154 155 156 157 155 // check scalarname 156 CHECK_EQUAL ( "a_in_test_rv_2", abc.scalarname ( 2 ) ); 157 CHECK_EQUAL ( "b_in_test_rv_0", abc.scalarname ( 3 ) ); 158 158 } -
library/tests/testsuite/shared_ptr_test.cpp
r722 r1064 6 6 class Foo { 7 7 private: 8 8 int x; 9 9 10 10 public: 11 11 Foo ( int x ) : x ( x ) { } 12 12 13 14 15 13 int get_x() const { 14 return x; 15 } 16 16 17 18 19 17 void set_x ( int nx ) { 18 x = nx; 19 } 20 20 }; 21 21 … … 25 25 26 26 TEST ( shared_ptr_test ) { 27 27 TFooVector v; 28 28 29 30 31 32 29 bdm::shared_ptr<Foo> zero; 30 CHECK_EQUAL ( 0l, zero.use_count() ); 31 bdm::shared_ptr<Foo> z2 ( zero ); 32 CHECK_EQUAL ( 0l, z2.use_count() ); 33 33 34 35 36 34 bdm::shared_ptr<Foo> one ( new Foo ( 1 ) ); 35 v.push_back ( one ); 36 CHECK ( !one.unique() ); 37 37 38 39 40 38 v.push_back ( one ); 39 v.push_back ( bdm::shared_ptr<Foo> ( new Foo ( 2 ) ) ); 40 CHECK_EQUAL ( static_cast<TFooVector::size_type> ( 3 ), v.size() ); 41 41 42 43 42 CHECK ( v[0] == v[1] ); 43 CHECK ( v[1] != v[2] ); 44 44 45 46 45 Foo c ( * ( v[0] ) ); 46 CHECK_EQUAL ( 1, c.get_x() ); 47 47 48 49 50 51 48 Foo *p = v[1].get(); 49 CHECK_EQUAL ( 1, p->get_x() ); 50 p->set_x ( 12 ); 51 CHECK_EQUAL ( 12, one->get_x() ); 52 52 53 54 53 CHECK ( v[2].unique() ); 54 CHECK_EQUAL ( 2, v[2]->get_x() ); 55 55 } 56 56 57 57 TEST ( shared_ptr_const_test ) { 58 58 TConstFooVector v; 59 59 60 61 62 63 60 bdm::shared_ptr<const Foo> zero; 61 CHECK_EQUAL ( 0l, zero.use_count() ); 62 bdm::shared_ptr<const Foo> z2 ( zero ); 63 CHECK_EQUAL ( 0l, z2.use_count() ); 64 64 65 66 67 65 bdm::shared_ptr<const Foo> one ( new Foo ( 1 ) ); 66 v.push_back ( one ); 67 CHECK ( !one.unique() ); 68 68 69 70 71 69 v.push_back ( one ); 70 v.push_back ( bdm::shared_ptr<const Foo> ( new Foo ( 2 ) ) ); 71 CHECK_EQUAL ( static_cast<TConstFooVector::size_type> ( 3 ), v.size() ); 72 72 73 74 73 CHECK ( v[0] == v[1] ); 74 CHECK ( v[1] != v[2] ); 75 75 76 77 76 Foo c ( * ( v[0] ) ); 77 CHECK_EQUAL ( 1, c.get_x() ); 78 78 79 80 79 const Foo *p = v[1].get(); 80 CHECK_EQUAL ( 1, p->get_x() ); 81 81 82 83 82 CHECK ( v[2].unique() ); 83 CHECK_EQUAL ( 2, v[2]->get_x() ); 84 84 85 86 87 85 bdm::shared_ptr<Foo> non_const; 86 bdm::shared_ptr<const Foo> another ( non_const ); 87 CHECK ( !non_const.unique() ); 88 88 } 89 89 … … 91 91 #ifndef NDEBUG 92 92 TEST ( shared_ptr_error_test ) { 93 94 95 96 97 98 99 93 bdm::shared_ptr<Foo> empty; 94 try { 95 Foo x ( *empty ); 96 CHECK ( false ); 97 } catch ( std::runtime_error &exc ) { 98 CHECK ( exc.what() ); 99 } 100 100 } 101 101 #endif -
library/tests/testsuite/square_mat_test.cpp
r998 r1064 16 16 template<typename TMatrix> 17 17 void test_square_matrix ( double epsilon ) { 18 19 20 18 int sz = 3; 19 mat A0 = randu ( sz, sz ); 20 mat A = A0 * A0.T(); 21 21 22 23 24 25 22 // ----------- SIZES --------- 23 TMatrix sq_mat ( A ); 24 CHECK_EQUAL ( sz, sq_mat.rows() ); 25 CHECK_EQUAL ( sz, sq_mat.cols() ); 26 26 27 28 29 27 // ----------- FULL MAT --------- 28 mat res = sq_mat.to_mat(); 29 CHECK_CLOSE ( A, res, epsilon ); 30 30 31 32 33 34 35 31 // ----------- OUTER PRODUCT UPDATE --------- 32 vec v = randu ( sz ); 33 double w = randu(); 34 TMatrix sq_mat2 = sq_mat; 35 sq_mat2.opupdt ( v, w ); 36 36 37 38 37 res = A + w * outer_product ( v, v ); 38 CHECK_CLOSE ( res, sq_mat2.to_mat(), epsilon ); 39 39 40 41 42 43 44 40 // ----------- INVERSION --------- 41 TMatrix invmat ( sz ); 42 sq_mat.inv ( invmat ); 43 mat invA = inv ( A ); 44 CHECK_CLOSE ( invA, invmat.to_mat(), epsilon ); 45 45 46 47 48 46 // ----------- DETERMINANT --------- 47 double d = det ( A ); 48 CHECK_CLOSE ( log ( d ), sq_mat.logdet(), epsilon ); 49 49 50 51 52 50 // ----------- QUADRATIC FORM --------- 51 double q = sq_mat.qform ( ones ( sz ) ); 52 CHECK_CLOSE ( sumsum ( A ), q, epsilon ); 53 53 54 55 56 54 q = sq_mat.qform ( v ); 55 double r = ( A * v ) * v; 56 CHECK_CLOSE ( r, q, epsilon ); 57 57 58 59 60 58 q = sq_mat.invqform ( v ); 59 r = ( invA * v ) * v; 60 CHECK_CLOSE ( r, q, epsilon ); 61 61 62 63 64 62 sq_mat2 = sq_mat; 63 sq_mat2.clear(); 64 CHECK_EQUAL ( 0, sq_mat2.qform ( ones ( sz ) ) ); 65 65 66 // ----------- + operator --------- 67 68 69 70 66 // ----------- + operator --------- 67 TMatrix twice = sq_mat; 68 twice += sq_mat; 69 res = 2 * A; 70 CHECK_CLOSE ( res, twice.to_mat(), epsilon ); 71 71 72 // ----------- * operator --------- 73 74 75 72 // ----------- * operator --------- 73 twice = sq_mat; 74 twice *= 2; 75 CHECK_CLOSE ( res, twice.to_mat(), epsilon ); 76 76 77 // ----------- MULTIPLICATION --------- 78 79 80 81 82 77 // ----------- MULTIPLICATION --------- 78 sq_mat2 = sq_mat; 79 mat B = randu ( sz, sz ); 80 sq_mat2.mult_sym ( B ); 81 res = ( B * A ) * B.T(); 82 CHECK_CLOSE ( res, sq_mat2.to_mat(), epsilon ); 83 83 84 85 86 87 88 84 mat C = randu ( sz, sz - 1 ); 85 TMatrix CAC ( sz - 1 ); 86 sq_mat.mult_sym_t ( C, CAC ); 87 res = ( C.T() * A ) * C; 88 CHECK_CLOSE ( res, CAC.to_mat(), epsilon ); 89 89 90 sq_mat2 = sq_mat; 91 sq_mat2.mult_sym_t ( B ); 92 res = ( B.T() * A ) * B; 93 CHECK_CLOSE ( res, sq_mat2.to_mat(), epsilon ); 94 95 // ----------- PERMUTATION --------- 96 mat M1 = randu (sz,sz); 97 mat M = M1*M1.T(); 98 vec perm_v_rand = randu(sz); 99 ivec perm_v_ids = sort_index(perm_v_rand); 100 101 mat Mperm_c=M.get_cols(perm_v_ids); 102 mat Mperm=Mperm_c.get_rows(perm_v_ids); 103 104 TMatrix T(M); 105 TMatrix Tperm(T,perm_v_ids); 90 sq_mat2 = sq_mat; 91 sq_mat2.mult_sym_t ( B ); 92 res = ( B.T() * A ) * B; 93 CHECK_CLOSE ( res, sq_mat2.to_mat(), epsilon ); 106 94 107 CHECK_CLOSE(Tperm.to_mat(), Mperm, epsilon); 95 // ----------- PERMUTATION --------- 96 mat M1 = randu (sz,sz); 97 mat M = M1*M1.T(); 98 vec perm_v_rand = randu(sz); 99 ivec perm_v_ids = sort_index(perm_v_rand); 100 101 mat Mperm_c=M.get_cols(perm_v_ids); 102 mat Mperm=Mperm_c.get_rows(perm_v_ids); 103 104 TMatrix T(M); 105 TMatrix Tperm(T,perm_v_ids); 106 107 CHECK_CLOSE(Tperm.to_mat(), Mperm, epsilon); 108 108 } 109 109 110 110 TEST ( ldmat_test ) { 111 111 test_square_matrix<ldmat> ( epsilon ); 112 112 } 113 113 114 114 TEST ( fsqmat_test ) { 115 115 test_square_matrix<fsqmat> ( epsilon ); 116 116 } 117 117 118 118 TEST ( chmat_test ) { 119 119 test_square_matrix<chmat> ( epsilon ); 120 120 } -
library/tests/testsuite/testsuite.cpp
r865 r1064 10 10 11 11 int main ( int argc, char const *argv[] ) { 12 13 14 15 16 17 18 19 20 21 22 23 24 25 12 if ( argc > 1 ) { 13 if ( !strcmp ( argv[1], "print" ) ) 14 { 15 print_test_list(); 16 return 0; 17 } 18 else 19 pick_selected_tests ( argc, argv ); 20 } else { 21 cout << endl << "TESTSUITE - a program covering all BDM unit tests." << endl << endl 22 << argv[0] << " ....................................... run all unit tests" << endl 23 << argv[0] << " particular_test_1 particular_test_2 ... run selected unit tests" << endl 24 << argv[0] << " print ................................. print all the implemented unit tests" << endl; 25 } 26 26 27 27 return run_selected_tests(); 28 28 } -
library/tests/testsuite/user_info_test.cpp
r942 r1064 12 12 public: 13 13 14 15 14 Passenger() { 15 } 16 16 }; 17 17 18 18 class Human : public Passenger { 19 19 public: 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 20 string name; 21 22 Human() { 23 name = "none"; 24 } 25 26 virtual void from_setting ( const Setting &set ) { 27 UI::get ( name, set, "name" ); 28 } 29 30 virtual void to_setting ( Setting &set ) const { 31 Setting &name_setting = set.add ( "name", Setting::TypeString ); 32 name_setting = name; 33 } 34 35 string to_string() const { 36 return name; 37 } 38 38 }; 39 39 … … 42 42 class Robot : public Passenger { 43 43 public: 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 44 int number; 45 Array<string> software; 46 47 Robot() : software() { 48 number = -1; 49 } 50 51 virtual void from_setting ( const Setting &set ) { 52 UI::get ( number, set, "number" ); 53 UI::get ( software, set, "software" ); 54 } 55 56 virtual void to_setting ( Setting &set ) const { 57 Setting &number_setting = set.add ( "number", Setting::TypeInt ); 58 number_setting = number; 59 60 UI::save ( software, set, "software" ); 61 } 62 63 string to_string() const { 64 stringstream stream; 65 stream << number; 66 for ( int i = 0; i < software.length(); i++ ) 67 stream << "_" + software ( i ); 68 return stream.str(); 69 } 70 70 }; 71 71 … … 74 74 class Transport : public root { 75 75 public: 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 76 int year; 77 string manufacturer; 78 79 Transport() : year ( 1900 ), manufacturer ( "unknown" ) { 80 } 81 82 Transport ( int year, string manufacturer ) : 83 year ( year ), manufacturer ( manufacturer ) { 84 } 85 86 virtual void from_setting ( const Setting &set ) { 87 UI::get ( year, set, "year" ); 88 UI::get ( manufacturer, set, "manufacturer" ); 89 } 90 91 virtual void to_setting ( Setting &set ) const { 92 Setting &year_setting = set.add ( "year", Setting::TypeInt ); 93 year_setting = year; 94 95 Setting &manufacturer_setting = set.add ( "manufacturer", Setting::TypeString ); 96 manufacturer_setting = manufacturer; 97 } 98 99 virtual string to_string() const 100 { 101 return "the method to_string() is not implemented"; 102 } 103 103 }; 104 104 105 105 class Car : public Transport { 106 106 public: 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 107 int kilometers; 108 Array<shared_ptr<Passenger> > passengers; 109 110 Car() : Transport() { 111 kilometers = 0; 112 } 113 114 115 Car ( int year, string manufacturer, int kilometers ) 116 : Transport ( year, manufacturer ), kilometers ( kilometers ) { 117 } 118 119 virtual void from_setting ( const Setting &set ) { 120 Transport::from_setting ( set ); 121 122 UI::get ( kilometers, set, "kilometers" ); 123 UI::get ( passengers, set, "passengers" ); 124 } 125 126 virtual void to_setting ( Setting &set ) const { 127 Transport::to_setting ( set ); 128 129 Setting &kilometers_setting = set.add ( "kilometers", Setting::TypeInt ); 130 kilometers_setting = kilometers; 131 132 UI::save ( passengers, set, "passengers" ); 133 } 134 135 string to_string() const { 136 stringstream stream; 137 stream << "A car made in " << year << " by " << manufacturer << ", having " << kilometers << " kilometers on the clock."; 138 if ( passengers.length() ) { 139 stream << "The names of passengers are as follows: "; 140 for ( int i = 0; i < passengers.length(); i++ ) 141 stream << passengers ( i )->to_string() << " "; 142 } 143 return stream.str(); 144 } 145 145 }; 146 146 … … 149 149 class Bike : public Transport { 150 150 public: 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 151 bool electricLights; 152 mat matr; 153 154 Bike() : Transport(), matr ( "2,2;3,4" ) { 155 electricLights = false; 156 } 157 158 Bike ( int year, string manufacturer, bool electricLights ) 159 : Transport ( year, manufacturer ), electricLights ( electricLights ) { 160 } 161 162 ~Bike() { 163 } 164 165 void from_setting ( const Setting &set ) { 166 Transport::from_setting ( set ); 167 168 int elights; 169 if ( UI::get ( elights, set, "electricLights", UI::optional ) ) { 170 electricLights = !!elights; 171 } 172 173 UI::get ( matr, set, "matr" ); 174 } 175 176 void to_setting ( Setting &set ) const { 177 Transport::to_setting ( set ); 178 179 Setting &electricLights_setting = set.add ( "electricLights", Setting::TypeBoolean ); 180 electricLights_setting = electricLights; 181 182 UI::save ( matr, set, "matr" ); 183 } 184 185 string to_string() const { 186 stringstream stream; 187 stream << "a bike made in " << year << " by " << manufacturer; 188 if ( electricLights ) stream << " with electric lights included"; 189 return stream.str(); 190 } 191 191 }; 192 192 … … 195 195 class Teleport : public Transport { 196 196 public: 197 198 199 197 void to_setting ( Setting &set ) const { 198 set.add ( "this throws", Setting::TypeNone ); 199 } 200 200 }; 201 201 … … 203 203 204 204 TEST ( load_test ) { 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 205 UIFile in ( "user_info_valid.cfg" ); 206 shared_ptr<Transport> pepikovo ( UI::build<Transport> ( in, "pepikovo", UI::compulsory ) ); 207 CHECK_EQUAL ( string ( "A car made in 1998 by audi, having 25000 kilometers on the clock.The names of passengers are as follows: Karlos Novak -1_CygWin_Matlab_Aimsun Karlosik Novacek " ), pepikovo->to_string() ); 208 209 Transport pepikovo_static; 210 UI::get( pepikovo_static, in, "pepikovo", UI::compulsory ); 211 CHECK_EQUAL ( string ( "the method to_string() is not implemented" ), pepikovo_static.to_string() ); 212 213 shared_ptr<Transport> jardovo ( UI::build<Transport> ( in, "jardovo", UI::compulsory ) ); 214 CHECK_EQUAL ( string ( "A car made in 1992 by liaz, having 1555000 kilometers on the clock." ), jardovo->to_string() ); 215 216 shared_ptr<Transport> ondrejovo ( UI::build<Transport> ( in, "ondrejovo", UI::compulsory ) ); 217 CHECK_EQUAL ( string ( "a bike made in 1996 by author with electric lights included" ), ondrejovo->to_string() ); 218 219 shared_ptr<Transport> elisky ( UI::build<Transport> ( in, "elisky", UI::compulsory ) ); 220 CHECK_EQUAL ( string ( "A car made in 1992 by liaz, having 1555000 kilometers on the clock." ), elisky->to_string() ); 221 222 shared_ptr<Transport> kati ( UI::build<Transport> ( in, "kati", UI::compulsory ) ); 223 CHECK_EQUAL ( string ( "A car made in 1980 by vecernicek, having 250000 kilometers on the clock." ), kati->to_string() ); 224 224 } 225 225 226 226 TEST ( load_error_test ) { 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 227 UIFile in ( "user_info_valid.cfg" ); 228 229 try { 230 shared_ptr<Robot> failing ( UI::build<Robot> ( in, "elisky", UI::compulsory ) ); 231 CHECK ( false ); 232 } catch ( UIClassException &exc ) { 233 CHECK ( exc.what() ); 234 } 235 236 try { 237 shared_ptr<Robot> failing ( UI::build<Robot> ( in, "kati", UI::compulsory ) ); 238 CHECK ( false ); 239 } catch ( UIException &exc ) { 240 CHECK ( exc.what() ); 241 } 242 243 UIFile erroneous ( "user_info_erroneous.cfg" ); 244 try { 245 shared_ptr<Transport> jardovo ( UI::build<Transport> ( erroneous, "jardovo", UI::compulsory ) ); 246 CHECK ( false ); 247 } catch ( UISettingException &exc ) { 248 CHECK ( exc.what() ); 249 } 250 250 } 251 251 252 252 TEST ( save_test ) { 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 253 UIFile in ( "user_info_valid.cfg" ); 254 shared_ptr<Transport> pepikovo ( UI::build<Transport> ( in, "pepikovo", UI::compulsory ) ); 255 256 Car audi ( 1968, "zyl", 200 ); 257 Car liaz ( 1989, "skoda", 1000 ); 258 Bike author ( 2001, "noname", false ); 259 UIFile out; 260 261 UI::save ( &audi, out, "marty" ); 262 UI::save ( &liaz, out, "bohousovo" ); 263 UI::save ( &author, out, "karlovo" ); 264 UI::save ( pepikovo, out, "pepikovo" ); 265 out.save ( "user_info_output.cfg" ); 266 267 string expected ( load_test_file ( "user_info_matrix.cfg" ) ); 268 string actual ( load_test_file ( "user_info_output.cfg" ) ); 269 CHECK_EQUAL ( expected, actual ); 270 270 } 271 271 272 272 273 273 TEST ( save_error_test ) { 274 275 276 277 278 279 280 281 282 283 } 274 UIFile out; 275 276 Teleport teleport; 277 try { 278 UI::save ( &teleport, out, "unsaveable" ); 279 CHECK ( false ); 280 } catch ( UIException &exc ) { 281 CHECK ( exc.what() ); 282 } 283 }