public void SingleAdditionNeuronInLayerUsingBuilders(decimal val1, decimal val2)
        {
            // Arrange
            var receiverBuilder = new FixedValueBuilder<IEnumerable<ValueStoringNeuron<decimal>>>
            {
                Value = new OutputLayerBuilder<decimal>
                {
                    NumberOfNeurons = 1
                }.Build()
            };
            var layerBuilder = new DelayedSimpleHiddenLayerBuilder<decimal, ValueStoringNeuron<decimal>>
            {
                NumberOfNeurons = 1,
                NextLayerBuilder = receiverBuilder,
                FunctionSource = new ByDefaultConstructorBuilder<DecimalSumFunction>()
            };
            var sut = new OnNextSplittingObserverDecorator<decimal>(new CompositeObserver<decimal>(layerBuilder.Build()));

            // Act
            sut.OnNext(new decimal[] { val1, val2 });

            // Assert
            var result = receiverBuilder.Value.Single().LastValue;
            result.Should().Be(val1 + val2);
        }
        public void SingleAdditionNeuronInLayer(decimal val1, decimal val2)
        {
            // Arrange
            var receiver = new ValueStoringNeuron<decimal>();
            var sut = new OnNextSplittingObserverDecorator<decimal>(new CompositeObserver<decimal>(new IObserver<decimal>[]
            {
                new DelayedActivationNeuron<decimal, decimal>(new DecimalSumFunction(), receiver)
            }));

            // Act
            sut.OnNext(new decimal[] { val1, val2 });

            // Assert
            var result = receiver.LastValue;
            result.Should().Be(val1 + val2);
        }
        public void ManyAdditionNeuronInLayerUsingBuilders(decimal val1, decimal val2, int neuronCount)
        {
            // Arrange
            var receiverBuilder = new FixedValueBuilder<IEnumerable<ValueStoringNeuron<decimal>>>
            {
                Value = new OutputLayerBuilder<decimal>
                {
                    NumberOfNeurons = neuronCount
                }.Build()
            };
            var layerBuilder = new DelayedWrappingHiddenLayerBuilder<decimal, ValueStoringNeuron<decimal>>
            {
                FunctionSource = new ByDefaultConstructorBuilder<DecimalSumFunction>(),
                NextLayer = receiverBuilder
            };
            var sut = new OnNextSplittingObserverDecorator<decimal>(new CompositeObserver<decimal>(layerBuilder.Build()));

            // Act
            sut.OnNext(new decimal[] { val1, val2 });

            // Assert
            receiverBuilder.Value.Select(neuron => neuron.LastValue).Should().OnlyContain(value => value == val1 + val2);

        }