access.pass.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant//                     The LLVM Compiler Infrastructure
4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <deque>
11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//       reference operator[](size_type __i);
13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// const_reference operator[](size_type __i) const;
146046aced820aaab4f14f2026531dd11d10690691Howard Hinnant//
15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//       reference at(size_type __i);
16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// const_reference at(size_type __i) const;
176046aced820aaab4f14f2026531dd11d10690691Howard Hinnant//
18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//       reference front();
19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// const_reference front() const;
206046aced820aaab4f14f2026531dd11d10690691Howard Hinnant//
21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//       reference back();
22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// const_reference back() const;
23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <deque>
25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert>
26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstd::deque<int>
28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantmake(int size, int start = 0 )
29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    const int b = 4096 / sizeof(int);
31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    int init = 0;
32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    if (start > 0)
33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        init = (start+1) / b + ((start+1) % b != 0);
35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        init *= b;
36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        --init;
37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    std::deque<int> c(init, 0);
39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    for (int i = 0; i < init-start; ++i)
40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        c.pop_back();
41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    for (int i = 0; i < size; ++i)
42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        c.push_back(i);
43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    for (int i = 0; i < start; ++i)
44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        c.pop_front();
45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    return c;
46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant};
47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main()
49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::deque<int> c = make(10);
52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        for (unsigned i = 0; i < 10; ++i)
53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            assert(c[i] == i);
54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        for (unsigned i = 0; i < 10; ++i)
55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            assert(c.at(i) == i);
56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(c.front() == 0);
57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(c.back() == 9);
58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        const std::deque<int> c = make(10);
61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        for (unsigned i = 0; i < 10; ++i)
62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            assert(c[i] == i);
63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        for (unsigned i = 0; i < 10; ++i)
64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            assert(c.at(i) == i);
65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(c.front() == 0);
66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(c.back() == 9);
67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
69