1
2 // Copyright Aleksey Gurtovoy 2000-2004
3 //
4 // Distributed under the Boost Software License, Version 1.0.
5 // (See accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt)
7 //
8 // See http://www.boost.org/libs/mpl for documentation.
9
10 // $Id$
11 // $Date$
12 // $Revision$
13
14 #include <boost/mpl/deque.hpp>
15 #include <boost/mpl/push_back.hpp>
16 #include <boost/mpl/pop_back.hpp>
17 #include <boost/mpl/push_front.hpp>
18 #include <boost/mpl/pop_front.hpp>
19 #include <boost/mpl/back.hpp>
20 #include <boost/mpl/front.hpp>
21 #include <boost/mpl/size.hpp>
22 #include <boost/mpl/empty.hpp>
23
24 #include <boost/mpl/aux_/test.hpp>
25
26
MPL_TEST_CASE()27 MPL_TEST_CASE()
28 {
29 typedef deque<> d0;
30 typedef deque<char> d1;
31 typedef deque<char,long> d2;
32 typedef deque<char,char,char,char,char,char,char,char,int> d9;
33
34 MPL_ASSERT_RELATION( size<d0>::value, ==, 0 );
35 MPL_ASSERT_RELATION( size<d1>::value, ==, 1 );
36 MPL_ASSERT_RELATION( size<d2>::value, ==, 2 );
37 MPL_ASSERT_RELATION( size<d9>::value, ==, 9 );
38
39 MPL_ASSERT(( empty<d0> ));
40 MPL_ASSERT_NOT(( empty<d1> ));
41 MPL_ASSERT_NOT(( empty<d2> ));
42 MPL_ASSERT_NOT(( empty<d9> ));
43
44 MPL_ASSERT(( is_same< front<d1>::type,char > ));
45 MPL_ASSERT(( is_same< back<d1>::type,char > ));
46 MPL_ASSERT(( is_same< front<d2>::type,char > ));
47 MPL_ASSERT(( is_same< back<d2>::type,long > ));
48 MPL_ASSERT(( is_same< front<d9>::type,char > ));
49 MPL_ASSERT(( is_same< back<d9>::type,int > ));
50 }
51
52
MPL_TEST_CASE()53 MPL_TEST_CASE()
54 {
55 typedef deque<char,long> d2;
56
57 typedef begin<d2>::type i1;
58 typedef next<i1>::type i2;
59 typedef next<i2>::type i3;
60
61 MPL_ASSERT(( is_same<deref<i1>::type,char> ));
62 MPL_ASSERT(( is_same<deref<i2>::type,long> ));
63 MPL_ASSERT(( is_same< i3, end<d2>::type > ));
64 }
65
MPL_TEST_CASE()66 MPL_TEST_CASE()
67 {
68 typedef deque<> d0;
69
70 typedef push_back<d0,int>::type d1;
71 MPL_ASSERT(( is_same< back<d1>::type,int > ));
72
73 typedef push_front<d1,char>::type d2;
74 MPL_ASSERT(( is_same< back<d2>::type,int > ));
75 MPL_ASSERT(( is_same< front<d2>::type,char > ));
76
77 typedef push_back<d2,long>::type d3;
78 MPL_ASSERT(( is_same< back<d3>::type,long > ));
79 }
80
MPL_TEST_CASE()81 MPL_TEST_CASE()
82 {
83 typedef deque<> d0;
84 typedef deque<char> d1;
85 typedef deque<char,long> d2;
86 typedef deque<char,char,char,char,char,char,char,char,int> d9;
87
88 MPL_ASSERT_RELATION( size<d0>::value, ==, 0 );
89 MPL_ASSERT_RELATION( size<d1>::value, ==, 1 );
90 MPL_ASSERT_RELATION( size<d2>::value, ==, 2 );
91 MPL_ASSERT_RELATION( size<d9>::value, ==, 9 );
92 }
93