[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/SylvainCorlay/xtensor-python/buffer-size/test/test_pytensor.cpp [Back]  [Original]

/***************************************************************************
* Copyright (c) 2016, Johan Mabille and Sylvain Corlay                     *
*                                                                          *
* Distributed under the terms of the BSD 3-Clause License.                 *
*                                                                          *
* The full license is in the file LICENSE, distributed with this software. *
****************************************************************************/

#include "gtest/gtest.h"
#include "test_common.hpp"
#include "xtensor-python/pytensor.hpp"
#include "xtensor/xtensor.hpp"

namespace xt
{
    using container_type = std::array;

    TEST(pytensor, initializer_constructor)
    {
        pytensor t 
          {{{ 0,  1,  2}, 
            { 3,  4,  5}, 
            { 6,  7,  8}}, 
           {{ 9, 10, 11}, 
            {12, 13, 14}, 
            {15, 16, 17}}}; 
        EXPECT_EQ(t.dimension(), 3);
        EXPECT_EQ(t(0, 0, 1), 1);
        EXPECT_EQ(t.shape()[0], 2);
    }

    TEST(pytensor, shaped_constructor)
    {
        {
            SCOPED_TRACE("row_major constructor");
            row_major_result rm;
            pytensor ra(rm.m_shape);
            compare_shape(ra, rm);
            EXPECT_EQ(layout_type::row_major, ra.layout());
        }

        {
            SCOPED_TRACE("column_major constructor");
            column_major_result cm;
            pytensor ca(cm.m_shape, layout_type::column_major);
            compare_shape(ca, cm);
            EXPECT_EQ(layout_type::column_major, ca.layout());
        }
    }

    TEST(pytensor, strided_constructor)
    {
        central_major_result cmr;
        pytensor cma(cmr.m_shape, cmr.m_strides);
        compare_shape(cma, cmr);
    }

    TEST(pytensor, valued_constructor)
    {
        {
            SCOPED_TRACE("row_major valued constructor");
            row_major_result rm;
            int value = 2;
            pytensor ra(rm.m_shape, value);
            compare_shape(ra, rm);
            std::vector vec(ra.size(), value);
            EXPECT_TRUE(std::equal(vec.cbegin(), vec.cend(), ra.data().cbegin()));
        }

        {
            SCOPED_TRACE("column_major valued constructor");
            column_major_result cm;
            int value = 2;
            pytensor ca(cm.m_shape, value, layout_type::column_major);
            compare_shape(ca, cm);
            std::vector vec(ca.size(), value);
            EXPECT_TRUE(std::equal(vec.cbegin(), vec.cend(), ca.data().cbegin()));
        }
    }

    TEST(pytensor, strided_valued_constructor)
    {
        central_major_result cmr;
        int value = 2;
        pytensor cma(cmr.m_shape, cmr.m_strides, value);
        compare_shape(cma, cmr);
        std::vector vec(cma.size(), value);
        EXPECT_TRUE(std::equal(vec.cbegin(), vec.cend(), cma.data().cbegin()));
    }

    TEST(pytensor, copy_semantic)
    {
        central_major_result res;
        int value = 2;
        pytensor a(res.m_shape, res.m_strides, value);

        {
            SCOPED_TRACE("copy constructor");
            pytensor b(a);
            compare_shape(a, b);
            EXPECT_EQ(a.data(), b.data());
            a.data()[0] += 1;
            EXPECT_NE(a.data()[0], b.data()[0]);
        }

        {
            SCOPED_TRACE("assignment operator");
            row_major_result r;
            pytensor c(r.m_shape, 0);
            EXPECT_NE(a.data(), c.data());
            c = a;
            compare_shape(a, c);
            EXPECT_EQ(a.data(), c.data());
            a.data()[0] += 1;
            EXPECT_NE(a.data()[0], c.data()[0]);
        }
    }

    TEST(pytensor, move_semantic)
    {
        central_major_result res;
        int value = 2;
        pytensor a(res.m_shape, res.m_strides, value);

        {
            SCOPED_TRACE("move constructor");
            pytensor tmp(a);
            pytensor b(std::move(tmp));
            compare_shape(a, b);
            EXPECT_EQ(a.data(), b.data());
        }

        {
            SCOPED_TRACE("move assignment");
            row_major_result r;
            pytensor c(r.m_shape, 0);
            EXPECT_NE(a.data(), c.data());
            pytensor tmp(a);
            c = std::move(tmp);
            compare_shape(a, c);
            EXPECT_EQ(a.data(), c.data());
        }
    }

    TEST(pytensor, extended_constructor)
    {
        xt::xtensor a1 = { {1, 2}, {3, 4} };
        xt::xtensor a2 = { {1, 2}, {3, 4} };
        pytensor c = a1 + a2;
        EXPECT_EQ(c(0, 0), a1(0, 0) + a2(0, 0));
        EXPECT_EQ(c(0, 1), a1(0, 1) + a2(0, 1));
        EXPECT_EQ(c(1, 0), a1(1, 0) + a2(1, 0));
        EXPECT_EQ(c(1, 1), a1(1, 1) + a2(1, 1));
    }

    TEST(pytensor, reshape)
    {
        pytensor a;
        test_reshape(a);
    }

    /*TEST(pytensor, transpose)
    {
        pytensor a;
        test_transpose(a);
    }*/

    TEST(pytensor, access)
    {
        pytensor a;
        test_access(a);
    }

    TEST(pytensor, indexed_access)
    {
        pytensor a;
        test_indexed_access(a);
    }

    TEST(pytensor, broadcast_shape)
    {
        pytensor a;
        test_broadcast(a);
    }

    TEST(pytensor, iterator)
    {
        pytensor a;
        test_iterator(a);
    }

    TEST(pytensor, zerod)
    {
        pytensor a;
        EXPECT_EQ(0, a());
    }

}

Web Proxy Viewer  |  New URL  |  Original Page