Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(556)

Unified Diff: infra_libs/test/memoize_test.py

Issue 2213143002: Add infra_libs as a bootstrap dependency. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Removed the ugly import hack Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: infra_libs/test/memoize_test.py
diff --git a/infra_libs/test/memoize_test.py b/infra_libs/test/memoize_test.py
deleted file mode 100755
index ad2f54dcbafbb3978b6db9da6c3b17a19468a67d..0000000000000000000000000000000000000000
--- a/infra_libs/test/memoize_test.py
+++ /dev/null
@@ -1,474 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2014 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.
-
-"""
-Collection of unit tests for 'infra.libs.memoize' library.
-"""
-
-import unittest
-
-from infra_libs import memoize
-
-class MemoTestCase(unittest.TestCase):
-
- def setUp(self):
- self.tagged = set()
-
- def tag(self, tag=None):
- self.assertNotIn(tag, self.tagged)
- self.tagged.add(tag)
-
- def assertTagged(self, *tags):
- if len(tags) == 0:
- tags = (None,)
- self.assertEqual(set(tags), self.tagged)
-
- def clearTagged(self):
- self.tagged.clear()
-
-
-class FunctionTestCase(MemoTestCase):
-
- def testFuncNoArgs(self):
- @memoize.memo()
- def func():
- self.tag()
- return 'foo'
-
- for _ in xrange(10):
- self.assertEqual(func(), 'foo')
- self.assertTagged()
-
- def testFuncAllArgs(self):
- @memoize.memo()
- def func(a, b):
- self.tag((a, b))
- return a + b
-
- # Execute multiple rounds of two unique function executions.
- for _ in xrange(10):
- self.assertEqual(func(1, 2), 3)
- self.assertEqual(func(3, 4), 7)
- self.assertTagged(
- (1, 2),
- (3, 4),
- )
-
- def testFuncIgnoreArgs(self):
- @memoize.memo(ignore=('b'))
- def func(a, b):
- self.tag(a)
- return a + b
-
- # Execute multiple rounds of two unique function executions.
- for _ in xrange(10):
- self.assertEqual(func(1, 1), 2)
- self.assertEqual(func(1, 2), 2)
- self.assertEqual(func(2, 1), 3)
- self.assertEqual(func(2, 2), 3)
- self.assertTagged(
- 1,
- 2,
- )
-
- def testOldClassMethod(self):
- class Test:
- # Disable 'no __init__ method' warning | pylint: disable=W0232
- # pylint: disable=old-style-class
-
- @classmethod
- @memoize.memo()
- def func(cls, a):
- self.tag(a)
- return a
-
- # Execute multiple rounds of two unique function executions.
- for _ in xrange(10):
- self.assertEqual(Test.func(1), 1)
- self.assertEqual(Test.func(2), 2)
- self.assertTagged(
- 1,
- 2,
- )
-
- def testNewClassMethod(self):
- class Test(object):
- # Disable 'no __init__ method' warning | pylint: disable=W0232
-
- @classmethod
- @memoize.memo()
- def func(cls, a):
- self.tag(a)
- return a
-
- # Execute multiple rounds of two unique function executions.
- for _ in xrange(10):
- self.assertEqual(Test.func(1), 1)
- self.assertEqual(Test.func(2), 2)
- self.assertTagged(
- 1,
- 2,
- )
-
- def testOldClassStaticMethod(self):
- class Test:
- # Disable 'no __init__ method' warning | pylint: disable=W0232
- # pylint: disable=old-style-class
-
- @staticmethod
- @memoize.memo()
- def func(a):
- self.tag(a)
- return a
-
- # Execute multiple rounds of two unique function executions.
- for _ in xrange(10):
- self.assertEqual(Test.func(1), 1)
- self.assertEqual(Test.func(2), 2)
- self.assertTagged(
- 1,
- 2,
- )
-
- def testNewClassStaticMethod(self):
- class Test(object):
- # Disable 'no __init__ method' warning | pylint: disable=W0232
-
- @staticmethod
- @memoize.memo()
- def func(a):
- self.tag(a)
- return a
-
- # Execute multiple rounds of two unique function executions.
- for _ in xrange(10):
- self.assertEqual(Test.func(1), 1)
- self.assertEqual(Test.func(2), 2)
- self.assertTagged(
- 1,
- 2,
- )
-
- def testClearAllArgs(self):
- @memoize.memo()
- def func(a, b=10):
- self.tag((a, b))
- return a + b
-
- # First round
- self.assertEqual(func(1), 11)
- self.assertEqual(func(1, b=0), 1)
- self.assertTagged(
- (1, 10),
- (1, 0),
- )
-
- # Clear (1)
- self.clearTagged()
- func.memo_clear(1)
-
- self.assertEqual(func(1), 11)
- self.assertEqual(func(1, b=0), 1)
- self.assertTagged(
- (1, 10),
- )
-
- # Clear (1, b=0)
- self.clearTagged()
- func.memo_clear(1, b=0)
-
- self.assertEqual(func(1), 11)
- self.assertEqual(func(1, b=0), 1)
- self.assertTagged(
- (1, 0),
- )
-
-
-class MemoInstanceMethodTestCase(MemoTestCase):
-
- class TestBaseOld:
- # pylint: disable=old-style-class
- def __init__(self, test_case, name):
- self.test_case = test_case
- self.name = name
-
- def __hash__(self):
- # Prevent this instance from being used as a memo key
- raise NotImplementedError()
-
-
- class TestBaseNew(object):
- def __init__(self, test_case, name):
- self.test_case = test_case
- self.name = name
-
- def __hash__(self):
- # Prevent this instance from being used as a memo key
- raise NotImplementedError()
-
-
- class TestHash(object):
-
- def __init__(self):
- self._counter = 0
-
- @memoize.memo()
- def __hash__(self):
- assert self._counter == 0
- self._counter += 1
- return self._counter
-
-
- def testOldClassNoArgs(self):
- class Test(self.TestBaseOld):
- # Disable 'hash not overridden' warning | pylint: disable=W0223
-
- @memoize.memo()
- def func(self):
- self.test_case.tag(self.name)
- return 'foo'
-
- t0 = Test(self, 't0')
- t1 = Test(self, 't1')
- for _ in xrange(10):
- self.assertEqual(t0.func(), 'foo')
- self.assertEqual(t1.func(), 'foo')
- self.assertTagged(
- 't0',
- 't1',
- )
-
- def testNewClassNoArgs(self):
- class Test(self.TestBaseNew):
- # Disable 'hash not overridden' warning | pylint: disable=W0223
-
- @memoize.memo()
- def func(self):
- self.test_case.tag(self.name)
- return 'foo'
-
- t0 = Test(self, 't0')
- t1 = Test(self, 't1')
- for _ in xrange(10):
- self.assertEqual(t0.func(), 'foo')
- self.assertEqual(t1.func(), 'foo')
- self.assertTagged(
- 't0',
- 't1',
- )
-
- def testOldClassArgs(self):
- class Test(self.TestBaseOld):
- # Disable 'hash not overridden' warning | pylint: disable=W0223
-
- @memoize.memo()
- def func(self, a, b):
- self.test_case.tag((self.name, a, b))
- return a + b
-
- t0 = Test(self, 't0')
- t1 = Test(self, 't1')
- for _ in xrange(10):
- self.assertEqual(t0.func(1, 2), 3)
- self.assertEqual(t0.func(1, 3), 4)
- self.assertEqual(t1.func(1, 2), 3)
- self.assertEqual(t1.func(1, 3), 4)
- self.assertTagged(
- ('t0', 1, 2),
- ('t0', 1, 3),
- ('t1', 1, 2),
- ('t1', 1, 3),
- )
-
- def testNewClassArgs(self):
- class Test(self.TestBaseNew):
- # Disable 'hash not overridden' warning | pylint: disable=W0223
-
- @memoize.memo()
- def func(self, a, b):
- self.test_case.tag((self.name, a, b))
- return a + b
-
- t0 = Test(self, 't0')
- t1 = Test(self, 't1')
- for _ in xrange(10):
- self.assertEqual(t0.func(1, 2), 3)
- self.assertEqual(t0.func(1, 3), 4)
- self.assertEqual(t1.func(1, 2), 3)
- self.assertEqual(t1.func(1, 3), 4)
- self.assertTagged(
- ('t0', 1, 2),
- ('t0', 1, 3),
- ('t1', 1, 2),
- ('t1', 1, 3),
- )
-
- def testNewClassDirectCall(self):
- class Test(self.TestBaseNew):
- # Disable 'hash not overridden' warning | pylint: disable=W0223
-
- @memoize.memo()
- def func(self, a, b):
- self.test_case.tag((self.name, a, b))
- return a + b
-
- t0 = Test(self, 't0')
- for _ in xrange(10):
- self.assertEqual(t0.func.__get__(t0)(1,2), 3)
- self.assertTagged(
- ('t0', 1, 2),
- )
-
- def testClear(self):
- class Test(self.TestBaseNew):
- # Disable 'hash not overridden' warning | pylint: disable=W0223
-
- @memoize.memo()
- def func(self, a):
- self.test_case.tag((self.name, a))
- return a
-
- # Call '10' and '20'
- t = Test(self, 'test')
- t.func(10)
- self.assertTagged(
- ('test', 10),
- )
-
- # Clear
- self.clearTagged()
- t.func.memo_clear(10)
-
- # Call '10'; it should be tagged
- t.func(10)
- self.assertTagged(
- ('test', 10),
- )
-
-
- def testOverrideHash(self):
- t = self.TestHash()
- self.assertEquals(hash(t), 1)
- self.assertEquals(hash(t), 1)
-
-
-class MemoClassMethodTestCase(MemoTestCase):
- """Tests handling of the 'cls' and 'self' parameters"""
-
- class Test(object):
-
- def __init__(self, test_case, name):
- self.test_case = test_case
- self.name = name
- self._value = 0
-
- @memoize.memo(ignore=('tag',))
- def func(self, a, tag):
- self.test_case.tag(tag)
- return a
-
- @classmethod
- @memoize.memo(ignore=('test_case', 'tag'))
- def class_func(cls, test_case, memo_value, tag):
- test_case.tag(tag)
- return memo_value
-
- @property
- @memoize.memo()
- def prop(self):
- self.test_case.tag(self.name)
- return self._value
-
- @prop.setter
- def prop(self, value):
- self._value = value
-
- @prop.deleter
- def prop(self):
- self._value = 0
-
-
- class TestWithEquals(Test):
-
- def __hash__(self):
- return 7
-
- def __eq__(self, other):
- return type(other) == type(self)
-
-
- def testClassMethodNoEquals(self):
- self.assertEqual(self.Test.class_func(self, 1, 't0'), 1)
- self.assertEqual(self.Test.class_func(self, 1, 't1'), 1)
- self.assertEqual(self.Test.class_func(self, 2, 't2'), 2)
-
- self.Test.class_func.memo_clear(self.Test, self, 2, None)
- self.assertEqual(self.Test.class_func(self, 1, 't3'), 1)
- self.assertEqual(self.Test.class_func(self, 2, 't4'), 2)
-
- self.Test.class_func.memo_clear()
- self.assertEqual(self.Test.class_func(self, 1, 't5'), 1)
-
- self.assertTagged(
- 't0',
- 't2',
- 't4',
- 't5',
- )
-
- def testInstanceMethodNoEquals(self):
- t0 = self.Test(self, 't0')
- t1 = self.Test(self, 't1')
-
- self.assertEqual(t0.func(1, 't0.0'), 1)
- self.assertEqual(t1.func(1, 't1.0'), 1)
-
- t1.func.memo_clear(1, None)
- self.assertEqual(t0.func(1, 't0.1'), 1)
- self.assertEqual(t1.func(1, 't1.1'), 1)
- self.assertTagged(
- 't0.0',
- 't1.0',
- 't1.1',
- )
-
- def testInstanceMethodWithEquals(self):
- t0 = self.TestWithEquals(self, 't0')
- t1 = self.TestWithEquals(self, 't1')
-
- self.assertEqual(hash(t0), 7)
- self.assertTrue(t0 == t1)
- self.assertEqual(t0.func(1, 't0.0'), 1)
- self.assertEqual(t1.func(1, 't1.0'), 1)
-
- t1.func.memo_clear(1, None)
- self.assertEqual(t0.func(1, 't0.1'), 1)
- self.assertEqual(t1.func(1, 't1.1'), 1)
- self.assertTagged(
- 't0.0',
- 't1.0',
- 't1.1',
- )
-
- def testProperty(self):
- t0 = self.Test(self, 't0')
- t1 = self.Test(self, 't1')
-
- # The property can be set.
- t0.prop = 1024
- t1.prop = 1337
- del(t1.prop)
- for _ in xrange(10):
- self.assertEqual(t0.prop, 1024)
- self.assertEqual(t1.prop, 0)
-
- self.assertTagged(
- 't0',
- 't1',
- )
-
-
-if __name__ == '__main__':
- unittest.main()

Powered by Google App Engine
This is Rietveld 408576698