• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Boost.MultiIndex test for MPL operations.
2  *
3  * Copyright 2003-2008 Joaquin M Lopez Munoz.
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/multi_index for library home page.
9  */
10 
11 #include "test_mpl_ops.hpp"
12 
13 #include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
14 #include "pre_multi_index.hpp"
15 #include <boost/multi_index_container.hpp>
16 #include <boost/multi_index/identity.hpp>
17 #include <boost/multi_index/ordered_index.hpp>
18 #include <boost/multi_index/sequenced_index.hpp>
19 #include <boost/mpl/at.hpp>
20 #include <boost/mpl/list.hpp>
21 
22 using namespace boost::multi_index;
23 
test_mpl_ops()24 void test_mpl_ops()
25 {
26   typedef multi_index_container<
27     int,
28     indexed_by<
29       ordered_unique<identity<int> >,
30       ordered_non_unique<identity<int> >
31      >
32   >                           indexed_t1;
33 
34   BOOST_STATIC_ASSERT((boost::is_same<
35     boost::mpl::at_c<indexed_t1::index_specifier_type_list,0>::type,
36     ordered_unique<identity<int> > >::value));
37   BOOST_STATIC_ASSERT((boost::is_same<
38     boost::mpl::at_c<indexed_t1::index_specifier_type_list,1>::type,
39     ordered_non_unique<identity<int> > >::value));
40 
41   typedef boost::mpl::push_front<
42     indexed_t1::index_specifier_type_list,
43     sequenced<>
44   >::type                     index_list_t;
45 
46   typedef multi_index_container<
47     int,
48     index_list_t
49   >                           indexed_t2;
50 
51   BOOST_STATIC_ASSERT((boost::is_same<
52     boost::mpl::at_c<indexed_t2::index_specifier_type_list,0>::type,
53     sequenced<> >::value));
54   BOOST_STATIC_ASSERT((boost::is_same<
55     boost::mpl::at_c<indexed_t2::index_specifier_type_list,1>::type,
56     boost::mpl::at_c<indexed_t1::index_specifier_type_list,0>::type>::value));
57   BOOST_STATIC_ASSERT((boost::is_same<
58     boost::mpl::at_c<indexed_t2::index_specifier_type_list,2>::type,
59     boost::mpl::at_c<indexed_t1::index_specifier_type_list,1>::type>::value));
60 
61   typedef multi_index_container<
62     int,
63     boost::mpl::list<
64       ordered_unique<identity<int> >,
65       ordered_non_unique<identity<int> >
66     >
67   >                           indexed_t3;
68 
69   BOOST_STATIC_ASSERT((boost::is_same<
70     boost::mpl::at_c<indexed_t3::index_specifier_type_list,0>::type,
71     boost::mpl::at_c<indexed_t1::index_specifier_type_list,0>::type>::value));
72   BOOST_STATIC_ASSERT((boost::is_same<
73     boost::mpl::at_c<indexed_t3::index_specifier_type_list,1>::type,
74     boost::mpl::at_c<indexed_t1::index_specifier_type_list,1>::type>::value));
75 }
76