Skip to content

Commit 820b154

Browse files
committed
Refactor @cachedmethod unit tests.
1 parent e497575 commit 820b154

File tree

1 file changed

+128
-77
lines changed

1 file changed

+128
-77
lines changed

tests/test_cachedmethod.py

Lines changed: 128 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,35 @@
66

77

88
class Cached:
9+
10+
class_cache = LRUCache(2)
11+
class_count = 0
12+
913
def __init__(self, cache, count=0):
1014
self.cache = cache
1115
self.count = count
1216

1317
@cachedmethod(lambda self: self.cache)
1418
def get(self, value):
15-
count = self.count
1619
self.count += 1
17-
return count
20+
return self.count
1821

1922
@cachedmethod(lambda self: self.cache, key=keys.typedmethodkey)
2023
def get_typedmethod(self, value):
21-
count = self.count
2224
self.count += 1
23-
return count
25+
return self.count
26+
27+
@classmethod
28+
@cachedmethod(lambda cls: cls.class_cache)
29+
def get_classmethod(cls, value):
30+
cls.class_count += 1
31+
return cls.class_count
32+
33+
@classmethod
34+
@cachedmethod(lambda cls: cls.class_cache, key=keys.typedmethodkey)
35+
def get_typedclassmethod(cls, value):
36+
cls.class_count += 1
37+
return cls.class_count
2438

2539

2640
class Locked:
@@ -31,9 +45,8 @@ def __init__(self, cache):
3145

3246
@cachedmethod(lambda self: self.cache, lock=lambda self: self)
3347
def get(self, value):
34-
count = self.count
3548
self.count += 1
36-
return count
49+
return self.count
3750

3851
def __enter__(self):
3952
self.lock_count += 1
@@ -86,69 +99,69 @@ class CachedMethodTest(unittest.TestCase):
8699
def test_dict(self):
87100
cached = Cached({})
88101

89-
self.assertEqual(cached.get(0), 0)
90-
self.assertEqual(cached.get(1), 1)
91-
self.assertEqual(cached.get(1), 1)
92-
self.assertEqual(cached.get(1.0), 1)
93-
self.assertEqual(cached.get(1.0), 1)
102+
self.assertEqual(cached.get(0), 1)
103+
self.assertEqual(cached.get(1), 2)
104+
self.assertEqual(cached.get(1), 2)
105+
self.assertEqual(cached.get(1.0), 2)
106+
self.assertEqual(cached.get(1.0), 2)
94107

95108
cached.cache.clear()
96-
self.assertEqual(cached.get(1), 2)
109+
self.assertEqual(cached.get(1), 3)
97110

98111
def test_typedmethod_dict(self):
99112
cached = Cached(LRUCache(maxsize=2))
100113

101-
self.assertEqual(cached.get_typedmethod(0), 0)
102-
self.assertEqual(cached.get_typedmethod(1), 1)
103-
self.assertEqual(cached.get_typedmethod(1), 1)
104-
self.assertEqual(cached.get_typedmethod(1.0), 2)
105-
self.assertEqual(cached.get_typedmethod(1.0), 2)
106-
self.assertEqual(cached.get_typedmethod(0.0), 3)
107-
self.assertEqual(cached.get_typedmethod(0), 4)
114+
self.assertEqual(cached.get_typedmethod(0), 1)
115+
self.assertEqual(cached.get_typedmethod(1), 2)
116+
self.assertEqual(cached.get_typedmethod(1), 2)
117+
self.assertEqual(cached.get_typedmethod(1.0), 3)
118+
self.assertEqual(cached.get_typedmethod(1.0), 3)
119+
self.assertEqual(cached.get_typedmethod(0.0), 4)
120+
self.assertEqual(cached.get_typedmethod(0), 5)
108121

109122
def test_lru(self):
110123
cached = Cached(LRUCache(maxsize=2))
111124

