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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy