put_bool.pass.cpp revision bc8d3f97eb5c958007f2713238472e0c1c8fe02c
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com//===----------------------------------------------------------------------===//
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com//
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// ��������������������The LLVM Compiler Infrastructure
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com//
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// This file is distributed under the University of Illinois Open Source
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// License. See LICENSE.TXT for details.
7971d0c8049c6bfc7a58f0b41f8f59f9ec9ca077bbsalomon@google.com//
857f7abc8659f17e58fc2d1410117033ad524f9d3epoger@google.com//===----------------------------------------------------------------------===//
957f7abc8659f17e58fc2d1410117033ad524f9d3epoger@google.com
1057f7abc8659f17e58fc2d1410117033ad524f9d3epoger@google.com// <locale>
1157f7abc8659f17e58fc2d1410117033ad524f9d3epoger@google.com
1257f7abc8659f17e58fc2d1410117033ad524f9d3epoger@google.com// class num_put<charT, OutputIterator>
1357f7abc8659f17e58fc2d1410117033ad524f9d3epoger@google.com
1457f7abc8659f17e58fc2d1410117033ad524f9d3epoger@google.com// iter_type put(iter_type s, ios_base& iob, char_type fill, bool v) const;
1557f7abc8659f17e58fc2d1410117033ad524f9d3epoger@google.com
16b29c883fb46ac6099440d82ac57b86d25386daedbungeman@google.com#include <locale>
177bc13a62609149f0b535c2f3ff7210eb834d8b36epoger@google.com#include <ios>
18ee8a8e3931c1d3f39755ee8beaf0c7cb1ba91888epoger@google.com#include <cassert>
19b9b9a18ab459c2616ac4a52c9f8cc0637d284229reed@android.com#include <streambuf>
208a85d0c4938173476d037d7af0ee3b9436a1234ereed@google.com#include "iterators.h"
214370aedf7f55af74e9ebb4ad1c2e010c08236dfajunov@google.com
22971d0c8049c6bfc7a58f0b41f8f59f9ec9ca077bbsalomon@google.comtypedef std::num_put<char, output_iterator<char*> > F;
23de96163a80167636d95837f9ee6a2e98baf9d350epoger@google.com
245af9b2032b552516c9223d9fb22185b022b13c62scroggo@google.comclass my_facet
258015dd83ae37147bb630d4751030868051ad0caereed@android.com    : public F
268015dd83ae37147bb630d4751030868051ad0caereed@android.com{
278015dd83ae37147bb630d4751030868051ad0caereed@android.compublic:
28e8ebeb1f8fde6525bbab988c6090a5d3ab19855bepoger@google.com    explicit my_facet(std::size_t refs = 0)
299875dd14af6d768da8d1a4be58b98fc91ceca0ddtomhudson@google.com        : F(refs) {}
30977b9c8af3ef1b9a2fa2a0037cf3734cf2ba13d9robertphillips@google.com};
3172c9672ce274a3b6cb40800d66374edf25b157a3scroggo@google.com
322a48c3adb7cf4fc754f99a41352210b4a99edf04bsalomon@google.comclass my_numpunct
333cb834bd27a16cc60ff30adae96659558c2dc91fjunov@chromium.org    : public std::numpunct<char>
3472c9672ce274a3b6cb40800d66374edf25b157a3scroggo@google.com{
350770044da6d61dcbc8d9673fed8dd92460faa314reed@google.compublic:
36ee8a8e3931c1d3f39755ee8beaf0c7cb1ba91888epoger@google.com    my_numpunct() : std::numpunct<char>() {}
37ee8a8e3931c1d3f39755ee8beaf0c7cb1ba91888epoger@google.com
38cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.comprotected:
39cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com    virtual string_type do_truename() const {return "yes";}
40cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com    virtual string_type do_falsename() const {return "no";}
41cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com};
42cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com
43cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.comint main()
44cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com{
45cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com    const my_facet f(1);
46cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com    {
47cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com        std::ios ios(0);
48cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com        {
4910afbefa5b60b0f7e8d2b02f4c996de88aa26830mike@reedtribe.org            bool v = false;
5010afbefa5b60b0f7e8d2b02f4c996de88aa26830mike@reedtribe.org            char str[50];
518923c6cfd580ac9accb11b909fa2a033d69553aareed@google.com            output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
528923c6cfd580ac9accb11b909fa2a033d69553aareed@google.com            std::string ex(str, iter.base());
530770044da6d61dcbc8d9673fed8dd92460faa314reed@google.com            assert(ex == "0");
549875dd14af6d768da8d1a4be58b98fc91ceca0ddtomhudson@google.com        }
559875dd14af6d768da8d1a4be58b98fc91ceca0ddtomhudson@google.com        {
560770044da6d61dcbc8d9673fed8dd92460faa314reed@google.com            bool v = true;
5700dae86f5872b60927b28a32b375bc01cd7c61c9reed@android.com            char str[50];
58e3cc2eb88fef9b2123c6ea2ed813ce53b6385926epoger@google.com            output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
59e3cc2eb88fef9b2123c6ea2ed813ce53b6385926epoger@google.com            std::string ex(str, iter.base());
60e3cc2eb88fef9b2123c6ea2ed813ce53b6385926epoger@google.com            assert(ex == "1");
61b29c883fb46ac6099440d82ac57b86d25386daedbungeman@google.com        }
62b29c883fb46ac6099440d82ac57b86d25386daedbungeman@google.com    }
63b29c883fb46ac6099440d82ac57b86d25386daedbungeman@google.com    {
64b29c883fb46ac6099440d82ac57b86d25386daedbungeman@google.com        std::ios ios(0);
6546cce91f4859b9c229938d4d649870c0a43b1806reed@google.com        boolalpha(ios);
6646cce91f4859b9c229938d4d649870c0a43b1806reed@google.com        {
670a09eef79053f93a9b2311c6a29275abf39f189ebsalomon@google.com            bool v = false;
6846cce91f4859b9c229938d4d649870c0a43b1806reed@google.com            char str[50];
690a09eef79053f93a9b2311c6a29275abf39f189ebsalomon@google.com            output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
7046cce91f4859b9c229938d4d649870c0a43b1806reed@google.com            std::string ex(str, iter.base());
7146cce91f4859b9c229938d4d649870c0a43b1806reed@google.com            assert(ex == "false");
72c7cf2b351f85712a8ed0e1c495d1045dbaa7b785epoger@google.com        }
73c7cf2b351f85712a8ed0e1c495d1045dbaa7b785epoger@google.com        {
74c7cf2b351f85712a8ed0e1c495d1045dbaa7b785epoger@google.com            bool v = true;
75c7cf2b351f85712a8ed0e1c495d1045dbaa7b785epoger@google.com            char str[50];
76c7cf2b351f85712a8ed0e1c495d1045dbaa7b785epoger@google.com            output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
77c7cf2b351f85712a8ed0e1c495d1045dbaa7b785epoger@google.com            std::string ex(str, iter.base());
78c7cf2b351f85712a8ed0e1c495d1045dbaa7b785epoger@google.com            assert(ex == "true");
79c7cf2b351f85712a8ed0e1c495d1045dbaa7b785epoger@google.com        }
80ee8a8e3931c1d3f39755ee8beaf0c7cb1ba91888epoger@google.com    }
81ee8a8e3931c1d3f39755ee8beaf0c7cb1ba91888epoger@google.com    {
82ee8a8e3931c1d3f39755ee8beaf0c7cb1ba91888epoger@google.com        std::ios ios(0);
83ee8a8e3931c1d3f39755ee8beaf0c7cb1ba91888epoger@google.com        boolalpha(ios);
84ee8a8e3931c1d3f39755ee8beaf0c7cb1ba91888epoger@google.com        ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
85ee8a8e3931c1d3f39755ee8beaf0c7cb1ba91888epoger@google.com        {
86ee8a8e3931c1d3f39755ee8beaf0c7cb1ba91888epoger@google.com            bool v = false;
87ee8a8e3931c1d3f39755ee8beaf0c7cb1ba91888epoger@google.com            char str[50];
88ee8a8e3931c1d3f39755ee8beaf0c7cb1ba91888epoger@google.com            output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
89ee8a8e3931c1d3f39755ee8beaf0c7cb1ba91888epoger@google.com            std::string ex(str, iter.base());
9000dae86f5872b60927b28a32b375bc01cd7c61c9reed@android.com            assert(ex == "no");
9100dae86f5872b60927b28a32b375bc01cd7c61c9reed@android.com        }
92ce7ffaccc4a0cd0e0285cdba25bddb627f8e92c4reed@google.com        {
93ce7ffaccc4a0cd0e0285cdba25bddb627f8e92c4reed@google.com            bool v = true;
94ce7ffaccc4a0cd0e0285cdba25bddb627f8e92c4reed@google.com            char str[50];
95ce7ffaccc4a0cd0e0285cdba25bddb627f8e92c4reed@google.com            output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
96ce7ffaccc4a0cd0e0285cdba25bddb627f8e92c4reed@google.com            std::string ex(str, iter.base());
97ce7ffaccc4a0cd0e0285cdba25bddb627f8e92c4reed@google.com            assert(ex == "yes");
98ce7ffaccc4a0cd0e0285cdba25bddb627f8e92c4reed@google.com        }
99ce7ffaccc4a0cd0e0285cdba25bddb627f8e92c4reed@google.com    }
100ce7ffaccc4a0cd0e0285cdba25bddb627f8e92c4reed@google.com}
101ce7ffaccc4a0cd0e0285cdba25bddb627f8e92c4reed@google.com