Example #1
0
        public unsafe void ReferenceCounting()
        {
            var owned  = new CustomMemory();
            var memory = owned.Memory;

            Assert.Equal(0, owned.OnZeroRefencesCount);
            Assert.False(owned.HasOutstandingReferences);
            using (memory.Reserve()) {
                Assert.Equal(0, owned.OnZeroRefencesCount);
                Assert.True(owned.HasOutstandingReferences);
            }
            Assert.Equal(1, owned.OnZeroRefencesCount);
            Assert.False(owned.HasOutstandingReferences);
        }
Example #2
0
        public unsafe void ReferenceCounting()
        {
            var owned  = new CustomMemory();
            var memory = owned.Memory;

            Assert.Equal(0, owned.ReferenceCountChangeCount);
            Assert.Equal(0, owned.ReferenceCount);
            using (memory.Reserve()) {
                Assert.Equal(1, owned.ReferenceCountChangeCount);
                Assert.Equal(1, owned.ReferenceCount);
            }
            Assert.Equal(2, owned.ReferenceCountChangeCount);
            Assert.Equal(0, owned.ReferenceCount);
        }
Example #3
0
        public unsafe void CopyOnReserve()
        {
            var owned = new CustomMemory();
            ReadOnlyMemory <byte> memory = owned.Memory;
            var slice = memory.Slice(0, 1);

            // this copies on reserve
            using (slice.Reserve()) {
                Assert.Equal(0, owned.ReferenceCountChangeCount);
                Assert.Equal(0, owned.ReferenceCount);
            }
            Assert.Equal(0, owned.ReferenceCountChangeCount);
            Assert.Equal(0, owned.ReferenceCount);
        }