OSDN Git Service

2003-04-23 Paolo Carlini <pcarlini@unitus.it>
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / testsuite / 27_io / basic_stringbuf / 3.cc
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.7.1 - Template class basic_stringbuf
23 // NB: This file is for testing basic_filebuf with NO OTHER INCLUDES.
24
25 #include <sstream>
26 #include <testsuite_hooks.h>
27
28 // libstdc++/2020
29 // should be able to use custom char_type, custom traits type
30 class gnu_char_type
31 {
32   unsigned long character;
33 public:
34   // operator ==
35   bool
36   operator==(const gnu_char_type& __lhs) 
37   { return character == __lhs.character; }
38
39   // operator <
40   bool
41   operator<(const gnu_char_type& __lhs) 
42   { return character < __lhs.character; }
43
44   // default ctor
45   gnu_char_type() { }
46
47   // to_char_type
48   gnu_char_type(const unsigned long& __l) : character(__l) { } 
49
50   // to_int_type
51   operator unsigned long() const { return character; }
52 };
53
54 // char_traits specialization
55 struct gnu_char_traits
56 {
57   typedef gnu_char_type char_type;
58   typedef long                  int_type;
59   typedef long          pos_type;
60   typedef unsigned long         off_type;
61   typedef long                  state_type;
62   
63   static void 
64   assign(char_type& __c1, const char_type& __c2) { }
65   
66   static bool 
67   eq(const char_type& __c1, const char_type& __c2) { return true; }
68   
69   static bool 
70   lt(const char_type& __c1, const char_type& __c2) { return true; }
71   
72   static int 
73   compare(const char_type* __s1, const char_type* __s2, size_t __n)
74   { return 0; }
75   
76   static size_t
77   length(const char_type* __s) { return 0; }
78   
79   static const char_type* 
80   find(const char_type* __s, size_t __n, const char_type& __a)
81   { return __s; }
82   
83   static char_type* 
84   move(char_type* __s1, const char_type* __s2, size_t __n)
85   { return __s1; }
86   
87   static char_type* 
88   copy(char_type* __s1, const char_type* __s2, size_t __n)
89   { return __s1; }
90   
91   static char_type* 
92   assign(char_type* __s, size_t __n, char_type __a)
93   { return __s; }
94   
95   static char_type 
96   to_char_type(const int_type& __c)
97   { return char_type(); }
98   
99   static int_type 
100   to_int_type(const char_type& __c)
101   { return int_type(); }
102   
103   static bool 
104   eq_int_type(const int_type& __c1, const int_type& __c2)
105   { return true; }
106   
107   static int_type 
108   eof()
109   { return int_type(); }
110   
111   static int_type 
112   not_eof(const int_type& __c)
113   { return int_type(); }
114 };
115
116 void test07()
117 {
118   bool test = true;
119   typedef std::basic_stringbuf<gnu_char_type, gnu_char_traits> gnu_ssbuf;
120   
121   try
122     { gnu_ssbuf obj; }
123   catch(std::exception& obj)
124     { 
125       test = false; 
126       VERIFY( test );
127     }
128 }
129
130 int main() 
131 {
132   test07();
133   return 0;
134 }
135
136
137
138 // more surf!!!