chromium/third_party/blink/tools/blinkpy/common/lru_unittest.py

# Copyright 2024 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import unittest

from blinkpy.common.lru import LRUMapping


class LRUMappingTest(unittest.TestCase):

    def test_reorder_get(self):
        mapping = LRUMapping(2)
        mapping[1] = 1
        mapping[2] = 2
        self.assertEqual(list(mapping), [2, 1])
        self.assertEqual(mapping[1], 1)
        mapping[3] = 3
        self.assertEqual(list(mapping), [3, 1])

    def test_reorder_set(self):
        mapping = LRUMapping(2)
        mapping[1] = 1
        mapping[2] = 2
        self.assertEqual(list(mapping), [2, 1])
        mapping[1] = 1
        mapping[3] = 3
        self.assertEqual(list(mapping), [3, 1])

    def test_evict(self):
        mapping = LRUMapping(2)
        for i in range(4):
            mapping[i] = i
        self.assertEqual(list(mapping), [3, 2])

    def test_update_capacity(self):
        mapping = LRUMapping(1)
        with self.assertRaises(ValueError):
            mapping.capacity = -1
        mapping.capacity = 2
        mapping[1] = 1
        mapping[2] = 2
        self.assertEqual(list(mapping), [2, 1])