15a83710eSEric Fiselier //===----------------------------------------------------------------------===//
25a83710eSEric Fiselier //
357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65a83710eSEric Fiselier //
75a83710eSEric Fiselier //===----------------------------------------------------------------------===//
85a83710eSEric Fiselier
95a83710eSEric Fiselier // <string>
105a83710eSEric Fiselier
115a83710eSEric Fiselier // template<class charT, class traits, class Allocator>
125a83710eSEric Fiselier // basic_istream<charT,traits>&
135a83710eSEric Fiselier // operator>>(basic_istream<charT,traits>& is,
145a83710eSEric Fiselier // basic_string<charT,traits,Allocator>& str);
155a83710eSEric Fiselier
165a83710eSEric Fiselier #include <string>
175a83710eSEric Fiselier #include <sstream>
185a83710eSEric Fiselier #include <cassert>
195a83710eSEric Fiselier
205a83710eSEric Fiselier #include "min_allocator.h"
21396145d0SLouis Dionne #include "test_macros.h"
225a83710eSEric Fiselier
main(int,char **)232df59c50SJF Bastien int main(int, char**)
245a83710eSEric Fiselier {
255a83710eSEric Fiselier {
265a83710eSEric Fiselier std::istringstream in("a bc defghij");
275a83710eSEric Fiselier std::string s("initial text");
285a83710eSEric Fiselier in >> s;
295a83710eSEric Fiselier assert(in.good());
305a83710eSEric Fiselier assert(s == "a");
315a83710eSEric Fiselier assert(in.peek() == ' ');
325a83710eSEric Fiselier in >> s;
335a83710eSEric Fiselier assert(in.good());
345a83710eSEric Fiselier assert(s == "bc");
355a83710eSEric Fiselier assert(in.peek() == ' ');
365a83710eSEric Fiselier in.width(3);
375a83710eSEric Fiselier in >> s;
385a83710eSEric Fiselier assert(in.good());
395a83710eSEric Fiselier assert(s == "def");
405a83710eSEric Fiselier assert(in.peek() == 'g');
415a83710eSEric Fiselier in >> s;
425a83710eSEric Fiselier assert(in.eof());
435a83710eSEric Fiselier assert(s == "ghij");
445a83710eSEric Fiselier in >> s;
455a83710eSEric Fiselier assert(in.fail());
465a83710eSEric Fiselier }
47*f4c1258dSLouis Dionne #ifndef TEST_HAS_NO_WIDE_CHARACTERS
485a83710eSEric Fiselier {
495a83710eSEric Fiselier std::wistringstream in(L"a bc defghij");
505a83710eSEric Fiselier std::wstring s(L"initial text");
515a83710eSEric Fiselier in >> s;
525a83710eSEric Fiselier assert(in.good());
535a83710eSEric Fiselier assert(s == L"a");
545a83710eSEric Fiselier assert(in.peek() == L' ');
555a83710eSEric Fiselier in >> s;
565a83710eSEric Fiselier assert(in.good());
575a83710eSEric Fiselier assert(s == L"bc");
585a83710eSEric Fiselier assert(in.peek() == L' ');
595a83710eSEric Fiselier in.width(3);
605a83710eSEric Fiselier in >> s;
615a83710eSEric Fiselier assert(in.good());
625a83710eSEric Fiselier assert(s == L"def");
635a83710eSEric Fiselier assert(in.peek() == L'g');
645a83710eSEric Fiselier in >> s;
655a83710eSEric Fiselier assert(in.eof());
665a83710eSEric Fiselier assert(s == L"ghij");
675a83710eSEric Fiselier in >> s;
685a83710eSEric Fiselier assert(in.fail());
695a83710eSEric Fiselier }
70*f4c1258dSLouis Dionne #endif
71396145d0SLouis Dionne #ifndef TEST_HAS_NO_EXCEPTIONS
72396145d0SLouis Dionne {
73396145d0SLouis Dionne std::stringbuf sb;
74396145d0SLouis Dionne std::istream is(&sb);
75396145d0SLouis Dionne is.exceptions(std::ios::failbit);
76396145d0SLouis Dionne
77396145d0SLouis Dionne bool threw = false;
78396145d0SLouis Dionne try {
79396145d0SLouis Dionne std::string s;
80396145d0SLouis Dionne is >> s;
81396145d0SLouis Dionne } catch (std::ios::failure const&) {
82396145d0SLouis Dionne threw = true;
83396145d0SLouis Dionne }
84396145d0SLouis Dionne
85396145d0SLouis Dionne assert(!is.bad());
86396145d0SLouis Dionne assert(is.fail());
87396145d0SLouis Dionne assert(is.eof());
88396145d0SLouis Dionne assert(threw);
89396145d0SLouis Dionne }
90396145d0SLouis Dionne {
91396145d0SLouis Dionne std::stringbuf sb;
92396145d0SLouis Dionne std::istream is(&sb);
93396145d0SLouis Dionne is.exceptions(std::ios::eofbit);
94396145d0SLouis Dionne
95396145d0SLouis Dionne bool threw = false;
96396145d0SLouis Dionne try {
97396145d0SLouis Dionne std::string s;
98396145d0SLouis Dionne is >> s;
99396145d0SLouis Dionne } catch (std::ios::failure const&) {
100396145d0SLouis Dionne threw = true;
101396145d0SLouis Dionne }
102396145d0SLouis Dionne
103396145d0SLouis Dionne assert(!is.bad());
104396145d0SLouis Dionne assert(is.fail());
105396145d0SLouis Dionne assert(is.eof());
106396145d0SLouis Dionne assert(threw);
107396145d0SLouis Dionne }
108396145d0SLouis Dionne #endif // TEST_HAS_NO_EXCEPTIONS
109f2f2a639SEric Fiselier #if TEST_STD_VER >= 11
1105a83710eSEric Fiselier {
1115a83710eSEric Fiselier typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
1125a83710eSEric Fiselier std::istringstream in("a bc defghij");
1135a83710eSEric Fiselier S s("initial text");
1145a83710eSEric Fiselier in >> s;
1155a83710eSEric Fiselier assert(in.good());
1165a83710eSEric Fiselier assert(s == "a");
1175a83710eSEric Fiselier assert(in.peek() == ' ');
1185a83710eSEric Fiselier in >> s;
1195a83710eSEric Fiselier assert(in.good());
1205a83710eSEric Fiselier assert(s == "bc");
1215a83710eSEric Fiselier assert(in.peek() == ' ');
1225a83710eSEric Fiselier in.width(3);
1235a83710eSEric Fiselier in >> s;
1245a83710eSEric Fiselier assert(in.good());
1255a83710eSEric Fiselier assert(s == "def");
1265a83710eSEric Fiselier assert(in.peek() == 'g');
1275a83710eSEric Fiselier in >> s;
1285a83710eSEric Fiselier assert(in.eof());
1295a83710eSEric Fiselier assert(s == "ghij");
1305a83710eSEric Fiselier in >> s;
1315a83710eSEric Fiselier assert(in.fail());
1325a83710eSEric Fiselier }
133*f4c1258dSLouis Dionne #ifndef TEST_HAS_NO_WIDE_CHARACTERS
1345a83710eSEric Fiselier {
1355a83710eSEric Fiselier typedef std::basic_string<wchar_t, std::char_traits<wchar_t>, min_allocator<wchar_t>> S;
1365a83710eSEric Fiselier std::wistringstream in(L"a bc defghij");
1375a83710eSEric Fiselier S s(L"initial text");
1385a83710eSEric Fiselier in >> s;
1395a83710eSEric Fiselier assert(in.good());
1405a83710eSEric Fiselier assert(s == L"a");
1415a83710eSEric Fiselier assert(in.peek() == L' ');
1425a83710eSEric Fiselier in >> s;
1435a83710eSEric Fiselier assert(in.good());
1445a83710eSEric Fiselier assert(s == L"bc");
1455a83710eSEric Fiselier assert(in.peek() == L' ');
1465a83710eSEric Fiselier in.width(3);
1475a83710eSEric Fiselier in >> s;
1485a83710eSEric Fiselier assert(in.good());
1495a83710eSEric Fiselier assert(s == L"def");
1505a83710eSEric Fiselier assert(in.peek() == L'g');
1515a83710eSEric Fiselier in >> s;
1525a83710eSEric Fiselier assert(in.eof());
1535a83710eSEric Fiselier assert(s == L"ghij");
1545a83710eSEric Fiselier in >> s;
1555a83710eSEric Fiselier assert(in.fail());
1565a83710eSEric Fiselier }
157*f4c1258dSLouis Dionne #endif // TEST_HAS_NO_WIDE_CHARACTERS
158*f4c1258dSLouis Dionne #endif // TEST_STD_VER >= 11
1592df59c50SJF Bastien
1602df59c50SJF Bastien return 0;
1615a83710eSEric Fiselier }
162