Skip to content

Commit fad78b3

Browse files
committed
WIP: Test spanbuf pointers in streams
1 parent e960e8e commit fad78b3

File tree

2 files changed

+27
-9
lines changed

2 files changed

+27
-9
lines changed

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,4 +128,18 @@ static_assert(!std::convertible_to<const NonReadOnlySpan<wchar_t>, std::span<con
128128

129129
struct NonMode {};
130130

131+
// Spanbuffer wrapper
132+
133+
template <typename CharT, typename TraitsT>
134+
class spanbuf_wrapper : public std::basic_spanbuf<CharT, TraitsT> {
135+
public:
136+
using std::basic_spanbuf<CharT, TraitsT>::eback;
137+
using std::basic_spanbuf<CharT, TraitsT>::egptr;
138+
using std::basic_spanbuf<CharT, TraitsT>::epptr;
139+
using std::basic_spanbuf<CharT, TraitsT>::gptr;
140+
using std::basic_spanbuf<CharT, TraitsT>::pbase;
141+
using std::basic_spanbuf<CharT, TraitsT>::pptr;
142+
};
143+
144+
131145
#endif // TEST_STD_INPUTOUTPUT_SPANSTREAMS_TYPES_H

libcxx/test/std/input.output/span.streams/ispanstream/ispanstream.members/rdbuf.pass.cpp

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,11 @@
2525
#include "nasty_string.h"
2626
#include "test_macros.h"
2727

28+
#include "../../helper_types.h"
29+
2830
template <typename CharT, typename TraitsT = std::char_traits<CharT>>
2931
void test() {
30-
using SpStream = std::basic_ospanstream<CharT, TraitsT>;
32+
using SpStream = std::basic_ispanstream<CharT, TraitsT>;
3133

3234
CharT arr[4];
3335

@@ -38,19 +40,21 @@ void test() {
3840
// Mode: default (`in`)
3941
{
4042
SpStream spSt{sp};
41-
assert(spSt.rdbuf()->span().data() == arr);
42-
assert(spSt.rdbuf()->span().size() == 0);
43+
auto* spBuf = static_cast<spanbuf_wrapper<CharT, TraitsT>*>(spSt.rdbuf());
44+
45+
assert(spBuf->span().size() == 4);
46+
assert(spBuf->span().data() == arr);
47+
assert(spBuf->eback() == arr);
48+
assert(spBuf->gptr() == arr);
49+
assert(spBuf->egptr() == arr + 4);
50+
assert(spBuf->pbase() == nullptr);
51+
assert(spBuf->pptr() == nullptr);
52+
assert(spBuf->epptr() == nullptr);
4353
}
4454
// Mode: explicit `in`
4555
{
4656
SpStream spSt{sp, std::ios_base::in};
4757
assert(spSt.rdbuf()->span().data() == arr);
48-
assert(spSt.rdbuf()->span().size() == 0);
49-
}
50-
// Mode: `ate`
51-
{
52-
SpStream spSt{sp, std::ios_base::ate};
53-
assert(spSt.rdbuf()->span().data() == arr);
5458
assert(spSt.rdbuf()->span().size() == 4);
5559
}
5660
}

0 commit comments

Comments
 (0)