1b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===// 2b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// 3b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// The LLVM Compiler Infrastructure 4b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// 5b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// This file is dual licensed under the MIT and the University of Illinois Open 6b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// Source Licenses. See LICENSE.TXT for details. 7b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// 8b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===// 9b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 10b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// <algorithm> 11b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 12b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// template<ForwardIterator Iter, StrictWeakOrder<auto, Iter::value_type> Compare> 13b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// requires CopyConstructible<Compare> 14b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// pair<Iter, Iter> 15b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// minmax_element(Iter first, Iter last, Compare comp); 16b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 17b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <algorithm> 18b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <functional> 19b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <cassert> 20b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 21b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include "test_iterators.h" 22b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 23b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnertemplate <class Iter> 24b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnervoid 25b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnertest(Iter first, Iter last) 26b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{ 27b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner typedef std::greater<int> Compare; 28b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner Compare comp; 29b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::pair<Iter, Iter> p = std::minmax_element(first, last, comp); 30b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner if (first != last) 31b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 32b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner for (Iter j = first; j != last; ++j) 33b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 34b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(!comp(*j, *p.first)); 35b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(!comp(*p.second, *j)); 36b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 37b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 38b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner else 39b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 40b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(p.first == last); 41b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(p.second == last); 42b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 43b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner} 44b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 45b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnertemplate <class Iter> 46b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnervoid 47b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnertest(unsigned N) 48b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{ 49b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner int* a = new int[N]; 50b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner for (int i = 0; i < N; ++i) 51b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner a[i] = i; 52b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::random_shuffle(a, a+N); 53b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner test(Iter(a), Iter(a+N)); 54b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner delete [] a; 55b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner} 56b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 57b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnertemplate <class Iter> 58b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnervoid 59b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnertest() 60b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{ 61b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner test<Iter>(0); 62b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner test<Iter>(1); 63b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner test<Iter>(2); 64b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner test<Iter>(3); 65b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner test<Iter>(10); 66b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner test<Iter>(1000); 67b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 68b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner const unsigned N = 100; 69b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner int* a = new int[N]; 70b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner for (int i = 0; i < N; ++i) 71b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner a[i] = 5; 72b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::random_shuffle(a, a+N); 73b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner typedef std::greater<int> Compare; 74b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner Compare comp; 75b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::pair<Iter, Iter> p = std::minmax_element(Iter(a), Iter(a+N), comp); 76b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(base(p.first) == a); 77b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(base(p.second) == a+N-1); 78b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner delete [] a; 79b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 80b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner} 81b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 82b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerint main() 83b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{ 84b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner test<forward_iterator<const int*> >(); 85b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner test<bidirectional_iterator<const int*> >(); 86b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner test<random_access_iterator<const int*> >(); 87b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner test<const int*>(); 88b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner} 89