Skip to content

Commit 7087ee6

Browse files
authored
[libc++][NFC] Improve test readability for std::fill_n (#133771)
This patch enhances test readability by inlining standalone tests, eliminating unnecessary navigation. Additionally, several classes with ad-hoc names have been renamed for better clarity: - `A` -> `CharWrapper` as it wraps a char - `B -> CharTransformer` as it accepts a char `xc` but stores `xc + 1` - `Storage -> CharUnionStorage` as it stores a union of 2 `char`s. This patch addresses a follow-up comment from #120909 to inline tests.
1 parent f25f9e4 commit 7087ee6

File tree

1 file changed

+57
-61
lines changed
  • libcxx/test/std/algorithms/alg.modifying.operations/alg.fill

1 file changed

+57
-61
lines changed

libcxx/test/std/algorithms/alg.modifying.operations/alg.fill/fill_n.pass.cpp

Lines changed: 57 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -52,57 +52,29 @@ struct Test {
5252
}
5353
};
5454

55-
TEST_CONSTEXPR_CXX20 void test_int_array() {
56-
{
57-
int a[4] = {};
58-
assert(std::fill_n(a, UDI(4), static_cast<char>(1)) == a + 4);
59-
assert(a[0] == 1 && a[1] == 1 && a[2] == 1 && a[3] == 1);
60-
}
61-
#if TEST_STD_VER >= 11
62-
{
63-
const std::size_t N = 5;
64-
int ib[] = {0, 0, 0, 0, 0, 0}; // one bigger than N
65-
66-
auto it = std::fill_n(std::begin(ib), N, 5);
67-
assert(it == (std::begin(ib) + N) && std::all_of(std::begin(ib), it, [](int a) { return a == 5; }) &&
68-
*it == 0 // don't overwrite the last value in the output array
69-
);
70-
}
71-
#endif
72-
}
73-
7455
struct source {
7556
TEST_CONSTEXPR source() = default;
7657
TEST_CONSTEXPR_CXX20 operator int() const { return 1; }
7758
};
7859

79-
TEST_CONSTEXPR_CXX20 void test_int_array_struct_source() {
80-
int a[4] = {};
81-
assert(std::fill_n(a, UDI(4), source()) == a + 4);
82-
assert(a[0] == 1);
83-
assert(a[1] == 1);
84-
assert(a[2] == 1);
85-
assert(a[3] == 1);
86-
}
87-
88-
class A {
60+
class CharWrapper {
8961
char a_;
9062

9163
public:
92-
TEST_CONSTEXPR A() : a_('a') {};
93-
TEST_CONSTEXPR explicit A(char a) : a_(a) {}
64+
TEST_CONSTEXPR CharWrapper() : a_('a') {};
65+
TEST_CONSTEXPR explicit CharWrapper(char a) : a_(a) {}
9466
TEST_CONSTEXPR operator unsigned char() const { return 'b'; }
9567

96-
TEST_CONSTEXPR friend bool operator==(const A& x, const A& y) { return x.a_ == y.a_; }
68+
TEST_CONSTEXPR friend bool operator==(const CharWrapper& x, const CharWrapper& y) { return x.a_ == y.a_; }
9769
};
9870

99-
struct B {
100-
TEST_CONSTEXPR B() : c(0) {}
101-
TEST_CONSTEXPR B(char xc) : c(xc + 1) {}
71+
struct CharTransformer {
72+
TEST_CONSTEXPR CharTransformer() : c(0) {}
73+
TEST_CONSTEXPR CharTransformer(char xc) : c(xc + 1) {}
10274
char c;
10375
};
10476

105-
struct Storage {
77+
struct CharUnionStorage {
10678
union {
10779
unsigned char a;
10880
unsigned char b;
@@ -154,35 +126,59 @@ TEST_CONSTEXPR_CXX20 bool test_vector_bool(std::size_t N) {
154126
return true;
155127
}
156128

157-
TEST_CONSTEXPR_CXX20 void test_struct_array() {
158-
{
159-
A a[3];
160-
assert(std::fill_n(&a[0], UDI(3), A('a')) == a + 3);
161-
assert(a[0] == A('a'));
162-
assert(a[1] == A('a'));
163-
assert(a[2] == A('a'));
164-
}
165-
{
166-
B b[4] = {};
167-
assert(std::fill_n(b, UDI(4), static_cast<char>(10)) == b + 4);
168-
assert(b[0].c == 11);
169-
assert(b[1].c == 11);
170-
assert(b[2].c == 11);
171-
assert(b[3].c == 11);
172-
}
173-
{
174-
Storage foo[5];
175-
std::fill_n(&foo[0], UDI(5), Storage());
176-
}
177-
}
178-
179129
TEST_CONSTEXPR_CXX20 bool test() {
180130
types::for_each(types::forward_iterator_list<char*>(), Test<char>());
181131
types::for_each(types::forward_iterator_list<int*>(), Test<int>());
182132

183-
test_int_array();
184-
test_struct_array();
185-
test_int_array_struct_source();
133+
{ // Test with int arrays
134+
{
135+
int a[4] = {};
136+
assert(std::fill_n(a, UDI(4), static_cast<char>(1)) == a + 4);
137+
assert(a[0] == 1 && a[1] == 1 && a[2] == 1 && a[3] == 1);
138+
}
139+
#if TEST_STD_VER >= 11
140+
{
141+
const std::size_t N = 5;
142+
int ib[] = {0, 0, 0, 0, 0, 0}; // one bigger than N
143+
144+
auto it = std::fill_n(std::begin(ib), N, 5);
145+
assert(it == (std::begin(ib) + N) && std::all_of(std::begin(ib), it, [](int a) { return a == 5; }) &&
146+
*it == 0 // don't overwrite the last value in the output array
147+
);
148+
}
149+
#endif
150+
}
151+
152+
{ // Test with struct arrays
153+
{
154+
CharWrapper a[3];
155+
assert(std::fill_n(&a[0], UDI(3), CharWrapper('a')) == a + 3);
156+
assert(a[0] == CharWrapper('a'));
157+
assert(a[1] == CharWrapper('a'));
158+
assert(a[2] == CharWrapper('a'));
159+
}
160+
{
161+
CharTransformer b[4] = {};
162+
assert(std::fill_n(b, UDI(4), static_cast<char>(10)) == b + 4);
163+
assert(b[0].c == 11);
164+
assert(b[1].c == 11);
165+
assert(b[2].c == 11);
166+
assert(b[3].c == 11);
167+
}
168+
{
169+
CharUnionStorage foo[5];
170+
std::fill_n(&foo[0], UDI(5), CharUnionStorage());
171+
}
172+
}
173+
174+
{ // Test with an int array and struct source
175+
int a[4] = {};
176+
assert(std::fill_n(a, UDI(4), source()) == a + 4);
177+
assert(a[0] == 1);
178+
assert(a[1] == 1);
179+
assert(a[2] == 1);
180+
assert(a[3] == 1);
181+
}
186182

187183
{ // Test vector<bool>::iterator optimization
188184
assert(test_vector_bool(8));

0 commit comments

Comments
 (0)