brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.2 KiB · 2bd5585 Raw
173 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8 9// <sstream>10 11// template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> >12// class basic_stringbuf13 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 22int 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#ifndef TEST_HAS_NO_WIDE_CHARACTERS109    {110        std::wstringbuf sb(L"0123456789", std::ios_base::in);111        assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::out) == -1);112        assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::out) == -1);113        assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::out) == -1);114        assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::in | std::ios_base::out) == -1);115        assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::in | std::ios_base::out) == -1);116        assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::in | std::ios_base::out) == -1);117        assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::in) == 3);118        assert(sb.sgetc() == L'3');119        assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::in) == 6);120        assert(sb.sgetc() == L'6');121        assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::in) == 7);122        assert(sb.sgetc() == L'7');123    }124    {125        std::wstringbuf sb(L"0123456789", std::ios_base::out);126        assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::in) == -1);127        assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::in) == -1);128        assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::in) == -1);129        assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::out | std::ios_base::in) == -1);130        assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::out | std::ios_base::in) == -1);131        assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::out | std::ios_base::in) == -1);132        assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::out) == 3);133        assert(sb.sputc(L'a') == L'a');134        assert(sb.str() == L"012a456789");135        assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::out) == 7);136        assert(sb.sputc(L'b') == L'b');137        assert(sb.str() == L"012a456b89");138        assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::out) == 7);139        assert(sb.sputc(L'c') == L'c');140        assert(sb.str() == L"012a456c89");141    }142    {143        std::wstringbuf sb(L"0123456789");144        assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::in) == 3);145        assert(sb.sgetc() == L'3');146        assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::in) == 6);147        assert(sb.sgetc() == L'6');148        assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::in) == 7);149        assert(sb.sgetc() == L'7');150        assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::out | std::ios_base::in) == 3);151        assert(sb.sgetc() == L'3');152        assert(sb.sputc(L'a') == L'a');153        assert(sb.str() == L"012a456789");154        assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::out | std::ios_base::in) == -1);155        assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::out | std::ios_base::in) == 7);156        assert(sb.sgetc() == L'7');157        assert(sb.sputc(L'c') == L'c');158        assert(sb.str() == L"012a456c89");159        assert(sb.pubseekoff(3, std::ios_base::beg, std::ios_base::out) == 3);160        assert(sb.sputc(L'3') == L'3');161        assert(sb.str() == L"0123456c89");162        assert(sb.pubseekoff(3, std::ios_base::cur, std::ios_base::out) == 7);163        assert(sb.sputc(L'7') == L'7');164        assert(sb.str() == L"0123456789");165        assert(sb.pubseekoff(-3, std::ios_base::end, std::ios_base::out) == 7);166        assert(sb.sputc(L'c') == L'c');167        assert(sb.str() == L"0123456c89");168    }169#endif // TEST_HAS_NO_WIDE_CHARACTERS170 171  return 0;172}173