112-
self.assertEqual(cached.get(0), 0)
113-
self.assertEqual(cached.get(1), 1)
114-
self.assertEqual(cached.get(1), 1)
115-
self.assertEqual(cached.get(1.0), 1)
116-
self.assertEqual(cached.get(1.0), 1)
125+
self.assertEqual(cached.get(0), 1)
126+
self.assertEqual(cached.get(1), 2)
127+
self.assertEqual(cached.get(1), 2)
128+
self.assertEqual(cached.get(1.0), 2)
129+
self.assertEqual(cached.get(1.0), 2)
117130

118131
cached.cache.clear()
119-
self.assertEqual(cached.get(1), 2)
132+
self.assertEqual(cached.get(1), 3)
120133

121134
def test_typedmethod_lru(self):
122135
cached = Cached(LRUCache(maxsize=2))
123136

124-
self.assertEqual(cached.get_typedmethod(0), 0)
125-
self.assertEqual(cached.get_typedmethod(1), 1)
126-
self.assertEqual(cached.get_typedmethod(1), 1)
127-
self.assertEqual(cached.get_typedmethod(1.0), 2)
128-
self.assertEqual(cached.get_typedmethod(1.0), 2)
129-
self.assertEqual(cached.get_typedmethod(0.0), 3)
130-
self.assertEqual(cached.get_typedmethod(0), 4)
137+
self.assertEqual(cached.get_typedmethod(0), 1)
138+
self.assertEqual(cached.get_typedmethod(1), 2)
139+
self.assertEqual(cached.get_typedmethod(1), 2)
140+
self.assertEqual(cached.get_typedmethod(1.0), 3)
141+
self.assertEqual(cached.get_typedmethod(1.0), 3)
142+
self.assertEqual(cached.get_typedmethod(0.0), 4)
143+
self.assertEqual(cached.get_typedmethod(0), 5)
131144

132145
def test_nospace(self):
133146
cached = Cached(LRUCache(maxsize=0))
134147

135-
self.assertEqual(cached.get(0), 0)
136-
self.assertEqual(cached.get(1), 1)
148+
self.assertEqual(cached.get(0), 1)
137149
self.assertEqual(cached.get(1), 2)
138-
self.assertEqual(cached.get(1.0), 3)
150+
self.assertEqual(cached.get(1), 3)
139151
self.assertEqual(cached.get(1.0), 4)
152+
self.assertEqual(cached.get(1.0), 5)
140153

141154
def test_nocache(self):
142155
cached = Cached(None)
143156

144157
with warnings.catch_warnings(record=True) as w:
145158
warnings.simplefilter("always")
146159

147-
self.assertEqual(cached.get(0), 0)
148-
self.assertEqual(cached.get(1), 1)
160+
self.assertEqual(cached.get(0), 1)
149161
self.assertEqual(cached.get(1), 2)
150-
self.assertEqual(cached.get(1.0), 3)
162+
self.assertEqual(cached.get(1), 3)
151163
self.assertEqual(cached.get(1.0), 4)
164+
self.assertEqual(cached.get(1.0), 5)
152165

153166
self.assertEqual(len(w), 5)
154167
self.assertIs(w[0].category, DeprecationWarning)
@@ -166,7 +179,7 @@ def __add__(self, other):
166179

167180
cached = Cached(weakref.WeakValueDictionary(), count=Int(0))
168181

169-
self.assertEqual(cached.get(0), 0)
182+
self.assertEqual(cached.get(0), 1)
170183
gc.collect()
171184
self.assertEqual(cached.get(0), 1)
172185

@@ -175,44 +188,44 @@ def __add__(self, other):
175188
self.assertEqual(cached.get(1), 2)
176189
self.assertEqual(cached.get(1.0), 2)
177190

