public void EqualsTest()
        {
            var obj1 = new object();
            var obj2 = new object();

            var weak1 = new Weak <object>(obj1);
            var weak2 = new Weak <object>(obj1);
            var weak3 = new Weak <object>(obj2);

            var sut = new WeakEqualityComparer <object>();

            Assert.True(sut.Equals(weak1, weak2));
            Assert.False(sut.Equals(weak2, weak3));

            obj2 = null;
            GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
            GC.WaitForFullGCComplete();

            var hold = new Weak <object>(obj1);

            Assert.True(sut.Equals(weak1, weak2));
            Assert.False(sut.Equals(weak2, weak3));
        }
        public void GetHashCodeTest()
        {
            var obj1 = new object();
            var obj2 = new object();

            var weak1 = new Weak <object>(obj1);
            var weak2 = new Weak <object>(obj1);
            var weak3 = new Weak <object>(obj2);

            var sut = new WeakEqualityComparer <object>();

            Assert.Equal(sut.GetHashCode(weak1), sut.GetHashCode(weak2));
            Assert.NotEqual(sut.GetHashCode(weak2), sut.GetHashCode(weak3));

            obj2 = null;
            GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
            GC.WaitForFullGCComplete();

            var hold = new Weak <object>(obj1);

            Assert.Equal(sut.GetHashCode(weak1), sut.GetHashCode(weak2));
            Assert.NotEqual(sut.GetHashCode(weak2), sut.GetHashCode(weak3));
        }