llvm-project

Форк
0
140 строк · 4.2 Кб
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
// <set>
10

11
// class multiset
12

13
// multiset& operator=(const multiset& s);
14

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

18
#include "test_macros.h"
19
#include "../../../test_compare.h"
20
#include "test_allocator.h"
21

22
int main(int, char**)
23
{
24
    {
25
        typedef int V;
26
        V ar[] =
27
        {
28
            1,
29
            1,
30
            1,
31
            2,
32
            2,
33
            2,
34
            3,
35
            3,
36
            3
37
        };
38
        typedef test_less<int> C;
39
        typedef test_allocator<V> A;
40
        std::multiset<int, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(2));
41
        std::multiset<int, C, A> m(ar, ar+sizeof(ar)/sizeof(ar[0])/2, C(3), A(7));
42
        m = mo;
43
        assert(m.get_allocator() == A(7));
44
        assert(m.key_comp() == C(5));
45
        assert(m.size() == 9);
46
        assert(std::distance(m.begin(), m.end()) == 9);
47
        assert(*std::next(m.begin(), 0) == 1);
48
        assert(*std::next(m.begin(), 1) == 1);
49
        assert(*std::next(m.begin(), 2) == 1);
50
        assert(*std::next(m.begin(), 3) == 2);
51
        assert(*std::next(m.begin(), 4) == 2);
52
        assert(*std::next(m.begin(), 5) == 2);
53
        assert(*std::next(m.begin(), 6) == 3);
54
        assert(*std::next(m.begin(), 7) == 3);
55
        assert(*std::next(m.begin(), 8) == 3);
56

57
        assert(mo.get_allocator() == A(2));
58
        assert(mo.key_comp() == C(5));
59
        assert(mo.size() == 9);
60
        assert(std::distance(mo.begin(), mo.end()) == 9);
61
        assert(*std::next(mo.begin(), 0) == 1);
62
        assert(*std::next(mo.begin(), 1) == 1);
63
        assert(*std::next(mo.begin(), 2) == 1);
64
        assert(*std::next(mo.begin(), 3) == 2);
65
        assert(*std::next(mo.begin(), 4) == 2);
66
        assert(*std::next(mo.begin(), 5) == 2);
67
        assert(*std::next(mo.begin(), 6) == 3);
68
        assert(*std::next(mo.begin(), 7) == 3);
69
        assert(*std::next(mo.begin(), 8) == 3);
70
    }
71
    {
72
        typedef int V;
73
        const V ar[] =
74
        {
75
            1,
76
            1,
77
            1,
78
            2,
79
            2,
80
            2,
81
            3,
82
            3,
83
            3
84
        };
85
        std::multiset<int> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
86
        std::multiset<int> *p = &m;
87
        m = *p;
88
        assert(m.size() == 9);
89
        assert(std::equal(m.begin(), m.end(), ar));
90
    }
91
    {
92
        typedef int V;
93
        V ar[] =
94
        {
95
            1,
96
            1,
97
            1,
98
            2,
99
            2,
100
            2,
101
            3,
102
            3,
103
            3
104
        };
105
        typedef test_less<int> C;
106
        typedef other_allocator<V> A;
107
        std::multiset<int, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(2));
108
        std::multiset<int, C, A> m(ar, ar+sizeof(ar)/sizeof(ar[0])/2, C(3), A(7));
109
        m = mo;
110
        assert(m.get_allocator() == A(2));
111
        assert(m.key_comp() == C(5));
112
        assert(m.size() == 9);
113
        assert(std::distance(m.begin(), m.end()) == 9);
114
        assert(*std::next(m.begin(), 0) == 1);
115
        assert(*std::next(m.begin(), 1) == 1);
116
        assert(*std::next(m.begin(), 2) == 1);
117
        assert(*std::next(m.begin(), 3) == 2);
118
        assert(*std::next(m.begin(), 4) == 2);
119
        assert(*std::next(m.begin(), 5) == 2);
120
        assert(*std::next(m.begin(), 6) == 3);
121
        assert(*std::next(m.begin(), 7) == 3);
122
        assert(*std::next(m.begin(), 8) == 3);
123

124
        assert(mo.get_allocator() == A(2));
125
        assert(mo.key_comp() == C(5));
126
        assert(mo.size() == 9);
127
        assert(std::distance(mo.begin(), mo.end()) == 9);
128
        assert(*std::next(mo.begin(), 0) == 1);
129
        assert(*std::next(mo.begin(), 1) == 1);
130
        assert(*std::next(mo.begin(), 2) == 1);
131
        assert(*std::next(mo.begin(), 3) == 2);
132
        assert(*std::next(mo.begin(), 4) == 2);
133
        assert(*std::next(mo.begin(), 5) == 2);
134
        assert(*std::next(mo.begin(), 6) == 3);
135
        assert(*std::next(mo.begin(), 7) == 3);
136
        assert(*std::next(mo.begin(), 8) == 3);
137
    }
138

139
  return 0;
140
}
141

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

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

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

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