| OLD | NEW |
| (Empty) | |
| 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 |
| 3 // BSD-style license that can be found in the LICENSE file. |
| 4 |
| 5 #include <string.h> |
| 6 #include "platform/assert.h" |
| 7 #include "vm/fixed_cache.h" |
| 8 #include "vm/unit_test.h" |
| 9 |
| 10 namespace dart { |
| 11 |
| 12 UNIT_TEST_CASE(FixedCacheEmpty) { |
| 13 FixedCache<int, int, 2> cache; |
| 14 EXPECT(cache.Lookup(0) == NULL); |
| 15 EXPECT(cache.Lookup(1) == NULL); |
| 16 cache.Insert(1, 2); |
| 17 EXPECT(*cache.Lookup(1) == 2); |
| 18 EXPECT(cache.Lookup(0) == NULL); |
| 19 } |
| 20 |
| 21 |
| 22 UNIT_TEST_CASE(FixedCacheHalfFull) { |
| 23 FixedCache<int, const char*, 8> cache; |
| 24 // Insert at end. |
| 25 cache.Insert(10, "a"); |
| 26 cache.Insert(20, "b"); |
| 27 cache.Insert(40, "c"); |
| 28 // Insert in the middle. |
| 29 cache.Insert(15, "ab"); |
| 30 cache.Insert(25, "bc"); |
| 31 // Insert in front. |
| 32 cache.Insert(5, "_"); |
| 33 // Check all items. |
| 34 EXPECT(strcmp(*cache.Lookup(5), "_") == 0); |
| 35 EXPECT(strcmp(*cache.Lookup(10), "a") == 0); |
| 36 EXPECT(strcmp(*cache.Lookup(20), "b") == 0); |
| 37 EXPECT(strcmp(*cache.Lookup(40), "c") == 0); |
| 38 EXPECT(strcmp(*cache.Lookup(25), "bc") == 0); |
| 39 // Non-existent - front, middle, end. |
| 40 EXPECT(cache.Lookup(1) == NULL); |
| 41 EXPECT(cache.Lookup(35) == NULL); |
| 42 EXPECT(cache.Lookup(50) == NULL); |
| 43 } |
| 44 |
| 45 |
| 46 struct Resource { |
| 47 Resource() : id(0), stuff(NULL) {} |
| 48 explicit Resource(int id_) : id(id_), stuff(new int) {} |
| 49 |
| 50 int id; |
| 51 int* stuff; |
| 52 }; |
| 53 |
| 54 static void freeResource(Resource* res) { |
| 55 delete res->stuff; |
| 56 } |
| 57 |
| 58 |
| 59 UNIT_TEST_CASE(FixedCacheFullDeleter) { |
| 60 FixedCache<int, Resource, 6> cache(freeResource); |
| 61 cache.Insert(10, Resource(2)); |
| 62 cache.Insert(20, Resource(4)); |
| 63 cache.Insert(40, Resource(16)); |
| 64 cache.Insert(30, Resource(8)); |
| 65 EXPECT(cache.Lookup(40)->id == 16); |
| 66 EXPECT(cache.Lookup(5) == NULL); |
| 67 EXPECT(cache.Lookup(0) == NULL); |
| 68 // Insert in the front, middle. |
| 69 cache.Insert(5, Resource(1)); |
| 70 cache.Insert(15, Resource(3)); |
| 71 cache.Insert(25, Resource(6)); |
| 72 // 40 got removed by shifting. |
| 73 EXPECT(cache.Lookup(40) == NULL); |
| 74 EXPECT(cache.Lookup(5)->id == 1); |
| 75 EXPECT(cache.Lookup(15)->id == 3); |
| 76 EXPECT(cache.Lookup(25)->id == 6); |
| 77 |
| 78 // Insert at end top - 30 gets replaced by 40. |
| 79 cache.Insert(40, Resource(16)); |
| 80 EXPECT(cache.Lookup(40)->id == 16); |
| 81 EXPECT(cache.Lookup(30) == NULL); |
| 82 } |
| 83 |
| 84 } // namespace dart |
| OLD | NEW |