underflow.pass.cpp revision bc8d3f97eb5c958007f2713238472e0c1c8fe02c
15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//===----------------------------------------------------------------------===// 2926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)// 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ��������������������The LLVM Compiler Infrastructure 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// This file is distributed under the University of Illinois Open Source 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// License. See LICENSE.TXT for details. 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//===----------------------------------------------------------------------===// 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// <fstream> 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// int_type underflow(); 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// This test is not entirely portable 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <fstream> 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <cassert> 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)template <class CharT> 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)struct test_buf 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : public std::basic_filebuf<CharT> 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) typedef std::basic_filebuf<CharT> base; 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) typedef typename base::char_type char_type; 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) typedef typename base::int_type int_type; 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) char_type* eback() const {return base::eback();} 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) char_type* gptr() const {return base::gptr();} 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) char_type* egptr() const {return base::egptr();} 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void gbump(int n) {base::gbump(n);} 31d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 32d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) virtual int_type underflow() {return base::underflow();} 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 34c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 3593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)int main() 36d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){ 37c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) { 38f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) test_buf<char> f; 3993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) assert(f.open("underflow.dat", std::ios_base::in) != 0); 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) assert(f.is_open()); 41c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) assert(f.eback() == 0); 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) assert(f.gptr() == 0); 43d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) assert(f.egptr() == 0); 44d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) assert(f.underflow() == '1'); 45d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) assert(f.eback() != 0); 4683750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch assert(f.eback() == f.gptr()); 47323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) assert(*f.gptr() == '1'); 48323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) assert(f.egptr() - f.eback() == 9); 49323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) } 50323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) { 51323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) test_buf<char> f; 5293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) assert(f.open("underflow.dat", std::ios_base::in) != 0); 5393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) assert(f.pubsetbuf(0, 0)); 5493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) assert(f.is_open()); 5593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) assert(f.eback() == 0); 5693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) assert(f.gptr() == 0); 5793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) assert(f.egptr() == 0); 5893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) assert(f.underflow() == '1'); 5993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) assert(f.eback() != 0); 6093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) assert(f.eback() == f.gptr()); 6153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) assert(*f.gptr() == '1'); 62c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) assert(f.egptr() - f.eback() == 8); 637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci f.gbump(8); 64d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) assert(f.sgetc() == '9'); 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) assert(f.eback()[0] == '5'); 66e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) assert(f.eback()[1] == '6'); 67e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) assert(f.eback()[2] == '7'); 68e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) assert(f.eback()[3] == '8'); 69e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) assert(f.gptr() - f.eback() == 4); 70e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) assert(*f.gptr() == '9'); 71e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) assert(f.egptr() - f.gptr() == 1); 72e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) } 73e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) { 74c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) test_buf<wchar_t> f; 75e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) assert(f.open("underflow.dat", std::ios_base::in) != 0); 76c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) assert(f.is_open()); 77d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) assert(f.eback() == 0); 78c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) assert(f.gptr() == 0); 79e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) assert(f.egptr() == 0); 80e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) assert(f.underflow() == L'1'); 81d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) assert(f.eback() != 0); 8253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) assert(f.eback() == f.gptr()); 8351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) assert(*f.gptr() == L'1'); 8451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) assert(f.egptr() - f.eback() == 9); 85e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) } 8693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 8793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) test_buf<wchar_t> f; 8883750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch assert(f.pubsetbuf(0, 0)); 8909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) assert(f.open("underflow.dat", std::ios_base::in) != 0); 9009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) assert(f.is_open()); 9193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) assert(f.eback() == 0); 9293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) assert(f.gptr() == 0); 9310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch assert(f.egptr() == 0); 9410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch assert(f.underflow() == L'1'); 9510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch assert(f.eback() != 0); 9610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch assert(f.eback() == f.gptr()); 9710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch assert(*f.gptr() == L'1'); 9810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch assert(f.egptr() - f.eback() == 8); 9910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch f.gbump(8); 10093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) assert(f.sgetc() == L'9'); 10110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch assert(f.eback()[0] == L'5'); 10210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch assert(f.eback()[1] == L'6'); 10310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch assert(f.eback()[2] == L'7'); 10410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch assert(f.eback()[3] == L'8'); 10509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) assert(f.gptr() - f.eback() == 4); 106d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) assert(*f.gptr() == L'9'); 107d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) assert(f.egptr() - f.gptr() == 1); 10810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch } 109d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) { 11009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) test_buf<wchar_t> f; 11109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) f.pubimbue(std::locale("en_US.UTF-8")); 11210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch assert(f.open("underflow_utf8.dat", std::ios_base::in) != 0); 11310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch assert(f.is_open()); 11409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) assert(f.sbumpc() == 0x4E51); 11583750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch assert(f.sbumpc() == 0x4E52); 1167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci assert(f.sbumpc() == 0x4E53); 1177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci assert(f.sbumpc() == -1); 1187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 119d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)} 120d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)