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); }
public void TwoToManyToTwoLayeredNetworkUsingBuilders(decimal val1, decimal val2, int hiddenNetworkSize) { // Arrange var receiverBuilder = new FixedValueBuilder<IEnumerable<ValueStoringNeuron<decimal>>> { Value = new OutputLayerBuilder<decimal> { NumberOfNeurons = 2 }.Build() }; var outputWrappingBuilder = new DelayedWrappingHiddenLayerBuilder<decimal, ValueStoringNeuron<decimal>> { FunctionSource = new ByDefaultConstructorBuilder<DecimalSumFunction>(), NextLayer = receiverBuilder }; var hiddenLayerBuilder = new DelayedSimpleHiddenLayerBuilder<decimal, IObserver<decimal>> { NumberOfNeurons = hiddenNetworkSize, NextLayerBuilder = outputWrappingBuilder, FunctionSource = new ByDefaultConstructorBuilder<DecimalSumFunction>() }; var inputLayerBuilder = new InputLayerBuilder<decimal> { NextLayerBuilder = hiddenLayerBuilder, NumberOfNeurons = 2 }; var sut = inputLayerBuilder.Build().ToList(); // Act sut[0].OnNext(val1); sut[0].OnCompleted(); sut[1].OnNext(val2); sut[1].OnCompleted(); // Assert var expected = (val1 + val2) * hiddenNetworkSize; var first = receiverBuilder.Value.Select(neuron => neuron.LastValue).First(); first.Should().Be(expected); }