narrow_many.pass.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
159d709d503bab6e2b61931737e662dd293b40578ccornelius//===----------------------------------------------------------------------===// 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 3fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius// The LLVM Compiler Infrastructure 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// This file is dual licensed under the MIT and the University of Illinois Open 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Source Licenses. See LICENSE.TXT for details. 750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//===----------------------------------------------------------------------===// 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// <locale> 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// template <> class ctype<char>; 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// const char* narrow(const char* low, const char*, char dfault, char* to) const; 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include <locale> 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <string> 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <vector> 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <cassert> 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoint main() 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru std::locale l = std::locale::classic(); 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru typedef std::ctype<char> F; 2650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const F& f = std::use_facet<F>(l); 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru std::string in(" A\x07.a1"); 2850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho std::vector<char> v(in.size()); 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assert(f.narrow(&in[0], in.data() + in.size(), '*', v.data()) == in.data() + in.size()); 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assert(v[0] == ' '); 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assert(v[1] == 'A'); 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assert(v[2] == '\x07'); 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assert(v[3] == '.'); 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assert(v[4] == 'a'); 3654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius assert(v[5] == '1'); 3759d709d503bab6e2b61931737e662dd293b40578ccornelius } 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru