@@ -8,12 +8,76 @@ export module containers.test.array;
8
8
import containers.test.test_sequence_container;
9
9
10
10
import containers.array;
11
+ import containers.data;
12
+ import containers.is_container;
13
+ import containers.range_value_t ;
11
14
12
15
import bounded;
16
+ import std_module;
13
17
18
+ namespace {
19
+
14
20
using namespace bounded ::literal;
21
+
22
+ constexpr auto size = 5_bi;
23
+ constexpr containers::array<int , size> a = {};
24
+ static_assert (a.size() == size, " Incorrect size." );
25
+ static_assert (a[0_bi] == 0 , " Incorrect value." );
15
26
16
- static_assert (containers_test::test_sequence_container_default_constructed_empty<containers::array<int , 0_bi>>());
17
- static_assert (containers_test::test_sequence_container_implicit_from_two_empty_braces<containers::array<int , 0_bi>>());
18
- static_assert (containers_test::test_special_members<containers::array<int , 0_bi>>([] { return containers::array<int , 0_bi>({}); }));
19
- static_assert (containers_test::test_special_members<containers::array<int , 5_bi>>([] { return containers::array ({0 , 1 , 2 , 3 , 4 }); }));
27
+ static_assert (std::is_standard_layout_v<containers::array<int , 0_bi>>);
28
+ static_assert (std::is_trivial_v<containers::array<int , 0_bi>>);
29
+ static_assert (std::is_empty_v<containers::array<int , 0_bi>>);
30
+
31
+ template <typename T>
32
+ concept qualifiers_are_contiguous_ranges =
33
+ containers::contiguous_range<T const &> and
34
+ containers::contiguous_range<T &>;
35
+
36
+ static_assert (qualifiers_are_contiguous_ranges<containers::array<int , 0_bi>>);
37
+ static_assert (qualifiers_are_contiguous_ranges<containers::array<int , 5_bi>>);
38
+
39
+ static_assert (containers::is_container<containers::array<int , 0_bi>>);
40
+ static_assert (containers::is_container<containers::array<int , 1_bi>>);
41
+
42
+ static_assert (bounded::convertible_to<containers::array<int , 3_bi> const &, std::span<int const >>);
43
+ static_assert (!bounded::convertible_to<containers::array<int , 3_bi> const &, std::span<int >>);
44
+ static_assert (bounded::convertible_to<containers::array<int , 3_bi> &, std::span<int const >>);
45
+ static_assert (bounded::convertible_to<containers::array<int , 3_bi> &, std::span<int >>);
46
+
47
+ static_assert (bounded::convertible_to<containers::array<int , 3_bi> const &, std::span<int const , 3 >>);
48
+ static_assert (!bounded::convertible_to<containers::array<int , 3_bi> const &, std::span<int , 3 >>);
49
+ static_assert (bounded::convertible_to<containers::array<int , 3_bi> &, std::span<int const , 3 >>);
50
+ static_assert (bounded::convertible_to<containers::array<int , 3_bi> &, std::span<int , 3 >>);
51
+
52
+ constexpr auto array_n = containers::make_array_n(6_bi, 5 );
53
+ static_assert (std::same_as<containers::range_value_t <decltype (array_n)>, int >, " Incorrect type from make_array_n." );
54
+ static_assert (array_n.size() == 6_bi, " Incorrect size from make_array_n." );
55
+ static_assert (array_n[3_bi] == 5 , " Incorrect values from make_array_n." );
56
+
57
+ struct non_copyable {
58
+ non_copyable () = default ;
59
+ non_copyable (non_copyable const &) = delete ;
60
+ non_copyable (non_copyable &&) = default ;
61
+ };
62
+
63
+ constexpr auto array_non_copyable = containers::make_array_n(1_bi, non_copyable());
64
+ static_assert (array_non_copyable.size() == 1_bi);
65
+
66
+ constexpr auto array_empty = containers::make_array_n(0_bi, 2 );
67
+ static_assert (array_empty.size() == 0_bi);
68
+
69
+ constexpr auto array_non_copyable_empty = containers::make_array_n(0_bi, non_copyable());
70
+ static_assert (array_non_copyable_empty.size() == 0_bi);
71
+
72
+ constexpr auto large_size = 10000_bi;
73
+ constexpr auto large_array_n = containers::make_array_n(large_size, 0 );
74
+ static_assert (large_array_n.size() == large_size);
75
+
76
+ using namespace containers_test ;
77
+
78
+ static_assert (test_sequence_container_default_constructed_empty<containers::array<int , 0_bi>>());
79
+ static_assert (test_sequence_container_implicit_from_two_empty_braces<containers::array<int , 0_bi>>());
80
+ static_assert (test_special_members<containers::array<int , 0_bi>>([] { return containers::array<int , 0_bi>({}); }));
81
+ static_assert (test_special_members<containers::array<int , 5_bi>>([] { return containers::array ({0 , 1 , 2 , 3 , 4 }); }));
82
+
83
+ } // namespace
0 commit comments