( self )
| 52 | self.assertTrue( r.objectPool().isSame( pool ) ) |
| 53 | |
| 54 | def test( self ) : |
| 55 | |
| 56 | pool = IECore.ObjectPool( 100 * 1024 * 1024 ) |
| 57 | r = IECore.CachedReader( IECore.SearchPath( "./" ), pool ) |
| 58 | |
| 59 | o = r.read( "test/IECore/data/cobFiles/compoundData.cob" ) |
| 60 | self.assertEqual( o.typeName(), "CompoundData" ) |
| 61 | self.assertEqual( pool.memoryUsage(), o.memoryUsage() ) |
| 62 | self.assertTrue( r.cached( "test/IECore/data/cobFiles/compoundData.cob" ) ) |
| 63 | |
| 64 | oo = r.read( "test/IECore/data/cobFiles/intDataTen.cob" ) |
| 65 | self.assertEqual( pool.memoryUsage(), o.memoryUsage() + oo.memoryUsage() ) |
| 66 | self.assertTrue( r.cached( "test/IECore/data/cobFiles/compoundData.cob" ) ) |
| 67 | self.assertTrue( r.cached( "test/IECore/data/cobFiles/intDataTen.cob" ) ) |
| 68 | |
| 69 | oo = r.read( "test/IECore/data/cobFiles/intDataTen.cob" ) |
| 70 | self.assertEqual( pool.memoryUsage(), o.memoryUsage() + oo.memoryUsage() ) |
| 71 | self.assertTrue( r.cached( "test/IECore/data/cobFiles/compoundData.cob" ) ) |
| 72 | self.assertTrue( r.cached( "test/IECore/data/cobFiles/intDataTen.cob" ) ) |
| 73 | |
| 74 | self.assertRaises( RuntimeError, r.read, "doesNotExist" ) |
| 75 | self.assertRaises( RuntimeError, r.read, "doesNotExist" ) |
| 76 | |
| 77 | # Here, the cache should throw away something, but we allow the |
| 78 | # use of an approximate LRU strategy, so we can't guarantee which |
| 79 | # object will be discarded. |
| 80 | pool.setMaxMemoryUsage( o.memoryUsage() + oo.memoryUsage() - 1 ) |
| 81 | self.assertLess( pool.memoryUsage(), o.memoryUsage() + oo.memoryUsage() ) |
| 82 | self.assertFalse( |
| 83 | r.cached( "test/IECore/data/cobFiles/compoundData.cob" ) and |
| 84 | r.cached( "test/IECore/data/cobFiles/intDataTen.cob" ) |
| 85 | ) |
| 86 | |
| 87 | # Here, the cache should throw away the remaining item because there |
| 88 | # is no room for it. |
| 89 | pool.setMaxMemoryUsage( pool.memoryUsage() // 2 ) |
| 90 | self.assertEqual( pool.memoryUsage(), 0 ) |
| 91 | self.assertFalse( |
| 92 | r.cached( "test/IECore/data/cobFiles/compoundData.cob" ) or |
| 93 | r.cached( "test/IECore/data/cobFiles/intDataTen.cob" ) |
| 94 | ) |
| 95 | |
| 96 | pool.setMaxMemoryUsage( oo.memoryUsage() * 2 ) |
| 97 | oo = r.read( "test/IECore/data/cobFiles/intDataTen.cob" ) |
| 98 | pool.clear() |
| 99 | r.clear() |
| 100 | self.assertEqual( pool.memoryUsage(), 0 ) |
| 101 | self.assertFalse( r.cached( "test/IECore/data/cobFiles/intDataTen.cob" ) ) |
| 102 | |
| 103 | oo = r.read( "test/IECore/data/cobFiles/intDataTen.cob" ) |
| 104 | self.assertEqual( pool.memoryUsage(), oo.memoryUsage() ) |
| 105 | self.assertTrue( r.cached( "test/IECore/data/cobFiles/intDataTen.cob" ) ) |
| 106 | r.clear( "I don't exist" ) |
| 107 | self.assertTrue( r.cached( "test/IECore/data/cobFiles/intDataTen.cob" ) ) |
| 108 | self.assertEqual( pool.memoryUsage(), oo.memoryUsage() ) |
| 109 | r.clear( "test/IECore/data/cobFiles/intDataTen.cob" ) |
| 110 | self.assertEqual( pool.memoryUsage(), oo.memoryUsage() ) # clearing CachedReader doesn't clear the object from the pool |
| 111 | self.assertFalse( r.cached( "test/IECore/data/cobFiles/intDataTen.cob" ) ) |
nothing calls this directly
no test coverage detected