int main()
{
    {
        typedef int V;
        typedef std::multiset<int> M;
        {
            typedef M::iterator R;
            V ar[] =
            {
                5,
                5,
                5,
                7,
                7,
                7,
                9,
                9,
                9
            };
            M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
            R r = m.lower_bound(4);
            assert(r == next(m.begin(), 0));
            r = m.lower_bound(5);
            assert(r == next(m.begin(), 0));
            r = m.lower_bound(6);
            assert(r == next(m.begin(), 3));
            r = m.lower_bound(7);
            assert(r == next(m.begin(), 3));
            r = m.lower_bound(8);
            assert(r == next(m.begin(), 6));
            r = m.lower_bound(9);
            assert(r == next(m.begin(), 6));
            r = m.lower_bound(11);
            assert(r == next(m.begin(), 9));
        }
        {
            typedef M::const_iterator R;
            V ar[] =
            {
                5,
                5,
                5,
                7,
                7,
                7,
                9,
                9,
                9
            };
            const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
            R r = m.lower_bound(4);
            assert(r == next(m.begin(), 0));
            r = m.lower_bound(5);
            assert(r == next(m.begin(), 0));
            r = m.lower_bound(6);
            assert(r == next(m.begin(), 3));
            r = m.lower_bound(7);
            assert(r == next(m.begin(), 3));
            r = m.lower_bound(8);
            assert(r == next(m.begin(), 6));
            r = m.lower_bound(9);
            assert(r == next(m.begin(), 6));
            r = m.lower_bound(11);
            assert(r == next(m.begin(), 9));
        }
    }
#if __cplusplus >= 201103L
    {
        typedef int V;
        typedef std::multiset<int, std::less<int>, min_allocator<int>> M;
        {
            typedef M::iterator R;
            V ar[] =
            {
                5,
                5,
                5,
                7,
                7,
                7,
                9,
                9,
                9
            };
            M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
            R r = m.lower_bound(4);
            assert(r == next(m.begin(), 0));
            r = m.lower_bound(5);
            assert(r == next(m.begin(), 0));
            r = m.lower_bound(6);
            assert(r == next(m.begin(), 3));
            r = m.lower_bound(7);
            assert(r == next(m.begin(), 3));
            r = m.lower_bound(8);
            assert(r == next(m.begin(), 6));
            r = m.lower_bound(9);
            assert(r == next(m.begin(), 6));
            r = m.lower_bound(11);
            assert(r == next(m.begin(), 9));
        }
        {
            typedef M::const_iterator R;
            V ar[] =
            {
                5,
                5,
                5,
                7,
                7,
                7,
                9,
                9,
                9
            };
            const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
            R r = m.lower_bound(4);
            assert(r == next(m.begin(), 0));
            r = m.lower_bound(5);
            assert(r == next(m.begin(), 0));
            r = m.lower_bound(6);
            assert(r == next(m.begin(), 3));
            r = m.lower_bound(7);
            assert(r == next(m.begin(), 3));
            r = m.lower_bound(8);
            assert(r == next(m.begin(), 6));
            r = m.lower_bound(9);
            assert(r == next(m.begin(), 6));
            r = m.lower_bound(11);
            assert(r == next(m.begin(), 9));
        }
    }
#endif
}
Exemplo n.º 2
0
int main()
{
    typedef std::pair<const int, double> V;
    typedef std::map<int, double> M;
    {
        typedef std::pair<M::iterator, M::iterator> R;
        V ar[] =
        {
            V(5, 5),
            V(7, 6),
            V(9, 7),
            V(11, 8),
            V(13, 9),
            V(15, 10),
            V(17, 11),
            V(19, 12)
        };
        M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.equal_range(5);
        assert(r.first == next(m.begin(), 0));
        assert(r.second == next(m.begin(), 1));
        r = m.equal_range(7);
        assert(r.first == next(m.begin(), 1));
        assert(r.second == next(m.begin(), 2));
        r = m.equal_range(9);
        assert(r.first == next(m.begin(), 2));
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(11);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 4));
        r = m.equal_range(13);
        assert(r.first == next(m.begin(), 4));
        assert(r.second == next(m.begin(), 5));
        r = m.equal_range(15);
        assert(r.first == next(m.begin(), 5));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(17);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 7));
        r = m.equal_range(19);
        assert(r.first == next(m.begin(), 7));
        assert(r.second == next(m.begin(), 8));
        r = m.equal_range(4);
        assert(r.first == next(m.begin(), 0));
        assert(r.second == next(m.begin(), 0));
        r = m.equal_range(6);
        assert(r.first == next(m.begin(), 1));
        assert(r.second == next(m.begin(), 1));
        r = m.equal_range(8);
        assert(r.first == next(m.begin(), 2));
        assert(r.second == next(m.begin(), 2));
        r = m.equal_range(10);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(12);
        assert(r.first == next(m.begin(), 4));
        assert(r.second == next(m.begin(), 4));
        r = m.equal_range(14);
        assert(r.first == next(m.begin(), 5));
        assert(r.second == next(m.begin(), 5));
        r = m.equal_range(16);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(18);
        assert(r.first == next(m.begin(), 7));
        assert(r.second == next(m.begin(), 7));
        r = m.equal_range(20);
        assert(r.first == next(m.begin(), 8));
        assert(r.second == next(m.begin(), 8));
    }
    {
        typedef std::pair<M::const_iterator, M::const_iterator> R;
        V ar[] =
        {
            V(5, 5),
            V(7, 6),
            V(9, 7),
            V(11, 8),
            V(13, 9),
            V(15, 10),
            V(17, 11),
            V(19, 12)
        };
        const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.equal_range(5);
        assert(r.first == next(m.begin(), 0));
        assert(r.second == next(m.begin(), 1));
        r = m.equal_range(7);
        assert(r.first == next(m.begin(), 1));
        assert(r.second == next(m.begin(), 2));
        r = m.equal_range(9);
        assert(r.first == next(m.begin(), 2));
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(11);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 4));
        r = m.equal_range(13);
        assert(r.first == next(m.begin(), 4));
        assert(r.second == next(m.begin(), 5));
        r = m.equal_range(15);
        assert(r.first == next(m.begin(), 5));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(17);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 7));
        r = m.equal_range(19);
        assert(r.first == next(m.begin(), 7));
        assert(r.second == next(m.begin(), 8));
        r = m.equal_range(4);
        assert(r.first == next(m.begin(), 0));
        assert(r.second == next(m.begin(), 0));
        r = m.equal_range(6);
        assert(r.first == next(m.begin(), 1));
        assert(r.second == next(m.begin(), 1));
        r = m.equal_range(8);
        assert(r.first == next(m.begin(), 2));
        assert(r.second == next(m.begin(), 2));
        r = m.equal_range(10);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(12);
        assert(r.first == next(m.begin(), 4));
        assert(r.second == next(m.begin(), 4));
        r = m.equal_range(14);
        assert(r.first == next(m.begin(), 5));
        assert(r.second == next(m.begin(), 5));
        r = m.equal_range(16);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(18);
        assert(r.first == next(m.begin(), 7));
        assert(r.second == next(m.begin(), 7));
        r = m.equal_range(20);
        assert(r.first == next(m.begin(), 8));
        assert(r.second == next(m.begin(), 8));
    }
}
Exemplo n.º 3
0
void main()
{
    {
    typedef int V;
    typedef set<int> M;
    {
        typedef std::pair<M::iterator, M::iterator> R;
        V ar[] =
        {
            5,
            7,
            9,
            11,
            13,
            15,
            17,
            19
        };
        M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.equal_range(5);
        assert(r.first == next(m.begin(), 0));
        assert(r.second == next(m.begin(), 1));
        r = m.equal_range(7);
        assert(r.first == next(m.begin(), 1));
        assert(r.second == next(m.begin(), 2));
        r = m.equal_range(9);
        assert(r.first == next(m.begin(), 2));
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(11);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 4));
        r = m.equal_range(13);
        assert(r.first == next(m.begin(), 4));
        assert(r.second == next(m.begin(), 5));
        r = m.equal_range(15);
        assert(r.first == next(m.begin(), 5));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(17);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 7));
        r = m.equal_range(19);
        assert(r.first == next(m.begin(), 7));
        assert(r.second == next(m.begin(), 8));
        r = m.equal_range(4);
        assert(r.first == next(m.begin(), 0));
        assert(r.second == next(m.begin(), 0));
        r = m.equal_range(6);
        assert(r.first == next(m.begin(), 1));
        assert(r.second == next(m.begin(), 1));
        r = m.equal_range(8);
        assert(r.first == next(m.begin(), 2));
        assert(r.second == next(m.begin(), 2));
        r = m.equal_range(10);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(12);
        assert(r.first == next(m.begin(), 4));
        assert(r.second == next(m.begin(), 4));
        r = m.equal_range(14);
        assert(r.first == next(m.begin(), 5));
        assert(r.second == next(m.begin(), 5));
        r = m.equal_range(16);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(18);
        assert(r.first == next(m.begin(), 7));
        assert(r.second == next(m.begin(), 7));
        r = m.equal_range(20);
        assert(r.first == next(m.begin(), 8));
        assert(r.second == next(m.begin(), 8));
    }
    {
        typedef std::pair<M::const_iterator, M::const_iterator> R;
        V ar[] =
        {
            5,
            7,
            9,
            11,
            13,
            15,
            17,
            19
        };
        const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.equal_range(5);
        assert(r.first == next(m.begin(), 0));
        assert(r.second == next(m.begin(), 1));
        r = m.equal_range(7);
        assert(r.first == next(m.begin(), 1));
        assert(r.second == next(m.begin(), 2));
        r = m.equal_range(9);
        assert(r.first == next(m.begin(), 2));
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(11);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 4));
        r = m.equal_range(13);
        assert(r.first == next(m.begin(), 4));
        assert(r.second == next(m.begin(), 5));
        r = m.equal_range(15);
        assert(r.first == next(m.begin(), 5));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(17);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 7));
        r = m.equal_range(19);
        assert(r.first == next(m.begin(), 7));
        assert(r.second == next(m.begin(), 8));
        r = m.equal_range(4);
        assert(r.first == next(m.begin(), 0));
        assert(r.second == next(m.begin(), 0));
        r = m.equal_range(6);
        assert(r.first == next(m.begin(), 1));
        assert(r.second == next(m.begin(), 1));
        r = m.equal_range(8);
        assert(r.first == next(m.begin(), 2));
        assert(r.second == next(m.begin(), 2));
        r = m.equal_range(10);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(12);
        assert(r.first == next(m.begin(), 4));
        assert(r.second == next(m.begin(), 4));
        r = m.equal_range(14);
        assert(r.first == next(m.begin(), 5));
        assert(r.second == next(m.begin(), 5));
        r = m.equal_range(16);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(18);
        assert(r.first == next(m.begin(), 7));
        assert(r.second == next(m.begin(), 7));
        r = m.equal_range(20);
        assert(r.first == next(m.begin(), 8));
        assert(r.second == next(m.begin(), 8));
    }
    }
