/***************************************************************************
* 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
#include "xtensor/containers/xarray.hpp"
#include "xtensor/containers/xtensor.hpp"
#include "xtensor/core/xexpression.hpp"
#include "xtensor/core/xmath.hpp"
#include "xtensor/generators/xrandom.hpp"
#include "xtensor/io/xio.hpp"
#include "test_common_macros.hpp"
namespace xt
{
auto fun()
{
auto sa = make_xshared(xarray({{1, 2, 3, 4}, {5, 6, 7, 8}}));
return sa + sa * sa - sa;
}
TEST(xexpression, shared_basic)
{
xarray a = {{1, 2, 3, 4}, {5, 6, 7, 8}};
xarray ca = {{1, 2, 3, 4}, {5, 6, 7, 8}};
auto sa = make_xshared(std::move(a));
EXPECT_EQ(sa.dimension(), std::size_t(2));
EXPECT_EQ(sa.shape(), ca.shape());
EXPECT_EQ(sa.strides(), ca.strides());
EXPECT_EQ(sa(1, 3), ca(1, 3));
EXPECT_EQ(sa.storage(), ca.storage());
EXPECT_EQ(sa.data_offset(), ca.data_offset());
EXPECT_EQ(sa.data()[0], ca.data()[0]);
layout_type L = decltype(sa)::static_layout;
bool contig = decltype(sa)::contiguous_layout;
EXPECT_EQ(L, XTENSOR_DEFAULT_LAYOUT);
EXPECT_EQ(contig, true);
EXPECT_EQ(sa.use_count(), 2);
auto cpysa = sa;
EXPECT_EQ(sa.use_count(), 3);
std::stringstream buffer;
buffer