1211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant//===----------------------------------------------------------------------===//
2211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant//
3211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant//                     The LLVM Compiler Infrastructure
4211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant//
5211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
6211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
7211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant//
8211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant//===----------------------------------------------------------------------===//
9211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant
10211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant// <deque>
11211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant
12211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant// Test nested types and default template args:
13211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant
14211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant// template <class T, class Allocator = allocator<T> >
15211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant// class deque;
16211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant
17211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant// iterator, const_iterator
18211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant
19211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant#include <deque>
20211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant#include <iterator>
21211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant#include <cassert>
22211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant
23061d0cc4db18d17bf01ed14c5db0be098205bd47Marshall Clow#include "min_allocator.h"
24fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant
25211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnantint main()
26211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant{
27fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant    {
28211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant    typedef std::deque<int> C;
29211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant    C c;
30211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant    C::iterator i;
31211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant    i = c.begin();
32211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant    C::const_iterator j;
33211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant    j = c.cbegin();
34211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant    assert(i == j);
35fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant    }
36fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant#if __cplusplus >= 201103L
37fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant    {
38fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant    typedef std::deque<int, min_allocator<int>> C;
39fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant    C c;
40fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant    C::iterator i;
41fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant    i = c.begin();
42fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant    C::const_iterator j;
43fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant    j = c.cbegin();
44fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant    assert(i == j);
45fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant    }
46fcd8db7133c56a5a627f3922ce4a180c12287dd9Howard Hinnant#endif
475a11f9458301329528fb69ce84c3b266f24e4185Marshall Clow#if _LIBCPP_STD_VER > 11
48051c848e8811c753df7c38c738172ba8f5672b0aMarshall Clow    { // N3644 testing
495a11f9458301329528fb69ce84c3b266f24e4185Marshall Clow        std::deque<int>::iterator ii1{}, ii2{};
505a11f9458301329528fb69ce84c3b266f24e4185Marshall Clow        std::deque<int>::iterator ii4 = ii1;
515a11f9458301329528fb69ce84c3b266f24e4185Marshall Clow        std::deque<int>::const_iterator cii{};
525a11f9458301329528fb69ce84c3b266f24e4185Marshall Clow        assert ( ii1 == ii2 );
535a11f9458301329528fb69ce84c3b266f24e4185Marshall Clow        assert ( ii1 == ii4 );
545a11f9458301329528fb69ce84c3b266f24e4185Marshall Clow
559863083ee04fe80e227976bc90dbc01806bdf3d9Marshall Clow        assert (!(ii1 != ii2 ));
565a11f9458301329528fb69ce84c3b266f24e4185Marshall Clow
579863083ee04fe80e227976bc90dbc01806bdf3d9Marshall Clow        assert ( (ii1 == cii ));
589863083ee04fe80e227976bc90dbc01806bdf3d9Marshall Clow        assert ( (cii == ii1 ));
599863083ee04fe80e227976bc90dbc01806bdf3d9Marshall Clow        assert (!(ii1 != cii ));
609863083ee04fe80e227976bc90dbc01806bdf3d9Marshall Clow        assert (!(cii != ii1 ));
619863083ee04fe80e227976bc90dbc01806bdf3d9Marshall Clow        assert (!(ii1 <  cii ));
629863083ee04fe80e227976bc90dbc01806bdf3d9Marshall Clow        assert (!(cii <  ii1 ));
639863083ee04fe80e227976bc90dbc01806bdf3d9Marshall Clow        assert ( (ii1 <= cii ));
649863083ee04fe80e227976bc90dbc01806bdf3d9Marshall Clow        assert ( (cii <= ii1 ));
659863083ee04fe80e227976bc90dbc01806bdf3d9Marshall Clow        assert (!(ii1 >  cii ));
669863083ee04fe80e227976bc90dbc01806bdf3d9Marshall Clow        assert (!(cii >  ii1 ));
679863083ee04fe80e227976bc90dbc01806bdf3d9Marshall Clow        assert ( (ii1 >= cii ));
689863083ee04fe80e227976bc90dbc01806bdf3d9Marshall Clow        assert ( (cii >= ii1 ));
699863083ee04fe80e227976bc90dbc01806bdf3d9Marshall Clow        assert (cii - ii1 == 0);
709863083ee04fe80e227976bc90dbc01806bdf3d9Marshall Clow        assert (ii1 - cii == 0);
719863083ee04fe80e227976bc90dbc01806bdf3d9Marshall Clow
725a11f9458301329528fb69ce84c3b266f24e4185Marshall Clow//         std::deque<int> c;
735a11f9458301329528fb69ce84c3b266f24e4185Marshall Clow//         assert ( ii1 != c.cbegin());
745a11f9458301329528fb69ce84c3b266f24e4185Marshall Clow//         assert ( cii != c.begin());
755a11f9458301329528fb69ce84c3b266f24e4185Marshall Clow//         assert ( cii != c.cend());
765a11f9458301329528fb69ce84c3b266f24e4185Marshall Clow//         assert ( ii1 != c.end());
775a11f9458301329528fb69ce84c3b266f24e4185Marshall Clow    }
785a11f9458301329528fb69ce84c3b266f24e4185Marshall Clow#endif
79211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant}
80