1917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier//===----------------------------------------------------------------------===// 2917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier// 3917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier// The LLVM Compiler Infrastructure 4917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier// 5917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier// This file is dual licensed under the MIT and the University of Illinois Open 6917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier// Source Licenses. See LICENSE.TXT for details. 7917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier// 8917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier//===----------------------------------------------------------------------===// 9917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier 10917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier// UNSUPPORTED: c++98, c++03, c++11, c++14 11917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier 12917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier// <algorithm> 13917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier 14917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier// template <class PopulationIterator, class SampleIterator, class Distance, 15917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier// class UniformRandomNumberGenerator> 16917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier// SampleIterator sample(PopulationIterator first, PopulationIterator last, 17917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier// SampleIterator out, Distance n, 18917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier// UniformRandomNumberGenerator &&g); 19917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier 20917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier#include <algorithm> 21917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier#include <random> 22917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier#include <cassert> 23917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier 24917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier#include "test_iterators.h" 25917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier 26917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiseliertemplate <class PopulationIterator, class SampleIterator> void test() { 27917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier int ia[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 28917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier const unsigned is = sizeof(ia) / sizeof(ia[0]); 29917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier const unsigned os = 4; 30917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier int oa[os]; 31917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier std::minstd_rand g; 32917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier std::sample(PopulationIterator(ia), PopulationIterator(ia + is), 33917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier SampleIterator(oa), os, g); 34917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier} 35917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier 36917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselierint main() { 37917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier // expected-error@algorithm:* {{static_assert failed "SampleIterator must meet the requirements of RandomAccessIterator"}} 38917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier // expected-error@algorithm:* 2 {{does not provide a subscript operator}} 39917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier // expected-error@algorithm:* {{invalid operands}} 40917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier test<input_iterator<int *>, output_iterator<int *> >(); 41917af0a0732cc1c53177c387b93a9fd8baaf5e2fEric Fiselier} 42