1// Boost.Range library
2//
3// Copyright Neil Groves 2009. Use, modification and
4// distribution is subject to the Boost Software License, Version
5// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
6// http://www.boost.org/LICENSE_1_0.txt)
7//
8//
9// For more information, see http://www.boost.org/libs/range/
10//
11#include <boost/range/algorithm/count.hpp>
12
13#include <boost/test/test_tools.hpp>
14#include <boost/test/unit_test.hpp>
15
16#include <boost/assign.hpp>
17#include <algorithm>
18#include <list>
19#include <set>
20#include <vector>
21
22namespace boost
23{
24 namespace
25 {
26 template< class Container >
27 void test_count_impl()
28 {
29 using namespace boost::assign;
30
31 Container cont;
32 const Container& cref_cont = cont;
33
34 BOOST_CHECK_EQUAL( 0u, boost::count(cont, 0u) );
35 BOOST_CHECK_EQUAL( 0u, boost::count(cref_cont, 0u) );
36 BOOST_CHECK_EQUAL( 0u, boost::count(boost::make_iterator_range(cont), 0u) );
37
38 cont += 1;
39 BOOST_CHECK_EQUAL( 0u, boost::count(cont, 0u) );
40 BOOST_CHECK_EQUAL( 0u, boost::count(cref_cont, 0u) );
41 BOOST_CHECK_EQUAL( 0u, boost::count(boost::make_iterator_range(cont), 0u) );
42 BOOST_CHECK_EQUAL( 1u, boost::count(cont, 1u) );
43 BOOST_CHECK_EQUAL( 1u, boost::count(cref_cont, 1u) );
44 BOOST_CHECK_EQUAL( 1u, boost::count(boost::make_iterator_range(cont), 1u) );
45
46 cont += 2,3,4,5,6,7,8,9;
47 BOOST_CHECK_EQUAL( 0u, boost::count(cont, 0u) );
48 BOOST_CHECK_EQUAL( 0u, boost::count(cref_cont, 0u) );
49 BOOST_CHECK_EQUAL( 0u, boost::count(boost::make_iterator_range(cont), 0u) );
50 BOOST_CHECK_EQUAL( 1u, boost::count(cont, 1u) );
51 BOOST_CHECK_EQUAL( 1u, boost::count(cref_cont, 1u) );
52 BOOST_CHECK_EQUAL( 1u, boost::count(boost::make_iterator_range(cont), 1u) );
53
54 cont += 2;
55 BOOST_CHECK_EQUAL( 0u, boost::count(cont, 0u) );
56 BOOST_CHECK_EQUAL( 0u, boost::count(cref_cont, 0u) );
57 BOOST_CHECK_EQUAL( 0u, boost::count(boost::make_iterator_range(cont), 0u) );
58 BOOST_CHECK_EQUAL( 1u, boost::count(cont, 1u) );
59 BOOST_CHECK_EQUAL( 1u, boost::count(cref_cont, 1u) );
60 BOOST_CHECK_EQUAL( 1u, boost::count(boost::make_iterator_range(cont), 1u) );
61 BOOST_CHECK_EQUAL( 2u, boost::count(cont, 2u) );
62 BOOST_CHECK_EQUAL( 2u, boost::count(cref_cont, 2u) );
63 BOOST_CHECK_EQUAL( 2u, boost::count(boost::make_iterator_range(cont), 2u) );
64 }
65
66 void test_count()
67 {
68 test_count_impl< std::vector<int> >();
69 test_count_impl< std::list<int> >();
70 test_count_impl< std::multiset<int> >();
71 }
72 }
73}
74
75
76boost::unit_test::test_suite*
77init_unit_test_suite(int argc, char* argv[])
78{
79 boost::unit_test::test_suite* test
80 = BOOST_TEST_SUITE( "RangeTestSuite.algorithm.count" );
81
82 test->add( BOOST_TEST_CASE( &boost::test_count ) );
83
84 return test;
85}
86

source code of boost/libs/range/test/algorithm_test/count.cpp