178-
ref = cached.get_typedmethod(1)
191+
ref = cached.get_typedmethod(2)
179192
self.assertEqual(ref, 3)
180-
self.assertEqual(cached.get_typedmethod(1), 3)
181-
self.assertEqual(cached.get_typedmethod(1.0), 4)
193+
self.assertEqual(cached.get_typedmethod(1), 4)
194+
self.assertEqual(cached.get_typedmethod(1.0), 5)
182195

183196
cached.cache.clear()
184-
self.assertEqual(cached.get(1), 5)
197+
self.assertEqual(cached.get(1), 6)
185198

186199
def test_locked_dict(self):
187200
cached = Locked({})
188201

189-
self.assertEqual(cached.get(0), 0)
202+
self.assertEqual(cached.get(0), 1)
190203
self.assertEqual(cached.lock_count, 2)
191-
self.assertEqual(cached.get(1), 1)
204+
self.assertEqual(cached.get(1), 2)
192205
self.assertEqual(cached.lock_count, 4)
193-
self.assertEqual(cached.get(1), 1)
206+
self.assertEqual(cached.get(1), 2)
194207
self.assertEqual(cached.lock_count, 5)
195-
self.assertEqual(cached.get(1.0), 1)
208+
self.assertEqual(cached.get(1.0), 2)
196209
self.assertEqual(cached.lock_count, 6)
197-
self.assertEqual(cached.get(1.0), 1)
210+
self.assertEqual(cached.get(1.0), 2)
198211
self.assertEqual(cached.lock_count, 7)
199212

200213
cached.cache.clear()
201-
self.assertEqual(cached.get(1), 2)
214+
self.assertEqual(cached.get(1), 3)
202215
self.assertEqual(cached.lock_count, 9)
203216

204217
def test_locked_nospace(self):
205218
cached = Locked(LRUCache(maxsize=0))
206219

207-
self.assertEqual(cached.get(0), 0)
220+
self.assertEqual(cached.get(0), 1)
208221
self.assertEqual(cached.lock_count, 2)
209-
self.assertEqual(cached.get(1), 1)
210-
self.assertEqual(cached.lock_count, 4)
211222
self.assertEqual(cached.get(1), 2)
223+
self.assertEqual(cached.lock_count, 4)
224+
self.assertEqual(cached.get(1), 3)
212225
self.assertEqual(cached.lock_count, 6)
213-
self.assertEqual(cached.get(1.0), 3)
214-
self.assertEqual(cached.lock_count, 8)
215226
self.assertEqual(cached.get(1.0), 4)
227+
self.assertEqual(cached.lock_count, 8)
228+
self.assertEqual(cached.get(1.0), 5)
216229
self.assertEqual(cached.lock_count, 10)
217230

218231
def test_locked_nocache(self):
@@ -221,11 +234,11 @@ def test_locked_nocache(self):
221234
with warnings.catch_warnings(record=True) as w:
222235
warnings.simplefilter("always")
223236

224-
self.assertEqual(cached.get(0), 0)
225-
self.assertEqual(cached.get(1), 1)
237+
self.assertEqual(cached.get(0), 1)
226238
self.assertEqual(cached.get(1), 2)
227-
self.assertEqual(cached.get(1.0), 3)
239+
self.assertEqual(cached.get(1), 3)
228240
self.assertEqual(cached.get(1.0), 4)
241+
self.assertEqual(cached.get(1.0), 5)
229242
self.assertEqual(cached.lock_count, 0)
230243

231244
self.assertEqual(len(w), 5)
@@ -234,53 +247,53 @@ def test_locked_nocache(self):
234247
def test_condition_dict(self):
235248
cached = Conditioned({})
236249

