public void TestUnsubscribeWorks()
        {
            TargetClass target = new TargetClass();
            MulticastWeakDelegate <Action> testInst = new MulticastWeakDelegate <Action>();

            testInst.Add(target.TestMethod);
            testInst.GetDelegate()();
            Assert.AreEqual(1, target.CallCount);

            testInst.Remove(target.TestMethod);
            var d = testInst.GetDelegate();

            Assert.IsNull(d);
        }
        public void TestEmptyDelegateNotFail()
        {
            MulticastWeakDelegate <Action> testInst = new MulticastWeakDelegate <Action>();
            var d = testInst.GetDelegate();

            Assert.IsNull(d);
        }
        public void TestCallStrong()
        {
            int callCount = 0;

            MulticastWeakDelegate <Action> testInst = new MulticastWeakDelegate <Action>();

            testInst.Add(() => callCount++);

            var d = testInst.GetDelegate();

            Assert.IsNotNull(d);
            d();

            Assert.AreEqual(1, callCount);
        }
        public void TestWeakRef()
        {
            MulticastWeakDelegate <Action> testInst = new MulticastWeakDelegate <Action>();

            Subscribe(testInst);

            for (int i = 0; i < 10; i++)
            {
                GC.Collect();
                GC.WaitForPendingFinalizers();
                GC.Collect();
            }

            var d = testInst.GetDelegate();

            Assert.IsNull(d);
        }