public void NullValuesEqual() { var first = ReferenceHolder <object?> .Strong(null); var second = ReferenceHolder <object?> .Weak(null); VerifyEqual(first, second); }
public void SameMixedObjectsEqual() { var obj = new object(); var first = ReferenceHolder <object?> .Strong(obj); var second = ReferenceHolder <object?> .Weak(obj); VerifyEqual(first, second); }
public void ExpiredValueNotEqualToNull() { var strongNull = ReferenceHolder <object?> .Strong(null); var weakNull = ReferenceHolder <object?> .Weak(null); var expired = ReferenceHolder <object?> .TestAccessor.ReleasedWeak(hashCode : EqualityComparer <object?> .Default.GetHashCode(null !)); Assert.Equal(strongNull.GetHashCode(), expired.GetHashCode()); VerifyNotEqual(strongNull, expired); VerifyNotEqual(weakNull, expired); }
public void SameWeakObjectsEqual() { var obj = new object(); var first = ReferenceHolder <object?> .Weak(obj); var second = ReferenceHolder <object?> .Weak(obj); // 📝 There is no need for a GC.KeepAlive(obj) here. 'VerifyEqual' will produce correct results whether // or not the object is still alive. When the object is alive, the equality path is the same as // SameStrongObjectsEqual. When the object is not alive, the equality path is the same as // ExpiredSameValuesEqual. VerifyEqual(first, second); }