// Copyright Aleksey Gurtovoy 2003-2006 // // 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/mpl for documentation. // $Source: /cvsroot/boost/boost/libs/mpl/test/multiset.cpp,v $ // $Date: 2006/06/12 07:13:12 $ // $Revision: 1.3.2.2 $ #include <boost/mpl/multiset/multiset0.hpp> //#include <boost/mpl/multiset/multiset10.hpp> #include <boost/mpl/insert.hpp> #include <boost/mpl/count.hpp> #include <boost/mpl/aux_/test.hpp> #include <boost/mpl/assert.hpp> #include <boost/mpl/size.hpp> #include <boost/mpl/find.hpp> #include <boost/config.hpp> /* struct test_data1 { typedef multiset0<> s0; typedef multiset1<int> s1; typedef multiset2<int,char&> s2; typedef multiset3<int,char&,int> s3; typedef multiset4<int,char&,int,abstract> s4; }; struct test_data2 { typedef multiset<> s0; typedef multiset<int> s1; typedef multiset<int,char&> s2; typedef multiset<int,char&,int> s3; typedef multiset<int,char&,int,abstract> s4; }; */ template< typename S0 > struct test_data { typedef S0 s0; typedef typename insert<s0,int>::type s1; typedef typename insert<s1,char&>::type s2; typedef typename insert<s2,int>::type s3; typedef typename insert<s3,abstract>::type s4; }; template< typename T > void count_test() { MPL_ASSERT_RELATION( ( count<BOOST_DEDUCED_TYPENAME T::s0,int>::value ), ==, 0 ); MPL_ASSERT_RELATION( ( count<BOOST_DEDUCED_TYPENAME T::s1,int>::value ), ==, 1 ); MPL_ASSERT_RELATION( ( count<BOOST_DEDUCED_TYPENAME T::s2,int>::value ), ==, 1 ); MPL_ASSERT_RELATION( ( count<BOOST_DEDUCED_TYPENAME T::s2,char&>::value ), ==, 1 ); MPL_ASSERT_RELATION( ( count<BOOST_DEDUCED_TYPENAME T::s3,int>::value ), ==, 2 ); MPL_ASSERT_RELATION( ( count<BOOST_DEDUCED_TYPENAME T::s3,char&>::value ), ==, 1 ); MPL_ASSERT_RELATION( ( count<BOOST_DEDUCED_TYPENAME T::s4,abstract>::value ), ==, 1 ); } MPL_TEST_CASE() { //count_test<test_data1>(); //count_test<test_data2>(); //count_test< test_data< multiset<> > >(); count_test< test_data< multiset0<> > >(); } /* // Use a template for testing so that GCC will show us the actual types involved template <class S> void find_test() { BOOST_MPL_ASSERT_RELATION( size<S>::value, ==, 3 ); typedef typename end<S>::type not_found; BOOST_MPL_ASSERT_NOT(( is_same<BOOST_DEDUCED_TYPENAME find<S,int>::type,not_found> )); BOOST_MPL_ASSERT_NOT(( is_same<BOOST_DEDUCED_TYPENAME find<S,long>::type,not_found> )); BOOST_MPL_ASSERT_NOT(( is_same<BOOST_DEDUCED_TYPENAME find<S,char>::type,not_found> )); BOOST_MPL_ASSERT(( is_same<BOOST_DEDUCED_TYPENAME find<S,char*>::type,not_found> )); } */ MPL_TEST_CASE() { // agurt 11/jun/06: multiset does not implement iterators yet! // typedef insert<multiset0<>, int>::type set_of_1_int; // typedef begin<set_of_1_int>::type iter_to_1_int; // BOOST_MPL_ASSERT(( is_same< deref<iter_to_1_int>::type, int > )); typedef multiset0<> s0; typedef insert<s0,int>::type s1; typedef insert<s1,long>::type s2; typedef insert<s2,char>::type myset; // find_test<myset>(); // find_test<myset::type>(); }