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: // range1.cpp - test of index_range 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/index_range.hpp" sl@0: sl@0: #include "boost/test/minimal.hpp" sl@0: sl@0: #include "boost/array.hpp" 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: int sl@0: test_main(int,char*[]) sl@0: { sl@0: typedef boost::detail::multi_array::index_range range; sl@0: sl@0: { sl@0: // typical range creation and extraction sl@0: range r1(-3,5); sl@0: BOOST_CHECK(r1.start() == -3); sl@0: BOOST_CHECK(r1.finish() == 5); sl@0: BOOST_CHECK(r1.stride() == 1); sl@0: BOOST_CHECK(!r1.is_degenerate()); sl@0: BOOST_CHECK(r1.get_start(0) == -3); sl@0: BOOST_CHECK(r1.get_finish(100) == 5); sl@0: } sl@0: sl@0: { sl@0: range r2(-3,5,2); sl@0: BOOST_CHECK(r2.start() == -3); sl@0: BOOST_CHECK(r2.finish() == 5); sl@0: BOOST_CHECK(r2.stride() == 2); sl@0: BOOST_CHECK(!r2.is_degenerate()); sl@0: } sl@0: sl@0: { sl@0: // degenerate creation sl@0: range r3(5); sl@0: BOOST_CHECK(r3.start() == 5); sl@0: BOOST_CHECK(r3.finish() == 6); sl@0: BOOST_CHECK(r3.stride() == 1); sl@0: BOOST_CHECK(r3.is_degenerate()); sl@0: } sl@0: sl@0: { sl@0: // default range creation sl@0: range r4; sl@0: BOOST_CHECK(r4.get_start(0) == 0); sl@0: BOOST_CHECK(r4.get_finish(100) == 100); sl@0: BOOST_CHECK(r4.stride() == 1); sl@0: } sl@0: sl@0: { sl@0: // create a range using the setter methods sl@0: range r5 = range().stride(2).start(-3).finish(7); sl@0: BOOST_CHECK(r5.start() == -3); sl@0: BOOST_CHECK(r5.stride() == 2); sl@0: BOOST_CHECK(r5.finish() == 7); sl@0: } sl@0: sl@0: // try out all the comparison operators sl@0: { sl@0: range r6 = -3 <= range().stride(2) < 7; sl@0: BOOST_CHECK(r6.start() == -3); sl@0: BOOST_CHECK(r6.stride() == 2); sl@0: BOOST_CHECK(r6.finish() == 7); sl@0: } sl@0: sl@0: { sl@0: range r7 = -3 < range() <= 7; sl@0: BOOST_CHECK(r7.start() == -2); sl@0: BOOST_CHECK(r7.stride() == 1); sl@0: BOOST_CHECK(r7.finish() == 8); sl@0: } sl@0: sl@0: // arithmetic operators sl@0: { sl@0: range r8 = range(0,5) + 2; sl@0: BOOST_CHECK(r8.start() == 2); sl@0: BOOST_CHECK(r8.stride() == 1); sl@0: BOOST_CHECK(r8.finish() == 7); sl@0: } sl@0: sl@0: { sl@0: range r9 = range(0,5) - 2; sl@0: BOOST_CHECK(r9.start() == -2); sl@0: BOOST_CHECK(r9.stride() == 1); sl@0: BOOST_CHECK(r9.finish() == 3); sl@0: } sl@0: #ifdef __SYMBIAN32__ sl@0: if(boost::minimal_test::errors_counter() != 0) sl@0: assert_failed = true; sl@0: testResultXml("range1"); sl@0: close_log_file(); sl@0: #endif sl@0: sl@0: return boost::exit_success; sl@0: }