1c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//===----------------------------------------------------------------------===//
2c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//
3c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//                     The LLVM Compiler Infrastructure
4c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//
5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
7c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//
8c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//===----------------------------------------------------------------------===//
9c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
10c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// <forward_list>
11c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
121468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant// void unique();
13c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
14c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant#include <forward_list>
15c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant#include <iterator>
16933afa9761c1c1f916161278a99284d50a594939Marshall Clow#include <cassert>
17c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
18c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant#include "min_allocator.h"
19933afa9761c1c1f916161278a99284d50a594939Marshall Clow
20933afa9761c1c1f916161278a99284d50a594939Marshall Clowint main()
21933afa9761c1c1f916161278a99284d50a594939Marshall Clow{
22933afa9761c1c1f916161278a99284d50a594939Marshall Clow    {
23933afa9761c1c1f916161278a99284d50a594939Marshall Clow        typedef int T;
24933afa9761c1c1f916161278a99284d50a594939Marshall Clow        typedef std::forward_list<T> C;
25933afa9761c1c1f916161278a99284d50a594939Marshall Clow        const T t1[] = {0, 5, 5, 0, 0, 0, 5};
26c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant        const T t2[] = {0, 5, 0, 5};
27c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant        C c1(std::begin(t1), std::end(t1));
28c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant        C c2(std::begin(t2), std::end(t2));
29c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant        c1.unique();
30c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant        assert(c1 == c2);
31c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    }
3227031115bffa54c786c775512e1221bd555b6c1aHoward Hinnant    {
33c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant        typedef int T;
34c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant        typedef std::forward_list<T> C;
35c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant        const T t1[] = {0, 0, 0, 0};
36c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant        const T t2[] = {0};
37c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant        C c1(std::begin(t1), std::end(t1));
38c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant        C c2(std::begin(t2), std::end(t2));
39c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant        c1.unique();
40c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant        assert(c1 == c2);
41c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    }
42c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    {
43c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant        typedef int T;
44c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant        typedef std::forward_list<T> C;
45c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant        const T t1[] = {5, 5, 5};
46c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant        const T t2[] = {5};
47c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant        C c1(std::begin(t1), std::end(t1));
48c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant        C c2(std::begin(t2), std::end(t2));
49c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant        c1.unique();
50c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant        assert(c1 == c2);
51933afa9761c1c1f916161278a99284d50a594939Marshall Clow    }
52933afa9761c1c1f916161278a99284d50a594939Marshall Clow    {
53933afa9761c1c1f916161278a99284d50a594939Marshall Clow        typedef int T;
54933afa9761c1c1f916161278a99284d50a594939Marshall Clow        typedef std::forward_list<T> C;
55933afa9761c1c1f916161278a99284d50a594939Marshall Clow        C c1;
56933afa9761c1c1f916161278a99284d50a594939Marshall Clow        C c2;
57933afa9761c1c1f916161278a99284d50a594939Marshall Clow        c1.unique();
58933afa9761c1c1f916161278a99284d50a594939Marshall Clow        assert(c1 == c2);
59933afa9761c1c1f916161278a99284d50a594939Marshall Clow    }
60933afa9761c1c1f916161278a99284d50a594939Marshall Clow    {
61933afa9761c1c1f916161278a99284d50a594939Marshall Clow        typedef int T;
62933afa9761c1c1f916161278a99284d50a594939Marshall Clow        typedef std::forward_list<T> C;
63c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant        const T t1[] = {5, 5, 5, 0};
64        const T t2[] = {5, 0};
65        C c1(std::begin(t1), std::end(t1));
66        C c2(std::begin(t2), std::end(t2));
67        c1.unique();
68        assert(c1 == c2);
69    }
70#if __cplusplus >= 201103L
71    {
72        typedef int T;
73        typedef std::forward_list<T, min_allocator<T>> C;
74        const T t1[] = {0, 5, 5, 0, 0, 0, 5};
75        const T t2[] = {0, 5, 0, 5};
76        C c1(std::begin(t1), std::end(t1));
77        C c2(std::begin(t2), std::end(t2));
78        c1.unique();
79        assert(c1 == c2);
80    }
81    {
82        typedef int T;
83        typedef std::forward_list<T, min_allocator<T>> C;
84        const T t1[] = {0, 0, 0, 0};
85        const T t2[] = {0};
86        C c1(std::begin(t1), std::end(t1));
87        C c2(std::begin(t2), std::end(t2));
88        c1.unique();
89        assert(c1 == c2);
90    }
91    {
92        typedef int T;
93        typedef std::forward_list<T, min_allocator<T>> C;
94        const T t1[] = {5, 5, 5};
95        const T t2[] = {5};
96        C c1(std::begin(t1), std::end(t1));
97        C c2(std::begin(t2), std::end(t2));
98        c1.unique();
99        assert(c1 == c2);
100    }
101    {
102        typedef int T;
103        typedef std::forward_list<T, min_allocator<T>> C;
104        C c1;
105        C c2;
106        c1.unique();
107        assert(c1 == c2);
108    }
109    {
110        typedef int T;
111        typedef std::forward_list<T, min_allocator<T>> C;
112        const T t1[] = {5, 5, 5, 0};
113        const T t2[] = {5, 0};
114        C c1(std::begin(t1), std::end(t1));
115        C c2(std::begin(t2), std::end(t2));
116        c1.unique();
117        assert(c1 == c2);
118    }
119#endif
120}
121