1*e7154709SEric Fiselier //===----------------------------------------------------------------------===// 2*e7154709SEric Fiselier // 3*e7154709SEric Fiselier // The LLVM Compiler Infrastructure 4*e7154709SEric Fiselier // 5*e7154709SEric Fiselier // This file is dual licensed under the MIT and the University of Illinois Open 6*e7154709SEric Fiselier // Source Licenses. See LICENSE.TXT for details. 7*e7154709SEric Fiselier // 8*e7154709SEric Fiselier //===----------------------------------------------------------------------===// 9*e7154709SEric Fiselier 10*e7154709SEric Fiselier // UNSUPPORTED: c++98, c++03, c++11, c++14 11*e7154709SEric Fiselier 12*e7154709SEric Fiselier // <algorithm> 13*e7154709SEric Fiselier 14*e7154709SEric Fiselier // template <class PopulationIterator, class SampleIterator, class Distance, 15*e7154709SEric Fiselier // class UniformRandomNumberGenerator> 16*e7154709SEric Fiselier // SampleIterator sample(PopulationIterator first, PopulationIterator last, 17*e7154709SEric Fiselier // SampleIterator out, Distance n, 18*e7154709SEric Fiselier // UniformRandomNumberGenerator &&g); 19*e7154709SEric Fiselier 20*e7154709SEric Fiselier #include <algorithm> 21*e7154709SEric Fiselier #include <random> 22*e7154709SEric Fiselier #include <cassert> 23*e7154709SEric Fiselier 24*e7154709SEric Fiselier #include "test_iterators.h" 25*e7154709SEric Fiselier 26*e7154709SEric Fiselier template <class PopulationIterator, class SampleIterator> void test() { 27*e7154709SEric Fiselier int ia[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 28*e7154709SEric Fiselier const unsigned is = sizeof(ia) / sizeof(ia[0]); 29*e7154709SEric Fiselier const unsigned os = 4; 30*e7154709SEric Fiselier int oa[os]; 31*e7154709SEric Fiselier std::minstd_rand g; 32*e7154709SEric Fiselier std::sample(PopulationIterator(ia), PopulationIterator(ia + is), 33*e7154709SEric Fiselier SampleIterator(oa), os, g); 34*e7154709SEric Fiselier } 35*e7154709SEric Fiselier 36*e7154709SEric Fiselier int main() { 37*e7154709SEric Fiselier // expected-error@algorithm:* {{static_assert failed "SampleIterator must meet the requirements of RandomAccessIterator"}} 38*e7154709SEric Fiselier // expected-error@algorithm:* 2 {{does not provide a subscript operator}} 39*e7154709SEric Fiselier // expected-error@algorithm:* {{invalid operands}} 40*e7154709SEric Fiselier test<input_iterator<int *>, output_iterator<int *> >(); 41*e7154709SEric Fiselier } 42