| 59 | } |
| 60 | |
| 61 | UNIT_TEST(LruCacheAgeTest) |
| 62 | { |
| 63 | using Key = int; |
| 64 | using Value = double; |
| 65 | LruCacheKeyAgeTest<Key, Value> age; |
| 66 | |
| 67 | TEST_EQUAL(age.GetAge(), 0, ()); |
| 68 | TEST(age.GetAgeToKey().empty(), ()); |
| 69 | TEST(age.GetKeyToAge().empty(), ()); |
| 70 | |
| 71 | age.InsertKey(10); |
| 72 | { |
| 73 | std::map<size_t, Key> const expectedAgeToKey({{1 /* age */, 10 /* key */}}); |
| 74 | ankerl::unordered_dense::map<Key, size_t> const expectedKeyToAge({{10 /* key */, 1 /* age */}}); |
| 75 | TestAge(age, 1 /* cache age */, expectedAgeToKey, expectedKeyToAge); |
| 76 | } |
| 77 | |
| 78 | age.InsertKey(9); |
| 79 | { |
| 80 | std::map<size_t, Key> const expectedAgeToKey({{1, 10}, {2, 9}}); |
| 81 | ankerl::unordered_dense::map<Key, size_t> const expectedKeyToAge({{10, 1}, {9, 2}}); |
| 82 | TestAge(age, 2 /* cache age */, expectedAgeToKey, expectedKeyToAge); |
| 83 | } |
| 84 | |
| 85 | age.RemoveLru(); |
| 86 | { |
| 87 | std::map<size_t, Key> const expectedAgeToKey({{2, 9}}); |
| 88 | ankerl::unordered_dense::map<Key, size_t> const expectedKeyToAge({{9, 2}}); |
| 89 | TestAge(age, 2 /* cache age */, expectedAgeToKey, expectedKeyToAge); |
| 90 | } |
| 91 | |
| 92 | age.InsertKey(11); |
| 93 | { |
| 94 | std::map<size_t, Key> const expectedAgeToKey({{2, 9}, {3, 11}}); |
| 95 | ankerl::unordered_dense::map<Key, size_t> const expectedKeyToAge({{9, 2}, {11, 3}}); |
| 96 | TestAge(age, 3 /* cache age */, expectedAgeToKey, expectedKeyToAge); |
| 97 | } |
| 98 | |
| 99 | age.UpdateAge(9); |
| 100 | { |
| 101 | std::map<size_t, Key> const expectedAgeToKey({{4, 9}, {3, 11}}); |
| 102 | ankerl::unordered_dense::map<Key, size_t> const expectedKeyToAge({{9, 4}, {11, 3}}); |
| 103 | TestAge(age, 4 /* cache age */, expectedAgeToKey, expectedKeyToAge); |
| 104 | } |
| 105 | |
| 106 | age.RemoveLru(); |
| 107 | { |
| 108 | std::map<size_t, Key> const expectedAgeToKey({{4, 9}}); |
| 109 | ankerl::unordered_dense::map<Key, size_t> const expectedKeyToAge({{9, 4}}); |
| 110 | TestAge(age, 4 /* cache age */, expectedAgeToKey, expectedKeyToAge); |
| 111 | } |
| 112 | |
| 113 | age.InsertKey(12); |
| 114 | { |
| 115 | std::map<size_t, Key> const expectedAgeToKey({{4, 9}, {5, 12}}); |
| 116 | ankerl::unordered_dense::map<Key, size_t> const expectedKeyToAge({{9, 4}, {12, 5}}); |
| 117 | TestAge(age, 5 /* cache age */, expectedAgeToKey, expectedKeyToAge); |
| 118 | } |