//#if __cplusplus >= 201103L
#ifdef LIBCPP_TEST_MIN_ALLOCATOR
    {
    typedef int V;
    typedef set<int, std::less<int>, min_allocator<int>> M;
    typedef std::pair<M::iterator, M::iterator> R;
    V ar[] =
    {
        5,
        7,
        9,
        11,
        13,
        15,
        17,
        19
    };
    M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
    R r = m.equal_range(5);
    assert(r.first == next(m.begin(), 0));
    assert(r.second == next(m.begin(), 1));
    r = m.equal_range(7);
    assert(r.first == next(m.begin(), 1));
    assert(r.second == next(m.begin(), 2));
    r = m.equal_range(9);
    assert(r.first == next(m.begin(), 2));
    assert(r.second == next(m.begin(), 3));
    r = m.equal_range(11);
    assert(r.first == next(m.begin(), 3));
    assert(r.second == next(m.begin(), 4));
    r = m.equal_range(13);
    assert(r.first == next(m.begin(), 4));
    assert(r.second == next(m.begin(), 5));
    r = m.equal_range(15);
    assert(r.first == next(m.begin(), 5));
    assert(r.second == next(m.begin(), 6));
    r = m.equal_range(17);
    assert(r.first == next(m.begin(), 6));
    assert(r.second == next(m.begin(), 7));
    r = m.equal_range(19);
    assert(r.first == next(m.begin(), 7));
    assert(r.second == next(m.begin(), 8));
    r = m.equal_range(4);
    assert(r.first == next(m.begin(), 0));
    assert(r.second == next(m.begin(), 0));
    r = m.equal_range(6);
    assert(r.first == next(m.begin(), 1));
    assert(r.second == next(m.begin(), 1));
    r = m.equal_range(8);
    assert(r.first == next(m.begin(), 2));
    assert(r.second == next(m.begin(), 2));
    r = m.equal_range(10);
    assert(r.first == next(m.begin(), 3));
    assert(r.second == next(m.begin(), 3));
    r = m.equal_range(12);
    assert(r.first == next(m.begin(), 4));
    assert(r.second == next(m.begin(), 4));
    r = m.equal_range(14);
    assert(r.first == next(m.begin(), 5));
    assert(r.second == next(m.begin(), 5));
    r = m.equal_range(16);
    assert(r.first == next(m.begin(), 6));
    assert(r.second == next(m.begin(), 6));
    r = m.equal_range(18);
    assert(r.first == next(m.begin(), 7));
    assert(r.second == next(m.begin(), 7));
    r = m.equal_range(20);
    assert(r.first == next(m.begin(), 8));
    assert(r.second == next(m.begin(), 8));
    }
#endif
#if _LIBCPP_STD_VER > 11
    {
    typedef int V;
    typedef set<V, std::less<>> M;
    {
        typedef std::pair<M::iterator, M::iterator> R;
        V ar[] =
        {
            5,
            7,
            9,
            11,
            13,
            15,
            17,
            19
        };
        M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.equal_range(5);
        assert(r.first == next(m.begin(), 0));
        assert(r.second == next(m.begin(), 1));
        r = m.equal_range(7);
        assert(r.first == next(m.begin(), 1));
        assert(r.second == next(m.begin(), 2));
        r = m.equal_range(9);
        assert(r.first == next(m.begin(), 2));
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(11);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 4));
        r = m.equal_range(13);
        assert(r.first == next(m.begin(), 4));
        assert(r.second == next(m.begin(), 5));
        r = m.equal_range(15);
        assert(r.first == next(m.begin(), 5));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(17);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 7));
        r = m.equal_range(19);
        assert(r.first == next(m.begin(), 7));
        assert(r.second == next(m.begin(), 8));
        r = m.equal_range(4);
        assert(r.first == next(m.begin(), 0));
        assert(r.second == next(m.begin(), 0));
        r = m.equal_range(6);
        assert(r.first == next(m.begin(), 1));
        assert(r.second == next(m.begin(), 1));
        r = m.equal_range(8);
        assert(r.first == next(m.begin(), 2));
        assert(r.second == next(m.begin(), 2));
        r = m.equal_range(10);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(12);
        assert(r.first == next(m.begin(), 4));
        assert(r.second == next(m.begin(), 4));
        r = m.equal_range(14);
        assert(r.first == next(m.begin(), 5));
        assert(r.second == next(m.begin(), 5));
        r = m.equal_range(16);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(18);
        assert(r.first == next(m.begin(), 7));
        assert(r.second == next(m.begin(), 7));
        r = m.equal_range(20);
        assert(r.first == next(m.begin(), 8));
        assert(r.second == next(m.begin(), 8));
        }
    }
    {
    typedef PrivateConstructor V;
    typedef set<V, std::less<>> M;
    typedef std::pair<M::iterator, M::iterator> R;

    M m;
    m.insert ( V::make ( 5 ));
    m.insert ( V::make ( 7 ));
    m.insert ( V::make ( 9 ));
    m.insert ( V::make ( 11 ));
    m.insert ( V::make ( 13 ));
    m.insert ( V::make ( 15 ));
    m.insert ( V::make ( 17 ));
    m.insert ( V::make ( 19 ));

    R r = m.equal_range(5);
    assert(r.first == next(m.begin(), 0));
    assert(r.second == next(m.begin(), 1));
    r = m.equal_range(7);
    assert(r.first == next(m.begin(), 1));
    assert(r.second == next(m.begin(), 2));
    r = m.equal_range(9);
    assert(r.first == next(m.begin(), 2));
    assert(r.second == next(m.begin(), 3));
    r = m.equal_range(11);
    assert(r.first == next(m.begin(), 3));
    assert(r.second == next(m.begin(), 4));
    r = m.equal_range(13);
    assert(r.first == next(m.begin(), 4));
    assert(r.second == next(m.begin(), 5));
    r = m.equal_range(15);
    assert(r.first == next(m.begin(), 5));
    assert(r.second == next(m.begin(), 6));
    r = m.equal_range(17);
    assert(r.first == next(m.begin(), 6));
    assert(r.second == next(m.begin(), 7));
    r = m.equal_range(19);
    assert(r.first == next(m.begin(), 7));
    assert(r.second == next(m.begin(), 8));
    r = m.equal_range(4);
    assert(r.first == next(m.begin(), 0));
    assert(r.second == next(m.begin(), 0));
    r = m.equal_range(6);
    assert(r.first == next(m.begin(), 1));
    assert(r.second == next(m.begin(), 1));
    r = m.equal_range(8);
    assert(r.first == next(m.begin(), 2));
    assert(r.second == next(m.begin(), 2));
    r = m.equal_range(10);
    assert(r.first == next(m.begin(), 3));
    assert(r.second == next(m.begin(), 3));
    r = m.equal_range(12);
    assert(r.first == next(m.begin(), 4));
    assert(r.second == next(m.begin(), 4));
    r = m.equal_range(14);
    assert(r.first == next(m.begin(), 5));
    assert(r.second == next(m.begin(), 5));
    r = m.equal_range(16);
    assert(r.first == next(m.begin(), 6));
    assert(r.second == next(m.begin(), 6));
    r = m.equal_range(18);
    assert(r.first == next(m.begin(), 7));
    assert(r.second == next(m.begin(), 7));
    r = m.equal_range(20);
    assert(r.first == next(m.begin(), 8));
    assert(r.second == next(m.begin(), 8));
    }
#endif
}
Exemplo n.º 4
0
int main()
{
    typedef std::pair<const int, double> V;
    {
    typedef std::multimap<int, double> M;
    {
        typedef std::pair<M::iterator, M::iterator> R;
        V ar[] =
        {
            V(5, 1),
            V(5, 2),
            V(5, 3),
            V(7, 1),
            V(7, 2),
            V(7, 3),
            V(9, 1),
            V(9, 2),
            V(9, 3)
        };
        M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.equal_range(4);
        assert(r.first == m.begin());
        assert(r.second == m.begin());
        r = m.equal_range(5);
        assert(r.first == m.begin());
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(6);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(7);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(8);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(9);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 9));
        r = m.equal_range(10);
        assert(r.first == m.end());
        assert(r.second == m.end());
    }
    {
        typedef std::pair<M::const_iterator, M::const_iterator> R;
        V ar[] =
        {
            V(5, 1),
            V(5, 2),
            V(5, 3),
            V(7, 1),
            V(7, 2),
            V(7, 3),
            V(9, 1),
            V(9, 2),
            V(9, 3)
        };
        const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.equal_range(4);
        assert(r.first == m.begin());
        assert(r.second == m.begin());
        r = m.equal_range(5);
        assert(r.first == m.begin());
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(6);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(7);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(8);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(9);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 9));
        r = m.equal_range(10);
        assert(r.first == m.end());
        assert(r.second == m.end());
    }
    }
