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_stringbuf 13 14 // pos_type seekoff(off_type off, ios_base::seekdir way, 15 // ios_base::openmode which = ios_base::in | ios_base::out); 16 17 #include <sstream> 18 #include <cassert> 19 20 int main(int, char**) 21 { 22 { 23 std::stringbuf sb(std::ios_base::in); 24 assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::out) == -1); 25 assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::out) == -1); 26 assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::out) == -1); 27 assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::in | std::ios_base::out) == -1); 28 assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::in | std::ios_base::out) == -1); 29 assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::in | std::ios_base::out) == -1); 30 assert(sb.pubseekoff(0, std::ios_base::beg, std::ios_base::in) == 0); 31 assert(sb.pubseekoff(0, std::ios_base::cur, std::ios_base::in) == 0); 32 assert(sb.pubseekoff(0, std::ios_base::end, std::ios_base::in) == 0); 33 } 34 { 35 std::stringbuf sb(std::ios_base::out); 36 assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::in) == -1); 37 assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::in) == -1); 38 assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::in) == -1); 39 assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::in | std::ios_base::out) == -1); 40 assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::in | std::ios_base::out) == -1); 41 assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::in | std::ios_base::out) == -1); 42 assert(sb.pubseekoff(0, std::ios_base::beg, std::ios_base::out) == 0); 43 assert(sb.pubseekoff(0, std::ios_base::cur, std::ios_base::out) == 0); 44 assert(sb.pubseekoff(0, std::ios_base::end, std::ios_base::out) == 0); 45 } 46 { 47 std::stringbuf sb("0123456789", std::ios_base::in); 48 assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::out) == -1); 49 assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::out) == -1); 50 assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::out) == -1); 51 assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::in | std::ios_base::out) == -1); 52 assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::in | std::ios_base::out) == -1); 53 assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::in | std::ios_base::out) == -1); 54 assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::in) == 3); 55 assert(sb.sgetc() == '3'); 56 assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::in) == 6); 57 assert(sb.sgetc() == '6'); 58 assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::in) == 7); 59 assert(sb.sgetc() == '7'); 60 } 61 { 62 std::stringbuf sb("0123456789", std::ios_base::out); 63 assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::in) == -1); 64 assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::in) == -1); 65 assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::in) == -1); 66 assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::out | std::ios_base::in) == -1); 67 assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::out | std::ios_base::in) == -1); 68 assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::out | std::ios_base::in) == -1); 69 assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::out) == 3); 70 assert(sb.sputc('a') == 'a'); 71 assert(sb.str() == "012a456789"); 72 assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::out) == 7); 73 assert(sb.sputc('b') == 'b'); 74 assert(sb.str() == "012a456b89"); 75 assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::out) == 7); 76 assert(sb.sputc('c') == 'c'); 77 assert(sb.str() == "012a456c89"); 78 } 79 { 80 std::stringbuf sb("0123456789"); 81 assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::in) == 3); 82 assert(sb.sgetc() == '3'); 83 assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::in) == 6); 84 assert(sb.sgetc() == '6'); 85 assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::in) == 7); 86 assert(sb.sgetc() == '7'); 87 assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::out | std::ios_base::in) == 3); 88 assert(sb.sgetc() == '3'); 89 assert(sb.sputc('a') == 'a'); 90 assert(sb.str() == "012a456789"); 91 assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::out | std::ios_base::in) == -1); 92 assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::out | std::ios_base::in) == 7); 93 assert(sb.sgetc() == '7'); 94 assert(sb.sputc('c') == 'c'); 95 assert(sb.str() == "012a456c89"); 96 assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::out) == 3); 97 assert(sb.sputc('3') == '3'); 98 assert(sb.str() == "0123456c89"); 99 assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::out) == 7); 100 assert(sb.sputc('7') == '7'); 101 assert(sb.str() == "0123456789"); 102 assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::out) == 7); 103 assert(sb.sputc('c') == 'c'); 104 assert(sb.str() == "0123456c89"); 105 } 106 { 107 std::wstringbuf sb(L"0123456789", std::ios_base::in); 108 assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::out) == -1); 109 assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::out) == -1); 110 assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::out) == -1); 111 assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::in | std::ios_base::out) == -1); 112 assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::in | std::ios_base::out) == -1); 113 assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::in | std::ios_base::out) == -1); 114 assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::in) == 3); 115 assert(sb.sgetc() == L'3'); 116 assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::in) == 6); 117 assert(sb.sgetc() == L'6'); 118 assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::in) == 7); 119 assert(sb.sgetc() == L'7'); 120 } 121 { 122 std::wstringbuf sb(L"0123456789", std::ios_base::out); 123 assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::in) == -1); 124 assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::in) == -1); 125 assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::in) == -1); 126 assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::out | std::ios_base::in) == -1); 127 assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::out | std::ios_base::in) == -1); 128 assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::out | std::ios_base::in) == -1); 129 assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::out) == 3); 130 assert(sb.sputc(L'a') == L'a'); 131 assert(sb.str() == L"012a456789"); 132 assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::out) == 7); 133 assert(sb.sputc(L'b') == L'b'); 134 assert(sb.str() == L"012a456b89"); 135 assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::out) == 7); 136 assert(sb.sputc(L'c') == L'c'); 137 assert(sb.str() == L"012a456c89"); 138 } 139 { 140 std::wstringbuf sb(L"0123456789"); 141 assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::in) == 3); 142 assert(sb.sgetc() == L'3'); 143 assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::in) == 6); 144 assert(sb.sgetc() == L'6'); 145 assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::in) == 7); 146 assert(sb.sgetc() == L'7'); 147 assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::out | std::ios_base::in) == 3); 148 assert(sb.sgetc() == L'3'); 149 assert(sb.sputc(L'a') == L'a'); 150 assert(sb.str() == L"012a456789"); 151 assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::out | std::ios_base::in) == -1); 152 assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::out | std::ios_base::in) == 7); 153 assert(sb.sgetc() == L'7'); 154 assert(sb.sputc(L'c') == L'c'); 155 assert(sb.str() == L"012a456c89"); 156 assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::out) == 3); 157 assert(sb.sputc(L'3') == L'3'); 158 assert(sb.str() == L"0123456c89"); 159 assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::out) == 7); 160 assert(sb.sputc(L'7') == L'7'); 161 assert(sb.str() == L"0123456789"); 162 assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::out) == 7); 163 assert(sb.sputc(L'c') == L'c'); 164 assert(sb.str() == L"0123456c89"); 165 } 166 167 return 0; 168 } 169