public void ReactsAndNotifiesOnSourceChanges()
        {
            var source = new ObservableCollection <double> {
                1.0, 2, 3
            };

            using var tracker = new DoubleAverageTracker(source);
            Assert.AreEqual(source.Average(), tracker.Value);
            var count = 0;

            using (tracker.ObservePropertyChangedSlim(x => x.Value, signalInitial: false)
                   .Subscribe(_ => count++))
            {
                source.Remove(2);
                Assert.AreEqual(0, count);
                Assert.AreEqual(source.Average(), tracker.Value);

                source.Remove(1);
                Assert.AreEqual(1, count);
                Assert.AreEqual(source.Average(), tracker.Value);

                source.Remove(3);
                Assert.AreEqual(2, count);
                Assert.AreEqual(null, tracker.Value);

                source.Add(2);
                Assert.AreEqual(3, count);
                Assert.AreEqual(source.Average(), tracker.Value);
            }
        }
        public void InitializesWhenEmpty()
        {
            var source = new ObservableCollection <double>();

            using var tracker = new DoubleAverageTracker(source);
            Assert.AreEqual(null, tracker.Value);
        }
        public void ReactsAndNotifiesOnSourceChanges()
        {
            var source  = new ObservableCollection <double>(new[] { 1.0, 2, 3 });
            var tracker = new DoubleAverageTracker(source, source.ObserveCollectionChangedSlim(false), -1);

            Assert.AreEqual(source.Average(), tracker.Value);
            int count = 0;

            tracker.ObservePropertyChanged(x => x.Value, false)
            .Subscribe(_ => count++);
            source.Remove(2);
            Assert.AreEqual(0, count);
            Assert.AreEqual(source.Average(), tracker.Value);

            source.Remove(1);
            Assert.AreEqual(1, count);
            Assert.AreEqual(source.Average(), tracker.Value);

            source.Remove(3);
            Assert.AreEqual(2, count);
            Assert.AreEqual(-1, tracker.Value);

            source.Add(2);
            Assert.AreEqual(3, count);
            Assert.AreEqual(source.Average(), tracker.Value);
        }
        public void InitializesWhenEmpty()
        {
            var source  = new ObservableCollection <double>();
            var tracker = new DoubleAverageTracker(source, source.ObserveCollectionChangedSlim(false), -1);

            Assert.AreEqual(-1, tracker.Value);
        }
        public void InitializesWithValues()
        {
            var source  = new ObservableCollection <double>(new[] { 1.0, 2, 3 });
            var tracker = new DoubleAverageTracker(source, source.ObserveCollectionChangedSlim(false), -1);

            Assert.AreEqual(source.Average(), tracker.Value);
        }
        public void InitializesWithValues()
        {
            var source = new ObservableCollection <double> {
                1.0, 2, 3
            };

            using var tracker = new DoubleAverageTracker(source);
            Assert.AreEqual(source.Average(), tracker.Value);
        }