]>
git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/24_iterators/random_access_iterator/string_vector_iterators.cc
1 // 24.1.5 Random access iterators
2 // 24.3.1 Iterator traits
3 // (basic_string and vector implementations)
5 // Copyright (C) 1999-2019 Free Software Foundation, Inc.
6 // This program is free software; you can redistribute it and/or modify
7 // it under the terms of the GNU General Public License as published by
8 // the Free Software Foundation; either version 3 of the License, or
9 // (at your option) any later version.
11 // This program is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
16 // You should have received a copy of the GNU General Public License
17 // along with this program; see the file COPYING3. If not see
18 // <http://www.gnu.org/licenses/>.
23 #include <testsuite_hooks.h>
30 std::string
s("abcde");
32 std::string::iterator
i1(s
.begin());
62 std::string::iterator i2
;
64 std::iterator_traits
<std::string::iterator
>::difference_type d1
;
69 std::iterator_traits
<std::string::iterator
>::value_type v1
;
74 std::iterator_traits
<std::string::iterator
>::reference
r1(i1
[0]);
82 if ((i1
!= i2
) != true)
84 if ((i1
== i2
) != false)
86 if ((i1
< i2
) != true)
88 if ((i1
> i2
) != false)
90 if ((i1
<= i2
) != true)
92 if ((i1
>= i2
) != false)
95 std::string::iterator i3
;
97 if ((i3
== i1
) != true)
101 if ((i3
== i2
) != true)
105 if ((i3
== i1
) != true)
130 std::string::const_iterator
ci1(s
.begin());
160 std::string::const_iterator ci2
;
162 std::iterator_traits
<std::string::const_iterator
>::difference_type d2
;
167 std::iterator_traits
<std::string::const_iterator
>::value_type v2
;
172 std::iterator_traits
<std::string::const_iterator
>::reference
r2(ci1
[0]);
176 if ((ci1
!= ci2
) != true)
178 if ((ci1
== ci2
) != false)
180 if ((ci1
< ci2
) != true)
182 if ((ci1
> ci2
) != false)
184 if ((ci1
<= ci2
) != true)
186 if ((ci1
>= ci2
) != false)
189 std::string::const_iterator ci3
;
191 if ((ci3
== ci1
) != true)
195 if ((ci3
== ci2
) != true)
199 if ((ci3
== ci1
) != true)
217 // iterator and const_iterator
218 std::string::const_iterator
ci4(i1
);
219 if ((ci4
== i1
) != true)
221 if ((ci4
!= i1
) != false)
223 if ((ci4
< i1
) != false)
225 if ((ci4
> i1
) != false)
227 if ((ci4
<= i1
) != true)
229 if ((ci4
>= i1
) != true)
232 if ((i2
== ci4
) != true)
234 if ((i2
< ci4
) != false)
236 if ((i2
> ci4
) != false)
238 if ((i2
<= ci4
) != true)
240 if ((i2
>= ci4
) != true)
243 const std::string
cs("ABCDE");
244 std::string::const_iterator
ci5(cs
.begin());
263 std::vector
<int>::iterator
i1(v
.begin());
293 std::vector
<int>::iterator i2
;
295 std::iterator_traits
<std::vector
<int>::iterator
>::difference_type d1
;
300 std::iterator_traits
<std::vector
<int>::iterator
>::value_type v1
;
305 std::iterator_traits
<std::vector
<int>::iterator
>::reference
r1(i1
[0]);
313 if ((i1
!= i2
) != true)
315 if ((i1
== i2
) != false)
317 if ((i1
< i2
) != true)
319 if ((i1
> i2
) != false)
321 if ((i1
<= i2
) != true)
323 if ((i1
>= i2
) != false)
326 std::vector
<int>::iterator i3
;
328 if ((i3
== i1
) != true)
332 if ((i3
== i2
) != true)
336 if ((i3
== i1
) != true)
361 std::vector
<int>::const_iterator
ci1(v
.begin());
391 std::vector
<int>::const_iterator ci2
;
393 std::iterator_traits
<std::vector
<int>::const_iterator
>::difference_type d2
;
398 std::iterator_traits
<std::vector
<int>::const_iterator
>::value_type v2
;
403 std::iterator_traits
<std::vector
<int>::const_iterator
>::reference
408 if ((ci1
!= ci2
) != true)
410 if ((ci1
== ci2
) != false)
412 if ((ci1
< ci2
) != true)
414 if ((ci1
> ci2
) != false)
416 if ((ci1
<= ci2
) != true)
418 if ((ci1
>= ci2
) != false)
421 std::vector
<int>::const_iterator ci3
;
423 if ((ci3
== ci1
) != true)
427 if ((ci3
== ci2
) != true)
431 if ((ci3
== ci1
) != true)
449 // iterator to const_iterator
450 std::vector
<int>::const_iterator
ci4(i1
);
451 if ((ci4
== i1
) != true)
453 if ((ci4
!= i1
) != false)
455 if ((ci4
< i1
) != false)
457 if ((ci4
> i1
) != false)
459 if ((ci4
<= i1
) != true)
461 if ((ci4
>= i1
) != true)
464 if ((i2
== ci4
) != true)
466 if ((i2
< ci4
) != false)
468 if ((i2
> ci4
) != false)
470 if ((i2
<= ci4
) != true)
472 if ((i2
>= ci4
) != true)
475 const std::vector
<int> cv(v
);
476 std::vector
<int>::const_iterator
ci5(cv
.begin());
480 std::vector
<std::string
> vs
;
481 vs
.push_back(std::string("abc"));
482 std::vector
<std::string
>::iterator
ivs(vs
.begin());
483 if (ivs
->c_str()[1] != 'b')
494 std::string
s("abcde");
496 std::string::reverse_iterator
ri(s
.rbegin());
500 std::iterator_traits
<std::string::reverse_iterator
>::difference_type d
;
505 const std::string
cs("abcde");
506 std::string::const_reverse_iterator
cri(cs
.rend());
507 if (cri
- 5 != cs
.rbegin())
513 // the following should be compiler errors
514 // flag runtime errors in case they slip through the compiler
521 extern void f(std::vector
<std::string
*>::iterator
);
522 std::vector
<std::string
*> vs
[2];
523 f(vs
); // address of array is not an iterator
529 char *i
= s
.begin(); // begin() doesn't return a pointer
534 std::string::const_iterator ci
;
535 std::string::iterator i
;
536 if (i
- ci
) // remove const_ is a warning
538 // failures++; only a warning
542 std::vector
<char>::iterator iv
;
543 std::string::iterator
is(iv
);// vector<char> is not string
548 std::vector
<char>::iterator iv
;
549 std::string::iterator is
;
550 if (iv
== is
) // vector<char> is not string
556 std::vector
<char>::const_iterator ci
;
557 std::vector
<char>::iterator i
= ci
; // remove const_ is a warning
559 // failures++; only a warning
563 std::vector
<int> v(1);
564 std::vector
<int>::const_iterator
ci(v
.begin());
565 *ci
= 1; // cannot assign through const_iterator
570 std::vector
<const int> v(1);
571 std::vector
<const int>::reference
r(v
.begin()[0]);
572 r
= 1; // cannot assign through reference to const
584 std::string::iterator it
= s
.begin();
585 std::string::const_iterator cit
= s
.begin();
595 failures
+= string_stuff();
597 failures
+= vector_stuff();
599 failures
+= reverse_stuff();
601 failures
+= wrong_stuff();
603 failures
+= test6642();
605 VERIFY(failures
== 0);