1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant// The LLVM Compiler Infrastructure 4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard 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. 7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <forward_list> 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// void remove(const value_type& v); 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <forward_list> 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <iterator> 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert> 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 18061d0cc4db18d17bf01ed14c5db0be098205bd47Marshall Clow#include "min_allocator.h" 1981381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant 20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef int T; 24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef std::forward_list<T> C; 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const T t1[] = {0, 5, 5, 0, 0, 0, 5}; 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const T t2[] = {5, 5, 5}; 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant C c1(std::begin(t1), std::end(t1)); 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant C c2(std::begin(t2), std::end(t2)); 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant c1.remove(0); 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(c1 == c2); 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef int T; 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef std::forward_list<T> C; 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const T t1[] = {0, 0, 0, 0}; 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant C c1(std::begin(t1), std::end(t1)); 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant C c2; 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant c1.remove(0); 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(c1 == c2); 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef int T; 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef std::forward_list<T> C; 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const T t1[] = {5, 5, 5}; 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const T t2[] = {5, 5, 5}; 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant C c1(std::begin(t1), std::end(t1)); 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant C c2(std::begin(t2), std::end(t2)); 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant c1.remove(0); 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(c1 == c2); 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef int T; 53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef std::forward_list<T> C; 54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant C c1; 55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant C c2; 56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant c1.remove(0); 57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(c1 == c2); 58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef int T; 61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef std::forward_list<T> C; 62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const T t1[] = {5, 5, 5, 0}; 63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const T t2[] = {5, 5, 5}; 64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant C c1(std::begin(t1), std::end(t1)); 65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant C c2(std::begin(t2), std::end(t2)); 66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant c1.remove(0); 67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(c1 == c2); 68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 6981381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant#if __cplusplus >= 201103L 7081381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant { 7181381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant typedef int T; 7281381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant typedef std::forward_list<T, min_allocator<T>> C; 7381381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant const T t1[] = {0, 5, 5, 0, 0, 0, 5}; 7481381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant const T t2[] = {5, 5, 5}; 7581381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant C c1(std::begin(t1), std::end(t1)); 7681381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant C c2(std::begin(t2), std::end(t2)); 7781381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant c1.remove(0); 7881381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(c1 == c2); 7981381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant } 8081381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant { 8181381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant typedef int T; 8281381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant typedef std::forward_list<T, min_allocator<T>> C; 8381381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant const T t1[] = {0, 0, 0, 0}; 8481381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant C c1(std::begin(t1), std::end(t1)); 8581381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant C c2; 8681381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant c1.remove(0); 8781381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(c1 == c2); 8881381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant } 8981381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant { 9081381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant typedef int T; 9181381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant typedef std::forward_list<T, min_allocator<T>> C; 9281381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant const T t1[] = {5, 5, 5}; 9381381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant const T t2[] = {5, 5, 5}; 9481381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant C c1(std::begin(t1), std::end(t1)); 9581381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant C c2(std::begin(t2), std::end(t2)); 9681381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant c1.remove(0); 9781381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(c1 == c2); 9881381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant } 9981381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant { 10081381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant typedef int T; 10181381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant typedef std::forward_list<T, min_allocator<T>> C; 10281381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant C c1; 10381381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant C c2; 10481381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant c1.remove(0); 10581381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(c1 == c2); 10681381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant } 10781381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant { 10881381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant typedef int T; 10981381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant typedef std::forward_list<T, min_allocator<T>> C; 11081381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant const T t1[] = {5, 5, 5, 0}; 11181381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant const T t2[] = {5, 5, 5}; 11281381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant C c1(std::begin(t1), std::end(t1)); 11381381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant C c2(std::begin(t2), std::end(t2)); 11481381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant c1.remove(0); 11581381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(c1 == c2); 11681381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant } 11781381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant#endif 118bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 119