/***************************************************************************
* 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 "xtensor/io/xio.hpp"
#include "xtensor/views/xrepeat.hpp"
#include "xtensor/views/xview.hpp"
#include "test_common_macros.hpp"
namespace xt
{
TEST(xrepeat, const_array)
{
const xarray array = {1, 2, 3};
const auto repeated_array = xt::repeat(array, 1, 0);
ASSERT_EQ(1, repeated_array(0));
ASSERT_EQ(2, repeated_array(1));
ASSERT_EQ(3, repeated_array(2));
}
TEST(xrepeat, stepper_begin)
{
xarray array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
};
const auto repeated_array = xt::repeat(array, 2, 0);
const auto stepper = repeated_array.stepper_begin();
ASSERT_EQ(1, *stepper);
}
TEST(xrepeat, stepper_end_row_major_with_repeat_1)
{
xarray array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
};
const auto repeated_array = xt::repeat(array, 1, 0);
auto stepper = repeated_array.stepper_end(xt::layout_type::row_major);
stepper.step_back(1, 1);
ASSERT_EQ(9, *stepper);
}
TEST(xrepeat, stepper_end_row_major_with_repeat_2)
{
xarray array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
};
const auto repeated_array = xt::repeat(array, 2, 0);
auto stepper = repeated_array.stepper_end(layout_type::row_major);
stepper.step_back(1, 1);
ASSERT_EQ(9, *stepper);
}
TEST(xrepeat, stepper_end_column_major_with_repeat_1)
{
xarray array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
};
const auto repeated_array = xt::repeat(array, 1, 0);
auto stepper = repeated_array.stepper_end(layout_type::column_major);
stepper.step_back(0, 1);
ASSERT_EQ(9, *stepper);
}
TEST(xrepeat, stepper_end_column_major_with_repeat_2)
{
xarray array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
};
const auto repeated_array = xt::repeat(array, 2, 0);
auto stepper = repeated_array.stepper_end(layout_type::column_major);
stepper.step_back(0, 1);
ASSERT_EQ(9, *stepper);
}
TEST(xrepeat, assign)
{
xt::xarray a = {{1, 2}, {3, 4}};
xt::xarray b = xt::repeat(a, 3, 1);
xt::xarray res = {{1, 1, 1, 2, 2, 2}, {3, 3, 3, 4, 4, 4}};
EXPECT_EQ(b, res);
}
TEST(xrepeat_stepper, step_with_repeat_1)
{
xarray array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
};
const auto repeated_array = xt::repeat(array, 1, 0);
auto stepper = repeated_array.stepper_begin();
stepper.step(0, 2);
stepper.step(1, 2);
ASSERT_EQ(9, *stepper);
}
TEST(xrepeat_stepper, step_with_repeat_2)
{
xarray array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
};
const auto repeated_array = xt::repeat(array, 2, 0);
auto stepper = repeated_array.stepper_begin();
stepper.step(0, 2);
stepper.step(1, 2);
ASSERT_EQ(6, *stepper);
}
TEST(xrepeat_stepper, step_back_with_repeat_1)
{
xarray array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
};
const auto repeated_array = xt::repeat(array, 1, 0);
auto stepper = repeated_array.stepper_begin();
stepper.step(0, 2);
stepper.step(1, 2);
stepper.step_back(0, 1);
stepper.step_back(1, 1);
ASSERT_EQ(5, *stepper);
}
TEST(xrepeat_stepper, step_back_with_repeat_2)
{
xarray array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
};
const auto repeated_array = xt::repeat(array, 2, 0);
auto stepper = repeated_array.stepper_begin();
stepper.step(0, 2);
stepper.step(1, 2);
stepper.step_back(0, 1);
stepper.step_back(1, 1);
ASSERT_EQ(2, *stepper);
}
TEST(xrepeat_stepper, step_and_reset_with_repeat_1)
{
xarray array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
};
const auto repeated_array = xt::repeat(array, 1, 0);
auto stepper = repeated_array.stepper_begin();
stepper.step(0, 2);
stepper.step(1, 2);
stepper.reset(0);
stepper.reset(1);
ASSERT_EQ(1, *stepper);
}
TEST(xrepeat_stepper, step_and_reset_with_repeat_2)
{
xarray array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
};
const auto repeated_array = xt::repeat(array, 2, 0);
auto stepper = repeated_array.stepper_begin();
stepper.step(0, 5);
stepper.step(1, 2);
stepper.reset(0);
stepper.reset(1);
ASSERT_EQ(1, *stepper);
}
TEST(xrepeat_stepper, reset_back_with_repeat_1)
{
xarray array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
};
const auto repeated_array = xt::repeat(array, 1, 0);
auto stepper = repeated_array.stepper_begin();
stepper.reset_back(0);
stepper.reset_back(1);
ASSERT_EQ(9, *stepper);
}
TEST(xrepeat_stepper, reset_back_with_repeat_2)
{
xarray array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
};
const auto repeated_array = xt::repeat(array, 2, 0);
auto stepper0 = repeated_array.stepper_begin();
auto stepper1 = repeated_array.stepper_begin();
stepper0.reset_back(0);
stepper1.reset_back(1);
ASSERT_EQ(7, *stepper0);
ASSERT_EQ(3, *stepper1);
}
TEST(xrepeat_stepper, reset_back_and_step_back_with_repeat_2)
{
xarray array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
};
const auto repeated_array = xt::repeat(array, 2, 0);
auto stepper = repeated_array.stepper_begin();
stepper.reset_back(0);
stepper.reset_back(1);
stepper.step_back(0, 1);
stepper.step_back(1, 1);
ASSERT_EQ(8, *stepper);
}
TEST(xrepeat_stepper, to_begin_with_repeat_2)
{
xarray array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
};
const auto repeated_array = xt::repeat(array, 2, 0);
auto stepper = repeated_array.stepper_end(layout_type::row_major);
stepper.to_begin();
ASSERT_EQ(1, *stepper);
}
TEST(xrepeat_stepper, to_begin_and_step_with_repeat_2)
{
xarray array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
};
const auto repeated_array = xt::repeat(array, 2, 0);
auto stepper = repeated_array.stepper_end(layout_type::row_major);
stepper.to_begin();
stepper.step(0, 1);
stepper.step(1, 1);
ASSERT_EQ(2, *stepper);
}
TEST(xrepeat_stepper, to_end_row_major_with_repeat_2)
{
xarray array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
};
const auto repeated_array = xt::repeat(array, 2, 0);
auto stepper = repeated_array.stepper_begin();
stepper.to_end(layout_type::row_major);
stepper.step_back(1, 2);
ASSERT_EQ(8, *stepper);
}
TEST(xrepeat_stepper, to_end_column_major_with_repeat_2)
{
xarray array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
};
const auto repeated_array = xt::repeat(array, 2, 0);
auto stepper = repeated_array.stepper_begin();
stepper.to_end(layout_type::column_major);
stepper.step_back(0, 2);
ASSERT_EQ(9, *stepper);
}
TEST(xrepeat_stepper, step_leading_with_repeat_1)
{
xarray array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
};
const auto repeated_array = xt::repeat(array, 1, 0);
auto stepper = repeated_array.stepper_begin();
stepper.step_leading();
stepper.step_leading();
stepper.step_leading();
ASSERT_EQ(4, *stepper);
}
TEST(xrepeat_stepper, step_leading_with_repeat_2)
{
xarray array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
};
const auto repeated_array = xt::repeat(array, 2, 0);
auto stepper = repeated_array.stepper_begin();
stepper.step_leading();
stepper.step_leading();
stepper.step_leading();
ASSERT_EQ(1, *stepper);
}
TEST(xrepeat_stepper, huge_step_with_repeat_1)
{
xarray array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
};
const auto repeated_array = xt::repeat(array, 1, 0);
auto stepper = repeated_array.stepper_begin();
stepper.step(1, 8);
ASSERT_EQ(9, *stepper);
}
TEST(xrepeat_stepper, huge_step_with_repeat_2)
{
xarray array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
};
const auto repeated_array = xt::repeat(array, 2, 0);
auto stepper = repeated_array.stepper_begin();
stepper.step(1, 17);
ASSERT_EQ(9, *stepper);
}
}