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