os/ossrv/stdcpp/tsrc/Boost_test/multi_array/src/compare.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     1 // Copyright 2002 The Trustees of Indiana University.
     2 
     3 // Use, modification and distribution is subject to the Boost Software 
     4 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
     5 // http://www.boost.org/LICENSE_1_0.txt)
     6 
     7 //  Boost.MultiArray Library
     8 //  Authors: Ronald Garcia
     9 //           Jeremy Siek
    10 //           Andrew Lumsdaine
    11 //  See http://www.boost.org/libs/multi_array for documentation.
    12 
    13 /*
    14  * © Portions copyright (c) 2006-2007 Nokia Corporation.  All rights reserved.
    15 */
    16 
    17 
    18 #include "boost/multi_array.hpp"
    19 
    20 #include "boost/test/minimal.hpp"
    21 
    22 #include <algorithm>
    23 #include <list>
    24 
    25 #ifdef __SYMBIAN32__
    26 #include "std_log_result.h"
    27 #define LOG_FILENAME_LINE __FILE__, __LINE__
    28 #endif
    29 
    30 
    31 int
    32 test_main(int, char*[])
    33 {
    34   typedef boost::multi_array<double, 3> array;
    35   typedef array::size_type size_type;
    36   boost::array<size_type,3> sizes = { { 3, 3, 3 } };
    37   const size_type num_elements = 27;
    38 
    39   // Copy Constructor
    40   {
    41     array A(sizes);
    42     std::vector<double> vals(num_elements, 4.5);
    43     A.assign(vals.begin(),vals.end());
    44     array B(A);
    45     BOOST_CHECK(A == B);
    46     BOOST_CHECK(B == A);
    47     BOOST_CHECK(A[0] == B[0]);
    48   }
    49   // Assignment Operator
    50   {
    51     array A(sizes), B(sizes);
    52     std::vector<double> vals(num_elements, 4.5);
    53     A.assign(vals.begin(),vals.end());
    54     B = A;
    55     BOOST_CHECK(A == B);
    56     BOOST_CHECK(B == A);
    57     BOOST_CHECK(B[0] == A[0]);
    58 
    59     typedef array::index_range range;
    60     array::index_gen indices;
    61     array::array_view<2>::type C = A[indices[2][range()][range()]];
    62     array::array_view<2>::type D = B[indices[2][range()][range()]];
    63     BOOST_CHECK(C == D);
    64   }
    65   // Different Arrays
    66   {
    67     array A(sizes), B(sizes);
    68     std::vector<double> valsA(num_elements, 4.5);
    69     std::vector<double> valsB(num_elements, 2.5);
    70     A.assign(valsA.begin(),valsA.end());
    71     B.assign(valsB.begin(),valsB.end());
    72 
    73     BOOST_CHECK(A != B);
    74     BOOST_CHECK(B != A);
    75     BOOST_CHECK(A[0] != B[0]);
    76 
    77     typedef array::index_range range;
    78     array::index_gen indices;
    79     array::array_view<2>::type C = A[indices[2][range()][range()]];
    80     array::array_view<2>::type D = B[indices[2][range()][range()]];
    81     BOOST_CHECK(C != D);
    82   }
    83 
    84   // Comparisons galore!
    85   {
    86     array A(sizes), B(sizes);
    87 
    88     double valsA[] = {
    89         0, 0, 0,
    90         0, 0, 0,
    91         0, 0, 0,
    92 
    93         1, 1, 1,
    94         1, 1, 1,
    95         1, 1, 1,
    96 
    97         2, 2, 2,
    98         2, 2, 2,
    99         2, 2, 2
   100     };
   101 
   102     double valsB[] = {
   103         0, 0, 0,
   104         0, 0, 0,
   105         0, 0, 0,
   106 
   107         1, 1, 1,
   108         1, 1, 1,
   109         1, 1, 1,
   110 
   111         2, 2, 2,
   112         2, 2, 2,
   113         2, 2, 1
   114     };
   115 
   116     A.assign(valsA,valsA+num_elements);
   117     B.assign(valsB,valsB+num_elements);
   118 
   119     BOOST_CHECK(B < A);
   120     BOOST_CHECK(A > B);
   121 
   122     BOOST_CHECK(B <= A);
   123     BOOST_CHECK(A >= B);
   124 
   125     BOOST_CHECK(B[0] == A[0]);
   126     BOOST_CHECK(B[2] < A[2]);
   127 
   128     array C = A;
   129     
   130     BOOST_CHECK(C <= A);
   131     BOOST_CHECK(C >= A);
   132 
   133     BOOST_CHECK(!(C < A));
   134     BOOST_CHECK(!(C > A));
   135 
   136     typedef array::index_range range;
   137     array::index_gen indices;
   138     array::array_view<2>::type D = A[indices[2][range()][range()]];
   139     array::array_view<2>::type E = B[indices[2][range()][range()]];
   140 
   141     BOOST_CHECK(E < D);
   142     BOOST_CHECK(E <= D);
   143   }
   144 
   145 #ifdef __SYMBIAN32__
   146 if(boost::minimal_test::errors_counter() != 0)
   147    assert_failed = true;
   148    	testResultXml("compare");
   149 	close_log_file();
   150 #endif
   151 
   152 
   153   return boost::exit_success;
   154 }
   155 
   156