sl@0: // Copyright 2002 The Trustees of Indiana University. sl@0: sl@0: // Use, modification and distribution is subject to the Boost Software sl@0: // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at sl@0: // http://www.boost.org/LICENSE_1_0.txt) sl@0: sl@0: // Boost.MultiArray Library sl@0: // Authors: Ronald Garcia sl@0: // Jeremy Siek sl@0: // Andrew Lumsdaine sl@0: // See http://www.boost.org/libs/multi_array for documentation. sl@0: sl@0: /* sl@0: * © Portions copyright (c) 2006-2007 Nokia Corporation. All rights reserved. sl@0: */ sl@0: sl@0: sl@0: #include "boost/multi_array.hpp" sl@0: sl@0: #include "boost/test/minimal.hpp" sl@0: sl@0: #include sl@0: #include sl@0: sl@0: #ifdef __SYMBIAN32__ sl@0: #include "std_log_result.h" sl@0: #define LOG_FILENAME_LINE __FILE__, __LINE__ sl@0: #endif sl@0: sl@0: sl@0: int sl@0: test_main(int, char*[]) sl@0: { sl@0: typedef boost::multi_array array; sl@0: typedef array::size_type size_type; sl@0: boost::array sizes = { { 3, 3, 3 } }; sl@0: const size_type num_elements = 27; sl@0: sl@0: // Copy Constructor sl@0: { sl@0: array A(sizes); sl@0: std::vector vals(num_elements, 4.5); sl@0: A.assign(vals.begin(),vals.end()); sl@0: array B(A); sl@0: BOOST_CHECK(A == B); sl@0: BOOST_CHECK(B == A); sl@0: BOOST_CHECK(A[0] == B[0]); sl@0: } sl@0: // Assignment Operator sl@0: { sl@0: array A(sizes), B(sizes); sl@0: std::vector vals(num_elements, 4.5); sl@0: A.assign(vals.begin(),vals.end()); sl@0: B = A; sl@0: BOOST_CHECK(A == B); sl@0: BOOST_CHECK(B == A); sl@0: BOOST_CHECK(B[0] == A[0]); sl@0: sl@0: typedef array::index_range range; sl@0: array::index_gen indices; sl@0: array::array_view<2>::type C = A[indices[2][range()][range()]]; sl@0: array::array_view<2>::type D = B[indices[2][range()][range()]]; sl@0: BOOST_CHECK(C == D); sl@0: } sl@0: // Different Arrays sl@0: { sl@0: array A(sizes), B(sizes); sl@0: std::vector valsA(num_elements, 4.5); sl@0: std::vector valsB(num_elements, 2.5); sl@0: A.assign(valsA.begin(),valsA.end()); sl@0: B.assign(valsB.begin(),valsB.end()); sl@0: sl@0: BOOST_CHECK(A != B); sl@0: BOOST_CHECK(B != A); sl@0: BOOST_CHECK(A[0] != B[0]); sl@0: sl@0: typedef array::index_range range; sl@0: array::index_gen indices; sl@0: array::array_view<2>::type C = A[indices[2][range()][range()]]; sl@0: array::array_view<2>::type D = B[indices[2][range()][range()]]; sl@0: BOOST_CHECK(C != D); sl@0: } sl@0: sl@0: // Comparisons galore! sl@0: { sl@0: array A(sizes), B(sizes); sl@0: sl@0: double valsA[] = { sl@0: 0, 0, 0, sl@0: 0, 0, 0, sl@0: 0, 0, 0, sl@0: sl@0: 1, 1, 1, sl@0: 1, 1, 1, sl@0: 1, 1, 1, sl@0: sl@0: 2, 2, 2, sl@0: 2, 2, 2, sl@0: 2, 2, 2 sl@0: }; sl@0: sl@0: double valsB[] = { sl@0: 0, 0, 0, sl@0: 0, 0, 0, sl@0: 0, 0, 0, sl@0: sl@0: 1, 1, 1, sl@0: 1, 1, 1, sl@0: 1, 1, 1, sl@0: sl@0: 2, 2, 2, sl@0: 2, 2, 2, sl@0: 2, 2, 1 sl@0: }; sl@0: sl@0: A.assign(valsA,valsA+num_elements); sl@0: B.assign(valsB,valsB+num_elements); sl@0: sl@0: BOOST_CHECK(B < A); sl@0: BOOST_CHECK(A > B); sl@0: sl@0: BOOST_CHECK(B <= A); sl@0: BOOST_CHECK(A >= B); sl@0: sl@0: BOOST_CHECK(B[0] == A[0]); sl@0: BOOST_CHECK(B[2] < A[2]); sl@0: sl@0: array C = A; sl@0: sl@0: BOOST_CHECK(C <= A); sl@0: BOOST_CHECK(C >= A); sl@0: sl@0: BOOST_CHECK(!(C < A)); sl@0: BOOST_CHECK(!(C > A)); sl@0: sl@0: typedef array::index_range range; sl@0: array::index_gen indices; sl@0: array::array_view<2>::type D = A[indices[2][range()][range()]]; sl@0: array::array_view<2>::type E = B[indices[2][range()][range()]]; sl@0: sl@0: BOOST_CHECK(E < D); sl@0: BOOST_CHECK(E <= D); sl@0: } sl@0: sl@0: #ifdef __SYMBIAN32__ sl@0: if(boost::minimal_test::errors_counter() != 0) sl@0: assert_failed = true; sl@0: testResultXml("compare"); sl@0: close_log_file(); sl@0: #endif sl@0: sl@0: sl@0: return boost::exit_success; sl@0: } sl@0: sl@0: