summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/platform/wtf/lru_cache_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/platform/wtf/lru_cache_test.cc')
-rw-r--r--chromium/third_party/blink/renderer/platform/wtf/lru_cache_test.cc110
1 files changed, 110 insertions, 0 deletions
diff --git a/chromium/third_party/blink/renderer/platform/wtf/lru_cache_test.cc b/chromium/third_party/blink/renderer/platform/wtf/lru_cache_test.cc
new file mode 100644
index 00000000000..914b15db53f
--- /dev/null
+++ b/chromium/third_party/blink/renderer/platform/wtf/lru_cache_test.cc
@@ -0,0 +1,110 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/renderer/platform/wtf/lru_cache.h"
+
+#include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
+#include "third_party/blink/renderer/platform/wtf/text/string_hash.h"
+#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
+#include "third_party/blink/renderer/platform/wtf/vector.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace WTF {
+
+TEST(LruCacheTest, TestEmpty) {
+ LruCache<int, int> test_cache(1);
+ EXPECT_EQ(test_cache.Get(0), nullptr);
+}
+
+TEST(LruCacheTest, TestInstantiation) {
+ const int kMaxSize = 10;
+ const int kOffset = 1000;
+ LruCache<int, int> test_cache(kMaxSize);
+ EXPECT_EQ(test_cache.size(), 0u);
+ for (size_t i = 1; i < kMaxSize * 10; ++i) {
+ test_cache.Put(i, kOffset + i);
+ }
+ EXPECT_EQ(test_cache.size(), kMaxSize * 1u);
+ EXPECT_EQ(*test_cache.Get(kMaxSize * 10 - 1), kOffset + (kMaxSize * 10 - 1));
+ EXPECT_EQ(*test_cache.Get(kMaxSize * 10 - 2), kOffset + (kMaxSize * 10 - 2));
+ EXPECT_EQ(test_cache.Get(89), nullptr);
+ EXPECT_EQ(test_cache.Get(1), nullptr);
+ test_cache.Clear();
+ EXPECT_EQ(test_cache.size(), 0u);
+}
+
+TEST(LruCacheTest, TestString) {
+ const size_t kMaxSize = 4;
+ const char* test_strings[] = {"1_testing", "2_LruCache", "3_using",
+ "4_several", "5_random", "6_strings"};
+ LruCache<uint16_t, String> test_cache(kMaxSize);
+ uint16_t counter = 1;
+ EXPECT_EQ(test_cache.size(), 0u);
+ for (auto* test_string : test_strings) {
+ test_cache.Put(counter, test_string);
+ counter++;
+ }
+ EXPECT_EQ(test_cache.size(), kMaxSize);
+ EXPECT_EQ(test_cache.Get(1), nullptr);
+ EXPECT_EQ(test_cache.Get(2), nullptr);
+ EXPECT_EQ(*test_cache.Get(3), String(test_strings[2]));
+ EXPECT_EQ(*test_cache.Get(4), String(test_strings[3]));
+ EXPECT_EQ(*test_cache.Get(5), String(test_strings[4]));
+ EXPECT_EQ(*test_cache.Get(6), String(test_strings[5]));
+ test_cache.Put(1, test_strings[0]);
+ EXPECT_EQ(*test_cache.Get(1), String(test_strings[0]));
+ EXPECT_EQ(test_cache.Get(3), nullptr);
+ EXPECT_EQ(*test_cache.Get(4), String(test_strings[3]));
+ EXPECT_EQ(*test_cache.Get(5), String(test_strings[4]));
+ EXPECT_EQ(*test_cache.Get(6), String(test_strings[5]));
+ test_cache.Clear();
+ EXPECT_EQ(test_cache.size(), 0u);
+}
+
+TEST(LruCacheTest, TestOverrideKey) {
+ const size_t kMaxSize = 2;
+ const char* test_strings[] = {"original_value", "override"};
+ LruCache<uint16_t, String> test_cache(kMaxSize);
+ EXPECT_EQ(test_cache.size(), 0u);
+ test_cache.Put(1, test_strings[0]);
+ test_cache.Put(1, test_strings[1]);
+ EXPECT_EQ(*test_cache.Get(1), String(test_strings[1]));
+}
+
+TEST(LruCacheTest, StringToVector) {
+ const size_t kMaxSize = 4u;
+ LruCache<String, Vector<String>> typeface_cache(kMaxSize);
+
+ struct FontFallbackExample {
+ String locale;
+ String typeface_name;
+ } example_typefaces[] = {{"en_us", "Arial"},
+ {"ko", "Malgun Gothic"},
+ {"ja", "Yu Gothic UI"},
+ {"en_us", "Times New Roman"},
+ {"en_us", "Calibri"},
+ {"km", "Leelawadee UI"},
+ {"zh-Hans", "Microsoft Yahei UI"},
+ {"bn", "Nirmala UI"}};
+ for (auto& example : example_typefaces) {
+ Vector<String>* cache_for_locale = typeface_cache.Get(example.locale);
+ if (cache_for_locale) {
+ cache_for_locale->push_back(example.typeface_name);
+ } else {
+ Vector<String> new_cache_for_locale;
+ new_cache_for_locale.push_back(example.typeface_name);
+ typeface_cache.Put(String(example.locale),
+ std::move(new_cache_for_locale));
+ }
+ }
+ Vector<String>* vector_for_latin = typeface_cache.Get("en_us");
+ EXPECT_TRUE(vector_for_latin);
+ EXPECT_EQ(vector_for_latin->size(), 3u);
+ EXPECT_EQ(typeface_cache.Get("zh-Hant"), nullptr);
+ EXPECT_EQ(typeface_cache.Get("ko"), nullptr);
+ EXPECT_EQ(typeface_cache.Get("ja"), nullptr);
+}
+
+} // namespace WTF