@@ -23,6 +23,12 @@ def get_typedmethod(self, value):
23
23
self .count += 1
24
24
return self .count
25
25
26
+ @cachedmethod (lambda self : self .cache , info = True )
27
+ def get_info (self , value ):
28
+ print ("Cached.get_info() >> %s %s\n " , self , value )
29
+ self .count += 1
30
+ return self .count
31
+
26
32
@classmethod
27
33
@cachedmethod (lambda cls : cls .class_cache )
28
34
def get_classmethod (cls , value ):
@@ -47,6 +53,11 @@ def get(self, value):
47
53
self .count += 1
48
54
return self .count
49
55
56
+ @cachedmethod (lambda self : self .cache , lock = lambda self : self , info = True )
57
+ def get_info (self , value ):
58
+ self .count += 1
59
+ return self .count
60
+
50
61
def __enter__ (self ):
51
62
self .lock_count += 1
52
63
@@ -70,6 +81,23 @@ def get(self, value):
70
81
def get_lock (self , value ):
71
82
return Locked .get .__wrapped__ (self , value )
72
83
84
+ @cachedmethod (
85
+ lambda self : self .cache ,
86
+ condition = lambda self : self ,
87
+ info = True ,
88
+ )
89
+ def get_info (self , value ):
90
+ return Locked .get_info .__wrapped__ (self , value )
91
+
92
+ @cachedmethod (
93
+ lambda self : self .cache ,
94
+ lock = lambda self : self ,
95
+ condition = lambda self : self ,
96
+ info = True ,
97
+ )
98
+ def get_info_lock (self , value ):
99
+ return Locked .get_info .__wrapped__ (self , value )
100
+
73
101
def wait_for (self , predicate ):
74
102
self .wait_count += 1
75
103
@@ -361,21 +389,166 @@ def test(self):
361
389
self .assertEqual (Cached .get_classmethod (1 ), 2 )
362
390
self .assertEqual (cached .get_classmethod (1.0 ), 2 )
363
391
self .assertEqual (Cached .get_classmethod (1.0 ), 2 )
364
- self .assertEqual (cached .get_classmethod (1.0 ), 2 )
365
- self .assertEqual (Cached .get_classmethod (1.0 ), 2 )
392
+ self .assertEqual (Cached .get_classmethod (1.1 ), 3 )
393
+ self .assertEqual (cached .get_classmethod (1.1 ), 3 )
366
394
367
395
cached .class_cache .clear ()
368
- self .assertEqual (cached .get_classmethod (1 ), 3 )
396
+ self .assertEqual (cached .get_classmethod (1 ), 4 )
369
397
370
398
def test_typedmethod (self ):
371
399
Cached .class_cache = LRUCache (2 )
372
400
Cached .class_count = 0
373
401
cached = Cached (None )
374
402
375
403
self .assertEqual (cached .get_typedclassmethod (0 ), 1 )
404
+ self .assertEqual (Cached .get_typedclassmethod (0 ), 1 )
376
405
self .assertEqual (cached .get_typedclassmethod (1 ), 2 )
377
- self .assertEqual (cached .get_typedclassmethod (1 ), 2 )
378
- self .assertEqual (cached .get_typedclassmethod (1.0 ), 3 )
406
+ self .assertEqual (Cached .get_typedclassmethod (1 ), 2 )
379
407
self .assertEqual (cached .get_typedclassmethod (1.0 ), 3 )
408
+ self .assertEqual (Cached .get_typedclassmethod (1.0 ), 3 )
380
409
self .assertEqual (cached .get_typedclassmethod (0.0 ), 4 )
410
+ self .assertEqual (Cached .get_typedclassmethod (0.0 ), 4 )
411
+ self .assertEqual (Cached .get_typedclassmethod (0 ), 5 )
381
412
self .assertEqual (cached .get_typedclassmethod (0 ), 5 )
413
+
414
+
415
+ class CachedMethodInfoTest (unittest .TestCase ):
416
+
417
+ def test_info (self ):
418
+ cache = {}
419
+ cached = Cached (cache )
420
+
421
+ self .assertEqual (len (cache ), 0 )
422
+ # self.assertEqual(Cached.get_info.cache_info(cached), (0, 0, None, 0))
423
+ self .assertEqual (cached .get_info .cache_info (), (0 , 0 , None , 0 ))
424
+ self .assertEqual (cached .get_info (0 ), 1 )
425
+ self .assertEqual (len (cache ), 1 )
426
+ # self.assertEqual(Cached.get_info.cache_info(), (0, 1, None, 1))
427
+ self .assertEqual (cached .get_info (1 ), 2 )
428
+ self .assertEqual (len (cache ), 2 )
429
+ # self.assertEqual(Cached.get_info.cache_info(), (0, 2, None, 2))
430
+ self .assertEqual (cached .get_info (1 ), 2 )
431
+ self .assertEqual (len (cache ), 2 )
432
+ # self.assertEqual(Cached.get_info.cache_info(), (1, 2, None, 2))
433
+ Cached .get_info .cache_clear (cached )
434
+ self .assertEqual (len (cache ), 0 )
435
+ # self.assertEqual(Cached.get_info.cache_info(), (0, 0, None, 0))
436
+
437
+ def test_info_locked (self ):
438
+ cache = {}
439
+ cached = Locked (cache )
440
+
441
+ self .assertEqual (len (cache ), 0 )
442
+ # self.assertEqual(Cached.get_info.cache_info(cached), (0, 0, None, 0))
443
+ self .assertEqual (cached .get_info .cache_info (), (0 , 0 , None , 0 ))
444
+ # self.assertEqual(cached.lock_count, 1)
445
+ self .assertEqual (cached .get_info (0 ), 1 )
446
+ self .assertEqual (len (cache ), 1 )
447
+ # self.assertEqual(cached.lock_count, 3)
448
+ # self.assertEqual(cached.get_info.cache_info(cached), (0, 1, None, 1))
449
+ # self.assertEqual(cached.lock_count, 4)
450
+ self .assertEqual (cached .get_info (1 ), 2 )
451
+ self .assertEqual (len (cache ), 2 )
452
+ # self.assertEqual(cached.lock_count, 6)
453
+ # self.assertEqual(cached.get_info.cache_info(cached), (0, 2, None, 2))
454
+ # self.assertEqual(cached.lock_count, 7)
455
+ self .assertEqual (cached .get_info (1 ), 2 )
456
+ self .assertEqual (len (cache ), 2 )
457
+ # self.assertEqual(cached.lock_count, 8)
458
+ # self.assertEqual(cached.get_info.cache_info(cached), (1, 2, None, 2))
459
+ # self.assertEqual(cached.lock_count, 9)
460
+ cached .get_info .cache_clear (cached )
461
+ # self.assertEqual(cached.lock_count, 10)
462
+ self .assertEqual (len (cache ), 0 )
463
+ # self.assertEqual(cached.get_info.cache_info(cached), (0, 0, None, 0))
464
+
465
+ def test_info_condition (self ):
466
+ cache = {}
467
+ cached = Conditioned (cache )
468
+
469
+ self .assertEqual (len (cache ), 0 )
470
+ # self.assertEqual(Cached.get_info.cache_info(cached), (0, 0, None, 0))
471
+ # self.assertEqual(cached.get_info.cache_info(), (0, 0, None, 0))
472
+ # self.assertEqual(cached.lock_count, 1)
473
+ self .assertEqual (cached .get_info (0 ), 1 )
474
+ self .assertEqual (len (cache ), 1 )
475
+ # self.assertEqual(cached.lock_count, 4)
476
+ # self.assertEqual(cached.get_info.cache_info(cached), (0, 1, None, 1))
477
+ # self.assertEqual(cached.lock_count, 5)
478
+ self .assertEqual (cached .get_info (1 ), 2 )
479
+ self .assertEqual (len (cache ), 2 )
480
+ # self.assertEqual(cached.lock_count, 8)
481
+ # self.assertEqual(cached.get_info.cache_info(cached), (0, 2, None, 2))
482
+ # self.assertEqual(cached.lock_count, 9)
483
+ self .assertEqual (cached .get_info (1 ), 2 )
484
+ self .assertEqual (len (cache ), 2 )
485
+ # self.assertEqual(cached.lock_count, 10)
486
+ # self.assertEqual(cached.get_info.cache_info(cached), (1, 2, None, 2))
487
+ # self.assertEqual(cached.lock_count, 11)
488
+ cached .get_info .cache_clear (cached )
489
+ # self.assertEqual(cached.lock_count, 12)
490
+ self .assertEqual (len (cache ), 0 )
491
+ # self.assertEqual(cached.get_info.cache_info(cached), (0, 0, None, 0))
492
+
493
+ def test_info_lru (self ):
494
+ cache = LRUCache (maxsize = 2 )
495
+ cached = Cached (cache )
496
+
497
+ self .assertEqual (cached .get_info .cache_info (), (0 , 0 , 2 , 0 ))
498
+ # self.assertEqual(Cached.get_info.cache_info(cached), (0, 0, 2, 0))
499
+ self .assertEqual (cached .get_info (0 ), 1 )
500
+ # self.assertEqual(cached.get_info.cache_info(cached), (0, 1, 2, 1))
501
+ self .assertEqual (cached .get_info (1 ), 2 )
502
+ # self.assertEqual(cached.get_info.cache_info(cached), (0, 2, 2, 2))
503
+ self .assertEqual (cached .get_info (1 ), 2 )
504
+ # self.assertEqual(cached.get_info.cache_info(cached), (1, 2, 2, 2))
505
+
506
+ def test_info_nospace (self ):
507
+ cached = Cached (LRUCache (maxsize = 0 ))
508
+
509
+ self .assertEqual (cached .get_info (0 ), 1 )
510
+ self .assertEqual (cached .get_info (1 ), 2 )
511
+ self .assertEqual (cached .get_info (1 ), 3 )
512
+ self .assertEqual (cached .get_info (1.0 ), 4 )
513
+ self .assertEqual (cached .get_info (1.0 ), 5 )
514
+ # self.assertEqual(cached.get_info.cache_info(cached), (0, 5, 0, 0))
515
+
516
+ def test_info_locked_nospace (self ):
517
+ cached = Locked (LRUCache (maxsize = 0 ))
518
+
519
+ self .assertEqual (cached .get_info (0 ), 1 )
520
+ # self.assertEqual(cached.lock_count, 2)
521
+ self .assertEqual (cached .get_info (1 ), 2 )
522
+ # self.assertEqual(cached.lock_count, 4)
523
+ self .assertEqual (cached .get_info (1 ), 3 )
524
+ # self.assertEqual(cached.lock_count, 6)
525
+ self .assertEqual (cached .get_info (1.0 ), 4 )
526
+ # self.assertEqual(cached.lock_count, 8)
527
+ self .assertEqual (cached .get_info (1.0 ), 5 )
528
+ # self.assertEqual(cached.lock_count, 10)
529
+ # self.assertEqual(cached.get_info.cache_info(cached), (0, 5, 0, 0))
530
+
531
+ def test_info_condition_nospace (self ):
532
+ cached = Conditioned (LRUCache (maxsize = 0 ))
533
+
534
+ self .assertEqual (cached .get_info (0 ), 1 )
535
+ # self.assertEqual(cached.lock_count, 3)
536
+ # self.assertEqual(cached.wait_count, 1)
537
+ # self.assertEqual(cached.notify_count, 1)
538
+ self .assertEqual (cached .get_info (1 ), 2 )
539
+ # self.assertEqual(cached.lock_count, 6)
540
+ # self.assertEqual(cached.wait_count, 2)
541
+ # self.assertEqual(cached.notify_count, 2)
542
+ self .assertEqual (cached .get_info (1 ), 3 )
543
+ # self.assertEqual(cached.lock_count, 9)
544
+ # self.assertEqual(cached.wait_count, 3)
545
+ # self.assertEqual(cached.notify_count, 3)
546
+ self .assertEqual (cached .get_info (1.0 ), 4 )
547
+ # self.assertEqual(cached.lock_count, 12)
548
+ # self.assertEqual(cached.wait_count, 4)
549
+ # self.assertEqual(cached.notify_count, 4)
550
+ self .assertEqual (cached .get_info (1.0 ), 5 )
551
+ # self.assertEqual(cached.lock_count, 15)
552
+ # self.assertEqual(cached.wait_count, 5)
553
+ # self.assertEqual(cached.notify_count, 5)
554
+ # self.assertEqual(cached.get_info.cache_info(cached), (0, 5, 0, 0))
0 commit comments