#if __cplusplus >= 201103L
    {
    typedef std::multimap<int, double, std::less<int>, min_allocator<std::pair<const int, double>>> M;
    {
        typedef std::pair<M::iterator, M::iterator> R;
        V ar[] =
        {
            V(5, 1),
            V(5, 2),
            V(5, 3),
            V(7, 1),
            V(7, 2),
            V(7, 3),
            V(9, 1),
            V(9, 2),
            V(9, 3)
        };
        M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.equal_range(4);
        assert(r.first == m.begin());
        assert(r.second == m.begin());
        r = m.equal_range(5);
        assert(r.first == m.begin());
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(6);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(7);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(8);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(9);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 9));
        r = m.equal_range(10);
        assert(r.first == m.end());
        assert(r.second == m.end());
    }
    {
        typedef std::pair<M::const_iterator, M::const_iterator> R;
        V ar[] =
        {
            V(5, 1),
            V(5, 2),
            V(5, 3),
            V(7, 1),
            V(7, 2),
            V(7, 3),
            V(9, 1),
            V(9, 2),
            V(9, 3)
        };
        const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.equal_range(4);
        assert(r.first == m.begin());
        assert(r.second == m.begin());
        r = m.equal_range(5);
        assert(r.first == m.begin());
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(6);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(7);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(8);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(9);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 9));
        r = m.equal_range(10);
        assert(r.first == m.end());
        assert(r.second == m.end());
    }
    }
#endif
#if _LIBCPP_STD_VER > 11
    {
    typedef std::pair<const int, double> V;
    typedef std::multimap<int, double, std::less<>> M;

    typedef std::pair<M::iterator, M::iterator> R;
    V ar[] =
    {
        V(5, 1),
        V(5, 2),
        V(5, 3),
        V(7, 1),
        V(7, 2),
        V(7, 3),
        V(9, 1),
        V(9, 2),
        V(9, 3)
    };
    M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
    R r = m.equal_range(4);
    assert(r.first == m.begin());
    assert(r.second == m.begin());
    r = m.equal_range(5);
    assert(r.first == m.begin());
    assert(r.second == next(m.begin(), 3));
    r = m.equal_range(6);
    assert(r.first == next(m.begin(), 3));
    assert(r.second == next(m.begin(), 3));
    r = m.equal_range(7);
    assert(r.first == next(m.begin(), 3));
    assert(r.second == next(m.begin(), 6));
    r = m.equal_range(8);
    assert(r.first == next(m.begin(), 6));
    assert(r.second == next(m.begin(), 6));
    r = m.equal_range(9);
    assert(r.first == next(m.begin(), 6));
    assert(r.second == next(m.begin(), 9));
    r = m.equal_range(10);
    assert(r.first == m.end());
    assert(r.second == m.end());

    r = m.equal_range(C2Int(4));
    assert(r.first == m.begin());
    assert(r.second == m.begin());
    r = m.equal_range(C2Int(5));
    assert(r.first == m.begin());
    assert(r.second == next(m.begin(), 3));
    r = m.equal_range(C2Int(6));
    assert(r.first == next(m.begin(), 3));
    assert(r.second == next(m.begin(), 3));
    r = m.equal_range(C2Int(7));
    assert(r.first == next(m.begin(), 3));
    assert(r.second == next(m.begin(), 6));
    r = m.equal_range(C2Int(8));
    assert(r.first == next(m.begin(), 6));
    assert(r.second == next(m.begin(), 6));
    r = m.equal_range(C2Int(9));
    assert(r.first == next(m.begin(), 6));
    assert(r.second == next(m.begin(), 9));
    r = m.equal_range(C2Int(10));
    assert(r.first == m.end());
    assert(r.second == m.end());
    }

    {
    typedef PrivateConstructor PC;
    typedef std::multimap<PC, double, std::less<>> M;
    typedef std::pair<M::iterator, M::iterator> R;

    M m;
    m.insert ( std::make_pair<PC, double> ( PC::make(5), 1 ));
    m.insert ( std::make_pair<PC, double> ( PC::make(5), 2 ));
    m.insert ( std::make_pair<PC, double> ( PC::make(5), 3 ));
    m.insert ( std::make_pair<PC, double> ( PC::make(7), 1 ));
    m.insert ( std::make_pair<PC, double> ( PC::make(7), 2 ));
    m.insert ( std::make_pair<PC, double> ( PC::make(7), 3 ));
    m.insert ( std::make_pair<PC, double> ( PC::make(9), 1 ));
    m.insert ( std::make_pair<PC, double> ( PC::make(9), 2 ));
    m.insert ( std::make_pair<PC, double> ( PC::make(9), 3 ));

//  assert(m.size() == 9);
    R r = m.equal_range(4);
    assert(r.first == m.begin());
    assert(r.second == m.begin());
    r = m.equal_range(5);
    assert(r.first == m.begin());
    assert(r.second == next(m.begin(), 3));
    r = m.equal_range(6);
    assert(r.first == next(m.begin(), 3));
    assert(r.second == next(m.begin(), 3));
    r = m.equal_range(7);
    assert(r.first == next(m.begin(), 3));
    assert(r.second == next(m.begin(), 6));
    r = m.equal_range(8);
    assert(r.first == next(m.begin(), 6));
    assert(r.second == next(m.begin(), 6));
    r = m.equal_range(9);
    assert(r.first == next(m.begin(), 6));
    assert(r.second == next(m.begin(), 9));
    r = m.equal_range(10);
    assert(r.first == m.end());
    assert(r.second == m.end());
    }
#endif
}
Exemplo n.º 5
0
int main(int, char**)
{
    {
        typedef int V;
        typedef std::multiset<int> M;
        {
            typedef M::iterator R;
            V ar[] =
            {
                5,
                5,
                5,
                7,
                7,
                7,
                9,
                9,
                9
            };
            M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
            R r = m.lower_bound(4);
            assert(r == next(m.begin(), 0));
            r = m.lower_bound(5);
            assert(r == next(m.begin(), 0));
            r = m.lower_bound(6);
            assert(r == next(m.begin(), 3));
            r = m.lower_bound(7);
            assert(r == next(m.begin(), 3));
            r = m.lower_bound(8);
            assert(r == next(m.begin(), 6));
            r = m.lower_bound(9);
            assert(r == next(m.begin(), 6));
            r = m.lower_bound(11);
            assert(r == next(m.begin(), 9));
        }
        {
            typedef M::const_iterator R;
            V ar[] =
            {
                5,
                5,
                5,
                7,
                7,
                7,
                9,
                9,
                9
            };
            const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
            R r = m.lower_bound(4);
            assert(r == next(m.begin(), 0));
            r = m.lower_bound(5);
            assert(r == next(m.begin(), 0));
            r = m.lower_bound(6);
            assert(r == next(m.begin(), 3));
            r = m.lower_bound(7);
            assert(r == next(m.begin(), 3));
            r = m.lower_bound(8);
            assert(r == next(m.begin(), 6));
            r = m.lower_bound(9);
            assert(r == next(m.begin(), 6));
            r = m.lower_bound(11);
            assert(r == next(m.begin(), 9));
        }
    }
#if TEST_STD_VER >= 11
    {
        typedef int V;
        typedef std::multiset<int, std::less<int>, min_allocator<int>> M;
        {
            typedef M::iterator R;
            V ar[] =
            {
                5,
                5,
                5,
                7,
                7,
                7,
                9,
                9,
                9
            };
            M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
            R r = m.lower_bound(4);
            assert(r == next(m.begin(), 0));
            r = m.lower_bound(5);
            assert(r == next(m.begin(), 0));
            r = m.lower_bound(6);
            assert(r == next(m.begin(), 3));
            r = m.lower_bound(7);
            assert(r == next(m.begin(), 3));
            r = m.lower_bound(8);
            assert(r == next(m.begin(), 6));
            r = m.lower_bound(9);
            assert(r == next(m.begin(), 6));
            r = m.lower_bound(11);
            assert(r == next(m.begin(), 9));
        }
        {
            typedef M::const_iterator R;
            V ar[] =
            {
                5,
                5,
                5,
                7,
                7,
                7,
                9,
                9,
                9
            };
            const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
            R r = m.lower_bound(4);
            assert(r == next(m.begin(), 0));
            r = m.lower_bound(5);
            assert(r == next(m.begin(), 0));
            r = m.lower_bound(6);
            assert(r == next(m.begin(), 3));
            r = m.lower_bound(7);
            assert(r == next(m.begin(), 3));
            r = m.lower_bound(8);
            assert(r == next(m.begin(), 6));
            r = m.lower_bound(9);
            assert(r == next(m.begin(), 6));
            r = m.lower_bound(11);
            assert(r == next(m.begin(), 9));
        }
    }
#endif
#if TEST_STD_VER > 11
    {
    typedef int V;
    typedef std::multiset<V, std::less<>> M;

    typedef M::iterator R;
    V ar[] =
    {
        5,
        5,
        5,
        7,
        7,
        7,
        9,
        9,
        9
    };
    M m(ar, ar+sizeof(ar)/sizeof(ar[0]));

    R r = m.lower_bound(4);
    assert(r == next(m.begin(), 0));
    r = m.lower_bound(5);
    assert(r == next(m.begin(), 0));
    r = m.lower_bound(6);
    assert(r == next(m.begin(), 3));
    r = m.lower_bound(7);
    assert(r == next(m.begin(), 3));
    r = m.lower_bound(8);
    assert(r == next(m.begin(), 6));
    r = m.lower_bound(9);
    assert(r == next(m.begin(), 6));
    r = m.lower_bound(11);
    assert(r == next(m.begin(), 9));
    }

    {
    typedef PrivateConstructor V;
    typedef std::multiset<V, std::less<>> M;
    typedef M::iterator R;

    M m;
    m.insert ( V::make ( 5 ));
    m.insert ( V::make ( 5 ));
    m.insert ( V::make ( 5 ));
    m.insert ( V::make ( 7 ));
    m.insert ( V::make ( 7 ));
    m.insert ( V::make ( 7 ));
    m.insert ( V::make ( 9 ));
    m.insert ( V::make ( 9 ));
    m.insert ( V::make ( 9 ));

    R r = m.lower_bound(4);
    assert(r == next(m.begin(), 0));
    r = m.lower_bound(5);
    assert(r == next(m.begin(), 0));
    r = m.lower_bound(6);
    assert(r == next(m.begin(), 3));
    r = m.lower_bound(7);
    assert(r == next(m.begin(), 3));
    r = m.lower_bound(8);
    assert(r == next(m.begin(), 6));
    r = m.lower_bound(9);
    assert(r == next(m.begin(), 6));
    r = m.lower_bound(11);
    assert(r == next(m.begin(), 9));
    }
#endif

  return 0;
}
Exemplo n.º 6
0
int main()
{
    typedef std::pair<const int, double> V;
    {
    typedef std::multimap<int, double> M;
    {
        typedef M::iterator R;
        V ar[] =
        {
            V(5, 1),
            V(5, 2),
            V(5, 3),
            V(7, 1),
            V(7, 2),
            V(7, 3),
            V(9, 1),
            V(9, 2),
            V(9, 3)
        };
        M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.find(5);
        assert(r == m.begin());
        r = m.find(6);
        assert(r == m.end());
        r = m.find(7);
        assert(r == next(m.begin(), 3));
        r = m.find(8);
        assert(r == m.end());
        r = m.find(9);
        assert(r == next(m.begin(), 6));
        r = m.find(10);
        assert(r == m.end());
    }
    {
        typedef M::const_iterator R;
        V ar[] =
        {
            V(5, 1),
            V(5, 2),
            V(5, 3),
            V(7, 1),
            V(7, 2),
            V(7, 3),
            V(9, 1),
            V(9, 2),
            V(9, 3)
        };
        const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.find(5);
        assert(r == m.begin());
        r = m.find(6);
        assert(r == m.end());
        r = m.find(7);
        assert(r == next(m.begin(), 3));
        r = m.find(8);
        assert(r == m.end());
        r = m.find(9);
        assert(r == next(m.begin(), 6));
        r = m.find(10);
        assert(r == m.end());
    }
    }
#if __cplusplus >= 201103L
    {
    typedef std::multimap<int, double, std::less<int>, min_allocator<std::pair<const int, double>>> M;
    {
        typedef M::iterator R;
        V ar[] =
        {
            V(5, 1),
            V(5, 2),
            V(5, 3),
            V(7, 1),
            V(7, 2),
            V(7, 3),
            V(9, 1),
            V(9, 2),
            V(9, 3)
        };
        M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.find(5);
        assert(r == m.begin());
        r = m.find(6);
        assert(r == m.end());
        r = m.find(7);
        assert(r == next(m.begin(), 3));
        r = m.find(8);
        assert(r == m.end());
        r = m.find(9);
        assert(r == next(m.begin(), 6));
        r = m.find(10);
        assert(r == m.end());
    }
    {
        typedef M::const_iterator R;
        V ar[] =
        {
            V(5, 1),
            V(5, 2),
            V(5, 3),
            V(7, 1),
            V(7, 2),
            V(7, 3),
            V(9, 1),
            V(9, 2),
            V(9, 3)
        };
        const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.find(5);
        assert(r == m.begin());
        r = m.find(6);
        assert(r == m.end());
        r = m.find(7);
        assert(r == next(m.begin(), 3));
        r = m.find(8);
        assert(r == m.end());
        r = m.find(9);
        assert(r == next(m.begin(), 6));
        r = m.find(10);
        assert(r == m.end());
    }
    }
#endif
#if _LIBCPP_STD_VER > 11
    {
    typedef std::pair<const int, double> V;
    typedef std::multimap<int, double, std::less<>> M;
    typedef M::iterator R;

        V ar[] =
        {
            V(5, 1),
            V(5, 2),
            V(5, 3),
            V(7, 1),
            V(7, 2),
            V(7, 3),
            V(9, 1),
            V(9, 2),
            V(9, 3)
        };
        M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.find(5);
        assert(r == m.begin());
        r = m.find(6);
        assert(r == m.end());
        r = m.find(7);
        assert(r == next(m.begin(), 3));
        r = m.find(8);
        assert(r == m.end());
        r = m.find(9);
        assert(r == next(m.begin(), 6));
        r = m.find(10);
        assert(r == m.end());
    }

    {
    typedef PrivateConstructor PC;
    typedef std::multimap<PC, double, std::less<>> M;
    typedef M::iterator R;

    M m;
    m.insert ( std::make_pair<PC, double> ( PC::make(5), 1 ));
    m.insert ( std::make_pair<PC, double> ( PC::make(5), 2 ));
    m.insert ( std::make_pair<PC, double> ( PC::make(5), 3 ));
    m.insert ( std::make_pair<PC, double> ( PC::make(7), 1 ));
    m.insert ( std::make_pair<PC, double> ( PC::make(7), 2 ));
    m.insert ( std::make_pair<PC, double> ( PC::make(7), 3 ));
    m.insert ( std::make_pair<PC, double> ( PC::make(9), 1 ));
    m.insert ( std::make_pair<PC, double> ( PC::make(9), 2 ));
    m.insert ( std::make_pair<PC, double> ( PC::make(9), 3 ));

    R r = m.find(5);
    assert(r == m.begin());
    r = m.find(6);
    assert(r == m.end());
    r = m.find(7);
    assert(r == next(m.begin(), 3));
    r = m.find(8);
    assert(r == m.end());
    r = m.find(9);
    assert(r == next(m.begin(), 6));
    r = m.find(10);
    assert(r == m.end());
    }
#endif
}
Exemplo n.º 7
0
int main()
{
    {
    typedef std::pair<const int, double> V;
    typedef std::map<int, double> M;
    {
        typedef M::iterator R;
        V ar[] =
        {
            V(5, 5),
            V(7, 6),
            V(9, 7),
            V(11, 8),
            V(13, 9),
            V(15, 10),
            V(17, 11),
            V(19, 12)
        };
        M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.upper_bound(5);
        assert(r == next(m.begin(), 1));
        r = m.upper_bound(7);
        assert(r == next(m.begin(), 2));
        r = m.upper_bound(9);
        assert(r == next(m.begin(), 3));
        r = m.upper_bound(11);
        assert(r == next(m.begin(), 4));
        r = m.upper_bound(13);
        assert(r == next(m.begin(), 5));
        r = m.upper_bound(15);
        assert(r == next(m.begin(), 6));
        r = m.upper_bound(17);
        assert(r == next(m.begin(), 7));
        r = m.upper_bound(19);
        assert(r == next(m.begin(), 8));
        r = m.upper_bound(4);
        assert(r == next(m.begin(), 0));
        r = m.upper_bound(6);
        assert(r == next(m.begin(), 1));
        r = m.upper_bound(8);
        assert(r == next(m.begin(), 2));
        r = m.upper_bound(10);
        assert(r == next(m.begin(), 3));
        r = m.upper_bound(12);
        assert(r == next(m.begin(), 4));
        r = m.upper_bound(14);
        assert(r == next(m.begin(), 5));
        r = m.upper_bound(16);
        assert(r == next(m.begin(), 6));
        r = m.upper_bound(18);
        assert(r == next(m.begin(), 7));
        r = m.upper_bound(20);
        assert(r == next(m.begin(), 8));
    }
    {
        typedef M::const_iterator R;
        V ar[] =
        {
            V(5, 5),
            V(7, 6),
            V(9, 7),
            V(11, 8),
            V(13, 9),
            V(15, 10),
            V(17, 11),
            V(19, 12)
        };
        const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.upper_bound(5);
        assert(r == next(m.begin(), 1));
        r = m.upper_bound(7);
        assert(r == next(m.begin(), 2));
        r = m.upper_bound(9);
        assert(r == next(m.begin(), 3));
        r = m.upper_bound(11);
        assert(r == next(m.begin(), 4));
        r = m.upper_bound(13);
        assert(r == next(m.begin(), 5));
        r = m.upper_bound(15);
        assert(r == next(m.begin(), 6));
        r = m.upper_bound(17);
        assert(r == next(m.begin(), 7));
        r = m.upper_bound(19);
        assert(r == next(m.begin(), 8));
        r = m.upper_bound(4);
        assert(r == next(m.begin(), 0));
        r = m.upper_bound(6);
        assert(r == next(m.begin(), 1));
        r = m.upper_bound(8);
        assert(r == next(m.begin(), 2));
        r = m.upper_bound(10);
        assert(r == next(m.begin(), 3));
        r = m.upper_bound(12);
        assert(r == next(m.begin(), 4));
        r = m.upper_bound(14);
        assert(r == next(m.begin(), 5));
        r = m.upper_bound(16);
        assert(r == next(m.begin(), 6));
        r = m.upper_bound(18);
        assert(r == next(m.begin(), 7));
        r = m.upper_bound(20);
        assert(r == next(m.begin(), 8));
    }
    }
#if TEST_STD_VER >= 11
    {
    typedef std::pair<const int, double> V;
    typedef std::map<int, double, std::less<int>, min_allocator<V>> M;
    {
        typedef M::iterator R;
        V ar[] =
        {
            V(5, 5),
            V(7, 6),
            V(9, 7),
            V(11, 8),
            V(13, 9),
            V(15, 10),
            V(17, 11),
            V(19, 12)
        };
        M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.upper_bound(5);
        assert(r == next(m.begin(), 1));
        r = m.upper_bound(7);
        assert(r == next(m.begin(), 2));
        r = m.upper_bound(9);
        assert(r == next(m.begin(), 3));
        r = m.upper_bound(11);
        assert(r == next(m.begin(), 4));
        r = m.upper_bound(13);
        assert(r == next(m.begin(), 5));
        r = m.upper_bound(15);
        assert(r == next(m.begin(), 6));
        r = m.upper_bound(17);
        assert(r == next(m.begin(), 7));
        r = m.upper_bound(19);
        assert(r == next(m.begin(), 8));
        r = m.upper_bound(4);
        assert(r == next(m.begin(), 0));
        r = m.upper_bound(6);
        assert(r == next(m.begin(), 1));
        r = m.upper_bound(8);
        assert(r == next(m.begin(), 2));
        r = m.upper_bound(10);
        assert(r == next(m.begin(), 3));
        r = m.upper_bound(12);
        assert(r == next(m.begin(), 4));
        r = m.upper_bound(14);
        assert(r == next(m.begin(), 5));
        r = m.upper_bound(16);
        assert(r == next(m.begin(), 6));
        r = m.upper_bound(18);
        assert(r == next(m.begin(), 7));
        r = m.upper_bound(20);
        assert(r == next(m.begin(), 8));
    }
    {
        typedef M::const_iterator R;
        V ar[] =
        {
            V(5, 5),
            V(7, 6),
            V(9, 7),
            V(11, 8),
            V(13, 9),
            V(15, 10),
            V(17, 11),
            V(19, 12)
        };
        const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.upper_bound(5);
        assert(r == next(m.begin(), 1));
        r = m.upper_bound(7);
        assert(r == next(m.begin(), 2));
        r = m.upper_bound(9);
        assert(r == next(m.begin(), 3));
        r = m.upper_bound(11);
        assert(r == next(m.begin(), 4));
        r = m.upper_bound(13);
        assert(r == next(m.begin(), 5));
        r = m.upper_bound(15);
        assert(r == next(m.begin(), 6));
        r = m.upper_bound(17);
        assert(r == next(m.begin(), 7));
        r = m.upper_bound(19);
        assert(r == next(m.begin(), 8));
        r = m.upper_bound(4);
        assert(r == next(m.begin(), 0));
        r = m.upper_bound(6);
        assert(r == next(m.begin(), 1));
        r = m.upper_bound(8);
        assert(r == next(m.begin(), 2));
        r = m.upper_bound(10);
        assert(r == next(m.begin(), 3));
        r = m.upper_bound(12);
        assert(r == next(m.begin(), 4));
        r = m.upper_bound(14);
        assert(r == next(m.begin(), 5));
        r = m.upper_bound(16);
        assert(r == next(m.begin(), 6));
        r = m.upper_bound(18);
        assert(r == next(m.begin(), 7));
        r = m.upper_bound(20);
        assert(r == next(m.begin(), 8));
    }
    }
#endif
#if TEST_STD_VER > 11
    {
    typedef std::pair<const int, double> V;
    typedef std::map<int, double, std::less<>> M;
    typedef M::iterator R;
    V ar[] =
    {
        V(5, 5),
        V(7, 6),
        V(9, 7),
        V(11, 8),
        V(13, 9),
        V(15, 10),
        V(17, 11),
        V(19, 12)
    };
    M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
    R r = m.upper_bound(5);
    assert(r == next(m.begin(), 1));
    r = m.upper_bound(7);
    assert(r == next(m.begin(), 2));
    r = m.upper_bound(9);
    assert(r == next(m.begin(), 3));
    r = m.upper_bound(11);
    assert(r == next(m.begin(), 4));
    r = m.upper_bound(13);
    assert(r == next(m.begin(), 5));
    r = m.upper_bound(15);
    assert(r == next(m.begin(), 6));
    r = m.upper_bound(17);
    assert(r == next(m.begin(), 7));
    r = m.upper_bound(19);
    assert(r == next(m.begin(), 8));
    r = m.upper_bound(4);
    assert(r == next(m.begin(), 0));
    r = m.upper_bound(6);
    assert(r == next(m.begin(), 1));
    r = m.upper_bound(8);
    assert(r == next(m.begin(), 2));
    r = m.upper_bound(10);
    assert(r == next(m.begin(), 3));
    r = m.upper_bound(12);
    assert(r == next(m.begin(), 4));
    r = m.upper_bound(14);
    assert(r == next(m.begin(), 5));
    r = m.upper_bound(16);
    assert(r == next(m.begin(), 6));
    r = m.upper_bound(18);
    assert(r == next(m.begin(), 7));
    r = m.upper_bound(20);
    assert(r == next(m.begin(), 8));
    }

    {
    typedef PrivateConstructor PC;
    typedef std::map<PC, double, std::less<>> M;
    typedef M::iterator R;

    M m;
    m [ PC::make(5)  ] = 5;
    m [ PC::make(7)  ] = 6;
    m [ PC::make(9)  ] = 7;
    m [ PC::make(11) ] = 8;
    m [ PC::make(13) ] = 9;
    m [ PC::make(15) ] = 10;
    m [ PC::make(17) ] = 11;
    m [ PC::make(19) ] = 12;

    R r = m.upper_bound(5);
    assert(r == next(m.begin(), 1));
    r = m.upper_bound(7);
    assert(r == next(m.begin(), 2));
    r = m.upper_bound(9);
    assert(r == next(m.begin(), 3));
    r = m.upper_bound(11);
    assert(r == next(m.begin(), 4));
    r = m.upper_bound(13);
    assert(r == next(m.begin(), 5));
    r = m.upper_bound(15);
    assert(r == next(m.begin(), 6));
    r = m.upper_bound(17);
    assert(r == next(m.begin(), 7));
    r = m.upper_bound(19);
    assert(r == next(m.begin(), 8));
    r = m.upper_bound(4);
    assert(r == next(m.begin(), 0));
    r = m.upper_bound(6);
    assert(r == next(m.begin(), 1));
    r = m.upper_bound(8);
    assert(r == next(m.begin(), 2));
    r = m.upper_bound(10);
    assert(r == next(m.begin(), 3));
    r = m.upper_bound(12);
    assert(r == next(m.begin(), 4));
    r = m.upper_bound(14);
    assert(r == next(m.begin(), 5));
    r = m.upper_bound(16);
    assert(r == next(m.begin(), 6));
    r = m.upper_bound(18);
    assert(r == next(m.begin(), 7));
    r = m.upper_bound(20);
    assert(r == next(m.begin(), 8));
    }
#endif
}
#include "contiguous/multiset.h"
#include "catch.hpp"

#include "MoveOnly.h"
#include "min_allocator.h"

TEST_CASE("multiset insert rv pass")
{
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
    {
        typedef contiguous::multiset<MoveOnly> M;
        typedef M::iterator R;
        M m;
        R r = m.insert(M::value_type(2));
        REQUIRE(r == m.begin());
        REQUIRE(m.size() == 1);
        REQUIRE(*r == 2);

        r = m.insert(M::value_type(1));
        REQUIRE(r == m.begin());
        REQUIRE(m.size() == 2);
        REQUIRE(*r == 1);

        r = m.insert(M::value_type(3));
        REQUIRE(r == prev(m.end()));
        REQUIRE(m.size() == 3);
        REQUIRE(*r == 3);

        r = m.insert(M::value_type(3));
        REQUIRE(r == prev(m.end()));
Exemplo n.º 9
0
int main()
{
    {
    typedef std::pair<const int, double> V;
    typedef std::map<int, double> M;
    {
        typedef M::iterator R;
        V ar[] =
        {
            V(5, 5),
            V(6, 6),
            V(7, 7),
            V(8, 8),
            V(9, 9),
            V(10, 10),
            V(11, 11),
            V(12, 12)
        };
        M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.find(5);
        assert(r == m.begin());
        r = m.find(6);
        assert(r == next(m.begin()));
        r = m.find(7);
        assert(r == next(m.begin(), 2));
        r = m.find(8);
        assert(r == next(m.begin(), 3));
        r = m.find(9);
        assert(r == next(m.begin(), 4));
        r = m.find(10);
        assert(r == next(m.begin(), 5));
        r = m.find(11);
        assert(r == next(m.begin(), 6));
        r = m.find(12);
        assert(r == next(m.begin(), 7));
        r = m.find(4);
        assert(r == next(m.begin(), 8));
    }
    {
        typedef M::const_iterator R;
        V ar[] =
        {
            V(5, 5),
            V(6, 6),
            V(7, 7),
            V(8, 8),
            V(9, 9),
            V(10, 10),
            V(11, 11),
            V(12, 12)
        };
        const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.find(5);
        assert(r == m.begin());
        r = m.find(6);
        assert(r == next(m.begin()));
        r = m.find(7);
        assert(r == next(m.begin(), 2));
        r = m.find(8);
        assert(r == next(m.begin(), 3));
        r = m.find(9);
        assert(r == next(m.begin(), 4));
        r = m.find(10);
        assert(r == next(m.begin(), 5));
        r = m.find(11);
        assert(r == next(m.begin(), 6));
        r = m.find(12);
        assert(r == next(m.begin(), 7));
        r = m.find(4);
        assert(r == next(m.begin(), 8));
    }
    }
#if __cplusplus >= 201103L
    {
    typedef std::pair<const int, double> V;
    typedef std::map<int, double, std::less<int>, min_allocator<V>> M;
    {
        typedef M::iterator R;
        V ar[] =
        {
            V(5, 5),
            V(6, 6),
            V(7, 7),
            V(8, 8),
            V(9, 9),
            V(10, 10),
            V(11, 11),
            V(12, 12)
        };
        M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.find(5);
        assert(r == m.begin());
        r = m.find(6);
        assert(r == next(m.begin()));
        r = m.find(7);
        assert(r == next(m.begin(), 2));
        r = m.find(8);
        assert(r == next(m.begin(), 3));
        r = m.find(9);
        assert(r == next(m.begin(), 4));
        r = m.find(10);
        assert(r == next(m.begin(), 5));
        r = m.find(11);
        assert(r == next(m.begin(), 6));
        r = m.find(12);
        assert(r == next(m.begin(), 7));
        r = m.find(4);
        assert(r == next(m.begin(), 8));
    }
    {
        typedef M::const_iterator R;
        V ar[] =
        {
            V(5, 5),
            V(6, 6),
            V(7, 7),
            V(8, 8),
            V(9, 9),
            V(10, 10),
            V(11, 11),
            V(12, 12)
        };
        const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.find(5);
        assert(r == m.begin());
        r = m.find(6);
        assert(r == next(m.begin()));
        r = m.find(7);
        assert(r == next(m.begin(), 2));
        r = m.find(8);
        assert(r == next(m.begin(), 3));
        r = m.find(9);
        assert(r == next(m.begin(), 4));
        r = m.find(10);
        assert(r == next(m.begin(), 5));
        r = m.find(11);
        assert(r == next(m.begin(), 6));
        r = m.find(12);
        assert(r == next(m.begin(), 7));
        r = m.find(4);
        assert(r == next(m.begin(), 8));
    }
    }
#endif
#if _LIBCPP_STD_VER > 11
    {
    typedef std::pair<const int, double> V;
    typedef std::map<int, double, std::less<>> M;
    typedef M::iterator R;

    V ar[] =
    {
        V(5, 5),
        V(6, 6),
        V(7, 7),
        V(8, 8),
        V(9, 9),
        V(10, 10),
        V(11, 11),
        V(12, 12)
    };
    M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
    R r = m.find(5);
    assert(r == m.begin());
    r = m.find(6);
    assert(r == next(m.begin()));
    r = m.find(7);
    assert(r == next(m.begin(), 2));
    r = m.find(8);
    assert(r == next(m.begin(), 3));
    r = m.find(9);
    assert(r == next(m.begin(), 4));
    r = m.find(10);
    assert(r == next(m.begin(), 5));
    r = m.find(11);
    assert(r == next(m.begin(), 6));
    r = m.find(12);
    assert(r == next(m.begin(), 7));
    r = m.find(4);
    assert(r == next(m.begin(), 8));
    }

    {
    typedef PrivateConstructor PC;
    typedef std::map<PC, double, std::less<>> M;
    typedef M::iterator R;

    M m;
    m [ PC::make(5)  ] = 5;
    m [ PC::make(6)  ] = 6;
    m [ PC::make(7)  ] = 7;
    m [ PC::make(8)  ] = 8;
    m [ PC::make(9)  ] = 9;
    m [ PC::make(10) ] = 10;
    m [ PC::make(11) ] = 11;
    m [ PC::make(12) ] = 12;

    R r = m.find(5);
    assert(r == m.begin());
    r = m.find(6);
    assert(r == next(m.begin()));
    r = m.find(7);
    assert(r == next(m.begin(), 2));
    r = m.find(8);
    assert(r == next(m.begin(), 3));
    r = m.find(9);
    assert(r == next(m.begin(), 4));
    r = m.find(10);
    assert(r == next(m.begin(), 5));
    r = m.find(11);
    assert(r == next(m.begin(), 6));
    r = m.find(12);
    assert(r == next(m.begin(), 7));
    r = m.find(4);
    assert(r == next(m.begin(), 8));
    }
#endif
}
Exemplo n.º 10
0
int main()
{
    typedef int V;
    typedef std::set<int> M;
    {
        typedef std::pair<M::iterator, M::iterator> R;
        V ar[] =
        {
            5,
            7,
            9,
            11,
            13,
            15,
            17,
            19
        };
        M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.equal_range(5);
        assert(r.first == next(m.begin(), 0));
        assert(r.second == next(m.begin(), 1));
        r = m.equal_range(7);
        assert(r.first == next(m.begin(), 1));
        assert(r.second == next(m.begin(), 2));
        r = m.equal_range(9);
        assert(r.first == next(m.begin(), 2));
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(11);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 4));
        r = m.equal_range(13);
        assert(r.first == next(m.begin(), 4));
        assert(r.second == next(m.begin(), 5));
        r = m.equal_range(15);
        assert(r.first == next(m.begin(), 5));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(17);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 7));
        r = m.equal_range(19);
        assert(r.first == next(m.begin(), 7));
        assert(r.second == next(m.begin(), 8));
        r = m.equal_range(4);
        assert(r.first == next(m.begin(), 0));
        assert(r.second == next(m.begin(), 0));
        r = m.equal_range(6);
        assert(r.first == next(m.begin(), 1));
        assert(r.second == next(m.begin(), 1));
        r = m.equal_range(8);
        assert(r.first == next(m.begin(), 2));
        assert(r.second == next(m.begin(), 2));
        r = m.equal_range(10);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(12);
        assert(r.first == next(m.begin(), 4));
        assert(r.second == next(m.begin(), 4));
        r = m.equal_range(14);
        assert(r.first == next(m.begin(), 5));
        assert(r.second == next(m.begin(), 5));
        r = m.equal_range(16);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(18);
        assert(r.first == next(m.begin(), 7));
        assert(r.second == next(m.begin(), 7));
        r = m.equal_range(20);
        assert(r.first == next(m.begin(), 8));
        assert(r.second == next(m.begin(), 8));
    }
    {
        typedef std::pair<M::const_iterator, M::const_iterator> R;
        V ar[] =
        {
            5,
            7,
            9,
            11,
            13,
            15,
            17,
            19
        };
        const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.equal_range(5);
        assert(r.first == next(m.begin(), 0));
        assert(r.second == next(m.begin(), 1));
        r = m.equal_range(7);
        assert(r.first == next(m.begin(), 1));
        assert(r.second == next(m.begin(), 2));
        r = m.equal_range(9);
        assert(r.first == next(m.begin(), 2));
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(11);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 4));
        r = m.equal_range(13);
        assert(r.first == next(m.begin(), 4));
        assert(r.second == next(m.begin(), 5));
        r = m.equal_range(15);
        assert(r.first == next(m.begin(), 5));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(17);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 7));
        r = m.equal_range(19);
        assert(r.first == next(m.begin(), 7));
        assert(r.second == next(m.begin(), 8));
        r = m.equal_range(4);
        assert(r.first == next(m.begin(), 0));
        assert(r.second == next(m.begin(), 0));
        r = m.equal_range(6);
        assert(r.first == next(m.begin(), 1));
        assert(r.second == next(m.begin(), 1));
        r = m.equal_range(8);
        assert(r.first == next(m.begin(), 2));
        assert(r.second == next(m.begin(), 2));
        r = m.equal_range(10);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(12);
        assert(r.first == next(m.begin(), 4));
        assert(r.second == next(m.begin(), 4));
        r = m.equal_range(14);
        assert(r.first == next(m.begin(), 5));
        assert(r.second == next(m.begin(), 5));
        r = m.equal_range(16);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(18);
        assert(r.first == next(m.begin(), 7));
        assert(r.second == next(m.begin(), 7));
        r = m.equal_range(20);
        assert(r.first == next(m.begin(), 8));
        assert(r.second == next(m.begin(), 8));
    }
}
        V ar[] =
        {
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8
        };
        M m(ar, ar + sizeof(ar)/sizeof(ar[0]));
        REQUIRE(m.size() == 8);
        I i = m.erase(next(m.cbegin(), 5), next(m.cbegin(), 5));
        REQUIRE(m.size() == 8);
        REQUIRE(i == next(m.begin(), 5));
        REQUIRE(*next(m.begin(), 0) == 1);
        REQUIRE(*next(m.begin(), 1) == 2);
        REQUIRE(*next(m.begin(), 2) == 3);
        REQUIRE(*next(m.begin(), 3) == 4);
        REQUIRE(*next(m.begin(), 4) == 5);
        REQUIRE(*next(m.begin(), 5) == 6);
        REQUIRE(*next(m.begin(), 6) == 7);
        REQUIRE(*next(m.begin(), 7) == 8);

        i = m.erase(next(m.cbegin(), 3), next(m.cbegin(), 4));
        REQUIRE(m.size() == 7);
        REQUIRE(i == next(m.begin(), 3));
        REQUIRE(*next(m.begin(), 0) == 1);
        REQUIRE(*next(m.begin(), 1) == 2);
        REQUIRE(*next(m.begin(), 2) == 3);
Exemplo n.º 12
0
int main()
{
    {
    typedef int V;
    typedef std::set<int> M;
    {
        typedef M::iterator R;
        V ar[] =
        {
            5,
            7,
            9,
            11,
            13,
            15,
            17,
            19
        };
        M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.lower_bound(5);
        assert(r == m.begin());
        r = m.lower_bound(7);
        assert(r == next(m.begin()));
        r = m.lower_bound(9);
        assert(r == next(m.begin(), 2));
        r = m.lower_bound(11);
        assert(r == next(m.begin(), 3));
        r = m.lower_bound(13);
        assert(r == next(m.begin(), 4));
        r = m.lower_bound(15);
        assert(r == next(m.begin(), 5));
        r = m.lower_bound(17);
        assert(r == next(m.begin(), 6));
        r = m.lower_bound(19);
        assert(r == next(m.begin(), 7));
        r = m.lower_bound(4);
        assert(r == next(m.begin(), 0));
        r = m.lower_bound(6);
        assert(r == next(m.begin(), 1));
        r = m.lower_bound(8);
        assert(r == next(m.begin(), 2));
        r = m.lower_bound(10);
        assert(r == next(m.begin(), 3));
        r = m.lower_bound(12);
        assert(r == next(m.begin(), 4));
        r = m.lower_bound(14);
        assert(r == next(m.begin(), 5));
        r = m.lower_bound(16);
        assert(r == next(m.begin(), 6));
        r = m.lower_bound(18);
        assert(r == next(m.begin(), 7));
        r = m.lower_bound(20);
        assert(r == next(m.begin(), 8));
    }
    {
        typedef M::const_iterator R;
        V ar[] =
        {
            5,
            7,
            9,
            11,
            13,
            15,
            17,
            19
        };
        const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.lower_bound(5);
        assert(r == m.begin());
        r = m.lower_bound(7);
        assert(r == next(m.begin()));
        r = m.lower_bound(9);
        assert(r == next(m.begin(), 2));
        r = m.lower_bound(11);
        assert(r == next(m.begin(), 3));
        r = m.lower_bound(13);
        assert(r == next(m.begin(), 4));
        r = m.lower_bound(15);
        assert(r == next(m.begin(), 5));
        r = m.lower_bound(17);
        assert(r == next(m.begin(), 6));
        r = m.lower_bound(19);
        assert(r == next(m.begin(), 7));
        r = m.lower_bound(4);
        assert(r == next(m.begin(), 0));
        r = m.lower_bound(6);
        assert(r == next(m.begin(), 1));
        r = m.lower_bound(8);
        assert(r == next(m.begin(), 2));
        r = m.lower_bound(10);
        assert(r == next(m.begin(), 3));
        r = m.lower_bound(12);
        assert(r == next(m.begin(), 4));
        r = m.lower_bound(14);
        assert(r == next(m.begin(), 5));
        r = m.lower_bound(16);
        assert(r == next(m.begin(), 6));
        r = m.lower_bound(18);
        assert(r == next(m.begin(), 7));
        r = m.lower_bound(20);
        assert(r == next(m.begin(), 8));
    }
    }
#if __cplusplus >= 201103L || defined(_LIBCPP_MSVC)
    {
    typedef int V;
    typedef std::set<int, std::less<int>, min_allocator<int>> M;
    {
        typedef M::iterator R;
        V ar[] =
        {
            5,
            7,
            9,
            11,
            13,
            15,
            17,
            19
        };
        M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.lower_bound(5);
        assert(r == m.begin());
        r = m.lower_bound(7);
        assert(r == next(m.begin()));
        r = m.lower_bound(9);
        assert(r == next(m.begin(), 2));
        r = m.lower_bound(11);
        assert(r == next(m.begin(), 3));
        r = m.lower_bound(13);
        assert(r == next(m.begin(), 4));
        r = m.lower_bound(15);
        assert(r == next(m.begin(), 5));
        r = m.lower_bound(17);
        assert(r == next(m.begin(), 6));
        r = m.lower_bound(19);
        assert(r == next(m.begin(), 7));
        r = m.lower_bound(4);
        assert(r == next(m.begin(), 0));
        r = m.lower_bound(6);
        assert(r == next(m.begin(), 1));
        r = m.lower_bound(8);
        assert(r == next(m.begin(), 2));
        r = m.lower_bound(10);
        assert(r == next(m.begin(), 3));
        r = m.lower_bound(12);
        assert(r == next(m.begin(), 4));
        r = m.lower_bound(14);
        assert(r == next(m.begin(), 5));
        r = m.lower_bound(16);
        assert(r == next(m.begin(), 6));
        r = m.lower_bound(18);
        assert(r == next(m.begin(), 7));
        r = m.lower_bound(20);
        assert(r == next(m.begin(), 8));
    }
    {
        typedef M::const_iterator R;
        V ar[] =
        {
            5,
            7,
            9,
            11,
            13,
            15,
            17,
            19
        };
        const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.lower_bound(5);
        assert(r == m.begin());
        r = m.lower_bound(7);
        assert(r == next(m.begin()));
        r = m.lower_bound(9);
        assert(r == next(m.begin(), 2));
        r = m.lower_bound(11);
        assert(r == next(m.begin(), 3));
        r = m.lower_bound(13);
        assert(r == next(m.begin(), 4));
        r = m.lower_bound(15);
        assert(r == next(m.begin(), 5));
        r = m.lower_bound(17);
        assert(r == next(m.begin(), 6));
        r = m.lower_bound(19);
        assert(r == next(m.begin(), 7));
        r = m.lower_bound(4);
        assert(r == next(m.begin(), 0));
        r = m.lower_bound(6);
        assert(r == next(m.begin(), 1));
        r = m.lower_bound(8);
        assert(r == next(m.begin(), 2));
        r = m.lower_bound(10);
        assert(r == next(m.begin(), 3));
        r = m.lower_bound(12);
        assert(r == next(m.begin(), 4));
        r = m.lower_bound(14);
        assert(r == next(m.begin(), 5));
        r = m.lower_bound(16);
        assert(r == next(m.begin(), 6));
        r = m.lower_bound(18);
        assert(r == next(m.begin(), 7));
        r = m.lower_bound(20);
        assert(r == next(m.begin(), 8));
    }
    }
#endif
#if _LIBCPP_STD_VER > 11
    {
    typedef int V;
    typedef std::set<V, std::less<>> M;
    typedef M::iterator R;

    V ar[] =
    {
        5,
        7,
        9,
        11,
        13,
        15,
        17,
        19
    };
    M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
    R r = m.lower_bound(5);
    assert(r == m.begin());
    r = m.lower_bound(7);
    assert(r == next(m.begin()));
    r = m.lower_bound(9);
    assert(r == next(m.begin(), 2));
    r = m.lower_bound(11);
    assert(r == next(m.begin(), 3));
    r = m.lower_bound(13);
    assert(r == next(m.begin(), 4));
    r = m.lower_bound(15);
    assert(r == next(m.begin(), 5));
    r = m.lower_bound(17);
    assert(r == next(m.begin(), 6));
    r = m.lower_bound(19);
    assert(r == next(m.begin(), 7));
    r = m.lower_bound(4);
    assert(r == next(m.begin(), 0));
    r = m.lower_bound(6);
    assert(r == next(m.begin(), 1));
    r = m.lower_bound(8);
    assert(r == next(m.begin(), 2));
    r = m.lower_bound(10);
    assert(r == next(m.begin(), 3));
    r = m.lower_bound(12);
    assert(r == next(m.begin(), 4));
    r = m.lower_bound(14);
    assert(r == next(m.begin(), 5));
    r = m.lower_bound(16);
    assert(r == next(m.begin(), 6));
    r = m.lower_bound(18);
    assert(r == next(m.begin(), 7));
    r = m.lower_bound(20);
    assert(r == next(m.begin(), 8));
    }
    
    {
    typedef PrivateConstructor V;
    typedef std::set<V, std::less<>> M;
    typedef M::iterator R;

    M m;
    m.insert ( V::make ( 5 ));
    m.insert ( V::make ( 7 ));
    m.insert ( V::make ( 9 ));
    m.insert ( V::make ( 11 ));
    m.insert ( V::make ( 13 ));
    m.insert ( V::make ( 15 ));
    m.insert ( V::make ( 17 ));
    m.insert ( V::make ( 19 ));

    R r = m.lower_bound(5);
    assert(r == m.begin());
    r = m.lower_bound(7);
    assert(r == next(m.begin()));
    r = m.lower_bound(9);
    assert(r == next(m.begin(), 2));
    r = m.lower_bound(11);
    assert(r == next(m.begin(), 3));
    r = m.lower_bound(13);
    assert(r == next(m.begin(), 4));
    r = m.lower_bound(15);
    assert(r == next(m.begin(), 5));
    r = m.lower_bound(17);
    assert(r == next(m.begin(), 6));
    r = m.lower_bound(19);
    assert(r == next(m.begin(), 7));
    r = m.lower_bound(4);
    assert(r == next(m.begin(), 0));
    r = m.lower_bound(6);
    assert(r == next(m.begin(), 1));
    r = m.lower_bound(8);
    assert(r == next(m.begin(), 2));
    r = m.lower_bound(10);
    assert(r == next(m.begin(), 3));
    r = m.lower_bound(12);
    assert(r == next(m.begin(), 4));
    r = m.lower_bound(14);
    assert(r == next(m.begin(), 5));
    r = m.lower_bound(16);
    assert(r == next(m.begin(), 6));
    r = m.lower_bound(18);
    assert(r == next(m.begin(), 7));
    r = m.lower_bound(20);
    assert(r == next(m.begin(), 8));
    }
#endif

}
int main()
{
    typedef std::pair<const int, double> V;
    {
    typedef std::multimap<int, double> M;
    {
        typedef std::pair<M::iterator, M::iterator> R;
        V ar[] =
        {
            V(5, 1),
            V(5, 2),
            V(5, 3),
            V(7, 1),
            V(7, 2),
            V(7, 3),
            V(9, 1),
            V(9, 2),
            V(9, 3)
        };
        M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.equal_range(4);
        assert(r.first == m.begin());
        assert(r.second == m.begin());
        r = m.equal_range(5);
        assert(r.first == m.begin());
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(6);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(7);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(8);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(9);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 9));
        r = m.equal_range(10);
        assert(r.first == m.end());
        assert(r.second == m.end());
    }
    {
        typedef std::pair<M::const_iterator, M::const_iterator> R;
        V ar[] =
        {
            V(5, 1),
            V(5, 2),
            V(5, 3),
            V(7, 1),
            V(7, 2),
            V(7, 3),
            V(9, 1),
            V(9, 2),
            V(9, 3)
        };
        const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.equal_range(4);
        assert(r.first == m.begin());
        assert(r.second == m.begin());
        r = m.equal_range(5);
        assert(r.first == m.begin());
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(6);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(7);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(8);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(9);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 9));
        r = m.equal_range(10);
        assert(r.first == m.end());
        assert(r.second == m.end());
    }
    }
#if __cplusplus >= 201103L
    {
    typedef std::multimap<int, double, std::less<int>, min_allocator<std::pair<const int, double>>> M;
    {
        typedef std::pair<M::iterator, M::iterator> R;
        V ar[] =
        {
            V(5, 1),
            V(5, 2),
            V(5, 3),
            V(7, 1),
            V(7, 2),
            V(7, 3),
            V(9, 1),
            V(9, 2),
            V(9, 3)
        };
        M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.equal_range(4);
        assert(r.first == m.begin());
        assert(r.second == m.begin());
        r = m.equal_range(5);
        assert(r.first == m.begin());
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(6);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(7);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(8);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(9);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 9));
        r = m.equal_range(10);
        assert(r.first == m.end());
        assert(r.second == m.end());
    }
    {
        typedef std::pair<M::const_iterator, M::const_iterator> R;
        V ar[] =
        {
            V(5, 1),
            V(5, 2),
            V(5, 3),
            V(7, 1),
            V(7, 2),
            V(7, 3),
            V(9, 1),
            V(9, 2),
            V(9, 3)
        };
        const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.equal_range(4);
        assert(r.first == m.begin());
        assert(r.second == m.begin());
        r = m.equal_range(5);
        assert(r.first == m.begin());
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(6);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 3));
        r = m.equal_range(7);
        assert(r.first == next(m.begin(), 3));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(8);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 6));
        r = m.equal_range(9);
        assert(r.first == next(m.begin(), 6));
        assert(r.second == next(m.begin(), 9));
        r = m.equal_range(10);
        assert(r.first == m.end());
        assert(r.second == m.end());
    }
    }
