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