示例#1
0
TEST( MultidimTest, CopyFromMatrix2D)
{
    MultidimArray<double> mdTarget;
    Matrix2D<double> mSource(2,2);
    mSource(0,0) = 1;
    mSource(0,1) = 2;
    mSource(1,0) = 3;
    mSource(1,1) = 4;

    mdTarget=mSource;

    EXPECT_EQ(dMn(mSource, 0),DIRECT_MULTIDIM_ELEM(mdTarget,0)) << "MultidimArray: copy from Matrix2D operator failed";
    EXPECT_EQ(dMn(mSource, 1),DIRECT_MULTIDIM_ELEM(mdTarget,1)) << "MultidimArray: copy from Matrix2D operator failed";
    EXPECT_EQ(dMn(mSource, 2),DIRECT_MULTIDIM_ELEM(mdTarget,2)) << "MultidimArray: copy from Matrix2D operator failed";
    EXPECT_EQ(dMn(mSource, 3),DIRECT_MULTIDIM_ELEM(mdTarget,3)) << "MultidimArray: copy from Matrix2D operator failed";
}
示例#2
0
TEST( MultidimTest, typeCastComplex)
{
    MultidimArray<std::complex <double> > mdTarget;
    MultidimArray<double> mSource(2,2);

    mSource(0,0) = 1;
    mSource(0,1) = 2;
    mSource(1,0) = 3;
    mSource(1,1) = 4;

    typeCast(mSource,mdTarget);

    EXPECT_EQ(DIRECT_MULTIDIM_ELEM(mSource, 0),DIRECT_MULTIDIM_ELEM(mdTarget,0).real());
    EXPECT_EQ(DIRECT_MULTIDIM_ELEM(mSource, 1),DIRECT_MULTIDIM_ELEM(mdTarget,1).real());
    EXPECT_EQ(DIRECT_MULTIDIM_ELEM(mSource, 2),DIRECT_MULTIDIM_ELEM(mdTarget,2).real());
    EXPECT_EQ(DIRECT_MULTIDIM_ELEM(mSource, 3),DIRECT_MULTIDIM_ELEM(mdTarget,3).real());

    EXPECT_EQ(0,DIRECT_MULTIDIM_ELEM(mdTarget,0).imag()) ;
    EXPECT_EQ(0,DIRECT_MULTIDIM_ELEM(mdTarget,1).imag()) ;
    EXPECT_EQ(0,DIRECT_MULTIDIM_ELEM(mdTarget,2).imag()) ;
    EXPECT_EQ(0,DIRECT_MULTIDIM_ELEM(mdTarget,3).imag()) ;

}
示例#3
0
TEST( MultidimTest, getRealFromComplex)
{
    MultidimArray<std::complex <double> > mSource(2,2);
    MultidimArray<double> mdTarget;

    A2D_ELEM(mSource,0,0) = (std::complex<double>(0,0));
    A2D_ELEM(mSource,1,0) = (std::complex<double>(1,0));
    A2D_ELEM(mSource,0,1) = (std::complex<double>(2,0));
    A2D_ELEM(mSource,1,1) = (std::complex<double>(3,0));

    mSource.getReal(mdTarget);

    EXPECT_EQ(DIRECT_MULTIDIM_ELEM(mSource, 0).real(),DIRECT_MULTIDIM_ELEM(mdTarget,0));
    EXPECT_EQ(DIRECT_MULTIDIM_ELEM(mSource, 1).real(),DIRECT_MULTIDIM_ELEM(mdTarget,1));
    EXPECT_EQ(DIRECT_MULTIDIM_ELEM(mSource, 2).real(),DIRECT_MULTIDIM_ELEM(mdTarget,2));
    EXPECT_EQ(DIRECT_MULTIDIM_ELEM(mSource, 3).real(),DIRECT_MULTIDIM_ELEM(mdTarget,3));
}
示例#4
0
TEST( MultidimTest, modulo)
{
    MultidimArray<double> mSource(3,3);
    MultidimArray<double> mTarget(3,3);

    A2D_ELEM(mSource,0,0) = 0;
    A2D_ELEM(mSource,0,1) = 10;
    A2D_ELEM(mSource,0,2) = 3.14159265;

    A2D_ELEM(mSource,1,0) = (20*3.14159265);
    A2D_ELEM(mSource,1,1) = (3.14159265/2);
    A2D_ELEM(mSource,1,2) = (3*3.14159265/2);

    A2D_ELEM(mSource,2,0) = (10*3.14159265/2);
    A2D_ELEM(mSource,2,1) = (50*3.14159265);
    A2D_ELEM(mSource,2,2) = (2*3.14159265);

    double value = 2*3.14159265;
    mod(mSource,mTarget,value);
    //We test the obtained values with the results obtained from method "mod" of Matlab
    ASSERT_NEAR( A2D_ELEM(mTarget,0,0), 0,        1e-3);
    ASSERT_NEAR( A2D_ELEM(mTarget,0,1), 3.7168,   1e-3 );
    ASSERT_NEAR( A2D_ELEM(mTarget,0,2), 3.1416,   1e-3);

    ASSERT_NEAR( A2D_ELEM(mTarget,1,0), 0,        1e-3);
    ASSERT_NEAR( A2D_ELEM(mTarget,1,1), 1.5708,   1e-3);
    ASSERT_NEAR( A2D_ELEM(mTarget,1,2), 4.7124,   1e-2);

    ASSERT_NEAR( A2D_ELEM(mTarget,2,0), 3.1416,   1e-3);
    if (A2D_ELEM(mTarget,2,1) > (value - 1e-3))
        ASSERT_NEAR( A2D_ELEM(mTarget,2,1), value,        1e-3);
    else
        ASSERT_NEAR( A2D_ELEM(mTarget,2,1), 0,        1e-3);
    ASSERT_NEAR( A2D_ELEM(mTarget,2,2), 0,        1e-3);

}
示例#5
0
TEST( MultidimTest, sincos)
{
    MultidimArray<double> mSource(2,2);
    MultidimArray<double> mdSIN;
    MultidimArray<double> mdCOS;

    A2D_ELEM(mSource,0,0) = 0;
    A2D_ELEM(mSource,1,0) = 3.14159265/2;
    A2D_ELEM(mSource,0,1) = 3.14159265;
    A2D_ELEM(mSource,1,1) = (3*3.14159265)/2;

    sincos(mSource,mdSIN,mdCOS);

    ASSERT_TRUE( (A2D_ELEM(mdSIN,0,0) -  0)<0.0001);
    ASSERT_TRUE( (A2D_ELEM(mdSIN,1,0) -  1)<0.0001);
    ASSERT_TRUE( (A2D_ELEM(mdSIN,0,1) -  0)<0.0001);
    ASSERT_TRUE( (A2D_ELEM(mdSIN,1,1) +  1)<0.0001);

    ASSERT_TRUE( (A2D_ELEM(mdCOS,0,0) -  1)<0.0001);
    ASSERT_TRUE( (A2D_ELEM(mdCOS,1,0) -  0)<0.0001);
    ASSERT_TRUE( (A2D_ELEM(mdCOS,0,1) +  1)<0.0001);
    ASSERT_TRUE( (A2D_ELEM(mdCOS,1,1) -  0)<0.0001);

}
示例#6
0
 R operator()(Args...args) {
     mRaw(args...);
     return mSource();
 }
示例#7
0
 void operator()(Args...args) {
     return mRaw(mSource(),args...);
 }