setstate.pass.cpp revision bc8d3f97eb5c958007f2713238472e0c1c8fe02c
123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)//===----------------------------------------------------------------------===//
223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)//
323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// ��������������������The LLVM Compiler Infrastructure
423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)//
523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// This file is distributed under the University of Illinois Open Source
623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// License. See LICENSE.TXT for details.
723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)//
823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)//===----------------------------------------------------------------------===//
923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// <ios>
1123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// template <class charT, class traits> class basic_ios
1323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// void setstate(iostate state);
1523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include <ios>
1723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include <streambuf>
1823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include <cassert>
1923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
2023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)struct testbuf : public std::streambuf {};
2123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
2223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)int main()
2323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles){
2423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    {
2523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        std::ios ios(0);
2623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        ios.setstate(std::ios::goodbit);
2723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        assert(ios.rdstate() == std::ios::badbit);
2823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        try
2923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        {
3023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)            ios.exceptions(std::ios::badbit);
3123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        }
3223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        catch (...)
3323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        {
3423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        }
3523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        try
3623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        {
3723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)            ios.setstate(std::ios::goodbit);
3823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)            assert(false);
3923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        }
4023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        catch (std::ios::failure&)
4123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        {
4223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)            assert(ios.rdstate() == std::ios::badbit);
4323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        }
4423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        try
4523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        {
4623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)            ios.setstate(std::ios::eofbit);
4723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)            assert(false);
4823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        }
4923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        catch (std::ios::failure&)
5023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        {
5123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)            assert(ios.rdstate() == (std::ios::eofbit | std::ios::badbit));
5223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        }
5323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    }
5423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    {
5523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        testbuf sb;
5623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        std::ios ios(&sb);
5723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        ios.setstate(std::ios::goodbit);
58        assert(ios.rdstate() == std::ios::goodbit);
59        ios.setstate(std::ios::eofbit);
60        assert(ios.rdstate() == std::ios::eofbit);
61        ios.setstate(std::ios::failbit);
62        assert(ios.rdstate() == (std::ios::eofbit | std::ios::failbit));
63    }
64}
65