237-
self.assertEqual(cached.get(0), 0)
250+
self.assertEqual(cached.get(0), 1)
238251
self.assertEqual(cached.lock_count, 3)
239252
self.assertEqual(cached.wait_count, 1)
240253
self.assertEqual(cached.notify_count, 1)
241-
self.assertEqual(cached.get(1), 1)
254+
self.assertEqual(cached.get(1), 2)
242255
self.assertEqual(cached.lock_count, 6)
243256
self.assertEqual(cached.wait_count, 2)
244257
self.assertEqual(cached.notify_count, 2)
245-
self.assertEqual(cached.get(1), 1)
258+
self.assertEqual(cached.get(1), 2)
246259
self.assertEqual(cached.lock_count, 7)
247260
self.assertEqual(cached.wait_count, 3)
248261
self.assertEqual(cached.notify_count, 2)
249-
self.assertEqual(cached.get(1.0), 1)
262+
self.assertEqual(cached.get(1.0), 2)
250263
self.assertEqual(cached.lock_count, 8)
251264
self.assertEqual(cached.wait_count, 4)
252265
self.assertEqual(cached.notify_count, 2)
253-
self.assertEqual(cached.get(1.0), 1)
266+
self.assertEqual(cached.get(1.0), 2)
254267
self.assertEqual(cached.lock_count, 9)
255268
self.assertEqual(cached.wait_count, 5)
256269
self.assertEqual(cached.notify_count, 2)
257270

258271
cached.cache.clear()
259-
self.assertEqual(cached.get(1), 2)
272+
self.assertEqual(cached.get(1), 3)
260273
self.assertEqual(cached.lock_count, 12)
261274
self.assertEqual(cached.wait_count, 6)
262275
self.assertEqual(cached.notify_count, 3)
263276

264277
def test_condition_nospace(self):
265278
cached = Conditioned(LRUCache(maxsize=0))
266279

267-
self.assertEqual(cached.get(0), 0)
280+
self.assertEqual(cached.get(0), 1)
268281
self.assertEqual(cached.lock_count, 3)
269282
self.assertEqual(cached.wait_count, 1)
270283
self.assertEqual(cached.notify_count, 1)
271-
self.assertEqual(cached.get(1), 1)
284+
self.assertEqual(cached.get(1), 2)
272285
self.assertEqual(cached.lock_count, 6)
273286
self.assertEqual(cached.wait_count, 2)
274287
self.assertEqual(cached.notify_count, 2)
275-
self.assertEqual(cached.get(1), 2)
288+
self.assertEqual(cached.get(1), 3)
276289
self.assertEqual(cached.lock_count, 9)
277290
self.assertEqual(cached.wait_count, 3)
278291
self.assertEqual(cached.notify_count, 3)
279-
self.assertEqual(cached.get(1.0), 3)
292+
self.assertEqual(cached.get(1.0), 4)
280293
self.assertEqual(cached.lock_count, 12)
281294
self.assertEqual(cached.wait_count, 4)
282295
self.assertEqual(cached.notify_count, 4)
283-
self.assertEqual(cached.get(1.0), 4)
296+
self.assertEqual(cached.get(1.0), 5)
284297
self.assertEqual(cached.lock_count, 15)
285298
self.assertEqual(cached.wait_count, 5)
286299
self.assertEqual(cached.notify_count, 5)
@@ -291,11 +304,11 @@ def test_condition_nocache(self):
291304
with warnings.catch_warnings(record=True) as w:
292305
warnings.simplefilter("always")
293306

294-
self.assertEqual(cached.get(0), 0)
295-
self.assertEqual(cached.get(1), 1)
307+
self.assertEqual(cached.get(0), 1)
296308
self.assertEqual(cached.get(1), 2)
297-
self.assertEqual(cached.get(1.0), 3)
309+
self.assertEqual(cached.get(1), 3)
298310
self.assertEqual(cached.get(1.0), 4)
311+
self.assertEqual(cached.get(1.0), 5)
299312
self.assertEqual(cached.lock_count, 0)
300313
self.assertEqual(cached.wait_count, 0)
301314
self.assertEqual(cached.notify_count, 0)
@@ -317,11 +330,11 @@ def test_wrapped(self):
317330
cached = Cached(cache)
318331

