insert_rvalue.pass.cpp revision bc8d3f97eb5c958007f2713238472e0c1c8fe02c
15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)//===----------------------------------------------------------------------===//
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ��������������������The LLVM Compiler Infrastructure
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// License. See LICENSE.TXT for details.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (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>,
1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)//           class Alloc = allocator<pair<const Key, T>>>
14a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// class unordered_map
15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// template <class P,
17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch//           class = typename enable_if<is_convertible<P, value_type>::value>::type>
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     pair<iterator, bool> insert(P&& x);
19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <unordered_map>
21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <cassert>
22b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "../../../MoveOnly.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int main()
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        typedef std::unordered_map<double, int> C;
29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        typedef std::pair<C::iterator, bool> R;
3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        typedef std::pair<double, short> P;
3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        C c;
3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        R r = c.insert(P(3.5, 3));
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(r.second);
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert(c.size() == 1);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(r.first->first == 3.5);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(r.first->second == 3);
37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        r = c.insert(P(3.5, 4));
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(!r.second);
4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        assert(c.size() == 1);
4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        assert(r.first->first == 3.5);
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert(r.first->second == 3);
4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        r = c.insert(P(4.5, 4));
4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        assert(r.second);
4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        assert(c.size() == 2);
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert(r.first->first == 4.5);
4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        assert(r.first->second == 4);
4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        r = c.insert(P(5.5, 4));
5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        assert(r.second);
5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        assert(c.size() == 3);
5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        assert(r.first->first == 5.5);
5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        assert(r.first->second == 4);
55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    }
5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#ifdef _LIBCPP_MOVE
5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    {
5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        typedef std::unordered_map<MoveOnly, MoveOnly> C;
5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        typedef std::pair<C::iterator, bool> R;
6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        typedef std::pair<MoveOnly, MoveOnly> P;
6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        C c;
62a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        R r = c.insert(P(3, 3));
63a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        assert(r.second);
64a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        assert(c.size() == 1);
65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        assert(r.first->first == 3);
66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        assert(r.first->second == 3);
67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        r = c.insert(P(3, 4));
695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        assert(!r.second);
70a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        assert(c.size() == 1);
71a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        assert(r.first->first == 3);
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert(r.first->second == 3);
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        r = c.insert(P(4, 4));
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(r.second);
7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        assert(c.size() == 2);
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert(r.first->first == 4);
7890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        assert(r.first->second == 4);
79b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        r = c.insert(P(5, 4));
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(r.second);
82b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        assert(c.size() == 3);
83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        assert(r.first->first == 5);
84b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        assert(r.first->second == 4);
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
86b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#endif
87a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
88a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)