예제 #1
0
        public void NativeMemoryLifetime()
        {
            Memory <byte> copyStoredForLater;
            var           owner = new OwnedNativeMemory(1024);

            try {
                Memory <byte> memory      = owner.Memory;
                Memory <byte> memorySlice = memory.Slice(10);
                copyStoredForLater = memorySlice;
                var r = memorySlice.Reserve();
                try {
                    Assert.Throws <InvalidOperationException>(() => { // memory is reserved; cannot dispose
                        owner.Dispose();
                    });
                    Assert.Throws <ObjectDisposedException>(() => {
                        // memory is disposed
                        Span <byte> span = memorySlice.Span;
                        span[0]          = 255;
                    });
                }
                finally {
                    Assert.Throws <ObjectDisposedException>(() => {
                        // memory is disposed
                        r.Dispose();
                    });
                }
            }
            finally {
                Assert.Throws <InvalidOperationException>(() => {
                    // memory is still reserved as Release failed.
                    owner.Dispose();
                });
            }
            Assert.Throws <ObjectDisposedException>(() => { // manager is disposed
                var span = copyStoredForLater.Span;
            });
        }
예제 #2
0
 public void NativeMemoryLifetime()
 {
     Memory<byte> copyStoredForLater;
     using (var owner = new OwnedNativeMemory(1024)) {
         Memory<byte> memory = owner.Memory;
         Memory<byte> memorySlice = memory.Slice(10);
         copyStoredForLater = memorySlice;
         using (memorySlice.Reserve()) {
             Assert.Throws<InvalidOperationException>(() => { // memory is reserved; cannot dispose
                 owner.Dispose();
             }); 
             Span<byte> span = memorySlice.Span;
             span[0] = 255;
         }
     }
     Assert.Throws<ObjectDisposedException>(() => { // manager is disposed
         var span = copyStoredForLater.Span;
     });
 }
예제 #3
0
        public void NativeMemoryLifetime()
        {
            Memory <byte> copyStoredForLater;

            using (var owner = new OwnedNativeMemory(1024)) {
                Memory <byte> memory      = owner.Memory;
                Memory <byte> memorySlice = memory.Slice(10);
                copyStoredForLater = memorySlice;
                using (memorySlice.Reserve()) {
                    Assert.Throws <InvalidOperationException>(() => { // memory is reserved; cannot dispose
                        owner.Dispose();
                    });
                    Span <byte> span = memorySlice.Span;
                    span[0] = 255;
                }
            }
            Assert.Throws <ObjectDisposedException>(() => { // manager is disposed
                var span = copyStoredForLater.Span;
            });
        }