1//===----------------------------------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <string>
11
12// int compare(size_type pos, size_type n1, const charT *s) const;
13
14#include <string>
15#include <stdexcept>
16#include <cassert>
17
18#include "min_allocator.h"
19
20int sign(int x)
21{
22    if (x == 0)
23        return 0;
24    if (x < 0)
25        return -1;
26    return 1;
27}
28
29template <class S>
30void
31test(const S& s, typename S::size_type pos1, typename S::size_type n1,
32     const typename S::value_type* str, int x)
33{
34    try
35    {
36        assert(sign(s.compare(pos1, n1, str)) == sign(x));
37        assert(pos1 <= s.size());
38    }
39    catch (std::out_of_range&)
40    {
41        assert(pos1 > s.size());
42    }
43}
44
45template <class S>
46void test0()
47{
48    test(S(""), 0, 0, "", 0);
49    test(S(""), 0, 0, "abcde", -5);
50    test(S(""), 0, 0, "abcdefghij", -10);
51    test(S(""), 0, 0, "abcdefghijklmnopqrst", -20);
52    test(S(""), 0, 1, "", 0);
53    test(S(""), 0, 1, "abcde", -5);
54    test(S(""), 0, 1, "abcdefghij", -10);
55    test(S(""), 0, 1, "abcdefghijklmnopqrst", -20);
56    test(S(""), 1, 0, "", 0);
57    test(S(""), 1, 0, "abcde", 0);
58    test(S(""), 1, 0, "abcdefghij", 0);
59    test(S(""), 1, 0, "abcdefghijklmnopqrst", 0);
60    test(S("abcde"), 0, 0, "", 0);
61    test(S("abcde"), 0, 0, "abcde", -5);
62    test(S("abcde"), 0, 0, "abcdefghij", -10);
63    test(S("abcde"), 0, 0, "abcdefghijklmnopqrst", -20);
64    test(S("abcde"), 0, 1, "", 1);
65    test(S("abcde"), 0, 1, "abcde", -4);
66    test(S("abcde"), 0, 1, "abcdefghij", -9);
67    test(S("abcde"), 0, 1, "abcdefghijklmnopqrst", -19);
68    test(S("abcde"), 0, 2, "", 2);
69    test(S("abcde"), 0, 2, "abcde", -3);
70    test(S("abcde"), 0, 2, "abcdefghij", -8);
71    test(S("abcde"), 0, 2, "abcdefghijklmnopqrst", -18);
72    test(S("abcde"), 0, 4, "", 4);
73    test(S("abcde"), 0, 4, "abcde", -1);
74    test(S("abcde"), 0, 4, "abcdefghij", -6);
75    test(S("abcde"), 0, 4, "abcdefghijklmnopqrst", -16);
76    test(S("abcde"), 0, 5, "", 5);
77    test(S("abcde"), 0, 5, "abcde", 0);
78    test(S("abcde"), 0, 5, "abcdefghij", -5);
79    test(S("abcde"), 0, 5, "abcdefghijklmnopqrst", -15);
80    test(S("abcde"), 0, 6, "", 5);
81    test(S("abcde"), 0, 6, "abcde", 0);
82    test(S("abcde"), 0, 6, "abcdefghij", -5);
83    test(S("abcde"), 0, 6, "abcdefghijklmnopqrst", -15);
84    test(S("abcde"), 1, 0, "", 0);
85    test(S("abcde"), 1, 0, "abcde", -5);
86    test(S("abcde"), 1, 0, "abcdefghij", -10);
87    test(S("abcde"), 1, 0, "abcdefghijklmnopqrst", -20);
88    test(S("abcde"), 1, 1, "", 1);
89    test(S("abcde"), 1, 1, "abcde", 1);
90    test(S("abcde"), 1, 1, "abcdefghij", 1);
91    test(S("abcde"), 1, 1, "abcdefghijklmnopqrst", 1);
92    test(S("abcde"), 1, 2, "", 2);
93    test(S("abcde"), 1, 2, "abcde", 1);
94    test(S("abcde"), 1, 2, "abcdefghij", 1);
95    test(S("abcde"), 1, 2, "abcdefghijklmnopqrst", 1);
96    test(S("abcde"), 1, 3, "", 3);
97    test(S("abcde"), 1, 3, "abcde", 1);
98    test(S("abcde"), 1, 3, "abcdefghij", 1);
99    test(S("abcde"), 1, 3, "abcdefghijklmnopqrst", 1);
100    test(S("abcde"), 1, 4, "", 4);
101    test(S("abcde"), 1, 4, "abcde", 1);
102    test(S("abcde"), 1, 4, "abcdefghij", 1);
103    test(S("abcde"), 1, 4, "abcdefghijklmnopqrst", 1);
104    test(S("abcde"), 1, 5, "", 4);
105    test(S("abcde"), 1, 5, "abcde", 1);
106    test(S("abcde"), 1, 5, "abcdefghij", 1);
107    test(S("abcde"), 1, 5, "abcdefghijklmnopqrst", 1);
108    test(S("abcde"), 2, 0, "", 0);
109    test(S("abcde"), 2, 0, "abcde", -5);
110    test(S("abcde"), 2, 0, "abcdefghij", -10);
111    test(S("abcde"), 2, 0, "abcdefghijklmnopqrst", -20);
112    test(S("abcde"), 2, 1, "", 1);
113    test(S("abcde"), 2, 1, "abcde", 2);
114    test(S("abcde"), 2, 1, "abcdefghij", 2);
115    test(S("abcde"), 2, 1, "abcdefghijklmnopqrst", 2);
116    test(S("abcde"), 2, 2, "", 2);
117    test(S("abcde"), 2, 2, "abcde", 2);
118    test(S("abcde"), 2, 2, "abcdefghij", 2);
119    test(S("abcde"), 2, 2, "abcdefghijklmnopqrst", 2);
120    test(S("abcde"), 2, 3, "", 3);
121    test(S("abcde"), 2, 3, "abcde", 2);
122    test(S("abcde"), 2, 3, "abcdefghij", 2);
123    test(S("abcde"), 2, 3, "abcdefghijklmnopqrst", 2);
124    test(S("abcde"), 2, 4, "", 3);
125    test(S("abcde"), 2, 4, "abcde", 2);
126    test(S("abcde"), 2, 4, "abcdefghij", 2);
127    test(S("abcde"), 2, 4, "abcdefghijklmnopqrst", 2);
128    test(S("abcde"), 4, 0, "", 0);
129    test(S("abcde"), 4, 0, "abcde", -5);
130    test(S("abcde"), 4, 0, "abcdefghij", -10);
131    test(S("abcde"), 4, 0, "abcdefghijklmnopqrst", -20);
132    test(S("abcde"), 4, 1, "", 1);
133    test(S("abcde"), 4, 1, "abcde", 4);
134    test(S("abcde"), 4, 1, "abcdefghij", 4);
135    test(S("abcde"), 4, 1, "abcdefghijklmnopqrst", 4);
136    test(S("abcde"), 4, 2, "", 1);
137    test(S("abcde"), 4, 2, "abcde", 4);
138    test(S("abcde"), 4, 2, "abcdefghij", 4);
139    test(S("abcde"), 4, 2, "abcdefghijklmnopqrst", 4);
140    test(S("abcde"), 5, 0, "", 0);
141    test(S("abcde"), 5, 0, "abcde", -5);
142    test(S("abcde"), 5, 0, "abcdefghij", -10);
143    test(S("abcde"), 5, 0, "abcdefghijklmnopqrst", -20);
144    test(S("abcde"), 5, 1, "", 0);
145    test(S("abcde"), 5, 1, "abcde", -5);
146    test(S("abcde"), 5, 1, "abcdefghij", -10);
147    test(S("abcde"), 5, 1, "abcdefghijklmnopqrst", -20);
148}
149
150template <class S>
151void test1()
152{
153    test(S("abcde"), 6, 0, "", 0);
154    test(S("abcde"), 6, 0, "abcde", 0);
155    test(S("abcde"), 6, 0, "abcdefghij", 0);
156    test(S("abcde"), 6, 0, "abcdefghijklmnopqrst", 0);
157    test(S("abcdefghij"), 0, 0, "", 0);
158    test(S("abcdefghij"), 0, 0, "abcde", -5);
159    test(S("abcdefghij"), 0, 0, "abcdefghij", -10);
160    test(S("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", -20);
161    test(S("abcdefghij"), 0, 1, "", 1);
162    test(S("abcdefghij"), 0, 1, "abcde", -4);
163    test(S("abcdefghij"), 0, 1, "abcdefghij", -9);
164    test(S("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", -19);
165    test(S("abcdefghij"), 0, 5, "", 5);
166    test(S("abcdefghij"), 0, 5, "abcde", 0);
167    test(S("abcdefghij"), 0, 5, "abcdefghij", -5);
168    test(S("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", -15);
169    test(S("abcdefghij"), 0, 9, "", 9);
170    test(S("abcdefghij"), 0, 9, "abcde", 4);
171    test(S("abcdefghij"), 0, 9, "abcdefghij", -1);
172    test(S("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", -11);
173    test(S("abcdefghij"), 0, 10, "", 10);
174    test(S("abcdefghij"), 0, 10, "abcde", 5);
175    test(S("abcdefghij"), 0, 10, "abcdefghij", 0);
176    test(S("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", -10);
177    test(S("abcdefghij"), 0, 11, "", 10);
178    test(S("abcdefghij"), 0, 11, "abcde", 5);
179    test(S("abcdefghij"), 0, 11, "abcdefghij", 0);
180    test(S("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", -10);
181    test(S("abcdefghij"), 1, 0, "", 0);
182    test(S("abcdefghij"), 1, 0, "abcde", -5);
183    test(S("abcdefghij"), 1, 0, "abcdefghij", -10);
184    test(S("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", -20);
185    test(S("abcdefghij"), 1, 1, "", 1);
186    test(S("abcdefghij"), 1, 1, "abcde", 1);
187    test(S("abcdefghij"), 1, 1, "abcdefghij", 1);
188    test(S("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 1);
189    test(S("abcdefghij"), 1, 4, "", 4);
190    test(S("abcdefghij"), 1, 4, "abcde", 1);
191    test(S("abcdefghij"), 1, 4, "abcdefghij", 1);
192    test(S("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 1);
193    test(S("abcdefghij"), 1, 8, "", 8);
194    test(S("abcdefghij"), 1, 8, "abcde", 1);
195    test(S("abcdefghij"), 1, 8, "abcdefghij", 1);
196    test(S("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 1);
197    test(S("abcdefghij"), 1, 9, "", 9);
198    test(S("abcdefghij"), 1, 9, "abcde", 1);
199    test(S("abcdefghij"), 1, 9, "abcdefghij", 1);
200    test(S("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 1);
201    test(S("abcdefghij"), 1, 10, "", 9);
202    test(S("abcdefghij"), 1, 10, "abcde", 1);
203    test(S("abcdefghij"), 1, 10, "abcdefghij", 1);
204    test(S("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 1);
205    test(S("abcdefghij"), 5, 0, "", 0);
206    test(S("abcdefghij"), 5, 0, "abcde", -5);
207    test(S("abcdefghij"), 5, 0, "abcdefghij", -10);
208    test(S("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", -20);
209    test(S("abcdefghij"), 5, 1, "", 1);
210    test(S("abcdefghij"), 5, 1, "abcde", 5);
211    test(S("abcdefghij"), 5, 1, "abcdefghij", 5);
212    test(S("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 5);
213    test(S("abcdefghij"), 5, 2, "", 2);
214    test(S("abcdefghij"), 5, 2, "abcde", 5);
215    test(S("abcdefghij"), 5, 2, "abcdefghij", 5);
216    test(S("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 5);
217    test(S("abcdefghij"), 5, 4, "", 4);
218    test(S("abcdefghij"), 5, 4, "abcde", 5);
219    test(S("abcdefghij"), 5, 4, "abcdefghij", 5);
220    test(S("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 5);
221    test(S("abcdefghij"), 5, 5, "", 5);
222    test(S("abcdefghij"), 5, 5, "abcde", 5);
223    test(S("abcdefghij"), 5, 5, "abcdefghij", 5);
224    test(S("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 5);
225    test(S("abcdefghij"), 5, 6, "", 5);
226    test(S("abcdefghij"), 5, 6, "abcde", 5);
227    test(S("abcdefghij"), 5, 6, "abcdefghij", 5);
228    test(S("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 5);
229    test(S("abcdefghij"), 9, 0, "", 0);
230    test(S("abcdefghij"), 9, 0, "abcde", -5);
231    test(S("abcdefghij"), 9, 0, "abcdefghij", -10);
232    test(S("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", -20);
233    test(S("abcdefghij"), 9, 1, "", 1);
234    test(S("abcdefghij"), 9, 1, "abcde", 9);
235    test(S("abcdefghij"), 9, 1, "abcdefghij", 9);
236    test(S("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 9);
237    test(S("abcdefghij"), 9, 2, "", 1);
238    test(S("abcdefghij"), 9, 2, "abcde", 9);
239    test(S("abcdefghij"), 9, 2, "abcdefghij", 9);
240    test(S("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 9);
241    test(S("abcdefghij"), 10, 0, "", 0);
242    test(S("abcdefghij"), 10, 0, "abcde", -5);
243    test(S("abcdefghij"), 10, 0, "abcdefghij", -10);
244    test(S("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", -20);
245    test(S("abcdefghij"), 10, 1, "", 0);
246    test(S("abcdefghij"), 10, 1, "abcde", -5);
247    test(S("abcdefghij"), 10, 1, "abcdefghij", -10);
248    test(S("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", -20);
249    test(S("abcdefghij"), 11, 0, "", 0);
250    test(S("abcdefghij"), 11, 0, "abcde", 0);
251    test(S("abcdefghij"), 11, 0, "abcdefghij", 0);
252    test(S("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 0);
253}
254
255template <class S>
256void test2()
257{
258    test(S("abcdefghijklmnopqrst"), 0, 0, "", 0);
259    test(S("abcdefghijklmnopqrst"), 0, 0, "abcde", -5);
260    test(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", -10);
261    test(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", -20);
262    test(S("abcdefghijklmnopqrst"), 0, 1, "", 1);
263    test(S("abcdefghijklmnopqrst"), 0, 1, "abcde", -4);
264    test(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", -9);
265    test(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", -19);
266    test(S("abcdefghijklmnopqrst"), 0, 10, "", 10);
267    test(S("abcdefghijklmnopqrst"), 0, 10, "abcde", 5);
268    test(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 0);
269    test(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", -10);
270    test(S("abcdefghijklmnopqrst"), 0, 19, "", 19);
271    test(S("abcdefghijklmnopqrst"), 0, 19, "abcde", 14);
272    test(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 9);
273    test(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", -1);
274    test(S("abcdefghijklmnopqrst"), 0, 20, "", 20);
275    test(S("abcdefghijklmnopqrst"), 0, 20, "abcde", 15);
276    test(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 10);
277    test(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 0);
278    test(S("abcdefghijklmnopqrst"), 0, 21, "", 20);
279    test(S("abcdefghijklmnopqrst"), 0, 21, "abcde", 15);
280    test(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 10);
281    test(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 0);
282    test(S("abcdefghijklmnopqrst"), 1, 0, "", 0);
283    test(S("abcdefghijklmnopqrst"), 1, 0, "abcde", -5);
284    test(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", -10);
285    test(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", -20);
286    test(S("abcdefghijklmnopqrst"), 1, 1, "", 1);
287    test(S("abcdefghijklmnopqrst"), 1, 1, "abcde", 1);
288    test(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 1);
289    test(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 1);
290    test(S("abcdefghijklmnopqrst"), 1, 9, "", 9);
291    test(S("abcdefghijklmnopqrst"), 1, 9, "abcde", 1);
292    test(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 1);
293    test(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 1);
294    test(S("abcdefghijklmnopqrst"), 1, 18, "", 18);
295    test(S("abcdefghijklmnopqrst"), 1, 18, "abcde", 1);
296    test(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 1);
297    test(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 1);
298    test(S("abcdefghijklmnopqrst"), 1, 19, "", 19);
299    test(S("abcdefghijklmnopqrst"), 1, 19, "abcde", 1);
300    test(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 1);
301    test(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 1);
302    test(S("abcdefghijklmnopqrst"), 1, 20, "", 19);
303    test(S("abcdefghijklmnopqrst"), 1, 20, "abcde", 1);
304    test(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 1);
305    test(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 1);
306    test(S("abcdefghijklmnopqrst"), 10, 0, "", 0);
307    test(S("abcdefghijklmnopqrst"), 10, 0, "abcde", -5);
308    test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", -10);
309    test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", -20);
310    test(S("abcdefghijklmnopqrst"), 10, 1, "", 1);
311    test(S("abcdefghijklmnopqrst"), 10, 1, "abcde", 10);
312    test(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 10);
313    test(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 10);
314    test(S("abcdefghijklmnopqrst"), 10, 5, "", 5);
315    test(S("abcdefghijklmnopqrst"), 10, 5, "abcde", 10);
316    test(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 10);
317    test(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 10);
318    test(S("abcdefghijklmnopqrst"), 10, 9, "", 9);
319    test(S("abcdefghijklmnopqrst"), 10, 9, "abcde", 10);
320    test(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 10);
321    test(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 10);
322    test(S("abcdefghijklmnopqrst"), 10, 10, "", 10);
323    test(S("abcdefghijklmnopqrst"), 10, 10, "abcde", 10);
324    test(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 10);
325    test(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 10);
326    test(S("abcdefghijklmnopqrst"), 10, 11, "", 10);
327    test(S("abcdefghijklmnopqrst"), 10, 11, "abcde", 10);
328    test(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 10);
329    test(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 10);
330    test(S("abcdefghijklmnopqrst"), 19, 0, "", 0);
331    test(S("abcdefghijklmnopqrst"), 19, 0, "abcde", -5);
332    test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", -10);
333    test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", -20);
334    test(S("abcdefghijklmnopqrst"), 19, 1, "", 1);
335    test(S("abcdefghijklmnopqrst"), 19, 1, "abcde", 19);
336    test(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 19);
337    test(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 19);
338    test(S("abcdefghijklmnopqrst"), 19, 2, "", 1);
339    test(S("abcdefghijklmnopqrst"), 19, 2, "abcde", 19);
340    test(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 19);
341    test(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 19);
342    test(S("abcdefghijklmnopqrst"), 20, 0, "", 0);
343    test(S("abcdefghijklmnopqrst"), 20, 0, "abcde", -5);
344    test(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", -10);
345    test(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", -20);
346    test(S("abcdefghijklmnopqrst"), 20, 1, "", 0);
347    test(S("abcdefghijklmnopqrst"), 20, 1, "abcde", -5);
348    test(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", -10);
349    test(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", -20);
350    test(S("abcdefghijklmnopqrst"), 21, 0, "", 0);
351    test(S("abcdefghijklmnopqrst"), 21, 0, "abcde", 0);
352    test(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 0);
353    test(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 0);
354}
355
356int main()
357{
358    {
359    typedef std::string S;
360    test0<S>();
361    test1<S>();
362    test2<S>();
363    }
364#if __cplusplus >= 201103L
365    {
366    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
367    test0<S>();
368    test1<S>();
369    test2<S>();
370    }
371#endif
372}
373