/*************************************************************************** * Copyright (c) Johan Mabille, Sylvain Corlay and Wolf Vollprecht * * Copyright (c) QuantStack * * * * Distributed under the terms of the BSD 3-Clause License. * * * * The full license is in the file LICENSE, distributed with this software. * ****************************************************************************/ #include "xtensor/containers/xarray.hpp" #include "test_common.hpp" namespace xt { using vec_type = std::vector; using adaptor_type = xarray_adaptor; TEST(xarray_adaptor, shaped_constructor) { SUBCASE("row_major constructor") { row_major_result<> rm; vec_type v; adaptor_type a(v, rm.shape(), layout_type::row_major); compare_shape(a, rm); } SUBCASE("column_major constructor") { column_major_result<> cm; vec_type v; adaptor_type a(v, cm.shape(), layout_type::column_major); compare_shape(a, cm); } } TEST(xarray_adaptor, strided_constructor) { central_major_result<> cmr; vec_type v; adaptor_type a(v, cmr.shape(), cmr.strides()); compare_shape(a, cmr); } TEST(xarray_adaptor, copy_semantic) { central_major_result<> res; int value = 2; vec_type v(res.size(), value); adaptor_type a(v, res.shape(), res.strides()); SUBCASE("copy constructor") { adaptor_type b(a); compare_shape(a, b); EXPECT_EQ(a.storage(), b.storage()); } SUBCASE("assignment operator") { row_major_result<> r; vec_type v2(r.size(), 0); adaptor_type c(v2, r.shape()); EXPECT_NE(a.storage(), c.storage()); c = a; compare_shape(a, c); EXPECT_EQ(a.storage(), c.storage()); } } TEST(xarray_adaptor, move_semantic) { central_major_result<> res; int value = 2; vec_type v(res.size(), value); adaptor_type a(v, res.shape(), res.strides()); SUBCASE("move constructor") { adaptor_type tmp(a); adaptor_type b(std::move(tmp)); compare_shape(a, b); EXPECT_EQ(a.storage(), b.storage()); } SUBCASE("move assignment") { row_major_result<> r; vec_type v2(r.size(), 0); adaptor_type c(v2, r.shape()); EXPECT_NE(a.storage(), c.storage()); adaptor_type tmp(a); c = std::move(tmp); compare_shape(a, c); EXPECT_EQ(a.storage(), c.storage()); } } TEST(xarray_adaptor, resize) { vec_type v; adaptor_type a(v); test_resize(a); } TEST(xarray_adaptor, reshape) { vec_type v; adaptor_type a(v); test_reshape(a); } #if !(defined(XTENSOR_ENABLE_ASSERT) && defined(XTENSOR_DISABLE_EXCEPTIONS)) TEST(xarray_adaptor, access) { vec_type v; adaptor_type a(v); test_access(a); } #endif TEST(xarray_adaptor, unchecked) { vec_type v; adaptor_type a(v); test_unchecked(a); } TEST(xarray_adaptor, at) { vec_type v; adaptor_type a(v); test_at(a); } TEST(xarray_adaptor, indexed_access) { vec_type v; adaptor_type a(v); test_indexed_access(a); } TEST(xarray_adaptor, broadcast_shape) { vec_type v; adaptor_type a(v); test_broadcast(a); test_broadcast2(a); } TEST(xarray_adaptor, iterator) { vec_type v; using adaptor_rm = xarray_adaptor; using adaptor_cm = xarray_adaptor; adaptor_rm arm(v); adaptor_cm acm(v); test_iterator(arm, acm); } TEST(xarray_adaptor, fill) { vec_type v; adaptor_type a(v); test_fill(a); } TEST(xarray_adaptor, xiterator) { vec_type v; adaptor_type a(v); test_xiterator(a); } TEST(xarray_adaptor, reverse_xiterator) { vec_type v; adaptor_type a(v); test_reverse_xiterator(a); } TEST(xarray_adaptor, adapt_std_array) { std::array a = {1, 2, 3, 4, 5, 6, 7, 8, 9}; xt::xarray_adaptor ad(a, xt::dynamic_shape{3, 3}); EXPECT_EQ(ad(1, 1), 5.); ad = ad * 2; EXPECT_EQ(ad(1, 1), 10.); } TEST(xarray_adaptor, iterator_types) { using vec_type = std::vector; using array_type = xarray_adaptor; using const_array_type = xarray_adaptor; using iterator = vec_type::iterator; using const_iterator = vec_type::const_iterator; test_iterator_types(); test_iterator_types(); } }