public CacheThread(TestDoubleBarrelLRUCache outerInstance, DoubleBarrelLRUCache <CloneableObject, object> c, CloneableObject[] objs, DateTime endTime) { this.OuterInstance = outerInstance; this.c = c; this.Objs = objs; this.EndTime = endTime; }
public virtual void TestThreadCorrectness() { const int NUM_THREADS = 4; const int CACHE_SIZE = 512; int OBJ_COUNT = 3 * CACHE_SIZE; DoubleBarrelLRUCache <CloneableObject, object> c = new DoubleBarrelLRUCache <CloneableObject, object>(1024); CloneableObject[] objs = new CloneableObject[OBJ_COUNT]; for (int i = 0; i < OBJ_COUNT; i++) { objs[i] = new CloneableObject(new object()); } CacheThread[] threads = new CacheThread[NUM_THREADS]; DateTime endTime = DateTime.Now.AddSeconds(1); for (int i = 0; i < NUM_THREADS; i++) { threads[i] = new CacheThread(this, c, objs, endTime); threads[i].Start(); } for (int i = 0; i < NUM_THREADS; i++) { threads[i].Join(); Assert.False(threads[i].Failed); } //System.out.println("hits=" + totHit + " misses=" + totMiss); }
private void TestCache(DoubleBarrelLRUCache <CloneableInteger, object> cache, int n) { object dummy = new object(); for (int i = 0; i < n; i++) { cache.Put(new CloneableInteger(i), dummy); } // access every 2nd item in cache for (int i = 0; i < n; i += 2) { Assert.IsNotNull(cache.Get(new CloneableInteger(i))); } // add n/2 elements to cache, the ones that weren't // touched in the previous loop should now be thrown away for (int i = n; i < n + (n / 2); i++) { cache.Put(new CloneableInteger(i), dummy); } // access every 4th item in cache for (int i = 0; i < n; i += 4) { Assert.IsNotNull(cache.Get(new CloneableInteger(i))); } // add 3/4n elements to cache, the ones that weren't // touched in the previous loops should now be thrown away for (int i = n; i < n + (n * 3 / 4); i++) { cache.Put(new CloneableInteger(i), dummy); } // access every 4th item in cache for (int i = 0; i < n; i += 4) { Assert.IsNotNull(cache.Get(new CloneableInteger(i))); } }