예제 #1
0
        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.");
                    }
                }
            }
        }
예제 #2
0
        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());
        }