]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/libcxx/containers/sequences/list/db_iterators_9.pass.cpp
Vendor import of libc++ release_39 branch r287912:
[FreeBSD/FreeBSD.git] / test / libcxx / containers / sequences / list / db_iterators_9.pass.cpp
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 // UNSUPPORTED: c++98, c++03
11 // UNSUPPORTED: libcpp-no-exceptions
12
13 // <list>
14
15 // Operations on "NULL" iterators
16
17 #define _LIBCPP_DEBUG 1
18 #define _LIBCPP_ASSERT(x, m) do { if (!x) throw 1; } while(0)
19
20 #include <list>
21 #include <cassert>
22 #include <iterator>
23 #include <exception>
24 #include <cstdlib>
25
26 struct S { int val; };
27
28 int main()
29 {
30     {
31     unsigned lib_asserts;
32
33     typedef S T;
34     typedef std::list<T> C;
35     C::iterator i{};
36     C::const_iterator ci{};
37
38     lib_asserts = 0;
39     try { ++i; }  catch (int) { ++lib_asserts; }
40     try { i++; }  catch (int) { ++lib_asserts; }
41     try { ++ci; } catch (int) { ++lib_asserts; }
42     try { ci++; } catch (int) { ++lib_asserts; }
43     assert(lib_asserts == 4);
44
45     lib_asserts = 0;
46     try { --i; }  catch (int) { ++lib_asserts; }
47     try { i--; }  catch (int) { ++lib_asserts; }
48     try { --ci; } catch (int) { ++lib_asserts; }
49     try { ci--; } catch (int) { ++lib_asserts; }
50     assert(lib_asserts == 4);
51
52     lib_asserts = 0;
53     try { *i; }             catch (int) { ++lib_asserts; }
54     try { *ci; }            catch (int) { ++lib_asserts; }
55     try { (void)  i->val; } catch (int) { ++lib_asserts; }
56     try { (void) ci->val; } catch (int) { ++lib_asserts; }
57     assert(lib_asserts == 4);
58     }
59 }