2
0
mirror of https://github.com/boostorg/ublas.git synced 2026-01-24 06:22:13 +00:00
Files
ublas/test/tensor/test_extents_functions.cpp
Cem Bassoy 231ba5f730 refactor(core): simplify and eliminate auxiliary tensor types (#115)
Auxiliary functions for extents and strides were using different
functions. Additionally, many tags were used to distinguish between
different tensor types. This patch simplifies interfaces of different
core functions and unifies functions that can process different types of
extent and stride types.
2021-09-09 11:34:14 +02:00

635 lines
23 KiB
C++

//
// Copyright (c) 2020, Cem Bassoy, cem.bassoy@gmail.com
//
// 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
// Google and Fraunhofer IOSB, Ettlingen, Germany
//
#include <vector>
#include <array>
#include <boost/test/unit_test.hpp>
#include <boost/numeric/ublas/tensor/extents.hpp>
BOOST_AUTO_TEST_SUITE(test_shape_functions)
struct fixture_extents_dynamic_rank
{
using shape_t = boost::numeric::ublas::extents<>;
static inline auto n = shape_t{};
static inline auto n1 = shape_t{1};
static inline auto n2 = shape_t{2};
static inline auto n11 = shape_t{1,1};
static inline auto n12 = shape_t{1,2};
static inline auto n21 = shape_t{2,1};
static inline auto n22 = shape_t{2,2};
static inline auto n32 = shape_t{3,2};
static inline auto n111 = shape_t{1,1,1};
static inline auto n211 = shape_t{2,1,1};
static inline auto n121 = shape_t{1,2,1};
static inline auto n112 = shape_t{1,1,2};
static inline auto n123 = shape_t{1,2,3};
static inline auto n321 = shape_t{3,2,1};
static inline auto n213 = shape_t{2,1,3};
static inline auto n432 = shape_t{4,3,2};
};
struct fixture_extents_static_rank
{
template<std::size_t N>
using extents_static_rank = boost::numeric::ublas::extents<N>;
static constexpr inline auto n = extents_static_rank<0>{};
static constexpr inline auto n1 = extents_static_rank<1>{1};
static constexpr inline auto n2 = extents_static_rank<1>{2};
static constexpr inline auto n11 = extents_static_rank<2>{{1,1}};
static constexpr inline auto n12 = extents_static_rank<2>{{1,2}};
static constexpr inline auto n21 = extents_static_rank<2>{{2,1}};
static constexpr inline auto n22 = extents_static_rank<2>{{2,2}};
static constexpr inline auto n32 = extents_static_rank<2>{{3,2}};
static constexpr inline auto n111 = extents_static_rank<3>{{1,1,1}};
static constexpr inline auto n211 = extents_static_rank<3>{{2,1,1}};
static constexpr inline auto n121 = extents_static_rank<3>{{1,2,1}};
static constexpr inline auto n112 = extents_static_rank<3>{{1,1,2}};
static constexpr inline auto n123 = extents_static_rank<3>{{1,2,3}};
static constexpr inline auto n321 = extents_static_rank<3>{{3,2,1}};
static constexpr inline auto n213 = extents_static_rank<3>{{2,1,3}};
static constexpr inline auto n432 = extents_static_rank<3>{{4,3,2}};
static constexpr inline auto tuple = std::make_tuple( n,n1,n2,n11,n12,n21,n22,n32,n111,n211,n121,n112,n123,n321,n213,n432 );
};
struct fixture_extents_static
{
template<std::size_t ... ns>
using extents_static = boost::numeric::ublas::extents<ns...>;
static inline auto n = extents_static<> {};
static inline auto n1 = extents_static<1> {};
static inline auto n2 = extents_static<2> {};
static inline auto n11 = extents_static<1,1> {};
static inline auto n12 = extents_static<1,2> {};
static inline auto n21 = extents_static<2,1> {};
static inline auto n22 = extents_static<2,2> {};
static inline auto n32 = extents_static<3,2> {};
static inline auto n111 = extents_static<1,1,1> {};
static inline auto n211 = extents_static<2,1,1> {};
static inline auto n121 = extents_static<1,2,1> {};
static inline auto n112 = extents_static<1,1,2> {};
static inline auto n123 = extents_static<1,2,3> {};
static inline auto n321 = extents_static<3,2,1> {};
static inline auto n213 = extents_static<2,1,3> {};
static inline auto n432 = extents_static<4,3,2> {};
};
BOOST_FIXTURE_TEST_CASE(test_extents_dynamic_rank_is_scalar,
fixture_extents_dynamic_rank,
*boost::unit_test::label("extents_dynamic_rank")
*boost::unit_test::label("is_scalar"))
{
namespace ub = boost::numeric::ublas;
BOOST_CHECK ( !ub::is_scalar( n ));
BOOST_CHECK ( ub::is_scalar( n1 ));
BOOST_CHECK ( !ub::is_scalar( n2 ));
BOOST_CHECK ( ub::is_scalar( n11 ));
BOOST_CHECK ( !ub::is_scalar( n12 ));
BOOST_CHECK ( !ub::is_scalar( n21 ));
BOOST_CHECK ( !ub::is_scalar( n22 ));
BOOST_CHECK ( !ub::is_scalar( n32 ));
BOOST_CHECK ( ub::is_scalar( n111 ));
BOOST_CHECK ( !ub::is_scalar( n211 ));
BOOST_CHECK ( !ub::is_scalar( n121 ));
BOOST_CHECK ( !ub::is_scalar( n112 ));
BOOST_CHECK ( !ub::is_scalar( n123 ));
BOOST_CHECK ( !ub::is_scalar( n321 ));
BOOST_CHECK ( !ub::is_scalar( n213 ));
BOOST_CHECK ( !ub::is_scalar( n432 ));
}
BOOST_FIXTURE_TEST_CASE(test_extents_static_rank_is_scalar,
fixture_extents_static_rank,
*boost::unit_test::label("extents_static_rank")
*boost::unit_test::label("is_scalar"))
{
namespace ub = boost::numeric::ublas;
BOOST_CHECK ( !ub::is_scalar( n ));
BOOST_CHECK ( ub::is_scalar( n1 ));
BOOST_CHECK ( !ub::is_scalar( n2 ));
BOOST_CHECK ( ub::is_scalar( n11 ));
BOOST_CHECK ( !ub::is_scalar( n12 ));
BOOST_CHECK ( !ub::is_scalar( n21 ));
BOOST_CHECK ( !ub::is_scalar( n22 ));
BOOST_CHECK ( !ub::is_scalar( n32 ));
BOOST_CHECK ( ub::is_scalar( n111 ));
BOOST_CHECK ( !ub::is_scalar( n211 ));
BOOST_CHECK ( !ub::is_scalar( n121 ));
BOOST_CHECK ( !ub::is_scalar( n112 ));
BOOST_CHECK ( !ub::is_scalar( n123 ));
BOOST_CHECK ( !ub::is_scalar( n321 ));
BOOST_CHECK ( !ub::is_scalar( n213 ));
BOOST_CHECK ( !ub::is_scalar( n432 ));
}
BOOST_FIXTURE_TEST_CASE(test_extents_static_is_scalar,
fixture_extents_static,
*boost::unit_test::label("extents_static")
*boost::unit_test::label("is_scalar"))
{
namespace ub = boost::numeric::ublas;
BOOST_CHECK ( !ub::is_scalar( n ));
//FIXME: BOOST_CHECK ( ub::is_scalar( n1 ));
BOOST_CHECK ( !ub::is_scalar( n2 ));
BOOST_CHECK ( ub::is_scalar( n11 ));
BOOST_CHECK ( !ub::is_scalar( n12 ));
BOOST_CHECK ( !ub::is_scalar( n21 ));
BOOST_CHECK ( !ub::is_scalar( n22 ));
BOOST_CHECK ( !ub::is_scalar( n32 ));
BOOST_CHECK ( ub::is_scalar( n111 ));
BOOST_CHECK ( !ub::is_scalar( n211 ));
BOOST_CHECK ( !ub::is_scalar( n121 ));
BOOST_CHECK ( !ub::is_scalar( n112 ));
BOOST_CHECK ( !ub::is_scalar( n123 ));
BOOST_CHECK ( !ub::is_scalar( n321 ));
BOOST_CHECK ( !ub::is_scalar( n213 ));
BOOST_CHECK ( !ub::is_scalar( n432 ));
}
BOOST_FIXTURE_TEST_CASE(test_extents_dynamic_rank_is_vector,
fixture_extents_dynamic_rank,
*boost::unit_test::label("extents_dynamic_rank")
*boost::unit_test::label("is_vector"))
{
namespace ub = boost::numeric::ublas;
BOOST_CHECK ( !ub::is_vector( n ));
BOOST_CHECK ( ub::is_vector( n1 ));
BOOST_CHECK ( ub::is_vector( n2 ));
BOOST_CHECK ( ub::is_vector( n11 ));
BOOST_CHECK ( ub::is_vector( n12 ));
BOOST_CHECK ( ub::is_vector( n21 ));
BOOST_CHECK ( !ub::is_vector( n22 ));
BOOST_CHECK ( !ub::is_vector( n32 ));
BOOST_CHECK ( ub::is_vector( n111 ));
BOOST_CHECK ( ub::is_vector( n211 ));
BOOST_CHECK ( ub::is_vector( n121 ));
BOOST_CHECK ( !ub::is_vector( n112 ));
BOOST_CHECK ( !ub::is_vector( n123 ));
BOOST_CHECK ( !ub::is_vector( n321 ));
BOOST_CHECK ( !ub::is_vector( n213 ));
BOOST_CHECK ( !ub::is_vector( n432 ));
}
BOOST_FIXTURE_TEST_CASE(test_extents_static_rank_is_vector,
fixture_extents_static_rank,
*boost::unit_test::label("extents_static_rank")
*boost::unit_test::label("is_vector"))
{
namespace ub = boost::numeric::ublas;
BOOST_CHECK ( !ub::is_vector( n ));
BOOST_CHECK ( ub::is_vector( n1 ));
BOOST_CHECK ( ub::is_vector( n2 ));
BOOST_CHECK ( ub::is_vector( n11 ));
BOOST_CHECK ( ub::is_vector( n12 ));
BOOST_CHECK ( ub::is_vector( n21 ));
BOOST_CHECK ( !ub::is_vector( n22 ));
BOOST_CHECK ( !ub::is_vector( n32 ));
BOOST_CHECK ( ub::is_vector( n111 ));
BOOST_CHECK ( ub::is_vector( n211 ));
BOOST_CHECK ( ub::is_vector( n121 ));
BOOST_CHECK ( !ub::is_vector( n112 ));
BOOST_CHECK ( !ub::is_vector( n123 ));
BOOST_CHECK ( !ub::is_vector( n321 ));
BOOST_CHECK ( !ub::is_vector( n213 ));
BOOST_CHECK ( !ub::is_vector( n432 ));
}
BOOST_FIXTURE_TEST_CASE(test_extents_static_is_vector,
fixture_extents_static,
*boost::unit_test::label("extents_static")
*boost::unit_test::label("is_vector"))
{
namespace ub = boost::numeric::ublas;
BOOST_CHECK ( !ub::is_vector( n1 ));
//FIXME: BOOST_CHECK ( ub::is_vector( n2 ));
BOOST_CHECK ( ub::is_vector( n11 ));
BOOST_CHECK ( ub::is_vector( n12 ));
BOOST_CHECK ( ub::is_vector( n21 ));
BOOST_CHECK ( !ub::is_vector( n22 ));
BOOST_CHECK ( !ub::is_vector( n32 ));
BOOST_CHECK ( ub::is_vector( n111 ));
BOOST_CHECK ( ub::is_vector( n211 ));
BOOST_CHECK ( ub::is_vector( n121 ));
BOOST_CHECK ( !ub::is_vector( n112 ));
BOOST_CHECK ( !ub::is_vector( n123 ));
BOOST_CHECK ( !ub::is_vector( n321 ));
BOOST_CHECK ( !ub::is_vector( n213 ));
BOOST_CHECK ( !ub::is_vector( n432 ));
}
BOOST_FIXTURE_TEST_CASE(test_extents_dynamic_rank_is_matrix,
fixture_extents_dynamic_rank,
*boost::unit_test::label("extents_dynamic_rank")
*boost::unit_test::label("is_matrix"))
{
namespace ub = boost::numeric::ublas;
BOOST_CHECK ( !ub::is_matrix( n ));
BOOST_CHECK ( ub::is_matrix( n1 ));
BOOST_CHECK ( ub::is_matrix( n2 ));
BOOST_CHECK ( ub::is_matrix( n11 ));
BOOST_CHECK ( ub::is_matrix( n12 ));
BOOST_CHECK ( ub::is_matrix( n21 ));
BOOST_CHECK ( ub::is_matrix( n22 ));
BOOST_CHECK ( ub::is_matrix( n32 ));
BOOST_CHECK ( ub::is_matrix( n111 ));
BOOST_CHECK ( ub::is_matrix( n211 ));
BOOST_CHECK ( ub::is_matrix( n121 ));
BOOST_CHECK ( !ub::is_matrix( n112 ));
BOOST_CHECK ( !ub::is_matrix( n123 ));
BOOST_CHECK ( ub::is_matrix( n321 ));
BOOST_CHECK ( !ub::is_matrix( n213 ));
BOOST_CHECK ( !ub::is_matrix( n432 ));
}
BOOST_FIXTURE_TEST_CASE(test_extents_static_rank_is_matrix,
fixture_extents_static_rank,
*boost::unit_test::label("extents_static_rank")
*boost::unit_test::label("is_matrix"))
{
namespace ub = boost::numeric::ublas;
BOOST_CHECK ( !ub::is_matrix( n ));
BOOST_CHECK ( ub::is_matrix( n1 ));
BOOST_CHECK ( ub::is_matrix( n2 ));
BOOST_CHECK ( ub::is_matrix( n11 ));
BOOST_CHECK ( ub::is_matrix( n12 ));
BOOST_CHECK ( ub::is_matrix( n21 ));
BOOST_CHECK ( ub::is_matrix( n22 ));
BOOST_CHECK ( ub::is_matrix( n32 ));
BOOST_CHECK ( ub::is_matrix( n111 ));
BOOST_CHECK ( ub::is_matrix( n211 ));
BOOST_CHECK ( ub::is_matrix( n121 ));
BOOST_CHECK ( !ub::is_matrix( n112 ));
BOOST_CHECK ( !ub::is_matrix( n123 ));
BOOST_CHECK ( ub::is_matrix( n321 ));
BOOST_CHECK ( !ub::is_matrix( n213 ));
BOOST_CHECK ( !ub::is_matrix( n432 ));
}
BOOST_FIXTURE_TEST_CASE(test_extents_static_is_matrix,
fixture_extents_static,
*boost::unit_test::label("extents_static")
*boost::unit_test::label("is_matrix"))
{
namespace ub = boost::numeric::ublas;
BOOST_CHECK ( !ub::is_matrix( n ));
//FIXME: BOOST_CHECK ( !ub::is_matrix( n1 ));
BOOST_CHECK ( !ub::is_matrix( n2 ));
BOOST_CHECK ( ub::is_matrix( n11 ));
BOOST_CHECK ( ub::is_matrix( n12 ));
BOOST_CHECK ( ub::is_matrix( n21 ));
BOOST_CHECK ( ub::is_matrix( n22 ));
BOOST_CHECK ( ub::is_matrix( n32 ));
BOOST_CHECK ( ub::is_matrix( n111 ));
BOOST_CHECK ( ub::is_matrix( n211 ));
BOOST_CHECK ( ub::is_matrix( n121 ));
BOOST_CHECK ( !ub::is_matrix( n112 ));
BOOST_CHECK ( !ub::is_matrix( n123 ));
BOOST_CHECK ( ub::is_matrix( n321 ));
BOOST_CHECK ( !ub::is_matrix( n213 ));
BOOST_CHECK ( !ub::is_matrix( n432 ));
}
BOOST_FIXTURE_TEST_CASE(test_extents_dynamic_rank_is_tensor,
fixture_extents_dynamic_rank,
*boost::unit_test::label("extents_dynamic_rank")
*boost::unit_test::label("is_tensor"))
{
namespace ub = boost::numeric::ublas;
BOOST_CHECK ( !ub::is_tensor( n ));
BOOST_CHECK ( !ub::is_tensor( n1 ));
BOOST_CHECK ( !ub::is_tensor( n2 ));
BOOST_CHECK ( !ub::is_tensor( n11 ));
BOOST_CHECK ( !ub::is_tensor( n12 ));
BOOST_CHECK ( !ub::is_tensor( n21 ));
BOOST_CHECK ( !ub::is_tensor( n22 ));
BOOST_CHECK ( !ub::is_tensor( n32 ));
BOOST_CHECK ( !ub::is_tensor( n111 ));
BOOST_CHECK ( !ub::is_tensor( n211 ));
BOOST_CHECK ( !ub::is_tensor( n121 ));
BOOST_CHECK ( ub::is_tensor( n112 ));
BOOST_CHECK ( ub::is_tensor( n123 ));
BOOST_CHECK ( !ub::is_tensor( n321 ));
BOOST_CHECK ( ub::is_tensor( n213 ));
BOOST_CHECK ( ub::is_tensor( n432 ));
}
BOOST_FIXTURE_TEST_CASE(test_extents_static_rank_is_tensor,
fixture_extents_static_rank,
*boost::unit_test::label("extents_static_rank")
*boost::unit_test::label("is_tensor"))
{
namespace ub = boost::numeric::ublas;
BOOST_CHECK ( !ub::is_tensor( n ));
BOOST_CHECK ( !ub::is_tensor( n1 ));
BOOST_CHECK ( !ub::is_tensor( n2 ));
BOOST_CHECK ( !ub::is_tensor( n11 ));
BOOST_CHECK ( !ub::is_tensor( n12 ));
BOOST_CHECK ( !ub::is_tensor( n21 ));
BOOST_CHECK ( !ub::is_tensor( n22 ));
BOOST_CHECK ( !ub::is_tensor( n32 ));
BOOST_CHECK ( !ub::is_tensor( n111 ));
BOOST_CHECK ( !ub::is_tensor( n211 ));
BOOST_CHECK ( !ub::is_tensor( n121 ));
BOOST_CHECK ( ub::is_tensor( n112 ));
BOOST_CHECK ( ub::is_tensor( n123 ));
BOOST_CHECK ( !ub::is_tensor( n321 ));
BOOST_CHECK ( ub::is_tensor( n213 ));
BOOST_CHECK ( ub::is_tensor( n432 ));
}
BOOST_FIXTURE_TEST_CASE(test_extents_static_is_tensor,
fixture_extents_static,
*boost::unit_test::label("extents_static")
*boost::unit_test::label("is_tensor"))
{
namespace ub = boost::numeric::ublas;
BOOST_CHECK ( !ub::is_tensor( n ));
//FIXME: BOOST_CHECK ( !ub::is_tensor( n1 ));
BOOST_CHECK ( !ub::is_tensor( n2 ));
BOOST_CHECK ( !ub::is_tensor( n11 ));
BOOST_CHECK ( !ub::is_tensor( n12 ));
BOOST_CHECK ( !ub::is_tensor( n21 ));
BOOST_CHECK ( !ub::is_tensor( n22 ));
BOOST_CHECK ( !ub::is_tensor( n32 ));
BOOST_CHECK ( !ub::is_tensor( n111 ));
BOOST_CHECK ( !ub::is_tensor( n211 ));
BOOST_CHECK ( !ub::is_tensor( n121 ));
BOOST_CHECK ( ub::is_tensor( n112 ));
BOOST_CHECK ( ub::is_tensor( n123 ));
BOOST_CHECK ( !ub::is_tensor( n321 ));
BOOST_CHECK ( ub::is_tensor( n213 ));
BOOST_CHECK ( ub::is_tensor( n432 ));
}
BOOST_FIXTURE_TEST_CASE(test_extents_dynamic_rank_is_valid,
fixture_extents_dynamic_rank,
*boost::unit_test::label("extents_dynamic_rank")
*boost::unit_test::label("is_valid"))
{
namespace ub = boost::numeric::ublas;
BOOST_CHECK ( ub::is_valid( n1 ));
BOOST_CHECK ( ub::is_valid( n2 ));
BOOST_CHECK ( ub::is_valid( n11 ));
BOOST_CHECK ( ub::is_valid( n12 ));
BOOST_CHECK ( ub::is_valid( n21 ));
BOOST_CHECK ( ub::is_valid( n22 ));
BOOST_CHECK ( ub::is_valid( n32 ));
BOOST_CHECK ( ub::is_valid( n111 ));
BOOST_CHECK ( ub::is_valid( n211 ));
BOOST_CHECK ( ub::is_valid( n121 ));
BOOST_CHECK ( ub::is_valid( n112 ));
BOOST_CHECK ( ub::is_valid( n123 ));
BOOST_CHECK ( ub::is_valid( n321 ));
BOOST_CHECK ( ub::is_valid( n213 ));
BOOST_CHECK ( ub::is_valid( n432 ));
}
BOOST_FIXTURE_TEST_CASE(test_extents_static_rank_is_valid,
fixture_extents_static_rank,
*boost::unit_test::label("extents_static_rank")
*boost::unit_test::label("is_valid"))
{
namespace ub = boost::numeric::ublas;
BOOST_CHECK ( ub::is_valid( n ));
BOOST_CHECK ( ub::is_valid( n1 ));
BOOST_CHECK ( ub::is_valid( n2 ));
BOOST_CHECK ( ub::is_valid( n11 ));
BOOST_CHECK ( ub::is_valid( n12 ));
BOOST_CHECK ( ub::is_valid( n21 ));
BOOST_CHECK ( ub::is_valid( n22 ));
BOOST_CHECK ( ub::is_valid( n32 ));
BOOST_CHECK ( ub::is_valid( n111 ));
BOOST_CHECK ( ub::is_valid( n211 ));
BOOST_CHECK ( ub::is_valid( n121 ));
BOOST_CHECK ( ub::is_valid( n112 ));
BOOST_CHECK ( ub::is_valid( n123 ));
BOOST_CHECK ( ub::is_valid( n321 ));
BOOST_CHECK ( ub::is_valid( n213 ));
BOOST_CHECK ( ub::is_valid( n432 ));
}
BOOST_FIXTURE_TEST_CASE(test_extents_static_is_valid,
fixture_extents_static,
*boost::unit_test::label("extents_static")
*boost::unit_test::label("is_valid"))
{
namespace ub = boost::numeric::ublas;
BOOST_CHECK ( ub::is_valid( n ));
//FIXME: BOOST_CHECK ( ub::is_valid( n1 ));
//FIXME: BOOST_CHECK ( ub::is_valid( n2 ));
BOOST_CHECK ( ub::is_valid( n11 ));
BOOST_CHECK ( ub::is_valid( n12 ));
BOOST_CHECK ( ub::is_valid( n21 ));
BOOST_CHECK ( ub::is_valid( n22 ));
BOOST_CHECK ( ub::is_valid( n32 ));
BOOST_CHECK ( ub::is_valid( n111 ));
BOOST_CHECK ( ub::is_valid( n211 ));
BOOST_CHECK ( ub::is_valid( n121 ));
BOOST_CHECK ( ub::is_valid( n112 ));
BOOST_CHECK ( ub::is_valid( n123 ));
BOOST_CHECK ( ub::is_valid( n321 ));
BOOST_CHECK ( ub::is_valid( n213 ));
BOOST_CHECK ( ub::is_valid( n432 ));
}
BOOST_FIXTURE_TEST_CASE(test_extents_dynamic_rank_product,
fixture_extents_dynamic_rank,
*boost::unit_test::label("extents_dynamic_rank")
*boost::unit_test::label("product"))
{
namespace ub = boost::numeric::ublas;
BOOST_CHECK_EQUAL ( ub::product( n ), 0U);
BOOST_CHECK_EQUAL ( ub::product( n1 ), 1U);
BOOST_CHECK_EQUAL ( ub::product( n2 ), 2U);
BOOST_CHECK_EQUAL ( ub::product( n11 ), 1U);
BOOST_CHECK_EQUAL ( ub::product( n12 ), 2U);
BOOST_CHECK_EQUAL ( ub::product( n21 ), 2U);
BOOST_CHECK_EQUAL ( ub::product( n22 ), 4U);
BOOST_CHECK_EQUAL ( ub::product( n32 ), 6U);
BOOST_CHECK_EQUAL ( ub::product( n111 ), 1U);
BOOST_CHECK_EQUAL ( ub::product( n211 ), 2U);
BOOST_CHECK_EQUAL ( ub::product( n121 ), 2U);
BOOST_CHECK_EQUAL ( ub::product( n112 ), 2U);
BOOST_CHECK_EQUAL ( ub::product( n123 ), 6U);
BOOST_CHECK_EQUAL ( ub::product( n321 ), 6U);
BOOST_CHECK_EQUAL ( ub::product( n213 ), 6U);
BOOST_CHECK_EQUAL ( ub::product( n432 ),24U);
}
BOOST_FIXTURE_TEST_CASE(test_extents_static_rank_product,
fixture_extents_static_rank,
*boost::unit_test::label("extents_static_rank")
*boost::unit_test::label("product"))
{
namespace ub = boost::numeric::ublas;
BOOST_CHECK_EQUAL ( ub::product( n ), 0U);
BOOST_CHECK_EQUAL ( ub::product( n1 ), 1U);
BOOST_CHECK_EQUAL ( ub::product( n2 ), 2U);
BOOST_CHECK_EQUAL ( ub::product( n11 ), 1U);
BOOST_CHECK_EQUAL ( ub::product( n12 ), 2U);
BOOST_CHECK_EQUAL ( ub::product( n21 ), 2U);
BOOST_CHECK_EQUAL ( ub::product( n22 ), 4U);
BOOST_CHECK_EQUAL ( ub::product( n32 ), 6U);
BOOST_CHECK_EQUAL ( ub::product( n111 ), 1U);
BOOST_CHECK_EQUAL ( ub::product( n211 ), 2U);
BOOST_CHECK_EQUAL ( ub::product( n121 ), 2U);
BOOST_CHECK_EQUAL ( ub::product( n112 ), 2U);
BOOST_CHECK_EQUAL ( ub::product( n123 ), 6U);
BOOST_CHECK_EQUAL ( ub::product( n321 ), 6U);
BOOST_CHECK_EQUAL ( ub::product( n213 ), 6U);
BOOST_CHECK_EQUAL ( ub::product( n432 ),24U);
}
BOOST_FIXTURE_TEST_CASE(test_extents_static_product,
fixture_extents_static,
*boost::unit_test::label("extents_static")
*boost::unit_test::label("product"))
{
namespace ub = boost::numeric::ublas;
BOOST_CHECK_EQUAL ( ub::product( n ), 0U);
//FIXME: BOOST_CHECK_EQUAL ( ub::product( n1 ), 1U);
//FIXME: BOOST_CHECK_EQUAL ( ub::product( n2 ), 2U);
BOOST_CHECK_EQUAL ( ub::product( n11 ), 1U);
BOOST_CHECK_EQUAL ( ub::product( n12 ), 2U);
BOOST_CHECK_EQUAL ( ub::product( n21 ), 2U);
BOOST_CHECK_EQUAL ( ub::product( n22 ), 4U);
BOOST_CHECK_EQUAL ( ub::product( n32 ), 6U);
BOOST_CHECK_EQUAL ( ub::product( n111 ), 1U);
BOOST_CHECK_EQUAL ( ub::product( n211 ), 2U);
BOOST_CHECK_EQUAL ( ub::product( n121 ), 2U);
BOOST_CHECK_EQUAL ( ub::product( n112 ), 2U);
BOOST_CHECK_EQUAL ( ub::product( n123 ), 6U);
BOOST_CHECK_EQUAL ( ub::product( n321 ), 6U);
BOOST_CHECK_EQUAL ( ub::product( n213 ), 6U);
BOOST_CHECK_EQUAL ( ub::product( n432 ),24U);
}
BOOST_FIXTURE_TEST_CASE(test_extents_dynamic_rank_equal,
fixture_extents_dynamic_rank,
*boost::unit_test::label("extents_dynamic_rank")
*boost::unit_test::label("equal"))
{
BOOST_CHECK ( n == n );
BOOST_CHECK ( n1 == n1 );
BOOST_CHECK ( n2 == n2 );
BOOST_CHECK ( n11 == n11 );
BOOST_CHECK ( n12 == n12 );
BOOST_CHECK ( n21 == n21 );
BOOST_CHECK ( n22 == n22 );
BOOST_CHECK ( n32 == n32 );
}
BOOST_FIXTURE_TEST_CASE(test_extents_static_rank_equal,
fixture_extents_static_rank,
*boost::unit_test::label("extents_static_rank")
*boost::unit_test::label("equal"))
{
BOOST_CHECK ( n == n );
BOOST_CHECK ( n1 == n1 );
BOOST_CHECK ( n2 == n2 );
BOOST_CHECK ( n11 == n11 );
BOOST_CHECK ( n12 == n12 );
BOOST_CHECK ( n21 == n21 );
BOOST_CHECK ( n22 == n22 );
BOOST_CHECK ( n32 == n32 );
}
BOOST_FIXTURE_TEST_CASE(test_extents_static_equal,
fixture_extents_static,
*boost::unit_test::label("extents_static")
*boost::unit_test::label("equal"))
{
BOOST_CHECK ( n == n );
BOOST_CHECK ( n1 == n1 );
BOOST_CHECK ( n2 == n2 );
BOOST_CHECK ( n11 == n11 );
BOOST_CHECK ( n12 == n12 );
BOOST_CHECK ( n21 == n21 );
BOOST_CHECK ( n22 == n22 );
BOOST_CHECK ( n32 == n32 );
}
BOOST_FIXTURE_TEST_CASE(test_extents_dynamic_rank_not_equal,
fixture_extents_dynamic_rank,
*boost::unit_test::label("extents_dynamic_rank")
*boost::unit_test::label("not_equal"))
{
BOOST_CHECK ( ! (n != n ) );
BOOST_CHECK ( ! (n1 != n1) );
BOOST_CHECK ( ! (n2 != n2) );
BOOST_CHECK ( ! (n11 != n11) );
BOOST_CHECK ( ! (n12 != n12) );
BOOST_CHECK ( ! (n21 != n21) );
BOOST_CHECK ( ! (n22 != n22) );
BOOST_CHECK ( ! (n32 != n32) );
BOOST_CHECK ( (n2 != n1) );
BOOST_CHECK ( (n11 != n12) );
BOOST_CHECK ( (n12 != n21) );
BOOST_CHECK ( (n21 != n22) );
BOOST_CHECK ( (n22 != n32) );
}
BOOST_AUTO_TEST_SUITE_END()