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