2
0
mirror of https://github.com/boostorg/ublas.git synced 2026-01-23 18:12:14 +00:00
Files
ublas/test/tensor/test_span.cpp
2022-12-11 20:14:06 +01:00

236 lines
6.9 KiB
C++

// Copyright (c) 2018 Cem Bassoy
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// The authors gratefully acknowledge the support of
// Fraunhofer and Google in producing this work
// which started as a Google Summer of Code project.
//
#include <boost/numeric/ublas/tensor/tags.hpp>
#include <boost/test/unit_test.hpp>
#include <boost/numeric/ublas/tensor/span.hpp>
BOOST_AUTO_TEST_SUITE( span_testsuite );
struct fixture {
using span_type = boost::numeric::ublas::sspan;
fixture() :
spans {
span_type{}, // 0
span_type(0,0,0), // 1
span_type(0,1,0), // 2
span_type(0,1,2), // 3
span_type(1,1,2), // 4
span_type(0,2,4), // 5
span_type(1,2,4), // 6
span_type(1,3,5), // 7
span_type(1,3,7) // 8
}
{}
std::vector<span_type> spans;
};
BOOST_FIXTURE_TEST_CASE( ctor_test, fixture )
{
using span_type = typename fixture::span_type;
BOOST_CHECK_EQUAL (spans[0].first(),0);
BOOST_CHECK_EQUAL (spans[0].step (),0);
BOOST_CHECK_EQUAL (spans[0].last (),0);
BOOST_CHECK_EQUAL (spans[0].size (),0);
BOOST_CHECK_EQUAL (spans[1].first(),0);
BOOST_CHECK_EQUAL (spans[1].step (),0);
BOOST_CHECK_EQUAL (spans[1].last (),0);
BOOST_CHECK_EQUAL (spans[1].size (),1);
BOOST_CHECK_EQUAL (spans[2].first(),0);
BOOST_CHECK_EQUAL (spans[2].step (),1);
BOOST_CHECK_EQUAL (spans[2].last (),0);
BOOST_CHECK_EQUAL (spans[2].size (),1);
BOOST_CHECK_EQUAL (spans[3].first(),0);
BOOST_CHECK_EQUAL (spans[3].step (),1);
BOOST_CHECK_EQUAL (spans[3].last (),2);
BOOST_CHECK_EQUAL (spans[3].size (),3);
BOOST_CHECK_EQUAL (spans[4].first(),1);
BOOST_CHECK_EQUAL (spans[4].step (),1);
BOOST_CHECK_EQUAL (spans[4].last (),2);
BOOST_CHECK_EQUAL (spans[4].size (),2);
BOOST_CHECK_EQUAL (spans[5].first(),0);
BOOST_CHECK_EQUAL (spans[5].step (),2);
BOOST_CHECK_EQUAL (spans[5].last (),4);
BOOST_CHECK_EQUAL (spans[5].size (),3);
BOOST_CHECK_EQUAL (spans[6].first(),1);
BOOST_CHECK_EQUAL (spans[6].step (),2);
BOOST_CHECK_EQUAL (spans[6].last (),3);
BOOST_CHECK_EQUAL (spans[6].size (),2);
BOOST_CHECK_EQUAL (spans[7].first(),1);
BOOST_CHECK_EQUAL (spans[7].step (),3);
BOOST_CHECK_EQUAL (spans[7].last (),4);
BOOST_CHECK_EQUAL (spans[7].size (),2);
BOOST_CHECK_EQUAL (spans[8].first(),1);
BOOST_CHECK_EQUAL (spans[8].step (),3);
BOOST_CHECK_EQUAL (spans[8].last (),7);
BOOST_CHECK_EQUAL (spans[8].size (),3);
BOOST_CHECK_THROW ( span_type( 1,0,3 ), std::runtime_error );
BOOST_CHECK_THROW ( span_type( 1,2,0 ), std::runtime_error );
}
BOOST_FIXTURE_TEST_CASE( copy_ctor_test, fixture )
{
using span_type = typename fixture::span_type;
BOOST_CHECK_EQUAL (span_type(spans[0]).first(),0);
BOOST_CHECK_EQUAL (span_type(spans[0]).step (),0);
BOOST_CHECK_EQUAL (span_type(spans[0]).last (),0);
BOOST_CHECK_EQUAL (span_type(spans[0]).size (),0);
BOOST_CHECK_EQUAL (span_type(spans[1]).first(),0);
BOOST_CHECK_EQUAL (span_type(spans[1]).step (),0);
BOOST_CHECK_EQUAL (span_type(spans[1]).last (),0);
BOOST_CHECK_EQUAL (span_type(spans[1]).size (),1);
BOOST_CHECK_EQUAL (span_type(spans[2]).first(),0);
BOOST_CHECK_EQUAL (span_type(spans[2]).step (),1);
BOOST_CHECK_EQUAL (span_type(spans[2]).last (),0);
BOOST_CHECK_EQUAL (span_type(spans[2]).size (),1);
BOOST_CHECK_EQUAL (span_type(spans[3]).first(),0);
BOOST_CHECK_EQUAL (span_type(spans[3]).step (),1);
BOOST_CHECK_EQUAL (span_type(spans[3]).last (),2);
BOOST_CHECK_EQUAL (span_type(spans[3]).size (),3);
BOOST_CHECK_EQUAL (span_type(spans[4]).first(),1);
BOOST_CHECK_EQUAL (span_type(spans[4]).step (),1);
BOOST_CHECK_EQUAL (span_type(spans[4]).last (),2);
BOOST_CHECK_EQUAL (span_type(spans[4]).size (),2);
BOOST_CHECK_EQUAL (span_type(spans[5]).first(),0);
BOOST_CHECK_EQUAL (span_type(spans[5]).step (),2);
BOOST_CHECK_EQUAL (span_type(spans[5]).last (),4);
BOOST_CHECK_EQUAL (span_type(spans[5]).size (),3);
BOOST_CHECK_EQUAL (span_type(spans[6]).first(),1);
BOOST_CHECK_EQUAL (span_type(spans[6]).step (),2);
BOOST_CHECK_EQUAL (span_type(spans[6]).last (),3);
BOOST_CHECK_EQUAL (span_type(spans[6]).size (),2);
BOOST_CHECK_EQUAL (span_type(spans[7]).first(),1);
BOOST_CHECK_EQUAL (span_type(spans[7]).step (),3);
BOOST_CHECK_EQUAL (span_type(spans[7]).last (),4);
BOOST_CHECK_EQUAL (span_type(spans[7]).size (),2);
BOOST_CHECK_EQUAL (span_type(spans[8]).first(),1);
BOOST_CHECK_EQUAL (span_type(spans[8]).step (),3);
BOOST_CHECK_EQUAL (span_type(spans[8]).last (),7);
BOOST_CHECK_EQUAL (span_type(spans[8]).size (),3);
}
BOOST_FIXTURE_TEST_CASE( assignment_operator_test, fixture )
{
auto c0 = spans[1];
BOOST_CHECK_EQUAL ((c0=spans[0]).first(),0);
BOOST_CHECK_EQUAL ((c0=spans[0]).step (),0);
BOOST_CHECK_EQUAL ((c0=spans[0]).last (),0);
BOOST_CHECK_EQUAL ((c0=spans[0]).size (),0);
auto c1 = spans[2];
BOOST_CHECK_EQUAL ((c1=spans[1]).first(),0);
BOOST_CHECK_EQUAL ((c1=spans[1]).step (),0);
BOOST_CHECK_EQUAL ((c1=spans[1]).last (),0);
BOOST_CHECK_EQUAL ((c1=spans[1]).size (),1);
auto c2 = spans[3];
BOOST_CHECK_EQUAL ((c2=spans[2]).first(),0);
BOOST_CHECK_EQUAL ((c2=spans[2]).step (),1);
BOOST_CHECK_EQUAL ((c2=spans[2]).last (),0);
BOOST_CHECK_EQUAL ((c2=spans[2]).size (),1);
auto c3 = spans[4];
BOOST_CHECK_EQUAL ((c3=spans[3]).first(),0);
BOOST_CHECK_EQUAL ((c3=spans[3]).step (),1);
BOOST_CHECK_EQUAL ((c3=spans[3]).last (),2);
BOOST_CHECK_EQUAL ((c3=spans[3]).size (),3);
auto c4 = spans[5];
BOOST_CHECK_EQUAL ((c4=spans[4]).first(),1);
BOOST_CHECK_EQUAL ((c4=spans[4]).step (),1);
BOOST_CHECK_EQUAL ((c4=spans[4]).last (),2);
BOOST_CHECK_EQUAL ((c4=spans[4]).size (),2);
auto c5 = spans[6];
BOOST_CHECK_EQUAL ((c5=spans[5]).first(),0);
BOOST_CHECK_EQUAL ((c5=spans[5]).step (),2);
BOOST_CHECK_EQUAL ((c5=spans[5]).last (),4);
BOOST_CHECK_EQUAL ((c5=spans[5]).size (),3);
auto c6 = spans[7];
BOOST_CHECK_EQUAL ((c6=spans[6]).first(),1);
BOOST_CHECK_EQUAL ((c6=spans[6]).step (),2);
BOOST_CHECK_EQUAL ((c6=spans[6]).last (),3);
BOOST_CHECK_EQUAL ((c6=spans[6]).size (),2);
auto c7 = spans[8];
BOOST_CHECK_EQUAL ((c7=spans[7]).first(),1);
BOOST_CHECK_EQUAL ((c7=spans[7]).step (),3);
BOOST_CHECK_EQUAL ((c7=spans[7]).last (),4);
BOOST_CHECK_EQUAL ((c7=spans[7]).size (),2);
}
BOOST_FIXTURE_TEST_CASE( access_operator_test, fixture )
{
BOOST_CHECK_EQUAL(spans[0][0], 0);
BOOST_CHECK_EQUAL(spans[1][0], 0);
BOOST_CHECK_EQUAL(spans[2][0], 0);
BOOST_CHECK_EQUAL(spans[3][0], 0);
BOOST_CHECK_EQUAL(spans[3][1], 1);
BOOST_CHECK_EQUAL(spans[3][2], 2);
BOOST_CHECK_EQUAL(spans[4][0], 1);
BOOST_CHECK_EQUAL(spans[4][1], 2);
BOOST_CHECK_EQUAL(spans[5][0], 0);
BOOST_CHECK_EQUAL(spans[5][1], 2);
BOOST_CHECK_EQUAL(spans[5][2], 4);
BOOST_CHECK_EQUAL(spans[6][0], 1);
BOOST_CHECK_EQUAL(spans[6][1], 3);
BOOST_CHECK_EQUAL(spans[7][0], 1);
BOOST_CHECK_EQUAL(spans[7][1], 4);
BOOST_CHECK_EQUAL(spans[8][0], 1);
BOOST_CHECK_EQUAL(spans[8][1], 4);
BOOST_CHECK_EQUAL(spans[8][2], 7);
}
BOOST_AUTO_TEST_SUITE_END();