File: deque_options_test.cpp

package info (click to toggle)
boost1.90 1.90.0-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 593,120 kB
  • sloc: cpp: 4,190,908; xml: 196,648; python: 34,618; ansic: 23,145; asm: 5,468; sh: 3,774; makefile: 1,161; perl: 1,020; sql: 728; ruby: 676; yacc: 478; java: 77; lisp: 24; csh: 6
file content (109 lines) | stat: -rw-r--r-- 3,544 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2004-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#include <boost/container/deque.hpp>
#include <boost/container/new_allocator.hpp>
#include <boost/container/allocator.hpp>
#include <boost/core/lightweight_test.hpp>

using namespace boost::container;

using namespace boost::container;

template<class Unsigned, class VectorType>
void test_stored_size_type_impl()
{
   #ifndef BOOST_NO_EXCEPTIONS
   VectorType v;
   typedef typename VectorType::size_type    size_type;
   size_type const max = Unsigned(-1);
   v.resize(5);
   BOOST_TEST_THROWS(v.resize(max+1),                    std::exception);
   BOOST_TEST_THROWS(VectorType v2(max+1),               std::exception);
   #endif
}

template<class Unsigned>
void test_stored_size_type()
{
   #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
   using options_t = deque_options_t< stored_size<Unsigned> >;
   #else
   typedef typename deque_options
      < stored_size<Unsigned> >::type options_t;
   #endif

   typedef deque<unsigned char, new_allocator<unsigned char> > default_deque_t;
   //Test first with a typical allocator
   {
      typedef deque<unsigned char, new_allocator<unsigned char>, options_t> deque_t;
      BOOST_CONTAINER_STATIC_ASSERT(sizeof(deque_t) < sizeof(default_deque_t));
      test_stored_size_type_impl<Unsigned, deque_t>();
   }
   //Test with a V2 allocator
   {
      typedef deque<unsigned char, allocator<unsigned char>, options_t> deque_t;
      BOOST_CONTAINER_STATIC_ASSERT(sizeof(deque_t) < sizeof(default_deque_t));
      test_stored_size_type_impl<Unsigned, deque_t>();
   }
}

void test_block_bytes()
{
   #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
   using options_t = deque_options_t< block_bytes<128u> >;
   #else
   typedef deque_options< block_bytes<128u> >::type options_t;
   #endif
   typedef deque<unsigned short, void, options_t> deque_t;
   BOOST_TEST(deque_t::get_block_size() == 128u/sizeof(unsigned short));
}

void test_block_elements()
{
   #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
   using options_t = deque_options_t< block_size<64> >;
   #else
   typedef deque_options< block_size<64 > >::type options_t;
   #endif
   typedef deque<unsigned char, void, options_t> deque_t;
   BOOST_TEST(deque_t::get_block_size() == 64U);
}

void test_reservable()
{
   {
      #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
      using options_t = deque_options_t< reservable<true> >;
      #else
      typedef deque_options< reservable<true> >::type options_t;
      #endif
      typedef deque<unsigned short, void, options_t> deque_t;
      BOOST_CONTAINER_STATIC_ASSERT(deque_t::is_reservable == true);
   }
   {
      #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
      using options_t = deque_options_t< reservable<false> >;
      #else
      typedef deque_options< reservable<false> >::type options_t;
      #endif
      typedef deque<unsigned short, void, options_t> deque_t;
      BOOST_CONTAINER_STATIC_ASSERT(deque_t::is_reservable == false);
   }
}

int main()
{
   test_block_bytes();
   test_block_elements();
   test_stored_size_type<unsigned char>();
   test_stored_size_type<unsigned short>();
   test_reservable();
   return ::boost::report_errors();
}