1
2// Copyright Aleksey Gurtovoy 2003-2006
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/multiset/multiset0.hpp>
15//#include <boost/mpl/multiset/multiset10.hpp>
16
17#include <boost/mpl/insert.hpp>
18#include <boost/mpl/count.hpp>
19#include <boost/mpl/aux_/test.hpp>
20
21#include <boost/mpl/assert.hpp>
22#include <boost/mpl/size.hpp>
23#include <boost/mpl/find.hpp>
24
25#include <boost/config.hpp>
26
27/*
28struct test_data1
29{
30 typedef multiset0<> s0;
31 typedef multiset1<int> s1;
32 typedef multiset2<int,char&> s2;
33 typedef multiset3<int,char&,int> s3;
34 typedef multiset4<int,char&,int,abstract> s4;
35};
36
37struct test_data2
38{
39 typedef multiset<> s0;
40 typedef multiset<int> s1;
41 typedef multiset<int,char&> s2;
42 typedef multiset<int,char&,int> s3;
43 typedef multiset<int,char&,int,abstract> s4;
44};
45*/
46
47template< typename S0 >
48struct test_data
49{
50 typedef S0 s0;
51 typedef typename insert<s0,int>::type s1;
52 typedef typename insert<s1,char&>::type s2;
53 typedef typename insert<s2,int>::type s3;
54 typedef typename insert<s3,abstract>::type s4;
55};
56
57
58template< typename T >
59void count_test()
60{
61 MPL_ASSERT_RELATION( ( count<BOOST_DEDUCED_TYPENAME T::s0,int>::value ), ==, 0 );
62 MPL_ASSERT_RELATION( ( count<BOOST_DEDUCED_TYPENAME T::s1,int>::value ), ==, 1 );
63 MPL_ASSERT_RELATION( ( count<BOOST_DEDUCED_TYPENAME T::s2,int>::value ), ==, 1 );
64 MPL_ASSERT_RELATION( ( count<BOOST_DEDUCED_TYPENAME T::s2,char&>::value ), ==, 1 );
65 MPL_ASSERT_RELATION( ( count<BOOST_DEDUCED_TYPENAME T::s3,int>::value ), ==, 2 );
66 MPL_ASSERT_RELATION( ( count<BOOST_DEDUCED_TYPENAME T::s3,char&>::value ), ==, 1 );
67 MPL_ASSERT_RELATION( ( count<BOOST_DEDUCED_TYPENAME T::s4,abstract>::value ), ==, 1 );
68}
69
70MPL_TEST_CASE()
71{
72 //count_test<test_data1>();
73 //count_test<test_data2>();
74 //count_test< test_data< multiset<> > >();
75 count_test< test_data< multiset0<> > >();
76}
77
78/*
79// Use a template for testing so that GCC will show us the actual types involved
80template <class S>
81void find_test()
82{
83 BOOST_MPL_ASSERT_RELATION( size<S>::value, ==, 3 );
84
85 typedef typename end<S>::type not_found;
86 BOOST_MPL_ASSERT_NOT(( is_same<BOOST_DEDUCED_TYPENAME find<S,int>::type,not_found> ));
87 BOOST_MPL_ASSERT_NOT(( is_same<BOOST_DEDUCED_TYPENAME find<S,long>::type,not_found> ));
88 BOOST_MPL_ASSERT_NOT(( is_same<BOOST_DEDUCED_TYPENAME find<S,char>::type,not_found> ));
89 BOOST_MPL_ASSERT(( is_same<BOOST_DEDUCED_TYPENAME find<S,char*>::type,not_found> ));
90}
91*/
92
93MPL_TEST_CASE()
94{
95 // agurt 11/jun/06: multiset does not implement iterators yet!
96 // typedef insert<multiset0<>, int>::type set_of_1_int;
97 // typedef begin<set_of_1_int>::type iter_to_1_int;
98 // BOOST_MPL_ASSERT(( is_same< deref<iter_to_1_int>::type, int > ));
99
100 typedef multiset0<> s0;
101 typedef insert<s0,int>::type s1;
102 typedef insert<s1,long>::type s2;
103 typedef insert<s2,char>::type myset;
104
105 // find_test<myset>();
106 // find_test<myset::type>();
107}
108

source code of boost/libs/mpl/test/multiset.cpp