public void AutomaticModeDependentWithSetter()
        {
            var efficientMode = new AutomaticMode();
            var counter       = 0;

            ObservableUtility.FromProperty(() => efficientMode.DependentWithSetter).Subscribe(_ => counter++);

            Assert.AreEqual(1, counter);
            efficientMode.Source = !efficientMode.Source;
            Assert.AreEqual(2, counter);
        }
        public void TestChangingDependenciesForSourceTrap()
        {
            var first       = new Source();
            var second      = new Source();
            var sink        = new HasAsymmetricalWrapper(first, second);
            var counter     = 0;
            var expectation = 0;

            Assert.AreEqual(false, sink.AsymmetricalWrapper);
            first.Woop = true;
            ObservableUtility.FromProperty(() => sink.AsymmetricalWrapper, false).Subscribe(value => { counter++; });
            Assert.AreEqual(expectation, counter);
            second.Woop = true;
            Assert.AreEqual(expectation += FindsChangingDependenciesForDependentWithSetter ? 1 : 0, counter);
        }
        public void DependentWithSetter()
        {
            var dependent = new HasWrapperProperty();
            var counter   = 0;

            ObservableUtility.FromProperty(() => dependent.Wrapper).Skip(1).Subscribe(_ => counter++);
            var expectation = 0;

            Assert.AreEqual(dependent.Woop, dependent.Wrapper);
            Assert.AreEqual(expectation, counter);
            dependent.FlipWoop();
            Assert.AreEqual(++expectation, counter);

            dependent.Wrapper            = !dependent.Wrapper;
            Assert.AreEqual(expectation += NotificationsWhenSettingDependentSetter, counter);
        }