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