xref: /llvm-project/libcxx/test/std/input.output/string.streams/stringstream/stringstream.cons/move.pass.cpp (revision b9a2658a3e8bd13b0f9e7a8a440832a95b377216)
10b8c8bc8SPiotr Fusik //===----------------------------------------------------------------------===//
20b8c8bc8SPiotr Fusik //
30b8c8bc8SPiotr Fusik // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b8c8bc8SPiotr Fusik // See https://llvm.org/LICENSE.txt for license information.
50b8c8bc8SPiotr Fusik // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b8c8bc8SPiotr Fusik //
70b8c8bc8SPiotr Fusik //===----------------------------------------------------------------------===//
80b8c8bc8SPiotr Fusik 
90b8c8bc8SPiotr Fusik // <sstream>
100b8c8bc8SPiotr Fusik 
110b8c8bc8SPiotr Fusik // template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> >
120b8c8bc8SPiotr Fusik // class basic_stringstream
130b8c8bc8SPiotr Fusik 
140b8c8bc8SPiotr Fusik // basic_stringstream(basic_stringstream&& rhs);
150b8c8bc8SPiotr Fusik 
16*b9a2658aSNikolas Klauser // XFAIL: FROZEN-CXX03-HEADERS-FIXME
17*b9a2658aSNikolas Klauser 
180b8c8bc8SPiotr Fusik #include <sstream>
190b8c8bc8SPiotr Fusik #include <cassert>
200b8c8bc8SPiotr Fusik 
210b8c8bc8SPiotr Fusik #include "test_macros.h"
224dee6411SMark de Wever #include "operator_hijacker.h"
230b8c8bc8SPiotr Fusik 
240b8c8bc8SPiotr Fusik int main(int, char**)
250b8c8bc8SPiotr Fusik {
260b8c8bc8SPiotr Fusik     {
270b8c8bc8SPiotr Fusik         std::stringstream ss0(" 123 456 ");
280b8c8bc8SPiotr Fusik         std::stringstream ss(std::move(ss0));
294dee6411SMark de Wever         assert(ss.rdbuf() != nullptr);
304dee6411SMark de Wever         assert(ss.good());
314dee6411SMark de Wever         assert(ss.str() == " 123 456 ");
324dee6411SMark de Wever         int i = 0;
334dee6411SMark de Wever         ss >> i;
344dee6411SMark de Wever         assert(i == 123);
354dee6411SMark de Wever         ss >> i;
364dee6411SMark de Wever         assert(i == 456);
374dee6411SMark de Wever         ss << i << ' ' << 123;
384dee6411SMark de Wever         assert(ss.str() == "456 1236 ");
394dee6411SMark de Wever     }
404dee6411SMark de Wever     {
414dee6411SMark de Wever       std::basic_stringstream<char, std::char_traits<char>, operator_hijacker_allocator<char> > ss0(" 123 456 ");
424dee6411SMark de Wever       std::basic_stringstream<char, std::char_traits<char>, operator_hijacker_allocator<char> > ss(std::move(ss0));
434dee6411SMark de Wever       assert(ss.rdbuf() != nullptr);
440b8c8bc8SPiotr Fusik       assert(ss.good());
450b8c8bc8SPiotr Fusik       assert(ss.str() == " 123 456 ");
460b8c8bc8SPiotr Fusik       int i = 0;
470b8c8bc8SPiotr Fusik       ss >> i;
480b8c8bc8SPiotr Fusik       assert(i == 123);
490b8c8bc8SPiotr Fusik       ss >> i;
500b8c8bc8SPiotr Fusik       assert(i == 456);
510b8c8bc8SPiotr Fusik       ss << i << ' ' << 123;
520b8c8bc8SPiotr Fusik       assert(ss.str() == "456 1236 ");
530b8c8bc8SPiotr Fusik     }
540b8c8bc8SPiotr Fusik #ifndef TEST_HAS_NO_WIDE_CHARACTERS
550b8c8bc8SPiotr Fusik     {
560b8c8bc8SPiotr Fusik         std::wstringstream ss0(L" 123 456 ");
570b8c8bc8SPiotr Fusik         std::wstringstream ss(std::move(ss0));
584dee6411SMark de Wever         assert(ss.rdbuf() != nullptr);
594dee6411SMark de Wever         assert(ss.good());
604dee6411SMark de Wever         assert(ss.str() == L" 123 456 ");
614dee6411SMark de Wever         int i = 0;
624dee6411SMark de Wever         ss >> i;
634dee6411SMark de Wever         assert(i == 123);
644dee6411SMark de Wever         ss >> i;
654dee6411SMark de Wever         assert(i == 456);
664dee6411SMark de Wever         ss << i << ' ' << 123;
674dee6411SMark de Wever         assert(ss.str() == L"456 1236 ");
684dee6411SMark de Wever     }
694dee6411SMark de Wever     {
704dee6411SMark de Wever       std::basic_stringstream<wchar_t, std::char_traits<wchar_t>, operator_hijacker_allocator<wchar_t> > ss0(
714dee6411SMark de Wever           L" 123 456 ");
724dee6411SMark de Wever       std::basic_stringstream<wchar_t, std::char_traits<wchar_t>, operator_hijacker_allocator<wchar_t> > ss(
734dee6411SMark de Wever           std::move(ss0));
744dee6411SMark de Wever       assert(ss.rdbuf() != nullptr);
750b8c8bc8SPiotr Fusik       assert(ss.good());
760b8c8bc8SPiotr Fusik       assert(ss.str() == L" 123 456 ");
770b8c8bc8SPiotr Fusik       int i = 0;
780b8c8bc8SPiotr Fusik       ss >> i;
790b8c8bc8SPiotr Fusik       assert(i == 123);
800b8c8bc8SPiotr Fusik       ss >> i;
810b8c8bc8SPiotr Fusik       assert(i == 456);
820b8c8bc8SPiotr Fusik       ss << i << ' ' << 123;
830b8c8bc8SPiotr Fusik       assert(ss.str() == L"456 1236 ");
840b8c8bc8SPiotr Fusik     }
850b8c8bc8SPiotr Fusik #endif
860b8c8bc8SPiotr Fusik 
870b8c8bc8SPiotr Fusik   return 0;
880b8c8bc8SPiotr Fusik }
89