public void GetOrCreate_And_ClearCamerasUnusedFor_Works() { using (var cache = new CameraCache <int>()) { // Create cameras var cameras = new Camera[5]; for (var i = 0; i < cameras.Length; ++i) { cameras[i] = cache.GetOrCreate(i, i); Assert.IsNotNull(cameras[i]); } var frameCount = cameras.Length - 1; for (var frameWindow = frameCount; frameWindow >= 0; --frameWindow) { // Clear the cameras older than i frames cache.ClearCamerasUnusedFor(frameWindow, frameCount); // Assert the cameras are destroyed on the C++ side if they are unused // since i frames or more var cameraAreDestroyedBeforeFrameCount = frameCount - frameWindow; for (var j = 0; j < cameraAreDestroyedBeforeFrameCount; ++j) { Assert.True(cameras[j].Equals(null), $"Camera {j} is unused since {frameWindow} frames and must be destroyed."); } for (var j = cameraAreDestroyedBeforeFrameCount; j < cameras.Length; ++j) { Assert.False(cameras[j].Equals(null), $"Camera {j} is used since {frameWindow} frames and must be alive."); } } } }
public void UsingDisposedObject_Throws() { var cache = new CameraCache <int>(); cache.Dispose(); Assert.Throws <System.ObjectDisposedException>(() => cache.GetOrCreate(0, 0)); Assert.Throws <System.ObjectDisposedException>(() => cache.ClearCamerasUnusedFor(0, 0)); Assert.Throws <System.ObjectDisposedException>(() => cache.Clear()); Assert.Throws <System.ObjectDisposedException>(() => cache.Dispose()); }