// -*- C++ -*- #include #include "gtest/gtest.h" #include #include "ranges/rheader.h" //#include "multi_array_header.h" namespace MAT = MultiArrayTools; namespace { using namespace MAT; template void swapFactory(std::shared_ptr& fptr, std::initializer_list ilist) { std::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 AnonymousIndexTest : public ::testing::Test { protected: typedef SingleRangeFactory SRF; typedef SRF::oType SRange; typedef MultiRangeFactory M3RF; typedef M3RF::oType M3Range; typedef MultiRangeFactory MasterRF; typedef MasterRF::oType MasterRange; typedef ContainerRangeFactory CRF; typedef CRF::oType CRange; typedef ContainerIndex CIndex; AnonymousIndexTest() { swapFactory(rfbptr, { 'e', 'b', 'n' } ); sr1ptr = std::dynamic_pointer_cast( rfbptr->create() ); swapFactory(rfbptr, { 'x', 'y', 'l', 'f' } ); sr2ptr = std::dynamic_pointer_cast( rfbptr->create() ); swapFactory(rfbptr, { 'a', 'b' } ); std::shared_ptr temp1 = std::dynamic_pointer_cast( rfbptr->create() ); swapFactory(rfbptr, { '1' } ); std::shared_ptr temp2 = std::dynamic_pointer_cast( rfbptr->create() ); swapFactory(rfbptr, { '0', '7' } ); std::shared_ptr temp3 = std::dynamic_pointer_cast( rfbptr->create() ); swapMFactory(rfbptr, temp1, temp2, temp3 ); m3rptr = std::dynamic_pointer_cast( rfbptr->create() ); swapMFactory(rfbptr, sr1ptr, m3rptr, sr2ptr); mstrptr = std::dynamic_pointer_cast( rfbptr->create() ); swapMFactory(rfbptr, m3rptr, sr2ptr); cr1ptr = std::dynamic_pointer_cast( rfbptr->create() ); swapMFactory(rfbptr, m3rptr, sr1ptr); cr2ptr = std::dynamic_pointer_cast( rfbptr->create() ); } std::shared_ptr rfbptr; std::shared_ptr sr1ptr; std::shared_ptr sr2ptr; std::shared_ptr m3rptr; std::shared_ptr mstrptr; std::shared_ptr cr1ptr; std::shared_ptr cr2ptr; }; TEST_F(AnonymousIndexTest, Cast1) { AnonymousRangeFactory arf1(sr1ptr,m3rptr); auto ar1a = std::dynamic_pointer_cast( arf1.create() ); arf1.append(sr2ptr); auto ar1b = std::dynamic_pointer_cast( arf1.create() ); AnonymousRangeFactory arf2(sr1ptr,m3rptr,sr2ptr); auto ar2 = std::dynamic_pointer_cast( arf2.create() ); EXPECT_EQ(ar1b.get(), ar2.get()); EXPECT_EQ(ar1a->size(), sr1ptr->size() * m3rptr->size()); EXPECT_EQ(ar2->size(), sr1ptr->size() * m3rptr->size() * sr2ptr->size()); EXPECT_EQ(ar1a->sub(0)->size(), sr1ptr->size()); EXPECT_EQ(ar1a->sub(1)->size(), m3rptr->size()); EXPECT_EQ(ar2->sub(0)->size(), sr1ptr->size()); EXPECT_EQ(ar2->sub(1)->size(), m3rptr->size()); EXPECT_EQ(ar2->sub(2)->size(), sr2ptr->size()); } TEST_F(AnonymousIndexTest, Cast2) { AnonymousRangeFactory arf2(sr1ptr,m3rptr,sr2ptr); auto ar = std::dynamic_pointer_cast( arf2.create() ); auto mr = ar->template scast(1,2); EXPECT_EQ(mr->template getPtr<0>()->size(), sr1ptr->size()); EXPECT_EQ(mr->template getPtr<1>()->size(), m3rptr->size() * sr2ptr->size()); } } // end namespace int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }