Skip to content

Commit c066e47

Browse files
committed
bounded_test::integer is a perfectly acceptable non-trivial type to use in tests. Ensure that we test that even though a type doesn't have trivial operations, the non-trivial operations are still valid.
1 parent 31c7ffd commit c066e47

File tree

2 files changed

+29
-47
lines changed

2 files changed

+29
-47
lines changed

source/containers/test/static_vector.cpp

Lines changed: 15 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -22,50 +22,35 @@ import numeric_traits;
2222

2323
using namespace bounded::literal;
2424

25-
struct non_trivial {
26-
constexpr non_trivial(non_trivial &&) noexcept {
27-
}
28-
constexpr non_trivial(non_trivial const &) {
29-
}
30-
constexpr ~non_trivial() noexcept {
31-
}
32-
constexpr auto operator=(non_trivial &&) noexcept -> non_trivial & {
33-
return *this;
34-
}
35-
constexpr auto operator=(non_trivial const &) -> non_trivial & {
36-
return *this;
37-
}
38-
};
39-
4025
static_assert(bounded::trivially_move_constructible<containers::static_vector<int, 0_bi>>);
4126
static_assert(bounded::trivially_move_constructible<containers::static_vector<int, 1_bi>>);
42-
static_assert(bounded::trivially_move_constructible<containers::static_vector<non_trivial, 0_bi>>);
43-
static_assert(!bounded::trivially_move_constructible<containers::static_vector<non_trivial, 1_bi>>);
44-
static_assert(bounded::move_constructible<containers::static_vector<non_trivial, 1_bi>>);
27+
static_assert(bounded::trivially_move_constructible<containers::static_vector<bounded_test::integer, 0_bi>>);
28+
static_assert(!bounded::trivially_move_constructible<containers::static_vector<bounded_test::integer, 1_bi>>);
29+
static_assert(bounded::move_constructible<containers::static_vector<bounded_test::integer, 1_bi>>);
4530

4631
static_assert(bounded::trivially_copy_constructible<containers::static_vector<int, 0_bi>>);
4732
static_assert(bounded::trivially_copy_constructible<containers::static_vector<int, 1_bi>>);
48-
static_assert(bounded::trivially_copy_constructible<containers::static_vector<non_trivial, 0_bi>>);
49-
static_assert(!bounded::trivially_copy_constructible<containers::static_vector<non_trivial, 1_bi>>);
50-
static_assert(bounded::copy_constructible<containers::static_vector<non_trivial, 1_bi>>);
33+
static_assert(bounded::trivially_copy_constructible<containers::static_vector<bounded_test::integer, 0_bi>>);
34+
static_assert(!bounded::trivially_copy_constructible<containers::static_vector<bounded_test::integer, 1_bi>>);
35+
static_assert(bounded::copy_constructible<containers::static_vector<bounded_test::integer, 1_bi>>);
5136

5237
static_assert(bounded::trivially_destructible<containers::static_vector<int, 0_bi>>);
5338
static_assert(bounded::trivially_destructible<containers::static_vector<int, 1_bi>>);
54-
static_assert(bounded::trivially_destructible<containers::static_vector<non_trivial, 0_bi>>);
55-
static_assert(!bounded::trivially_destructible<containers::static_vector<non_trivial, 1_bi>>);
56-
static_assert(std::destructible<containers::static_vector<non_trivial, 1_bi>>);
39+
static_assert(bounded::trivially_destructible<containers::static_vector<bounded_test::integer, 0_bi>>);
40+
static_assert(!bounded::trivially_destructible<containers::static_vector<bounded_test::integer, 1_bi>>);
41+
static_assert(std::destructible<containers::static_vector<bounded_test::integer, 1_bi>>);
5742

5843
static_assert(bounded::trivially_copy_assignable<containers::static_vector<int, 0_bi>>);
5944
static_assert(bounded::trivially_copy_assignable<containers::static_vector<int, 1_bi>>);
60-
static_assert(bounded::trivially_copy_assignable<containers::static_vector<non_trivial, 0_bi>>);
61-
static_assert(!bounded::trivially_copy_assignable<containers::static_vector<non_trivial, 1_bi>>);
62-
static_assert(bounded::copy_assignable<containers::static_vector<non_trivial, 1_bi>>);
45+
static_assert(bounded::trivially_copy_assignable<containers::static_vector<bounded_test::integer, 0_bi>>);
46+
static_assert(!bounded::trivially_copy_assignable<containers::static_vector<bounded_test::integer, 1_bi>>);
47+
static_assert(bounded::copy_assignable<containers::static_vector<bounded_test::integer, 1_bi>>);
6348

6449
static_assert(bounded::trivially_move_assignable<containers::static_vector<int, 0_bi>>);
6550
static_assert(bounded::trivially_move_assignable<containers::static_vector<int, 1_bi>>);
66-
static_assert(bounded::trivially_move_assignable<containers::static_vector<non_trivial, 0_bi>>);
67-
static_assert(!bounded::trivially_move_assignable<containers::static_vector<non_trivial, 1_bi>>);
68-
static_assert(bounded::move_assignable<containers::static_vector<non_trivial, 1_bi>>);
51+
static_assert(bounded::trivially_move_assignable<containers::static_vector<bounded_test::integer, 0_bi>>);
52+
static_assert(!bounded::trivially_move_assignable<containers::static_vector<bounded_test::integer, 1_bi>>);
53+
static_assert(bounded::move_assignable<containers::static_vector<bounded_test::integer, 1_bi>>);
6954

7055
template<typename T>
7156
using test_static_vector = containers::static_vector<T, 40_bi>;

source/tv/test/variant.cpp

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -35,21 +35,6 @@ static_assert(bounded::trivially_copy_assignable<thing_t>);
3535
static_assert(bounded::trivially_move_assignable<thing_t>);
3636
static_assert(bounded::trivially_destructible<thing_t>);
3737

38-
struct non_trivial {
39-
non_trivial();
40-
non_trivial(non_trivial &&);
41-
non_trivial(non_trivial const &);
42-
auto operator=(non_trivial &&) -> non_trivial &;
43-
auto operator=(non_trivial const &) -> non_trivial &;
44-
~non_trivial();
45-
};
46-
47-
static_assert(!bounded::trivially_copy_constructible<tv::variant<non_trivial>>);
48-
static_assert(!bounded::trivially_move_constructible<tv::variant<non_trivial>>);
49-
static_assert(!bounded::trivially_copy_assignable<tv::variant<non_trivial>>);
50-
static_assert(!bounded::trivially_move_assignable<tv::variant<non_trivial>>);
51-
static_assert(!bounded::trivially_destructible<tv::variant<non_trivial>>);
52-
5338
static_assert(!bounded::constructible_from<thing_t, int>);
5439
static_assert(bounded::constructible_from<thing_t, short>);
5540
static_assert(bounded::constructible_from<thing_t, long>);
@@ -122,9 +107,21 @@ static_assert(!bounded::equality_comparable<tv::variant<int, non_comparable, int
122107

123108
static_assert(tv::variant<non_comparable, int>(5) == 5);
124109

110+
using non_trivial = tv::variant<bounded_test::integer>;
111+
112+
static_assert(!bounded::trivially_copy_constructible<non_trivial>);
113+
static_assert(bounded::copy_constructible<non_trivial>);
114+
static_assert(!bounded::trivially_move_constructible<non_trivial>);
115+
static_assert(bounded::move_constructible<non_trivial>);
116+
static_assert(!bounded::trivially_copy_assignable<non_trivial>);
117+
static_assert(bounded::copy_assignable<non_trivial>);
118+
static_assert(!bounded::trivially_move_assignable<non_trivial>);
119+
static_assert(bounded::move_assignable<non_trivial>);
120+
static_assert(!bounded::trivially_destructible<non_trivial>);
121+
static_assert(std::destructible<non_trivial>);
122+
125123
constexpr bool test_non_trivial() {
126-
using non_trivial_variant_t = tv::variant<bounded_test::integer>;
127-
auto a = non_trivial_variant_t(bounded_test::integer(3));
124+
auto a = non_trivial(bounded_test::integer(3));
128125
BOUNDED_ASSERT(a.index() == 0_bi);
129126
auto b = a;
130127
BOUNDED_ASSERT(a[0_bi].value() == 3);

0 commit comments

Comments
 (0)