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