push_back.pass.cpp revision 06086258d3d8c48a916ec51c33e1ad8f46821b81
1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar//===----------------------------------------------------------------------===//
2f47f7a1c4082b42b21f1c7dc211ff90f4b38258aAnders Carlsson//
3f47f7a1c4082b42b21f1c7dc211ff90f4b38258aAnders Carlsson//                     The LLVM Compiler Infrastructure
4f47f7a1c4082b42b21f1c7dc211ff90f4b38258aAnders Carlsson//
5f47f7a1c4082b42b21f1c7dc211ff90f4b38258aAnders Carlsson// This file is dual licensed under the MIT and the University of Illinois Open
65dc2af12bdb8c71c01556f7d5780c5ef94af0306Anders Carlsson// Source Licenses. See LICENSE.TXT for details.
75dc2af12bdb8c71c01556f7d5780c5ef94af0306Anders Carlsson//
85dc2af12bdb8c71c01556f7d5780c5ef94af0306Anders Carlsson//===----------------------------------------------------------------------===//
91eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
105dc2af12bdb8c71c01556f7d5780c5ef94af0306Anders Carlsson// <vector>
115dc2af12bdb8c71c01556f7d5780c5ef94af0306Anders Carlsson
1267d1a67f3db2f1aa69083c5c94164d6e0ee05b32John McCall// void push_back(const value_type& x);
1367d1a67f3db2f1aa69083c5c94164d6e0ee05b32John McCall
1467d1a67f3db2f1aa69083c5c94164d6e0ee05b32John McCall#include <vector>
1567d1a67f3db2f1aa69083c5c94164d6e0ee05b32John McCall#include <cassert>
1667d1a67f3db2f1aa69083c5c94164d6e0ee05b32John McCall#include "../../../stack_allocator.h"
1767d1a67f3db2f1aa69083c5c94164d6e0ee05b32John McCall#include "min_allocator.h"
1867d1a67f3db2f1aa69083c5c94164d6e0ee05b32John McCall#include "asan_testing.h"
1967d1a67f3db2f1aa69083c5c94164d6e0ee05b32John McCall
205dc2af12bdb8c71c01556f7d5780c5ef94af0306Anders Carlssonint main()
215dc2af12bdb8c71c01556f7d5780c5ef94af0306Anders Carlsson{
225dc2af12bdb8c71c01556f7d5780c5ef94af0306Anders Carlsson    {
235dc2af12bdb8c71c01556f7d5780c5ef94af0306Anders Carlsson        std::vector<int> c;
2444054452c416a622b8f19a6d157a0affc05b9aa8Douglas Gregor        c.push_back(0);
2544054452c416a622b8f19a6d157a0affc05b9aa8Douglas Gregor        assert(c.size() == 1);
2644054452c416a622b8f19a6d157a0affc05b9aa8Douglas Gregor        assert(is_contiguous_container_asan_correct(c));
2767d1a67f3db2f1aa69083c5c94164d6e0ee05b32John McCall        for (int j = 0; j < c.size(); ++j)
2867d1a67f3db2f1aa69083c5c94164d6e0ee05b32John McCall            assert(c[j] == j);
2967d1a67f3db2f1aa69083c5c94164d6e0ee05b32John McCall        c.push_back(1);
3067d1a67f3db2f1aa69083c5c94164d6e0ee05b32John McCall        assert(c.size() == 2);
315dc2af12bdb8c71c01556f7d5780c5ef94af0306Anders Carlsson        assert(is_contiguous_container_asan_correct(c));
3267d1a67f3db2f1aa69083c5c94164d6e0ee05b32John McCall        for (int j = 0; j < c.size(); ++j)
33651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines            assert(c[j] == j);
34530fa4fc800f2788cfe6d4113677ca631d1e801fAlp Toker        c.push_back(2);
35530fa4fc800f2788cfe6d4113677ca631d1e801fAlp Toker        assert(c.size() == 3);
36530fa4fc800f2788cfe6d4113677ca631d1e801fAlp Toker        assert(is_contiguous_container_asan_correct(c));
37bd87c0bd2358498eae71c6cb24e57d2c884c74aaChris Lattner        for (int j = 0; j < c.size(); ++j)
38bd87c0bd2358498eae71c6cb24e57d2c884c74aaChris Lattner            assert(c[j] == j);
39bd87c0bd2358498eae71c6cb24e57d2c884c74aaChris Lattner        c.push_back(3);
40bd87c0bd2358498eae71c6cb24e57d2c884c74aaChris Lattner        assert(c.size() == 4);
41bd87c0bd2358498eae71c6cb24e57d2c884c74aaChris Lattner        assert(is_contiguous_container_asan_correct(c));
42bd87c0bd2358498eae71c6cb24e57d2c884c74aaChris Lattner        for (int j = 0; j < c.size(); ++j)
43bd87c0bd2358498eae71c6cb24e57d2c884c74aaChris Lattner            assert(c[j] == j);
44bd87c0bd2358498eae71c6cb24e57d2c884c74aaChris Lattner        c.push_back(4);
45        assert(c.size() == 5);
46        assert(is_contiguous_container_asan_correct(c));
47        for (int j = 0; j < c.size(); ++j)
48            assert(c[j] == j);
49    }
50    {
51        std::vector<int, stack_allocator<int, 15> > c;
52        c.push_back(0);
53        assert(c.size() == 1);
54        assert(is_contiguous_container_asan_correct(c));
55        for (int j = 0; j < c.size(); ++j)
56            assert(c[j] == j);
57        c.push_back(1);
58        assert(c.size() == 2);
59        assert(is_contiguous_container_asan_correct(c));
60        for (int j = 0; j < c.size(); ++j)
61            assert(c[j] == j);
62        c.push_back(2);
63        assert(c.size() == 3);
64        assert(is_contiguous_container_asan_correct(c));
65        for (int j = 0; j < c.size(); ++j)
66            assert(c[j] == j);
67        c.push_back(3);
68        assert(c.size() == 4);
69        assert(is_contiguous_container_asan_correct(c));
70        for (int j = 0; j < c.size(); ++j)
71            assert(c[j] == j);
72        c.push_back(4);
73        assert(c.size() == 5);
74        assert(is_contiguous_container_asan_correct(c));
75        for (int j = 0; j < c.size(); ++j)
76            assert(c[j] == j);
77    }
78#if __cplusplus >= 201103L
79    {
80        std::vector<int, min_allocator<int>> c;
81        c.push_back(0);
82        assert(c.size() == 1);
83        assert(is_contiguous_container_asan_correct(c));
84        for (int j = 0; j < c.size(); ++j)
85            assert(c[j] == j);
86        c.push_back(1);
87        assert(c.size() == 2);
88        assert(is_contiguous_container_asan_correct(c));
89        for (int j = 0; j < c.size(); ++j)
90            assert(c[j] == j);
91        c.push_back(2);
92        assert(c.size() == 3);
93        assert(is_contiguous_container_asan_correct(c));
94        for (int j = 0; j < c.size(); ++j)
95            assert(c[j] == j);
96        c.push_back(3);
97        assert(c.size() == 4);
98        assert(is_contiguous_container_asan_correct(c));
99        for (int j = 0; j < c.size(); ++j)
100            assert(c[j] == j);
101        c.push_back(4);
102        assert(c.size() == 5);
103        assert(is_contiguous_container_asan_correct(c));
104        for (int j = 0; j < c.size(); ++j)
105            assert(c[j] == j);
106    }
107#endif
108}
109