OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "base/containers/scoped_ptr_hash_map.h" | |
6 | |
7 #include "base/memory/scoped_ptr.h" | |
8 #include "testing/gtest/include/gtest/gtest.h" | |
9 | |
10 namespace base { | |
11 | |
danakj
2015/04/24 17:22:04
can you wrap everything inside this namespace with
kcwu
2015/04/27 13:28:03
Done.
base::DefaultDeleter have to be specialized
danakj
2015/04/27 16:50:09
I meant wrap it all like:
namespace base {
namesp
kcwu
2015/04/27 17:48:17
Done.
That doesn't work for DefaultDeleter (compil
| |
12 struct DeleteCounter { | |
13 public: | |
14 DeleteCounter() {} | |
15 ~DeleteCounter() { g_delete_count++; } | |
16 | |
17 static void ResetCounter() { g_delete_count = 0; } | |
18 static int delete_count() { return g_delete_count; } | |
19 | |
20 private: | |
21 static int g_delete_count; | |
22 }; | |
23 | |
24 template <> | |
25 struct DefaultDeleter<DeleteCounter> { | |
26 public: | |
27 inline void operator()(DeleteCounter* ptr) const { | |
28 g_count++; | |
29 delete ptr; | |
30 } | |
31 | |
32 static int count() { return g_count; } | |
33 static void ResetCounter() { g_count = 0; } | |
34 | |
35 private: | |
36 static int g_count; | |
danakj
2015/04/24 17:22:04
g_deleter_call_count?
kcwu
2015/04/27 13:28:03
Done.
| |
37 }; | |
38 | |
39 int DeleteCounter::g_delete_count = 0; | |
40 int DefaultDeleter<DeleteCounter>::g_count = 0; | |
41 | |
42 } // namespace | |
danakj
2015/04/24 17:22:04
this isn't closing an anonymous namespace. i think
kcwu
2015/04/27 13:28:03
Done.
| |
43 | |
44 TEST(ScopedPtrHashMapTest, CustomDeleter) { | |
45 int key = 123; | |
46 base::DeleteCounter::ResetCounter(); | |
47 base::DefaultDeleter<base::DeleteCounter>::ResetCounter(); | |
48 { | |
49 base::ScopedPtrHashMap<int, scoped_ptr<base::DeleteCounter>> map; | |
50 map.set(key, scoped_ptr<base::DeleteCounter>(new base::DeleteCounter)); | |
51 } | |
52 EXPECT_EQ(1, base::DeleteCounter::delete_count()); | |
53 EXPECT_EQ(1, base::DefaultDeleter<base::DeleteCounter>::count()); | |
54 | |
55 base::DeleteCounter::ResetCounter(); | |
56 base::DefaultDeleter<base::DeleteCounter>::ResetCounter(); | |
57 { | |
58 base::ScopedPtrHashMap<int, scoped_ptr<base::DeleteCounter>> map; | |
59 map.erase( | |
60 map.set(key, scoped_ptr<base::DeleteCounter>(new base::DeleteCounter))); | |
61 EXPECT_EQ(1, base::DeleteCounter::delete_count()); | |
62 EXPECT_EQ(1, base::DefaultDeleter<base::DeleteCounter>::count()); | |
63 } | |
64 EXPECT_EQ(1, base::DeleteCounter::delete_count()); | |
65 EXPECT_EQ(1, base::DefaultDeleter<base::DeleteCounter>::count()); | |
66 | |
67 base::DeleteCounter::ResetCounter(); | |
68 base::DefaultDeleter<base::DeleteCounter>::ResetCounter(); | |
69 { | |
70 base::ScopedPtrHashMap<int, scoped_ptr<base::DeleteCounter>> map; | |
71 map.set(key, scoped_ptr<base::DeleteCounter>(new base::DeleteCounter)); | |
72 map.set(key, scoped_ptr<base::DeleteCounter>(new base::DeleteCounter)); | |
73 map.set(key, scoped_ptr<base::DeleteCounter>(new base::DeleteCounter)); | |
74 EXPECT_EQ(2, base::DeleteCounter::delete_count()); | |
75 EXPECT_EQ(2, base::DefaultDeleter<base::DeleteCounter>::count()); | |
76 } | |
77 EXPECT_EQ(3, base::DeleteCounter::delete_count()); | |
78 EXPECT_EQ(3, base::DefaultDeleter<base::DeleteCounter>::count()); | |
79 } | |
danakj
2015/04/24 17:22:04
can you test erase() too?
kcwu
2015/04/27 13:28:03
It is already tested in the second block.
| |
OLD | NEW |