#endif
}
Exemplo n.º 14
0
int main()
{
    typedef int V;
    typedef std::multiset<int> M;
    {
        typedef M::iterator R;
        V ar[] =
        {
            5,
            5,
            5,
            7,
            7,
            7,
            9,
            9,
            9
        };
        M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.upper_bound(4);
        assert(r == next(m.begin(), 0));
        r = m.upper_bound(5);
        assert(r == next(m.begin(), 3));
        r = m.upper_bound(6);
        assert(r == next(m.begin(), 3));
        r = m.upper_bound(7);
        assert(r == next(m.begin(), 6));
        r = m.upper_bound(8);
        assert(r == next(m.begin(), 6));
        r = m.upper_bound(9);
        assert(r == next(m.begin(), 9));
        r = m.upper_bound(11);
        assert(r == next(m.begin(), 9));
    }
    {
        typedef M::const_iterator R;
        V ar[] =
        {
            5,
            5,
            5,
            7,
            7,
            7,
            9,
            9,
            9
        };
        const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.upper_bound(4);
        assert(r == next(m.begin(), 0));
        r = m.upper_bound(5);
        assert(r == next(m.begin(), 3));
        r = m.upper_bound(6);
        assert(r == next(m.begin(), 3));
        r = m.upper_bound(7);
        assert(r == next(m.begin(), 6));
        r = m.upper_bound(8);
        assert(r == next(m.begin(), 6));
        r = m.upper_bound(9);
        assert(r == next(m.begin(), 9));
        r = m.upper_bound(11);
        assert(r == next(m.begin(), 9));
    }
}
int main()
{
    typedef std::pair<const int, double> V;
    {
    typedef std::multimap<int, double> M;
    {
        typedef M::iterator R;
        V ar[] =
        {
            V(5, 1),
            V(5, 2),
            V(5, 3),
            V(7, 1),
            V(7, 2),
            V(7, 3),
            V(9, 1),
            V(9, 2),
            V(9, 3)
        };
        M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.upper_bound(4);
        assert(r == m.begin());
        r = m.upper_bound(5);
        assert(r == next(m.begin(), 3));
        r = m.upper_bound(6);
        assert(r == next(m.begin(), 3));
        r = m.upper_bound(7);
        assert(r == next(m.begin(), 6));
        r = m.upper_bound(8);
        assert(r == next(m.begin(), 6));
        r = m.upper_bound(9);
        assert(r == next(m.begin(), 9));
        r = m.upper_bound(10);
        assert(r == m.end());
    }
    {
        typedef M::const_iterator R;
        V ar[] =
        {
            V(5, 1),
            V(5, 2),
            V(5, 3),
            V(7, 1),
            V(7, 2),
            V(7, 3),
            V(9, 1),
            V(9, 2),
            V(9, 3)
        };
        const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.upper_bound(4);
        assert(r == m.begin());
        r = m.upper_bound(5);
        assert(r == next(m.begin(), 3));
        r = m.upper_bound(6);
        assert(r == next(m.begin(), 3));
        r = m.upper_bound(7);
        assert(r == next(m.begin(), 6));
        r = m.upper_bound(8);
        assert(r == next(m.begin(), 6));
        r = m.upper_bound(9);
        assert(r == next(m.begin(), 9));
        r = m.upper_bound(10);
        assert(r == m.end());
    }
    }
#if __cplusplus >= 201103L
    {
    typedef std::multimap<int, double, std::less<int>, min_allocator<std::pair<const int, double>>> M;
    {
        typedef M::iterator R;
        V ar[] =
        {
            V(5, 1),
            V(5, 2),
            V(5, 3),
            V(7, 1),
            V(7, 2),
            V(7, 3),
            V(9, 1),
            V(9, 2),
            V(9, 3)
        };
        M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.upper_bound(4);
        assert(r == m.begin());
        r = m.upper_bound(5);
        assert(r == next(m.begin(), 3));
        r = m.upper_bound(6);
        assert(r == next(m.begin(), 3));
        r = m.upper_bound(7);
        assert(r == next(m.begin(), 6));
        r = m.upper_bound(8);
        assert(r == next(m.begin(), 6));
        r = m.upper_bound(9);
        assert(r == next(m.begin(), 9));
        r = m.upper_bound(10);
        assert(r == m.end());
    }
    {
        typedef M::const_iterator R;
        V ar[] =
        {
            V(5, 1),
            V(5, 2),
            V(5, 3),
            V(7, 1),
            V(7, 2),
            V(7, 3),
            V(9, 1),
            V(9, 2),
            V(9, 3)
        };
        const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
        R r = m.upper_bound(4);
        assert(r == m.begin());
        r = m.upper_bound(5);
        assert(r == next(m.begin(), 3));
        r = m.upper_bound(6);
        assert(r == next(m.begin(), 3));
        r = m.upper_bound(7);
        assert(r == next(m.begin(), 6));
        r = m.upper_bound(8);
        assert(r == next(m.begin(), 6));
        r = m.upper_bound(9);
        assert(r == next(m.begin(), 9));
        r = m.upper_bound(10);
        assert(r == m.end());
    }
    }
#endif
}
        P ar[] =
        {
            P(1, 1.5),
            P(2, 2.5),
            P(3, 3.5),
            P(4, 4.5),
            P(5, 5.5),
            P(6, 6.5),
            P(7, 7.5),
            P(8, 8.5),
        };
        M m(ar, ar + sizeof(ar)/sizeof(ar[0]));
        REQUIRE(m.size() == 8);
        I i = m.erase(next(m.cbegin(), 3));
        REQUIRE(m.size() == 7);
        REQUIRE(i == next(m.begin(), 3));
        REQUIRE(m.begin()->first == 1);
        REQUIRE(m.begin()->second == 1.5);
        REQUIRE(next(m.begin())->first == 2);
        REQUIRE(next(m.begin())->second == 2.5);
        REQUIRE(next(m.begin(), 2)->first == 3);
        REQUIRE(next(m.begin(), 2)->second == 3.5);
        REQUIRE(next(m.begin(), 3)->first == 5);
        REQUIRE(next(m.begin(), 3)->second == 5.5);
        REQUIRE(next(m.begin(), 4)->first == 6);
        REQUIRE(next(m.begin(), 4)->second == 6.5);
        REQUIRE(next(m.begin(), 5)->first == 7);
        REQUIRE(next(m.begin(), 5)->second == 7.5);
        REQUIRE(next(m.begin(), 6)->first == 8);
        REQUIRE(next(m.begin(), 6)->second == 8.5);