1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant//                     The LLVM Compiler Infrastructure
4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <map>
11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// class map
13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// mapped_type& operator[](const key_type& k);
15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <map>
17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert>
18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
19061d0cc4db18d17bf01ed14c5db0be098205bd47Marshall Clow#include "min_allocator.h"
205cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow#include "private_constructor.hpp"
2170342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant
22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main()
23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
2470342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant    {
25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    typedef std::pair<const int, double> V;
26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    V ar[] =
27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        V(1, 1.5),
29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        V(2, 2.5),
30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        V(3, 3.5),
31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        V(4, 4.5),
32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        V(5, 5.5),
33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        V(7, 7.5),
34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        V(8, 8.5),
35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    };
36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    std::map<int, double> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    assert(m.size() == 7);
38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    assert(m[1] == 1.5);
39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    assert(m.size() == 7);
40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    m[1] = -1.5;
41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    assert(m[1] == -1.5);
42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    assert(m.size() == 7);
43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    assert(m[6] == 0);
44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    assert(m.size() == 8);
45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    m[6] = 6.5;
46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    assert(m[6] == 6.5);
47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    assert(m.size() == 8);
4870342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant    }
4970342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant#if __cplusplus >= 201103L
5070342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant    {
5170342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant    typedef std::pair<const int, double> V;
5270342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant    V ar[] =
5370342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant    {
5470342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        V(1, 1.5),
5570342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        V(2, 2.5),
5670342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        V(3, 3.5),
5770342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        V(4, 4.5),
5870342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        V(5, 5.5),
5970342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        V(7, 7.5),
6070342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        V(8, 8.5),
6170342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant    };
6270342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant    std::map<int, double, std::less<int>, min_allocator<V>> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
6370342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant    assert(m.size() == 7);
6470342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant    assert(m[1] == 1.5);
6570342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant    assert(m.size() == 7);
6670342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant    const int i = 1;
6770342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant    m[i] = -1.5;
6870342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant    assert(m[1] == -1.5);
6970342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant    assert(m.size() == 7);
7070342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant    assert(m[6] == 0);
7170342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant    assert(m.size() == 8);
7270342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant    m[6] = 6.5;
7370342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant    assert(m[6] == 6.5);
7470342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant    assert(m.size() == 8);
7570342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant    }
7670342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant#endif
775cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow#if _LIBCPP_STD_VER > 11
785cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow    {
795cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow    typedef std::pair<const int, double> V;
805cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow    V ar[] =
815cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow    {
825cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow        V(1, 1.5),
835cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow        V(2, 2.5),
845cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow        V(3, 3.5),
855cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow        V(4, 4.5),
865cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow        V(5, 5.5),
875cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow        V(7, 7.5),
885cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow        V(8, 8.5),
895cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow    };
905cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow    std::map<int, double, std::less<>> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
915cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow
925cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow    assert(m.size() == 7);
935cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow    assert(m[1] == 1.5);
945cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow    assert(m.size() == 7);
955cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow    m[1] = -1.5;
965cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow    assert(m[1] == -1.5);
975cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow    assert(m.size() == 7);
985cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow    assert(m[6] == 0);
995cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow    assert(m.size() == 8);
1005cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow    m[6] = 6.5;
1015cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow    assert(m[6] == 6.5);
1025cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow    assert(m.size() == 8);
1035cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow    }
1045cfc6ab2b82018224997ddb6220ba0cd937e35f2Marshall Clow#endif
105bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
106