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