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/testSmp.cpp

    r488 r504  
    3232 
    3333        cout << "====== ENorm ====== " << endl; 
    34         enorm<ldmat> eN; 
    35         eN.set_parameters ( mu0, R ); 
    36         mat Smp = eN.sample_m ( N ); 
     34        shared_ptr<enorm<ldmat> > eN = new enorm<ldmat>(); 
     35        eN->set_parameters ( mu0, R ); 
     36        mat Smp = eN->sample_m ( N ); 
    3737 
    3838        disp ( mu0, R.to_mat(), Smp ); 
     
    4949        vec a = "100000,10000"; 
    5050        vec b = a / 10.0; 
    51         egamma eG; 
    52         eG.set_parameters ( a, b ); 
     51        shared_ptr<egamma> eG = new egamma(); 
     52        eG->set_parameters ( a, b ); 
    5353 
    54         cout << eG.evallog ( a ) << endl; 
    55         Smp = eG.sample_m ( N ); 
     54        cout << eG->evallog ( a ) << endl; 
     55        Smp = eG->sample_m ( N ); 
    5656 
    5757        vec g_mu = elem_div ( a, b ); 
     
    6060 
    6161        cout << "====== MGamma ====== " << endl; 
    62         mgamma mG; 
     62        shared_ptr<mgamma> mG = new mgamma(); 
    6363        double k = 10.0; 
    64         mG.set_parameters ( k, mu0 ); 
     64        mG->set_parameters ( k, mu0 ); 
    6565 
    66         Smp = mG.samplecond_m ( mu0, N ); 
     66        Smp = mG->samplecond_m ( mu0, N ); 
    6767        disp ( mu0, pow ( mu0, 2.0 ) / k, Smp ); 
    6868 
    6969        cout << "======= EMix ======== " << endl; 
    70         emix eMix; 
    71         Array<epdf*> Coms ( 2 ); 
    72         Coms ( 0 ) = &eG; 
    73         Coms ( 1 ) = &eN; 
     70        shared_ptr<emix> eMix = new emix(); 
     71        Array<shared_ptr<epdf> > Coms ( 2 ); 
     72        Coms ( 0 ) = eG; 
     73        Coms ( 1 ) = eN; 
    7474 
    75         eMix.set_parameters ( vec_2 ( 0.5, 0.5 ), Coms ); 
    76         vec smp = eMix.sample(); 
    77         Smp = eMix.sample_m ( N ); 
    78         disp ( eMix.mean(), zeros ( 2 ), Smp ); 
     75        eMix->set_parameters ( vec_2 ( 0.5, 0.5 ), Coms ); 
     76        vec smp = eMix->sample(); 
     77        Smp = eMix->sample_m ( N ); 
     78        disp ( eMix->mean(), zeros ( 2 ), Smp ); 
    7979 
    8080        cout << "======= MEpdf ======== " << endl; 
    81         mepdf meMix ( &eMix ); 
     81        mepdf meMix ( eMix ); 
    8282 
    8383        Smp = meMix.samplecond_m ( mu0, N ); 
    84         disp ( eMix.mean(), zeros ( 2 ), Smp ); 
     84        disp ( eMix->mean(), zeros ( 2 ), Smp ); 
    8585 
    8686        cout << "======= MMix ======== " << endl; 
    8787        mmix mMix; 
    8888        Array<shared_ptr<mpdf> > mComs ( 2 ); 
    89         mComs ( 0 ) = &mG; 
    90         eN.set_mu ( vec_2 ( 0.0, 0.0 ) ); 
    91         mepdf mEnorm ( &eN ); 
    92         mComs ( 1 ) = &mEnorm; 
     89 
     90        // emix::set_parameters requires the first mpdf to be named 
     91        mG->set_rv(x); 
     92        mG->set_rvc(y); 
     93        mComs ( 0 ) = mG; 
     94 
     95        eN->set_mu ( vec_2 ( 0.0, 0.0 ) ); 
     96        shared_ptr<mepdf> mEnorm = new mepdf ( eN ); 
     97        mComs ( 1 ) = mEnorm; 
    9398        mMix.set_parameters ( vec_2 ( 0.5, 0.5 ), mComs ); 
    9499 
    95100        Smp = mMix.samplecond_m ( mu0, N ); 
    96         disp ( 0.5*eN.mean()+0.4*eG.mean(), zeros ( 2 ), Smp ); 
     101        disp ( 0.5 * eN->mean() + 0.4 * eG->mean(), zeros ( 2 ), Smp ); 
    97102 
    98103        cout << "======= EProd ======== " << endl; 
    99         // we have to change eG.rv to y 
    100         eN.set_rv ( x ); 
    101         eG.set_rv ( y ); 
     104        // we have to change eG->rv to y 
     105        eN->set_rv ( x ); 
     106        eG->set_rv ( y ); 
    102107        //create array 
    103108        Array<mpdf*> A ( 2 ); 
    104         mepdf meN ( &eN ); 
    105         mepdf meG ( &eG ); 
     109        mepdf meN ( eN.get() ); 
     110        mepdf meG ( eG.get() ); 
    106111        A ( 0 ) = &meN; 
    107112        A ( 1 ) = &meG; 
     
    114119        vec v0 = vec ( 0 ); 
    115120        Smp = eP.samplecond ( v0, N ); 
    116         disp ( concat ( eN.mean(), eG.mean() ), epV, Smp ); 
     121        disp ( concat ( eN->mean(), eG->mean() ), epV, Smp ); 
    117122 
    118123        cout << "======= eWishart ======== " << endl;