llvm-project

Форк
0
144 строки · 3.5 Кб
1
//===----------------------------------------------------------------------===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8

9
// <map>
10

11
// class map
12

13
// mapped_type& operator[](const key_type& k);
14

15
#include <map>
16
#include <cassert>
17

18
#include "test_macros.h"
19
#include "count_new.h"
20
#include "min_allocator.h"
21
#include "private_constructor.h"
22
#if TEST_STD_VER >= 11
23
#include "container_test_types.h"
24
#endif
25

26
int main(int, char**)
27
{
28
    {
29
    typedef std::pair<const int, double> V;
30
    V ar[] =
31
    {
32
        V(1, 1.5),
33
        V(2, 2.5),
34
        V(3, 3.5),
35
        V(4, 4.5),
36
        V(5, 5.5),
37
        V(7, 7.5),
38
        V(8, 8.5),
39
    };
40
    std::map<int, double> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
41
    assert(m.size() == 7);
42
    assert(m[1] == 1.5);
43
    assert(m.size() == 7);
44
    m[1] = -1.5;
45
    assert(m[1] == -1.5);
46
    assert(m.size() == 7);
47
    assert(m[6] == 0);
48
    assert(m.size() == 8);
49
    m[6] = 6.5;
50
    assert(m[6] == 6.5);
51
    assert(m.size() == 8);
52
    }
53
#if TEST_STD_VER >= 11
54
    {
55
    typedef std::pair<const int, double> V;
56
    V ar[] =
57
    {
58
        V(1, 1.5),
59
        V(2, 2.5),
60
        V(3, 3.5),
61
        V(4, 4.5),
62
        V(5, 5.5),
63
        V(7, 7.5),
64
        V(8, 8.5),
65
    };
66
    std::map<int, double, std::less<int>, min_allocator<V>> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
67
    assert(m.size() == 7);
68
    assert(m[1] == 1.5);
69
    assert(m.size() == 7);
70
    const int i = 1;
71
    m[i] = -1.5;
72
    assert(m[1] == -1.5);
73
    assert(m.size() == 7);
74
    assert(m[6] == 0);
75
    assert(m.size() == 8);
76
    m[6] = 6.5;
77
    assert(m[6] == 6.5);
78
    assert(m.size() == 8);
79
    }
80
    {
81
        // Use "container_test_types.h" to check what arguments get passed
82
        // to the allocator for operator[]
83
        using Container = TCT::map<>;
84
        using Key = Container::key_type;
85
        using MappedType = Container::mapped_type;
86
        ConstructController* cc = getConstructController();
87
        cc->reset();
88
        {
89
            Container c;
90
            const Key k(1);
91
            cc->expect<std::piecewise_construct_t const&, std::tuple<Key const&>&&, std::tuple<>&&>();
92
            MappedType& mref = c[k];
93
            assert(!cc->unchecked());
94
            {
95
                DisableAllocationGuard g;
96
                MappedType& mref2 = c[k];
97
                assert(&mref == &mref2);
98
            }
99
        }
100
        {
101
            Container c;
102
            Key k(1);
103
            cc->expect<std::piecewise_construct_t const&, std::tuple<Key const&>&&, std::tuple<>&&>();
104
            MappedType& mref = c[k];
105
            assert(!cc->unchecked());
106
            {
107
                DisableAllocationGuard g;
108
                MappedType& mref2 = c[k];
109
                assert(&mref == &mref2);
110
            }
111
        }
112
    }
113
#endif
114
#if TEST_STD_VER > 11
115
    {
116
    typedef std::pair<const int, double> V;
117
    V ar[] =
118
    {
119
        V(1, 1.5),
120
        V(2, 2.5),
121
        V(3, 3.5),
122
        V(4, 4.5),
123
        V(5, 5.5),
124
        V(7, 7.5),
125
        V(8, 8.5),
126
    };
127
    std::map<int, double, std::less<>> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
128

129
    assert(m.size() == 7);
130
    assert(m[1] == 1.5);
131
    assert(m.size() == 7);
132
    m[1] = -1.5;
133
    assert(m[1] == -1.5);
134
    assert(m.size() == 7);
135
    assert(m[6] == 0);
136
    assert(m.size() == 8);
137
    m[6] = 6.5;
138
    assert(m[6] == 6.5);
139
    assert(m.size() == 8);
140
    }
141
#endif
142

143
  return 0;
144
}
145

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.