319332
self.assertEqual(len(cache), 0)
320-
self.assertEqual(Cached.get.__wrapped__(cached, 0), 0)
333+
self.assertEqual(Cached.get.__wrapped__(cached, 0), 1)
321334
self.assertEqual(len(cache), 0)
322-
self.assertEqual(cached.get(0), 1)
335+
self.assertEqual(cached.get(0), 2)
323336
self.assertEqual(len(cache), 1)
324-
self.assertEqual(cached.get(0), 1)
337+
self.assertEqual(cached.get(0), 2)
325338
self.assertEqual(len(cache), 1)
326339

327340
def test_attributes(self):
@@ -355,7 +368,7 @@ def test_clear(self):
355368
cache = {}
356369
cached = Cached(cache)
357370

358-
self.assertEqual(cached.get(0), 0)
371+
self.assertEqual(cached.get(0), 1)
359372
self.assertEqual(len(cache), 1)
360373
Cached.get.cache_clear(cached)
361374
self.assertEqual(len(cache), 0)
@@ -364,7 +377,7 @@ def test_clear_locked(self):
364377
cache = {}
365378
cached = Locked(cache)
366379

367-
self.assertEqual(cached.get(0), 0)
380+
self.assertEqual(cached.get(0), 1)
368381
self.assertEqual(len(cache), 1)
369382
self.assertEqual(cached.lock_count, 2)
370383
Locked.get.cache_clear(cached)
@@ -375,9 +388,47 @@ def test_clear_condition(self):
375388
cache = {}
376389
cached = Conditioned(cache)
377390

378-
self.assertEqual(cached.get(0), 0)
391+
self.assertEqual(cached.get(0), 1)
379392
self.assertEqual(len(cache), 1)
380393
self.assertEqual(cached.lock_count, 3)
381394
Conditioned.get.cache_clear(cached)
382395
self.assertEqual(len(cache), 0)
383396
self.assertEqual(cached.lock_count, 4)
397+
398+
399+
class CachedClassMethodTest(unittest.TestCase):
400+
401+
def test(self):
402+
Cached.class_cache = LRUCache(2)
403+
Cached.class_count = 0
404+
cached = Cached(None)
405+
406+
self.assertEqual(cached.get_classmethod(0), 1)
407+
self.assertEqual(Cached.get_classmethod(0), 1)
408+
self.assertEqual(cached.get_classmethod(1), 2)
409+
self.assertEqual(Cached.get_classmethod(1), 2)
410+
self.assertEqual(cached.get_classmethod(1), 2)
411+
self.assertEqual(Cached.get_classmethod(1), 2)
412+
self.assertEqual(cached.get_classmethod(1.0), 2)
413+
self.assertEqual(Cached.get_classmethod(1.0), 2)
414+
self.assertEqual(Cached.get_classmethod(1.1), 3)
415+
self.assertEqual(cached.get_classmethod(1.1), 3)
416+
417+
cached.class_cache.clear()
418+
self.assertEqual(cached.get_classmethod(1), 4)
419+
420+
def test_typedmethod(self):
421+
Cached.class_cache = LRUCache(2)
422+
Cached.class_count = 0
423+
cached = Cached(None)
424+
425+
self.assertEqual(cached.get_typedclassmethod(0), 1)
426+
self.assertEqual(Cached.get_typedclassmethod(0), 1)
427+
self.assertEqual(cached.get_typedclassmethod(1), 2)
428+
self.assertEqual(Cached.get_typedclassmethod(1), 2)
429+
self.assertEqual(cached.get_typedclassmethod(1.0), 3)
430+
self.assertEqual(Cached.get_typedclassmethod(1.0), 3)
431+
self.assertEqual(cached.get_typedclassmethod(0.0), 4)
432+
self.assertEqual(Cached.get_typedclassmethod(0.0), 4)
433+
self.assertEqual(Cached.get_typedclassmethod(0), 5)
434+
self.assertEqual(cached.get_typedclassmethod(0), 5)

0 commit comments

Comments
 (0)