accumulate.pass.cpp revision 0e20cae1a5be18fba591cd884aa2a389b66a3f49
1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant// The LLVM Compiler Infrastructure 4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 5bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// This file is distributed under the University of Illinois Open Source 6bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// License. See LICENSE.TXT for details. 7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <numeric> 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 120e20cae1a5be18fba591cd884aa2a389b66a3f49Howard Hinnant// template <InputIterator Iter, MoveConstructible T> 130e20cae1a5be18fba591cd884aa2a389b66a3f49Howard Hinnant// requires HasPlus<T, Iter::reference> 140e20cae1a5be18fba591cd884aa2a389b66a3f49Howard Hinnant// && HasAssign<T, HasPlus<T, Iter::reference>::result_type> 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// T 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// accumulate(Iter first, Iter last, T init); 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <numeric> 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert> 20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "../iterators.h" 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class Iter, class T> 24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttest(Iter first, Iter last, T init, T x) 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::accumulate(first, last, init) == x); 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class Iter> 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttest() 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int ia[] = {1, 2, 3, 4, 5, 6}; 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned sa = sizeof(ia) / sizeof(ia[0]); 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(Iter(ia), Iter(ia), 0, 0); 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(Iter(ia), Iter(ia), 10, 10); 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(Iter(ia), Iter(ia+1), 0, 1); 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(Iter(ia), Iter(ia+1), 10, 11); 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(Iter(ia), Iter(ia+2), 0, 3); 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(Iter(ia), Iter(ia+2), 10, 13); 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(Iter(ia), Iter(ia+sa), 0, 21); 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(Iter(ia), Iter(ia+sa), 10, 31); 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test<input_iterator<const int*> >(); 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test<forward_iterator<const int*> >(); 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test<bidirectional_iterator<const int*> >(); 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test<random_access_iterator<const int*> >(); 52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test<const int*>(); 53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 54