| // { dg-options "-std=gnu++23" } |
| // { dg-do run { target c++23 } } |
| |
| #include <spanstream> |
| |
| #ifndef __cpp_lib_spanstream |
| # error "Feature-test macro for spanstream missing in <spanstream>" |
| #elif __cpp_lib_spanstream != 202106L |
| # error "Feature-test macro for spanstream has wrong value in <spanstream>" |
| #endif |
| |
| #include <testsuite_hooks.h> |
| |
| using std::ispanstream; |
| using std::ospanstream; |
| using std::span; |
| |
| void |
| test_input() |
| { |
| // reading input from a fixed pre-arranged character buffer |
| char input[] = "10 20 30"; |
| ispanstream is{span<char>{input}}; |
| int i; |
| is >> i; |
| VERIFY(10 == i); |
| is >> i; |
| VERIFY(20 == i); |
| is >> i; |
| VERIFY(30 == i); |
| is >>i; |
| VERIFY(!is); |
| } |
| |
| void |
| test_output() |
| { |
| // writing to a fixed pre-arranged character buffer |
| char output[30]{}; // zero-initialize array |
| ospanstream os{span<char>{output}}; |
| os << 10 << 20 << 30; |
| auto const sp = os.span(); |
| VERIFY(6 == sp.size()); |
| VERIFY("102030" == std::string(sp.data(), sp.size())); |
| VERIFY(static_cast<void*>(output) == sp.data()); // no copying of underlying data! |
| VERIFY("102030" == std::string(output)); // initialization guaranteed NUL termination |
| } |
| |
| int main() |
| { |
| test_input(); |
| test_output(); |
| } |