111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//===----------------------------------------------------------------------===// 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// The LLVM Compiler Infrastructure 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// This file is dual licensed under the MIT and the University of Illinois Open 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Source Licenses. See LICENSE.TXT for details. 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//===----------------------------------------------------------------------===// 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// REQUIRES: locale.fr_FR.UTF-8 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// <ios> 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// template <class charT, class traits> class basic_ios 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// void move(basic_ios&& rhs); 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <ios> 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <streambuf> 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <cassert> 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include "platform_support.h" // locale name macros 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct testbuf 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : public std::streambuf 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct testios 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : public std::ios 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert testios() {} 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert testios(std::streambuf* p) : std::ios(p) {} 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void move(std::ios& x) {std::ios::move(x);} 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbool f1_called = false; 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbool f2_called = false; 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbool g1_called = false; 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbool g2_called = false; 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbool g3_called = false; 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid f1(std::ios_base::event, std::ios_base&, int) 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert f1_called = true; 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid f2(std::ios_base::event, std::ios_base&, int) 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert f2_called = true; 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid g1(std::ios_base::event ev, std::ios_base&, int index) 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (ev == std::ios_base::imbue_event) 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(index == 7); 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert g1_called = true; 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid g2(std::ios_base::event ev, std::ios_base&, int index) 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (ev == std::ios_base::imbue_event) 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(index == 8); 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert g2_called = true; 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid g3(std::ios_base::event ev, std::ios_base&, int index) 7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (ev == std::ios_base::imbue_event) 7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(index == 9); 7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert g3_called = true; 7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint main() 8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert testios ios1; 8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert testbuf sb2; 8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::ios ios2(&sb2); 8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ios2.flags(std::ios::showpoint | std::ios::uppercase); 8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ios2.precision(2); 8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ios2.width(12); 8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ios2.imbue(std::locale(LOCALE_fr_FR_UTF_8)); 9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ios2.exceptions(std::ios::eofbit); 9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ios2.setstate(std::ios::goodbit); 9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ios2.register_callback(g1, 7); 9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ios2.register_callback(g2, 8); 9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ios2.register_callback(g3, 9); 9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ios2.iword(0) = 4; 9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ios2.iword(1) = 5; 9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ios2.iword(2) = 6; 9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ios2.iword(3) = 7; 9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ios2.iword(4) = 8; 10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ios2.iword(5) = 9; 10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char d1, d2; 10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ios2.pword(0) = &d1; 10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ios2.pword(1) = &d2; 10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ios2.tie((std::ostream*)2); 10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ios2.fill('2'); 10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ios1.move(ios2); 10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(ios1.rdstate() == std::ios::goodbit); 11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(ios1.rdbuf() == 0); 11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(ios1.flags() == (std::ios::showpoint | std::ios::uppercase)); 11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(ios1.precision() == 2); 11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(ios1.width() == 12); 11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(ios1.getloc().name() == LOCALE_fr_FR_UTF_8); 11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(ios1.exceptions() == std::ios::eofbit); 11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f1_called); 11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f2_called); 11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!g1_called); 11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!g2_called); 12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!g3_called); 12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(ios1.iword(0) == 4); 12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(ios1.iword(1) == 5); 12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(ios1.iword(2) == 6); 12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(ios1.iword(3) == 7); 12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(ios1.iword(4) == 8); 12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(ios1.iword(5) == 9); 12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(ios1.pword(0) == &d1); 12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(ios1.pword(1) == &d2); 12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(ios1.tie() == (std::ostream*)2); 13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(ios1.fill() == '2'); 13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ios1.imbue(std::locale("C")); 13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f1_called); 13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f2_called); 13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(g1_called); 13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(g2_called); 13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(g3_called); 13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(ios2.rdbuf() == &sb2); 13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(ios2.tie() == 0); 14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 141