Show
Ignore:
Timestamp:
08/12/09 09:27:40 (15 years ago)
Author:
vbarta
Message:

returning shared pointers from epdf::marginal & epdf::condition; testsuite run leaks down from 8402 to 6510 bytes

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • library/tests/emix_test.cpp

    r501 r504  
    1515        RV xy = concat ( x, y ); 
    1616 
    17         enorm<ldmat> E1; 
    18         E1.set_rv ( xy ); 
     17        shared_ptr<enorm<ldmat> > E1 = new enorm<ldmat>(); 
     18        E1->set_rv ( xy ); 
     19        E1->set_parameters ( "1.00054 1.0455" , mat ( "0.740142 -0.259015; -0.259015 1.0302" ) ); 
    1920 
    20         E1.set_parameters ( "1.00054 1.0455" , mat ( "0.740142 -0.259015; -0.259015 1.0302" ) ); 
    21         enorm<ldmat> E2; 
    22         E2.set_rv ( xy ); 
    23         E2.set_parameters ( "-1.2 -0.1" , mat ( "1 0.4; 0.4 0.5" ) ); 
     21        shared_ptr<enorm<ldmat> > E2 = new enorm<ldmat>(); 
     22        E2->set_rv ( xy ); 
     23        E2->set_parameters ( "-1.2 -0.1" , mat ( "1 0.4; 0.4 0.5" ) ); 
    2424 
    25         Array<epdf*> A1 ( 1 ); 
    26         A1 ( 0 ) = &E1; 
     25        Array<shared_ptr<epdf> > A1 ( 1 ); 
     26        A1 ( 0 ) = E1; 
    2727 
    2828        emix M1; 
    2929        M1.set_rv ( xy ); 
    30         M1.set_parameters ( vec ( "1" ), A1, false ); 
     30        M1.set_parameters ( vec ( "1" ), A1 ); 
    3131 
    3232        // test if ARX and emix with one ARX are the same 
    33         epdf* Mm = M1.marginal ( y ); 
    34         epdf* Am = E1.marginal ( y ); 
    35         mpdf* Mc = M1.condition ( y ); 
    36         mpdf* Ac = E1.condition ( y ); 
     33        shared_ptr<epdf> Mm = M1.marginal ( y ); 
     34        shared_ptr<epdf> Am = E1->marginal ( y ); 
     35        shared_ptr<mpdf> Mc = M1.condition ( y ); 
     36        shared_ptr<mpdf> Ac = E1->condition ( y ); 
    3737 
    38         mlnorm<ldmat> *wacnd = dynamic_cast<mlnorm<ldmat> *>(Ac); 
     38        mlnorm<ldmat> *wacnd = dynamic_cast<mlnorm<ldmat> *>( Ac.get() ); 
    3939        CHECK(wacnd); 
    4040        if ( wacnd ) { 
     
    5151 
    5252        // mixture with two components 
    53         Array<epdf*> A2 ( 2 ); 
    54         A2 ( 0 ) = &E1; 
    55         A2 ( 1 ) = &E2; 
     53        Array<shared_ptr<epdf> > A2 ( 2 ); 
     54        A2 ( 0 ) = E1; 
     55        A2 ( 1 ) = E2; 
    5656 
    5757        emix M2; 
    5858        M2.set_rv ( xy ); 
    59         M2.set_parameters ( vec ( "1" ), A2, false ); 
     59        M2.set_parameters ( vec ( "1" ), A2 ); 
    6060 
    6161 
     
    7474        CHECK_CLOSE ( mat ( "0.740142 -0.259015; -0.259015 1.0302" ), Er, 2.0 ); 
    7575 
    76         epdf *nm2mrg = M2.marginal ( y ); 
    77         CHECK ( nm2mrg ); 
    78         shared_ptr<epdf> Mg ( nm2mrg ); 
    79         mpdf *Cn = M2.condition ( x ); 
    80         CHECK ( Cn ); 
    81  
    82 #if false 
    83         it_file it ( "emix_test.it" ); 
    84         it << Name ( "Smp" ) << Smp; 
    85 #endif 
     76        shared_ptr<epdf> Mg = M2.marginal ( y ); 
     77        CHECK ( Mg.get() ); 
     78        shared_ptr<mpdf> Cn = M2.condition ( x ); 
     79        CHECK ( Cn.get() ); 
    8680 
    8781        // marginal mean 
    8882        CHECK_CLOSE ( vec ( "1.0" ), Mg->mean(), 0.1 ); 
    89  
    90 #if false 
    91         // putting them back together 
    92         mepdf mMg ( Mg ); 
    93         Array<mpdf*> AA ( 2 ); 
    94         AA ( 0 ) = Cn; 
    95         AA ( 1 ) = &mMg; 
    96         mprod mEp ( AA ); 
    97  
    98         for ( int j = 0; j < N; j++ ) { 
    99                 ll2 ( j ) = mEp.evallogcond ( Smp.get_col ( j ), vec ( 0 ) ); 
    100         } 
    101         it << Name ( "ll" ) << ll; 
    102         it << Name ( "ll2" ) << ll2; 
    103 #endif 
    10483}