Skip to content

Commit 96b560a

Browse files
committed
WIP - test ospanstream inherited stream ops
1 parent f39d1c7 commit 96b560a

File tree

2 files changed

+47
-18
lines changed

2 files changed

+47
-18
lines changed

libcxx/test/std/input.output/span.streams/helper_macros.h

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,12 @@
1313

1414
#include "make_string.h"
1515

16+
// Helper macros for creating strings and string views
17+
1618
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
17-
# define CH(C) \
18-
(std::is_same_v<CharT, wchar_t> ? L##C \
19-
: std::is_same_v<CharT, char8_t> ? u8##C \
20-
: std::is_same_v<CharT, char16_t> ? u##C \
21-
: std::is_same_v<CharT, char32_t> ? U##C \
22-
: C)
19+
# define CH(C) (std::is_same_v<CharT, wchar_t> ? L##C : C)
2320
#else
24-
# define CH(C) \
25-
(std::is_same_v<CharT, char8_t> ? u8##C \
26-
: std::is_same_v<CharT, char16_t> ? u##C \
27-
: std::is_same_v<CharT, char32_t> ? U##C \
28-
: C)
21+
# define CH(C) C
2922
#endif // TEST_HAS_NO_WIDE_CHARACTERS
3023
#define CS(S) MAKE_CSTRING(CharT, S)
3124
#define ST(S, a) std::basic_string<CharT, TraitsT, AllocT>(MAKE_CSTRING(CharT, S), MKSTR_LEN(CharT, S), a)

libcxx/test/std/input.output/span.streams/ospanstream/inherited.stream.ops.pass.cpp

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
// class basic_spanstream
1515
// : public basic_iostream<charT, traits> {
1616

17-
// Test stream operations inherited from `basic_istream` and `basic_ostream`
17+
// Test stream operations inherited from `basic_ostream`
1818

1919
#include <cassert>
2020
#include <span>
@@ -37,13 +37,17 @@ void test() {
3737
constexpr auto arrSize{30UZ};
3838
assert(sv.size() < arrSize);
3939

40+
constexpr std::basic_string_view<CharT, TraitsT> sv2{SV("This string should overflow! This string should overflow!")};
41+
assert(sv2.size() >= arrSize);
42+
4043
// Create a std::span test value
4144
CharT arr[arrSize]{};
4245
initialize_array_from_string_view(arr, sv);
4346
std::span<CharT> sp{arr};
4447

4548
// `std::span` + Mode: default (`out`)
4649
{
50+
// Construct stream
4751
SpStream spSt(sp);
4852

4953
assert(spSt);
@@ -52,20 +56,20 @@ void test() {
5256
assert(spSt.good());
5357
assert(spSt.span().size() == 0);
5458

55-
// Check underlying buffer
56-
assert(arr[0] == CH('z'));
59+
assert(arr[0] == CH('z')); // Check underlying buffer
5760
assert(arr[1] == CH('m'));
5861
assert(arr[2] == CH('t'));
5962

63+
// Write to stream
6064
spSt << SV("snt");
6165

6266
assert(spSt.span().size() == 3);
6367

6468
assert(spSt.span()[0] == CH('s'));
6569
assert(spSt.span()[1] == CH('n'));
6670
assert(spSt.span()[2] == CH('t'));
67-
// Check underlying buffer
68-
assert(arr[0] == CH('s'));
71+
72+
assert(arr[0] == CH('s')); // Check underlying buffer
6973
assert(arr[1] == CH('n'));
7074
assert(arr[2] == CH('t'));
7175

@@ -80,17 +84,49 @@ void test() {
8084

8185
assert(spSt.span()[3] == CH('7'));
8286
assert(spSt.span()[4] == CH('1'));
83-
// Check underlying buffer
84-
assert(arr[3] == CH('7'));
87+
88+
assert(arr[3] == CH('7')); // Check underlying buffer
8589
assert(arr[4] == CH('1'));
8690

8791
assert(spSt);
8892
assert(!spSt.bad());
8993
assert(!spSt.fail());
9094
assert(spSt.good());
9195

96+
spSt.put(CH('!'));
97+
98+
assert(spSt.span().size() == 6);
99+
100+
assert(spSt.span()[5] == CH('!'));
101+
102+
assert(arr[5] == CH('!')); // Check underlying buffer
103+
104+
spSt.write(CS("?#?"), 1);
105+
106+
assert(spSt.span().size() == 7);
107+
108+
assert(spSt.span()[6] == CH('?'));
109+
110+
assert(arr[6] == CH('?')); // Check underlying buffer
111+
112+
// Write to stream with overflow
113+
spSt << sv2;
114+
115+
assert(spSt.span().size() == 30);
116+
117+
assert(!spSt);
118+
assert(spSt.bad());
119+
assert(spSt.fail());
120+
assert(!spSt.good());
121+
122+
assert(spSt.tellp() == 30);
123+
124+
// Clear stream
125+
spSt.seekp(0);
92126
spSt.clear();
93127

128+
assert(spSt.span().size() == 0);
129+
94130
assert(spSt);
95131
assert(!spSt.bad());
96132
assert(!spSt.fail());

0 commit comments

Comments
 (0)