public void AssigningAValueInAMapUpdatesTheParent()
        {
            var mapReference = new ValueReferenceDefinitionBuilder()
                               .WithStartingValue(new Dictionary <string, ValueReferenceDefinition>()).Build().CreateValueReference(engine);
            var map = mapReference.ValueAsMap();
            int watchListenerCalled = 0;

            mapReference.Watch(updatedMap =>
            {
                watchListenerCalled++;
            });

            map["foo"].Set(BigDouble.One);
            Assert.AreEqual(3, watchListenerCalled);
        }
        public void WatchListenerReceivesMapValueWhenChildUpdates()
        {
            var mapReference = new ValueReferenceDefinitionBuilder()
                               .WithStartingValue(new Dictionary <string, ValueReferenceDefinition>()).Build().CreateValueReference(engine);
            var map = mapReference.ValueAsMap();
            int watchListenerCalled = 0;

            mapReference.Watch(updatedMap =>
            {
                Assert.IsNotNull(updatedMap as IDictionary <string, ValueReference>);
                watchListenerCalled++;
            });

            map["foo"].Set(BigDouble.One);
            Assert.AreEqual(3, watchListenerCalled);
        }
        public void ChangingValueOfWatchedValueNotifiesListeners()
        {
            var valueReference = new ValueReferenceDefinitionBuilder().Build().CreateValueReference(engine);
            int calls          = 0;

            valueReference.Watch(newValue =>
            {
                calls++;
                if (calls == 1)
                {
                    Assert.AreEqual(BigDouble.Zero, newValue);
                }
                else
                {
                    Assert.AreEqual(BigDouble.One, newValue);
                }
            });
            valueReference.Set(BigDouble.One);
            Assert.AreEqual(2, calls);
        }
        public void WatchingForChangesReceivesCurrentValueImmediately()
        {
            var valueReference = new ValueReferenceDefinitionBuilder().Build().CreateValueReference(engine);

            valueReference.Watch(newValue => Assert.AreEqual(BigDouble.Zero, newValue));
        }