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"; }
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()) ; }
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)); }
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); }
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); }
R operator()(Args...args) { mRaw(args...); return mSource(); }
void operator()(Args...args) { return mRaw(mSource(),args...); }