TEST(multi_view, basic) {
  using view = hhxx::multi_view<std::vector<int>::iterator>;
  std::vector<int> vec(8);
  std::iota(vec.begin(), vec.end(), 1);
  view view8(vec.begin(), 8);
  for (auto i = 0; i < 8; ++i) {
    EXPECT_EQ(i + 1, view8(i));
  }
  const int idx = 0;
  EXPECT_EQ(8, std::distance(std::begin(view8), std::end(view8)));
  std::for_each(std::begin(view8), std::end(view8),
    [idx = idx](int x) mutable {
      EXPECT_EQ(++idx, x);
    });
  view view2x4(vec.begin(), 2, 4);
  for (auto i = 0; i < 4; ++i) {
    EXPECT_EQ(i + 1, view2x4(0, i));
  }
  EXPECT_EQ(4, std::distance(view2x4.begin(0), view2x4.end(0)));
  std::for_each(view2x4.begin(0), view2x4.end(0),
    [idx = idx](int x) mutable {
      EXPECT_EQ(++idx, x);
    });
  for (auto i = 0; i < 4; ++i) {
    EXPECT_EQ(5 + i, view2x4(1, i));
  }
  EXPECT_EQ(4, std::distance(view2x4.begin(1), view2x4.end(1)));
  std::for_each(view2x4.begin(1), view2x4.end(1),
    [idx = idx](int x) mutable {
      EXPECT_EQ(++idx + 4, x);
    });
  auto view2x2x2 = hhxx::make_multi_view(vec.begin(), 2, 2, 2);
  EXPECT_EQ(1, view2x2x2(0, 0, 0));
  EXPECT_EQ(2, view2x2x2(0, 0, 1));
  EXPECT_EQ(3, view2x2x2(0, 1, 0));
  EXPECT_EQ(4, view2x2x2(0, 1, 1));
  EXPECT_EQ(5, view2x2x2(1, 0, 0));
  EXPECT_EQ(6, view2x2x2(1, 0, 1));
  EXPECT_EQ(7, view2x2x2(1, 1, 0));
  EXPECT_EQ(8, view2x2x2(1, 1, 1));
  EXPECT_EQ(2, std::distance(view2x2x2.begin(1, 1), view2x2x2.end(1, 1)));
  std::for_each(view2x2x2.begin(1, 1), view2x2x2.end(1, 1),
    [idx = idx](int x) mutable {
      EXPECT_EQ(++idx + 6, x);
    });
  EXPECT_EQ(1, view2x2x2());
  EXPECT_EQ(5, view2x2x2(1));
}
Beispiel #2
0
int main() {
    
    std::vector<double> dataz( 8, 0.0f );
    buffer_view<double> view8x1( dataz );
    buffer_view<double, 2> view2x4( dataz, 2, 4 );
    
    array_print( dataz );
    view8x1[0] = 2.0f;
    view8x1[1] = 2.0f;
    
    array_print( dataz );
    view2x4[{1, 1}] = 3.0f;
    view2x4[{1, 0}] = 3.0f;
    
    array_print( dataz );
    // calls will fail
    //buffer_view<double, 2> view2x4fail( dataz );
    //view2x4[ 1 ] = 50.0f;
}