insert_iter_size_value.pass.cpp revision bc8d3f97eb5c958007f2713238472e0c1c8fe02
1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
3bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard 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// <list>
11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// iterator insert(const_iterator position, size_type n, const value_type& x);
13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <list>
15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cstdlib>
16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert>
17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint throw_next = 0xFFFF;
19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint count = 0;
20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid* operator new(std::size_t s) throw(std::bad_alloc)
22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    if (throw_next == 0)
24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        throw std::bad_alloc();
25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    --throw_next;
26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    ++count;
27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    return std::malloc(s);
28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid  operator delete(void* p) throw()
31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    --count;
33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    std::free(p);
34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main()
37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    int a1[] = {1, 2, 3};
39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    int a2[] = {1, 4, 4, 4, 4, 4, 2, 3};
40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    std::list<int> l1(a1, a1+3);
41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    std::list<int>::iterator i = l1.insert(next(l1.cbegin()), 5, 4);
42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    assert(i == next(l1.begin()));
43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    assert(l1 == std::list<int>(a2, a2+8));
44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    throw_next = 4;
45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    int save_count = count;
46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    try
47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        i = l1.insert(i, 5, 5);
49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(false);
50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    catch (...)
52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    throw_next = 0xFFFF;
55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    assert(save_count == count);
56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    assert(l1 == std::list<int>(a2, a2+8));
57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
58