Revert "[libc] Use best-fit binary trie to make malloc logarithmic" (#117065)
[llvm-project.git] / libcxx / test / std / containers / sequences / vector / vector.modifiers / common.h
blob72cd47a50b2c0dcca152e691ecce619015cb6846
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 //===----------------------------------------------------------------------===//
9 #ifndef TEST_STD_CONTAINERS_SEQUENCES_VECTOR_VECTOR_MODIFIERS_COMMON_H
10 #define TEST_STD_CONTAINERS_SEQUENCES_VECTOR_VECTOR_MODIFIERS_COMMON_H
12 #include "test_macros.h"
14 #include <type_traits> // for __libcpp_is_trivially_relocatable
16 #ifndef TEST_HAS_NO_EXCEPTIONS
17 struct Throws {
18 Throws() : v_(0) {}
19 Throws(int v) : v_(v) {}
20 Throws(const Throws& rhs) : v_(rhs.v_) {
21 if (sThrows)
22 throw 1;
24 Throws(Throws&& rhs) : v_(rhs.v_) {
25 if (sThrows)
26 throw 1;
28 Throws& operator=(const Throws& rhs) {
29 v_ = rhs.v_;
30 return *this;
32 Throws& operator=(Throws&& rhs) {
33 v_ = rhs.v_;
34 return *this;
36 int v_;
37 static bool sThrows;
40 bool Throws::sThrows = false;
41 #endif
43 struct Tracker {
44 int copy_assignments = 0;
45 int move_assignments = 0;
48 struct TrackedAssignment {
49 Tracker* tracker_;
50 TEST_CONSTEXPR_CXX14 explicit TrackedAssignment(Tracker* tracker) : tracker_(tracker) {}
52 TrackedAssignment(TrackedAssignment const&) = default;
53 TrackedAssignment(TrackedAssignment&&) = default;
55 TEST_CONSTEXPR_CXX14 TrackedAssignment& operator=(TrackedAssignment const&) {
56 tracker_->copy_assignments++;
57 return *this;
59 TEST_CONSTEXPR_CXX14 TrackedAssignment& operator=(TrackedAssignment&&) {
60 tracker_->move_assignments++;
61 return *this;
65 struct NonTriviallyRelocatable {
66 int value_;
67 TEST_CONSTEXPR NonTriviallyRelocatable() : value_(0) {}
68 TEST_CONSTEXPR explicit NonTriviallyRelocatable(int v) : value_(v) {}
69 TEST_CONSTEXPR NonTriviallyRelocatable(NonTriviallyRelocatable const& other) : value_(other.value_) {}
70 TEST_CONSTEXPR NonTriviallyRelocatable(NonTriviallyRelocatable&& other) : value_(other.value_) {}
71 TEST_CONSTEXPR_CXX14 NonTriviallyRelocatable& operator=(NonTriviallyRelocatable const& other) {
72 value_ = other.value_;
73 return *this;
75 TEST_CONSTEXPR_CXX14 NonTriviallyRelocatable& operator=(NonTriviallyRelocatable&& other) {
76 value_ = other.value_;
77 return *this;
80 TEST_CONSTEXPR_CXX14 friend bool operator==(NonTriviallyRelocatable const& a, NonTriviallyRelocatable const& b) {
81 return a.value_ == b.value_;
84 LIBCPP_STATIC_ASSERT(!std::__libcpp_is_trivially_relocatable<NonTriviallyRelocatable>::value, "");
86 #endif // TEST_STD_CONTAINERS_SEQUENCES_VECTOR_VECTOR_MODIFIERS_COMMON_H