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: // access.cpp - operator[] and operator() tests with various arrays sl@0: // The tests assume that they are working on an Array of shape 2x3x4 sl@0: // sl@0: /* sl@0: * © Portions copyright (c) 2006-2007 Nokia Corporation. All rights reserved. sl@0: */ sl@0: sl@0: #include "generative_tests.hpp" sl@0: #include "boost/static_assert.hpp" sl@0: sl@0: template sl@0: void access(Array& A, const mutable_array_tag&) { sl@0: assign(A); sl@0: access(A,const_array_tag()); sl@0: sl@0: const Array& CA = A; sl@0: access(CA,const_array_tag()); sl@0: } sl@0: sl@0: template sl@0: void access(Array& A, const const_array_tag&) { sl@0: const unsigned int ndims = 3; sl@0: BOOST_STATIC_ASSERT((Array::dimensionality == ndims)); sl@0: typedef typename Array::index index; sl@0: const index idx0 = A.index_bases()[0]; sl@0: const index idx1 = A.index_bases()[1]; sl@0: const index idx2 = A.index_bases()[2]; sl@0: sl@0: // operator[] sl@0: int cnum = 0; sl@0: const Array& CA = A; sl@0: for (index i = idx0; i != idx0+2; ++i) sl@0: for (index j = idx1; j != idx1+3; ++j) sl@0: for (index k = idx2; k != idx2+4; ++k) { sl@0: BOOST_CHECK(A[i][j][k] == cnum++); sl@0: BOOST_CHECK(CA[i][j][k] == A[i][j][k]); sl@0: } sl@0: sl@0: // operator() sl@0: for (index i2 = idx0; i2 != idx0+2; ++i2) sl@0: for (index j2 = idx1; j2 != idx1+3; ++j2) sl@0: for (index k2 = idx2; k2 != idx2+4; ++k2) { sl@0: boost::array indices; sl@0: indices[0] = i2; indices[1] = j2; indices[2] = k2; sl@0: BOOST_CHECK(A(indices) == A[i2][j2][k2]); sl@0: BOOST_CHECK(CA(indices) == A(indices)); sl@0: } sl@0: ++tests_run; sl@0: } sl@0: sl@0: int test_main(int,char*[]) { sl@0: #ifdef __SYMBIAN32__ sl@0: if(boost::minimal_test::errors_counter() != 0) sl@0: assert_failed = true; sl@0: testResultXml("access"); sl@0: close_log_file(); sl@0: #endif sl@0: return run_generative_tests(); sl@0: }