xref: /openbsd-src/gnu/lib/libstdc++/libstdc++/testsuite/27_io/filebuf.cc (revision 03a78d155d6fff5698289342b62759a75b20d130)
1 // 1999-01-17 bkoz test functionality of basic_filebuf for char_type == char
2 
3 // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
4 // Free Software Foundation, Inc.
5 //
6 // This file is part of the GNU ISO C++ Library.  This library is free
7 // software; you can redistribute it and/or modify it under the
8 // terms of the GNU General Public License as published by the
9 // Free Software Foundation; either version 2, or (at your option)
10 // any later version.
11 
12 // This library is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 // GNU General Public License for more details.
16 
17 // You should have received a copy of the GNU General Public License along
18 // with this library; see the file COPYING.  If not, write to the Free
19 // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
20 // USA.
21 
22 // 27.8.1.1 - Template class basic_filebuf
23 // NB: This file is for testing basic_filebuf with NO OTHER INCLUDES.
24 
25 #include <fstream>
26 #include <testsuite_hooks.h>
27 
28 // { dg-do compile }
29 
30 // libstdc++/7216
test01()31 void test01()
32 {
33   // Check for required typedefs
34   typedef std::filebuf test_type;
35   typedef test_type::char_type char_type;
36   typedef test_type::traits_type traits_type;
37   typedef test_type::int_type int_type;
38   typedef test_type::pos_type pos_type;
39   typedef test_type::off_type off_type;
40 }
41 
42 // test05
43 // libstdc++/1886
44 // should be able to instantiate basic_filebuf for non-standard types.
45 namespace test
46 {
47   using namespace std;
48   using __gnu_cxx_test::pod_char;
49   typedef short type_t;
50   template class basic_filebuf<type_t, char_traits<type_t> >;
51   template class basic_filebuf<pod_char, char_traits<pod_char> >;
52 } // test
53 
54 
55 // test07
56 // libstdc++/2020
57 // should be able to use custom char_type
58 class gnu_char_type
59 {
60   unsigned long character;
61 public:
62   // operator ==
63   bool
operator ==(const gnu_char_type & __lhs)64   operator==(const gnu_char_type& __lhs)
65   { return character == __lhs.character; }
66 
67   // operator <
68   bool
operator <(const gnu_char_type & __lhs)69   operator<(const gnu_char_type& __lhs)
70   { return character < __lhs.character; }
71 
72   // default ctor
gnu_char_type()73   gnu_char_type() { }
74 
75   // to_char_type
gnu_char_type(const unsigned long & __l)76   gnu_char_type(const unsigned long& __l) : character(__l) { }
77 
78   // to_int_type
operator unsigned long() const79   operator unsigned long() const { return character; }
80 };
81 
test07()82 void test07()
83 {
84   bool test = true;
85   typedef std::basic_filebuf<gnu_char_type> gnu_filebuf;
86 
87   try
88     { gnu_filebuf obj; }
89   catch(std::exception& obj)
90     {
91       test = false;
92       VERIFY( test );
93     }
94 }
95 
96 #if !__GXX_WEAK__
97 // Explicitly instantiate for systems with no COMDAT or weak support.
98 template
99   std::basic_streambuf<gnu_char_type>::int_type
100   std::basic_streambuf<gnu_char_type>::_S_pback_size;
101 #endif
102 
main()103 int main()
104 {
105   test01();
106   test07();
107   return 0;
108 }
109 
110 
111 
112 // more surf!!!
113 
114 
115 
116 
117 
118 
119 
120 
121 
122