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// <algorithm> 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 12eb564e76cc3904d811c981a50ecce0659f444cc9Howard Hinnant// template<ForwardIterator Iter, EquivalenceRelation<auto, Iter::value_type> Pred> 13eb564e76cc3904d811c981a50ecce0659f444cc9Howard Hinnant// requires OutputIterator<Iter, RvalueOf<Iter::reference>::type> 14eb564e76cc3904d811c981a50ecce0659f444cc9Howard Hinnant// && CopyConstructible<Pred> 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// Iter 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// unique(Iter first, Iter last, Pred pred); 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <algorithm> 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert> 2073d21a4f0774d3fadab98e690619a359cfb160a3Howard Hinnant#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES 21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <memory> 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 2483e2c4d877fe2d7793868b1c6a5d9525a7c4d431Marshall Clow#include "test_iterators.h" 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct count_equal 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static unsigned count; 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant template <class T> 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool operator()(const T& x, const T& y) 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant {++count; return x == y;} 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantunsigned count_equal::count = 0; 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class Iter> 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttest() 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int ia[] = {0}; 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant count_equal::count = 0; 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant Iter r = std::unique(Iter(ia), Iter(ia+sa), count_equal()); 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(base(r) == ia + sa); 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ia[0] == 0); 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(count_equal::count == sa-1); 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int ib[] = {0, 1}; 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sb = sizeof(ib)/sizeof(ib[0]); 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant count_equal::count = 0; 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant r = std::unique(Iter(ib), Iter(ib+sb), count_equal()); 52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(base(r) == ib + sb); 53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ib[0] == 0); 54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ib[1] == 1); 55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(count_equal::count == sb-1); 56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int ic[] = {0, 0}; 58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sc = sizeof(ic)/sizeof(ic[0]); 59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant count_equal::count = 0; 60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant r = std::unique(Iter(ic), Iter(ic+sc), count_equal()); 61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(base(r) == ic + 1); 62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ic[0] == 0); 63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(count_equal::count == sc-1); 64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int id[] = {0, 0, 1}; 66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sd = sizeof(id)/sizeof(id[0]); 67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant count_equal::count = 0; 68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant r = std::unique(Iter(id), Iter(id+sd), count_equal()); 69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(base(r) == id + 2); 70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(id[0] == 0); 71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(id[1] == 1); 72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(count_equal::count == sd-1); 73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int ie[] = {0, 0, 1, 0}; 75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned se = sizeof(ie)/sizeof(ie[0]); 76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant count_equal::count = 0; 77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant r = std::unique(Iter(ie), Iter(ie+se), count_equal()); 78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(base(r) == ie + 3); 79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ie[0] == 0); 80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ie[1] == 1); 81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ie[2] == 0); 82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(count_equal::count == se-1); 83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int ig[] = {0, 0, 1, 1}; 85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sg = sizeof(ig)/sizeof(ig[0]); 86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant count_equal::count = 0; 87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant r = std::unique(Iter(ig), Iter(ig+sg), count_equal()); 88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(base(r) == ig + 2); 89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ig[0] == 0); 90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ig[1] == 1); 91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(count_equal::count == sg-1); 92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int ih[] = {0, 1, 1}; 94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sh = sizeof(ih)/sizeof(ih[0]); 95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant count_equal::count = 0; 96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant r = std::unique(Iter(ih), Iter(ih+sh), count_equal()); 97bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(base(r) == ih + 2); 98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ih[0] == 0); 99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ih[1] == 1); 100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(count_equal::count == sh-1); 101bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 102bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int ii[] = {0, 1, 1, 1, 2, 2, 2}; 103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned si = sizeof(ii)/sizeof(ii[0]); 104bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant count_equal::count = 0; 105bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant r = std::unique(Iter(ii), Iter(ii+si), count_equal()); 106bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(base(r) == ii + 3); 107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ii[0] == 0); 108bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ii[1] == 1); 109bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ii[2] == 2); 110bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(count_equal::count == si-1); 111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 112bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 11373d21a4f0774d3fadab98e690619a359cfb160a3Howard Hinnant#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES 114bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct do_nothing 116bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 117bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void operator()(void*) const {} 118bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 119bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 120bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttypedef std::unique_ptr<int, do_nothing> Ptr; 121bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 122bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class Iter> 123bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid 124bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttest1() 125bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 126bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int one = 1; 127bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int two = 2; 128bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant Ptr ia[1]; 129bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 130bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant count_equal::count = 0; 131bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant Iter r = std::unique(Iter(ia), Iter(ia+sa), count_equal()); 132bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(base(r) == ia + sa); 133bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ia[0] == 0); 134bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(count_equal::count == sa-1); 135bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 136bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant Ptr ib[2]; 137bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ib[1].reset(&one); 138bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sb = sizeof(ib)/sizeof(ib[0]); 139bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant count_equal::count = 0; 140bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant r = std::unique(Iter(ib), Iter(ib+sb), count_equal()); 141bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(base(r) == ib + sb); 142bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ib[0] == 0); 143bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*ib[1] == 1); 144bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(count_equal::count == sb-1); 145bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 146bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant Ptr ic[2]; 147bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sc = sizeof(ic)/sizeof(ic[0]); 148bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant count_equal::count = 0; 149bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant r = std::unique(Iter(ic), Iter(ic+sc), count_equal()); 150bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(base(r) == ic + 1); 151bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ic[0] == 0); 152bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(count_equal::count == sc-1); 153bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 154bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant Ptr id[3]; 155bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant id[2].reset(&one); 156bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sd = sizeof(id)/sizeof(id[0]); 157bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant count_equal::count = 0; 158bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant r = std::unique(Iter(id), Iter(id+sd), count_equal()); 159bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(base(r) == id + 2); 160bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(id[0] == 0); 161bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*id[1] == 1); 162bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(count_equal::count == sd-1); 163bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 164bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant Ptr ie[4]; 165bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ie[2].reset(&one); 166bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned se = sizeof(ie)/sizeof(ie[0]); 167bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant count_equal::count = 0; 168bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant r = std::unique(Iter(ie), Iter(ie+se), count_equal()); 169bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(base(r) == ie + 3); 170bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ie[0] == 0); 171bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*ie[1] == 1); 172bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ie[2] == 0); 173bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(count_equal::count == se-1); 174bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 175bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant Ptr ig[4]; 176bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ig[2].reset(&one); 177bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ig[3].reset(&one); 178bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sg = sizeof(ig)/sizeof(ig[0]); 179bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant count_equal::count = 0; 180bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant r = std::unique(Iter(ig), Iter(ig+sg), count_equal()); 181bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(base(r) == ig + 2); 182bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ig[0] == 0); 183bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*ig[1] == 1); 184bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(count_equal::count == sg-1); 185bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 186bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant Ptr ih[3]; 187bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ih[1].reset(&one); 188bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ih[2].reset(&one); 189bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sh = sizeof(ih)/sizeof(ih[0]); 190bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant count_equal::count = 0; 191bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant r = std::unique(Iter(ih), Iter(ih+sh), count_equal()); 192bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(base(r) == ih + 2); 193bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ih[0] == 0); 194bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*ih[1] == 1); 195bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(count_equal::count == sh-1); 196bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 197bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant Ptr ii[7]; 198bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ii[1].reset(&one); 199bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ii[2].reset(&one); 200bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ii[3].reset(&one); 201bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ii[4].reset(&two); 202bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ii[5].reset(&two); 203bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ii[6].reset(&two); 204bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned si = sizeof(ii)/sizeof(ii[0]); 205bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant count_equal::count = 0; 206bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant r = std::unique(Iter(ii), Iter(ii+si), count_equal()); 207bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(base(r) == ii + 3); 208bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ii[0] == 0); 209bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*ii[1] == 1); 210bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*ii[2] == 2); 211bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(count_equal::count == si-1); 212bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 213bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 21473d21a4f0774d3fadab98e690619a359cfb160a3Howard Hinnant#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES 215bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 216bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 217bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 218bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test<forward_iterator<int*> >(); 219bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test<bidirectional_iterator<int*> >(); 220bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test<random_access_iterator<int*> >(); 221bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test<int*>(); 222bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 22373d21a4f0774d3fadab98e690619a359cfb160a3Howard Hinnant#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES 224bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 225bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test1<forward_iterator<Ptr*> >(); 226bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test1<bidirectional_iterator<Ptr*> >(); 227bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test1<random_access_iterator<Ptr*> >(); 228bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test1<Ptr*>(); 229bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 23073d21a4f0774d3fadab98e690619a359cfb160a3Howard Hinnant#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES 231bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 232