Skip to content

Commit d33e9f1

Browse files
committed
WIP - ospanstream
1 parent 56b8c20 commit d33e9f1

File tree

2 files changed

+48
-51
lines changed

2 files changed

+48
-51
lines changed

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,24 @@
99
#ifndef TEST_STD_INPUTOUTPUT_SPANSTREAMS_MACROS_H
1010
#define TEST_STD_INPUTOUTPUT_SPANSTREAMS_MACROS_H
1111

12+
#include <type_traits>
13+
1214
#include "make_string.h"
1315

16+
#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)
23+
#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)
29+
#endif // TEST_HAS_NO_WIDE_CHARACTERS
1430
#define CS(S) MAKE_CSTRING(CharT, S)
1531
#define ST(S, a) std::basic_string<CharT, TraitsT, AllocT>(MAKE_CSTRING(CharT, S), MKSTR_LEN(CharT, S), a)
1632
#define SV(S) std::basic_string_view<CharT, TraitsT>(MAKE_CSTRING(CharT, S), MKSTR_LEN(CharT, S))

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

Lines changed: 32 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,6 @@
2121
#include <spanstream>
2222
#include <string>
2323
#include <string_view>
24-
#include <vector>
25-
26-
#include <print>
2724

2825
#include "constexpr_char_traits.h"
2926
#include "test_macros.h"
@@ -43,11 +40,10 @@ void test() {
4340
// Create a std::span test value
4441
CharT arr[arrSize]{};
4542
initialize_array_from_string_view(arr, sv);
46-
std::vector<CharT> vec(arr, arr + arrSize);
43+
std::span<CharT> sp{arr};
4744

4845
// `std::span` + Mode: default (`out`)
4946
{
50-
std::span<CharT> sp{arr};
5147
SpStream spSt(sp);
5248

5349
assert(spSt);
@@ -56,71 +52,56 @@ void test() {
5652
assert(spSt.good());
5753
assert(spSt.span().size() == 0);
5854

59-
spSt.clear();
55+
// Check underlying buffer
56+
assert(arr[0] == CH('z'));
57+
assert(arr[1] == CH('m'));
58+
assert(arr[2] == CH('t'));
59+
60+
spSt << SV("snt");
61+
62+
assert(spSt.span().size() == 3);
63+
64+
assert(spSt.span()[0] == CH('s'));
65+
assert(spSt.span()[1] == CH('n'));
66+
assert(spSt.span()[2] == CH('t'));
67+
// Check underlying buffer
68+
assert(arr[0] == CH('s'));
69+
assert(arr[1] == CH('n'));
70+
assert(arr[2] == CH('t'));
6071

6172
assert(spSt);
6273
assert(!spSt.bad());
6374
assert(!spSt.fail());
6475
assert(spSt.good());
65-
assert(spSt.span().size() == 0);
66-
}
67-
{
68-
std::span<CharT> sp{arr};
69-
SpStream spSt(sp);
76+
77+
spSt << 71;
78+
79+
assert(spSt.span().size() == 5);
80+
81+
assert(spSt.span()[3] == CH('7'));
82+
assert(spSt.span()[4] == CH('1'));
83+
// Check underlying buffer
84+
assert(arr[3] == CH('7'));
85+
assert(arr[4] == CH('1'));
7086

7187
assert(spSt);
7288
assert(!spSt.bad());
7389
assert(!spSt.fail());
7490
assert(spSt.good());
75-
assert(spSt.span().size() == 0);
76-
77-
spSt << 10;
78-
79-
assert(spSt.span().size() == 2);
8091

8192
spSt.clear();
8293

83-
// assert(spSt);
84-
// assert(!spSt.bad());
85-
// assert(!spSt.fail());
86-
// assert(spSt.good());
87-
// assert(spSt.span().size() == 0);
88-
89-
spSt << SV("gh");
90-
assert(spSt.span().size() == 4);
91-
std::println(stderr, "{}", spSt.span()[0]);
92-
std::println(stderr, "{}", arr[0]);
93-
assert(spSt.span()[0] == '1');
94-
assert(arr[0] == '1');
95-
assert(spSt.span()[1] == '0');
96-
assert(arr[1] == '0');
97-
assert(spSt.span()[2] == 'g');
98-
assert(arr[2] == 'g');
99-
100-
CharT output_buffer[30];
101-
std::basic_ospanstream<CharT, TraitsT> os{std::span<CharT>{output_buffer}};
102-
103-
assert(os.good());
104-
assert(!os.fail());
105-
assert(!os.bad());
106-
os << 10 << 20 << 30;
107-
os << SV("GH");
108-
assert(os.good());
109-
assert(!os.fail());
110-
assert(!os.bad());
111-
std::println(stderr, "{}", os.span()[0]);
112-
std::println(stderr, "{}", output_buffer[0]);
113-
std::println(stderr, "{}", os.span().size());
114-
std::println(stderr, "{}", os.span()[6]);
115-
std::println(stderr, "{}", output_buffer[7]);
116-
assert(false);
94+
assert(spSt);
95+
assert(!spSt.bad());
96+
assert(!spSt.fail());
97+
assert(spSt.good());
11798
}
11899
}
119100

120101
int main(int, char**) {
121102
test<char>();
122103
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
123-
// test<wchar_t>();
104+
test<wchar_t>();
124105
#endif
125106

126107
return 0;

0 commit comments

Comments
 (0)