OLD | NEW |
---|---|
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include <string.h> | 5 #include <string.h> |
6 #include "platform/assert.h" | 6 #include "platform/assert.h" |
7 #include "vm/fixed_cache.h" | 7 #include "vm/fixed_cache.h" |
8 #include "vm/unit_test.h" | 8 #include "vm/unit_test.h" |
9 | 9 |
10 namespace dart { | 10 namespace dart { |
(...skipping 29 matching lines...) Expand all Loading... | |
40 EXPECT(cache.Lookup(1) == NULL); | 40 EXPECT(cache.Lookup(1) == NULL); |
41 EXPECT(cache.Lookup(35) == NULL); | 41 EXPECT(cache.Lookup(35) == NULL); |
42 EXPECT(cache.Lookup(50) == NULL); | 42 EXPECT(cache.Lookup(50) == NULL); |
43 } | 43 } |
44 | 44 |
45 | 45 |
46 struct Resource { | 46 struct Resource { |
47 Resource() : id(0), stuff(NULL) {} | 47 Resource() : id(0), stuff(NULL) {} |
48 explicit Resource(int id_) : id(id_), stuff(new int) {} | 48 explicit Resource(int id_) : id(id_), stuff(new int) {} |
49 | 49 |
50 Resource(const Resource& r) { | |
51 id = r.id; | |
52 stuff = new int(*r.stuff); | |
53 } | |
54 | |
55 Resource& operator=(const Resource& r) { | |
56 delete stuff; | |
57 id = r.id; | |
58 stuff = new int(*r.stuff); | |
59 return *this; | |
60 } | |
61 | |
62 ~Resource() { delete stuff; } | |
Vyacheslav Egorov (Google)
2017/03/10 08:29:33
You need a test that destructor is actually invoke
Dmitry Olshansky
2017/03/13 12:26:31
Done.
| |
50 int id; | 63 int id; |
51 int* stuff; | 64 int* stuff; |
52 }; | 65 }; |
53 | 66 |
54 static void freeResource(Resource* res) { | 67 UNIT_TEST_CASE(FixedCacheFullResource) { |
55 delete res->stuff; | 68 FixedCache<int, Resource, 6> cache; |
56 } | |
57 | |
58 | |
59 UNIT_TEST_CASE(FixedCacheFullDeleter) { | |
60 FixedCache<int, Resource, 6> cache(freeResource); | |
61 cache.Insert(10, Resource(2)); | 69 cache.Insert(10, Resource(2)); |
62 cache.Insert(20, Resource(4)); | 70 cache.Insert(20, Resource(4)); |
63 cache.Insert(40, Resource(16)); | 71 cache.Insert(40, Resource(16)); |
64 cache.Insert(30, Resource(8)); | 72 cache.Insert(30, Resource(8)); |
65 EXPECT(cache.Lookup(40)->id == 16); | 73 EXPECT(cache.Lookup(40)->id == 16); |
66 EXPECT(cache.Lookup(5) == NULL); | 74 EXPECT(cache.Lookup(5) == NULL); |
67 EXPECT(cache.Lookup(0) == NULL); | 75 EXPECT(cache.Lookup(0) == NULL); |
68 // Insert in the front, middle. | 76 // Insert in the front, middle. |
69 cache.Insert(5, Resource(1)); | 77 cache.Insert(5, Resource(1)); |
70 cache.Insert(15, Resource(3)); | 78 cache.Insert(15, Resource(3)); |
71 cache.Insert(25, Resource(6)); | 79 cache.Insert(25, Resource(6)); |
72 // 40 got removed by shifting. | 80 // 40 got removed by shifting. |
73 EXPECT(cache.Lookup(40) == NULL); | 81 EXPECT(cache.Lookup(40) == NULL); |
74 EXPECT(cache.Lookup(5)->id == 1); | 82 EXPECT(cache.Lookup(5)->id == 1); |
75 EXPECT(cache.Lookup(15)->id == 3); | 83 EXPECT(cache.Lookup(15)->id == 3); |
76 EXPECT(cache.Lookup(25)->id == 6); | 84 EXPECT(cache.Lookup(25)->id == 6); |
77 | 85 |
78 // Insert at end top - 30 gets replaced by 40. | 86 // Insert at end top - 30 gets replaced by 40. |
79 cache.Insert(40, Resource(16)); | 87 cache.Insert(40, Resource(16)); |
80 EXPECT(cache.Lookup(40)->id == 16); | 88 EXPECT(cache.Lookup(40)->id == 16); |
81 EXPECT(cache.Lookup(30) == NULL); | 89 EXPECT(cache.Lookup(30) == NULL); |
82 } | 90 } |
83 | 91 |
84 } // namespace dart | 92 } // namespace dart |
OLD | NEW |