// -*- C++ -*- #include #include "gtest/gtest.h" #include #include "cnorxz.h" namespace MAT = CNORXZ; namespace { using namespace MAT; template void swapFactory(std::shared_ptr& fptr, std::initializer_list ilist) { vector tmp = ilist; auto nptr = std::make_shared( tmp ); fptr = nptr; } template void swapMFactory(std::shared_ptr& fptr, const Rs&... rs) { auto nptr = std::make_shared( rs... ); fptr = nptr; } template auto mkt(Ts&&... ts) -> decltype(std::make_tuple(ts...)) { return std::make_tuple(ts...); } class MATest_1Dim : public ::testing::Test { protected: typedef SingleRangeFactory SRF; typedef SRF::oType SRange; MATest_1Dim() { swapFactory(rfbptr, {'x', 'y', 'l', 'f', 'g'} ); srptr = std::dynamic_pointer_cast( rfbptr->create() ); } std::shared_ptr rfbptr; std::shared_ptr srptr; vector vv = { 3.141, 2.718, 1.618, 0.693, 0.577 }; }; /* class MATest_MDim : public ::testing::Test { protected: typedef SingleRangeFactory SRF; typedef SRF::oType SRange; typedef MultiRangeFactory MRF; typedef MRF::oType MRange; MATest_MDim() { swapFactory(rfbptr, {'x', 'y'} ); sr1ptr = std::dynamic_pointer_cast( rfbptr->create() ); swapFactory(rfbptr, {'a', 'l', 'f', 'g'} ); sr2ptr = std::dynamic_pointer_cast( rfbptr->create() ); swapFactory(rfbptr, {'1', '2', '3'} ); sr3ptr = std::dynamic_pointer_cast( rfbptr->create() ); swapFactory(rfbptr, { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X' } ); sr4ptr = std::dynamic_pointer_cast( rfbptr->create() ); swapMFactory(rfbptr, sr1ptr, sr2ptr); mrptr = std::dynamic_pointer_cast( rfbptr->create() ); } std::shared_ptr rfbptr; std::shared_ptr sr1ptr; std::shared_ptr sr2ptr; std::shared_ptr sr3ptr; std::shared_ptr sr4ptr; std::shared_ptr mrptr; vector vv = { 2.917, 9.436, 0.373, 7.192, 7.315, 1.536, 4.892, 0.280, 8.870, 4.790, 8.215, 5.063, 1.530, 3.084, 1.609, 4.847, 8.175, 0.112, 6.712, 6.408, 1.959, 0.331, 4.209, 2.951 }; }; */ TEST_F(MATest_1Dim, SimpleCall) { DArray a(srptr, vv); Array ma(srptr, vv); EXPECT_EQ( ma.size(), 5u); /* EXPECT_EQ( ma.isConst(), false); EXPECT_EQ( ma.isSlice(), false); auto i = ma.cbegin(); EXPECT_EQ( ma[ i.at('x') ], 3.141); EXPECT_EQ( ma[ i.at('y') ], 2.718); EXPECT_EQ( ma[ i.at('l') ], 1.618); EXPECT_EQ( ma[ i.at('f') ], 0.693); EXPECT_EQ( ma[ i.at('g') ], 0.577); */ } /* TEST_F(MATest_1Dim, ForLoop) { vector v2 = { 0.693 , 2.718, 3.141, 1.618, 9.98 }; Array ma(srptr, std::move( v2 ) ); size_t cnt = 0; for(auto el: ma){ if(cnt == 0){ EXPECT_EQ(el, 0.693); } else if(cnt == 1u){ EXPECT_EQ(el, 2.718); } else if(cnt == 2u){ EXPECT_EQ(el, 3.141); } else if(cnt == 3u){ EXPECT_EQ(el, 1.618); } else if(cnt == 4u){ EXPECT_EQ(el, 9.98); } else { EXPECT_EQ(cnt, 0u); } ++cnt; } EXPECT_EQ(cnt, ma.size()); } */ TEST_F(MATest_1Dim, ReFormat) { swapFactory( rfbptr, { 'a', 'c', 'e', 'g', 'i' } ); std::shared_ptr sr2 = std::dynamic_pointer_cast( rfbptr->create() ); Array ma(srptr, vv); auto i = ma.cbegin(); EXPECT_EQ( ma[ i.at('x') ], 3.141); auto ma2 = ma.format( sr2 ); auto j = ma2.cbegin(); EXPECT_EQ( ma[ j.at('a') ], 3.141); EXPECT_EQ( ma[ j.at('c') ], 2.718); EXPECT_EQ( ma[ j.at('e') ], 1.618); EXPECT_EQ( ma[ j.at('g') ], 0.693); EXPECT_EQ( ma[ j.at('i') ], 0.577); } /* TEST_F(MATest_MDim, SimpleCall) { Array ma(mrptr, sr3ptr, vv); EXPECT_EQ( ma.size(), 24u ); EXPECT_EQ( ma.range()->dim(), 2u ); auto i = ma.cbegin(); EXPECT_EQ( ma[ i.at( mkt( mkt('x', 'a'), '1' ) ) ], 2.917); EXPECT_EQ( ma[ i.at( mkt( mkt('x', 'a'), '2' ) ) ], 9.436); EXPECT_EQ( ma.at( mkt( mkt('x', 'a'), '1' ) ), 2.917); EXPECT_EQ( ma.at( mkt( mkt('x', 'a'), '2' ) ), 9.436); ma.at( mkt( mkt('x', 'a'), '2' ) ) = 4.444; EXPECT_EQ( ma[ i.at( mkt( mkt('x', 'a'), '2' ) ) ], 4.444 ); } TEST_F(MATest_MDim, ReFormat) { Array ma(mrptr, sr3ptr, vv); auto ma2 = ma.format( sr4ptr ); auto i = ma2.cbegin(); EXPECT_EQ( ma2.at('A') , 2.917 ); EXPECT_EQ( ma2[ i.at('G') ], 4.892 ); EXPECT_EQ( ma2.at('J') , 4.790 ); EXPECT_EQ( ma2[ i.at('M') ], 1.530 ); EXPECT_EQ( ma2.at('W') , 4.209 ); } TEST_F(MATest_MDim, SliceTest1) { Array ma(mrptr, sr3ptr, vv); Slice sl(sr3ptr); auto i = MAT::getIndex(sr3ptr); auto mi = MAT::getIndex(mrptr); mi->at( mkt('y', 'f') ); sl.define(i) = ma(mi, i); EXPECT_EQ( sl.at('1'), 6.712 ); EXPECT_EQ( sl.at('2'), 6.408 ); EXPECT_EQ( sl.at('3'), 1.959 ); Slice sl2(sr2ptr); auto j = MAT::getIndex(sr3ptr); auto mj = MAT::getIndex(mrptr); mj->at( mkt('y','a') ); j->at('2'); auto jj = mj->template getPtr<1>(); sl2.define(jj) = ma(mj, j); EXPECT_EQ( sl2.at('a'), 3.084 ); EXPECT_EQ( sl2.at('l'), 8.175 ); EXPECT_EQ( sl2.at('f'), 6.408 ); EXPECT_EQ( sl2.at('g'), 4.209 ); Slice sl3(sr3ptr, sr1ptr, sr2ptr); mj->at( mkt('x','a') ); auto j1 = MAT::getIndex(sr1ptr); auto j2 = MAT::getIndex(sr2ptr); (*mj)(j1,j2); j->at('1'); sl3.define(j, j1, j2) = ma(mj, j); auto ci = sl3.begin(); EXPECT_EQ( sl3.at( mkt('1', 'x','a') ), 2.917 ); EXPECT_EQ( *ci, 2.917 ); EXPECT_EQ( sl3.at( mkt('2', 'x','a') ), 9.436 ); EXPECT_EQ( sl3.at( mkt('3', 'x','a') ), 0.373 ); EXPECT_EQ( sl3.at( mkt('1', 'x','l') ), 7.192 ); EXPECT_EQ( *(++ci), 7.192 ); EXPECT_EQ( sl3.at( mkt('2', 'x','l') ), 7.315 ); EXPECT_EQ( sl3.at( mkt('3', 'x','l') ), 1.536 ); EXPECT_EQ( sl3.at( mkt('1', 'x','f') ), 4.892 ); EXPECT_EQ( *(++ci), 4.892 ); EXPECT_EQ( sl3.at( mkt('2', 'x','f') ), 0.280 ); EXPECT_EQ( sl3.at( mkt('3', 'x','f') ), 8.870 ); EXPECT_EQ( sl3.at( mkt('1', 'x','g') ), 4.790 ); EXPECT_EQ( *(++ci), 4.790 ); EXPECT_EQ( sl3.at( mkt('2', 'x','g') ), 8.215 ); EXPECT_EQ( sl3.at( mkt('3', 'x','g') ), 5.063 ); EXPECT_EQ( sl3.at( mkt('1', 'y','a') ), 1.530 ); EXPECT_EQ( *(++ci), 1.530 ); EXPECT_EQ( sl3.at( mkt('2', 'y','a') ), 3.084 ); EXPECT_EQ( sl3.at( mkt('3', 'y','a') ), 1.609 ); EXPECT_EQ( sl3.at( mkt('1', 'y','l') ), 4.847 ); EXPECT_EQ( *(++ci), 4.847 ); EXPECT_EQ( sl3.at( mkt('2', 'y','l') ), 8.175 ); EXPECT_EQ( sl3.at( mkt('3', 'y','l') ), 0.112 ); EXPECT_EQ( sl3.at( mkt('1', 'y','f') ), 6.712 ); EXPECT_EQ( *(++ci), 6.712 ); EXPECT_EQ( sl3.at( mkt('2', 'y','f') ), 6.408 ); EXPECT_EQ( sl3.at( mkt('3', 'y','f') ), 1.959 ); EXPECT_EQ( sl3.at( mkt('1', 'y','g') ), 0.331 ); EXPECT_EQ( *(++ci), 0.331 ); EXPECT_EQ( sl3.at( mkt('2', 'y','g') ), 4.209 ); EXPECT_EQ( sl3.at( mkt('3', 'y','g') ), 2.951 ); EXPECT_EQ( *(++ci), 9.436 ); EXPECT_EQ( *(++ci), 7.315 ); } */ } // end namespace int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }