12d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//===----------------------------------------------------------------------===//
22d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//
32d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//                     The LLVM Compiler Infrastructure
42d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//
52d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// This file is dual licensed under the MIT and the University of Illinois Open
62d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// Source Licenses. See LICENSE.TXT for details.
72d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//
82d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//===----------------------------------------------------------------------===//
92d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// <vector>
112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// template <class InputIter> vector(InputIter first, InputIter last);
132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <vector>
152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <cassert>
162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include "test_iterators.h"
182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include "../../../stack_allocator.h"
192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include "min_allocator.h"
202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinestemplate <class C, class Iterator>
222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesvoid
232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinestest(Iterator first, Iterator last)
242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines{
252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    C c(first, last);
262d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    assert(c.__invariants());
272d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    assert(c.size() == std::distance(first, last));
282d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    for (typename C::const_iterator i = c.cbegin(), e = c.cend(); i != e; ++i, ++first)
292d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines        assert(*i == *first);
302d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines}
312d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
322d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesint main()
332d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines{
342d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 3, 1, 0};
352d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int* an = a + sizeof(a)/sizeof(a[0]);
362d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    test<std::vector<int> >(input_iterator<const int*>(a), input_iterator<const int*>(an));
372d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    test<std::vector<int> >(forward_iterator<const int*>(a), forward_iterator<const int*>(an));
382d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    test<std::vector<int> >(bidirectional_iterator<const int*>(a), bidirectional_iterator<const int*>(an));
392d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    test<std::vector<int> >(random_access_iterator<const int*>(a), random_access_iterator<const int*>(an));
402d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    test<std::vector<int> >(a, an);
412d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
422d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    test<std::vector<int, stack_allocator<int, 63> > >(input_iterator<const int*>(a), input_iterator<const int*>(an));
432d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    test<std::vector<int, stack_allocator<int, 18> > >(forward_iterator<const int*>(a), forward_iterator<const int*>(an));
442d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    test<std::vector<int, stack_allocator<int, 18> > >(bidirectional_iterator<const int*>(a), bidirectional_iterator<const int*>(an));
452d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    test<std::vector<int, stack_allocator<int, 18> > >(random_access_iterator<const int*>(a), random_access_iterator<const int*>(an));
462d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    test<std::vector<int, stack_allocator<int, 18> > >(a, an);
472d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if __cplusplus >= 201103L
482d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    test<std::vector<int, min_allocator<int>> >(input_iterator<const int*>(a), input_iterator<const int*>(an));
492d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    test<std::vector<int, min_allocator<int>> >(forward_iterator<const int*>(a), forward_iterator<const int*>(an));
502d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    test<std::vector<int, min_allocator<int>> >(bidirectional_iterator<const int*>(a), bidirectional_iterator<const int*>(an));
512d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    test<std::vector<int, min_allocator<int>> >(random_access_iterator<const int*>(a), random_access_iterator<const int*>(an));
522d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    test<std::vector<int> >(a, an);
532d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
542d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines}
552d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines