1//===----------------------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9// <sstream>
10
11// template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> >
12// class basic_ostringstream
13
14// explicit basic_ostringstream(const basic_string<charT,traits,allocator>& str,
15// ios_base::openmode which = ios_base::in);
16
17// XFAIL: FROZEN-CXX03-HEADERS-FIXME
18
19#include <sstream>
20#include <cassert>
21
22#include "test_macros.h"
23#include "operator_hijacker.h"
24
25int main(int, char**)
26{
27 {
28 std::ostringstream ss(" 123 456");
29 assert(ss.rdbuf() != nullptr);
30 assert(ss.good());
31 assert(ss.str() == " 123 456");
32 int i = 234;
33 ss << i << ' ' << 567;
34 assert(ss.str() == "234 5676");
35 }
36 {
37 std::basic_ostringstream<char, std::char_traits<char>, operator_hijacker_allocator<char> > ss(" 123 456");
38 assert(ss.rdbuf() != nullptr);
39 assert(ss.good());
40 assert(ss.str() == " 123 456");
41 int i = 234;
42 ss << i << ' ' << 567;
43 assert(ss.str() == "234 5676");
44 }
45 {
46 std::ostringstream ss(" 123 456", std::ios_base::in);
47 assert(ss.rdbuf() != nullptr);
48 assert(ss.good());
49 assert(ss.str() == " 123 456");
50 int i = 234;
51 ss << i << ' ' << 567;
52 assert(ss.str() == "234 5676");
53 }
54 {
55 std::basic_ostringstream<char, std::char_traits<char>, operator_hijacker_allocator<char> > ss(
56 " 123 456", std::ios_base::in);
57 assert(ss.rdbuf() != nullptr);
58 assert(ss.good());
59 assert(ss.str() == " 123 456");
60 int i = 234;
61 ss << i << ' ' << 567;
62 assert(ss.str() == "234 5676");
63 }
64#ifndef TEST_HAS_NO_WIDE_CHARACTERS
65 {
66 std::wostringstream ss(L" 123 456");
67 assert(ss.rdbuf() != nullptr);
68 assert(ss.good());
69 assert(ss.str() == L" 123 456");
70 int i = 234;
71 ss << i << ' ' << 567;
72 assert(ss.str() == L"234 5676");
73 }
74 {
75 std::basic_ostringstream<wchar_t, std::char_traits<wchar_t>, operator_hijacker_allocator<wchar_t> > ss(
76 L" 123 456");
77 assert(ss.rdbuf() != nullptr);
78 assert(ss.good());
79 assert(ss.str() == L" 123 456");
80 int i = 234;
81 ss << i << ' ' << 567;
82 assert(ss.str() == L"234 5676");
83 }
84 {
85 std::wostringstream ss(L" 123 456", std::ios_base::in);
86 assert(ss.rdbuf() != nullptr);
87 assert(ss.good());
88 assert(ss.str() == L" 123 456");
89 int i = 234;
90 ss << i << ' ' << 567;
91 assert(ss.str() == L"234 5676");
92 }
93 {
94 std::basic_ostringstream<wchar_t, std::char_traits<wchar_t>, operator_hijacker_allocator<wchar_t> > ss(
95 L" 123 456", std::ios_base::in);
96 assert(ss.rdbuf() != nullptr);
97 assert(ss.good());
98 assert(ss.str() == L" 123 456");
99 int i = 234;
100 ss << i << ' ' << 567;
101 assert(ss.str() == L"234 5676");
102 }
103#endif
104
105 return 0;
106}
107

source code of libcxx/test/std/input.output/string.streams/ostringstream/ostringstream.cons/string.pass.cpp