23
23
#include < spanstream>
24
24
25
25
#include " constexpr_char_traits.h"
26
- #include " test_convertible .h"
26
+ #include " nasty_string .h"
27
27
#include " test_macros.h"
28
28
29
29
template <typename CharT, typename TraitsT = std::char_traits<CharT>>
@@ -33,20 +33,78 @@ void test() {
33
33
CharT arr[4 ];
34
34
std::span<CharT> sp{arr};
35
35
36
- // TODO:
36
+ // Mode: default (`in` | `out`)
37
+ {
38
+ SpBuf spBuf{sp};
39
+ assert (spBuf.span ().data () == arr);
40
+ // Mode `out` counts read characters
41
+ assert (spBuf.span ().empty ());
42
+ assert (spBuf.span ().size () == 0 );
37
43
38
- // Mode: default
44
+ spBuf.pubsetbuf (nullptr , 0 );
45
+ assert (spBuf.span ().data () == nullptr );
46
+ // Mode `out` counts read characters
47
+ assert (spBuf.span ().empty ());
48
+ assert (spBuf.span ().size () == 0 );
49
+ }
50
+ // Mode: `ios_base::in`
39
51
{
40
- SpBuf rhsSpBuf{sp};
41
- SpBuf spBuf (std::span<CharT>{});
42
- spBuf.swap (rhsSpBuf);
43
- // assert(spBuf.span().data() == arr);
44
- // assert(!spBuf.span().empty());
45
- // assert(spBuf.span().size() == 4);
52
+ SpBuf spBuf{sp, std::ios_base::in};
53
+ assert (spBuf.span ().data () == arr);
54
+ assert (!spBuf.span ().empty ());
55
+ assert (spBuf.span ().size () == 4 );
56
+
57
+ spBuf.pubsetbuf (nullptr , 0 );
58
+ assert (spBuf.span ().data () == nullptr );
59
+ assert (spBuf.span ().empty ());
60
+ assert (spBuf.span ().size () == 0 );
61
+ }
62
+ // Mode `ios_base::out`
63
+ {
64
+ SpBuf spBuf{sp, std::ios_base::out};
65
+ assert (spBuf.span ().data () == arr);
66
+ // Mode `out` counts read characters
67
+ assert (spBuf.span ().empty ());
68
+ assert (spBuf.span ().size () == 0 );
69
+
70
+ spBuf.pubsetbuf (nullptr , 0 );
71
+ assert (spBuf.span ().data () == nullptr );
72
+ // Mode `out` counts read characters
73
+ assert (spBuf.span ().empty ());
74
+ assert (spBuf.span ().size () == 0 );
75
+ }
76
+ // Mode: multiple
77
+ {
78
+ SpBuf spBuf{sp, std::ios_base::in | std::ios_base::out | std::ios_base::binary};
79
+ assert (spBuf.span ().data () == arr);
80
+ // Mode `out` counts read characters
81
+ assert (spBuf.span ().empty ());
82
+ assert (spBuf.span ().size () == 0 );
83
+
84
+ spBuf.pubsetbuf (nullptr , 0 );
85
+ assert (spBuf.span ().data () == nullptr );
86
+ // Mode `out` counts read characters
87
+ assert (spBuf.span ().empty ());
88
+ assert (spBuf.span ().size () == 0 );
89
+ }
90
+ // Mode: `ios_base::ate`
91
+ {
92
+ SpBuf spBuf{sp, std::ios_base::out | std::ios_base::ate};
93
+ assert (spBuf.span ().data () == arr);
94
+ assert (!spBuf.span ().empty ());
95
+ assert (spBuf.span ().size () == 4 );
96
+
97
+ spBuf.pubsetbuf (nullptr , 0 );
98
+ assert (spBuf.span ().data () == nullptr );
99
+ assert (spBuf.span ().empty ());
100
+ assert (spBuf.span ().size () == 0 );
46
101
}
47
102
}
48
103
49
104
int main (int , char **) {
105
+ #ifndef TEST_HAS_NO_NASTY_STRING
106
+ test<nasty_char, nasty_char_traits>();
107
+ #endif
50
108
test<char >();
51
109
test<char , constexpr_char_traits<char >>();
52
110
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
0 commit comments