1 
2 // Copyright Aleksey Gurtovoy 2000-2004
3 // Copyright Steven Watanabe 2009
4 //
5 // Distributed under the Boost Software License, Version 1.0.
6 // (See accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt)
8 //
9 // See http://www.boost.org/libs/mpl for documentation.
10 
11 // $Id$
12 // $Date$
13 // $Revision$
14 
15 #include <boost/mpl/push_front.hpp>
16 #include <boost/mpl/push_back.hpp>
17 #include <boost/mpl/list/list10.hpp>
18 #include <boost/mpl/size.hpp>
19 #include <boost/mpl/front.hpp>
20 
21 #include <boost/mpl/aux_/test.hpp>
22 
23 struct no_push_front_tag {};
24 
25 struct no_push_front
26 {
27     typedef no_push_front_tag tag;
28 };
29 
MPL_TEST_CASE()30 MPL_TEST_CASE()
31 {
32     typedef push_front<list0<>,long>::type res1;
33     typedef push_front<list1<long>,int>::type res2;
34     typedef push_front<list2<int,long>,char>::type res3;
35 
36     MPL_ASSERT_RELATION( size<res1>::value, ==, 1 );
37     MPL_ASSERT_RELATION( size<res2>::value, ==, 2 );
38     MPL_ASSERT_RELATION( size<res3>::value, ==, 3 );
39 
40     MPL_ASSERT(( is_same< front<res1>::type, long > ));
41     MPL_ASSERT(( is_same< front<res2>::type, int > ));
42     MPL_ASSERT(( is_same< front<res3>::type, char > ));
43 
44     MPL_ASSERT(( has_push_front< list0<> > ));
45     MPL_ASSERT(( has_push_front< list1<long> > ));
46 
47     MPL_ASSERT_NOT(( has_push_back< list0<> > ));
48 
49     MPL_ASSERT_NOT(( has_push_front< no_push_front > ));
50 }
51