llvm-project

Форк
0
73 строки · 1.9 Кб
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
// UNSUPPORTED: c++03, c++11, c++14
10

11
// <set>
12

13
// class set
14

15
// node_type extract(key_type const&);
16

17
#include <set>
18
#include "test_macros.h"
19
#include "min_allocator.h"
20
#include "Counter.h"
21

22
template <class Container, class KeyTypeIter>
23
void test(Container& c, KeyTypeIter first, KeyTypeIter last)
24
{
25
    std::size_t sz = c.size();
26
    assert((std::size_t)std::distance(first, last) == sz);
27

28
    for (KeyTypeIter copy = first; copy != last; ++copy)
29
    {
30
        typename Container::node_type t = c.extract(*copy);
31
        assert(!t.empty());
32
        --sz;
33
        assert(t.value() == *copy);
34
        assert(t.get_allocator() == c.get_allocator());
35
        assert(sz == c.size());
36
    }
37

38
    assert(c.size() == 0);
39

40
    for (KeyTypeIter copy = first; copy != last; ++copy)
41
    {
42
        typename Container::node_type t = c.extract(*copy);
43
        assert(t.empty());
44
    }
45
}
46

47
int main(int, char**)
48
{
49
    {
50
        std::set<int> m = {1, 2, 3, 4, 5, 6};
51
        int keys[] = {1, 2, 3, 4, 5, 6};
52
        test(m, std::begin(keys), std::end(keys));
53
    }
54

55
    {
56
        std::set<Counter<int>> m = {1, 2, 3, 4, 5, 6};
57
        {
58
            Counter<int> keys[] = {1, 2, 3, 4, 5, 6};
59
            assert(Counter_base::gConstructed == 6+6);
60
            test(m, std::begin(keys), std::end(keys));
61
        }
62
        assert(Counter_base::gConstructed == 0);
63
    }
64

65
    {
66
        using min_alloc_set = std::set<int, std::less<int>, min_allocator<int>>;
67
        min_alloc_set m = {1, 2, 3, 4, 5, 6};
68
        int keys[] = {1, 2, 3, 4, 5, 6};
69
        test(m, std::begin(keys), std::end(keys));
70
    }
71

72
  return 0;
73
}
74

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

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

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

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