emplace_hint.pass.cpp revision b66e1c3f961179f8f5466061a54d6530d1749550
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//                     The LLVM Compiler Infrastructure
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// This file is dual licensed under the MIT and the University of Illinois Open
6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Source Licenses. See LICENSE.TXT for details.
7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)//
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// <unordered_map>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// template <class Key, class T, class Hash = hash<Key>, class Pred = equal_to<Key>,
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//           class Alloc = allocator<pair<const Key, T>>>
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// class unordered_map
153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// template <class... Args>
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     iterator emplace_hint(const_iterator p, Args&&... args);
1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include <unordered_map>
20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include <cassert>
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "../../../Emplaceable.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "../../../min_allocator.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)int main()
2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles){
2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    {
2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        typedef std::unordered_map<int, Emplaceable> C;
3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        typedef C::iterator R;
3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        C c;
327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        C::const_iterator e = c.end();
3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        R r = c.emplace_hint(e, std::piecewise_construct, std::forward_as_tuple(3),
3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                                          std::forward_as_tuple());
3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        assert(c.size() == 1);
36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        assert(r->first == 3);
3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        assert(r->second == Emplaceable());
3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        r = c.emplace_hint(e, std::pair<const int, Emplaceable>(4, Emplaceable(5, 6)));
4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        assert(c.size() == 2);
4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        assert(r->first == 4);
4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        assert(r->second == Emplaceable(5, 6));
4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        r = c.emplace_hint(e, std::piecewise_construct, std::forward_as_tuple(5),
4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                                       std::forward_as_tuple(6, 7));
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(c.size() == 3);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(r->first == 5);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(r->second == Emplaceable(6, 7));
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if __cplusplus >= 201103L
5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    {
5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        typedef std::unordered_map<int, Emplaceable, std::hash<int>, std::equal_to<int>,
5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                            min_allocator<std::pair<const int, Emplaceable>>> C;
5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        typedef C::iterator R;
5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        C c;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        C::const_iterator e = c.end();
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        R r = c.emplace_hint(e, std::piecewise_construct, std::forward_as_tuple(3),
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                          std::forward_as_tuple());
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(c.size() == 1);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(r->first == 3);
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(r->second == Emplaceable());
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r = c.emplace_hint(e, std::pair<const int, Emplaceable>(4, Emplaceable(5, 6)));
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(c.size() == 2);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(r->first == 4);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(r->second == Emplaceable(5, 6));
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r = c.emplace_hint(e, std::piecewise_construct, std::forward_as_tuple(5),
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                       std::forward_as_tuple(6, 7));
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(c.size() == 3);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(r->first == 5);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(r->second == Emplaceable(6, 7));
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)