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); }
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); }
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); }