public void ClearCachedErrors_PropogatesThroughNetwork() { ///// SETUP const double ErrorSignal = -2.3d; // Create 2 inbound and 2 outbound mock connections. var mockInbound1 = new Mock<ISupervisedLearnerConnection>(); var mockInbound2 = new Mock<ISupervisedLearnerConnection>(); var mockOutbound1 = new Mock<ISupervisedLearnerConnection>(); var mockOutbound2 = new Mock<ISupervisedLearnerConnection>(); // program the mock outbounds such that both are reporting error signals mockOutbound1.SetupGet(mock => mock.IsReportingError).Returns(true); mockOutbound2.SetupGet(mock => mock.IsReportingError).Returns(true); // Create 2 input nodes and 2 output nodes. var mockInputNode1 = new Mock<ISupervisedLearnerNode>(); var mockInputNode2 = new Mock<ISupervisedLearnerNode>(); var mockOutputNode1 = new Mock<ISupervisedLearnerNode>(); var mockOutputNode2 = new Mock<ISupervisedLearnerNode>(); // Program nodes to report input/output sizes. mockInputNode1.SetupGet(mock => mock.InputSize).Returns(1); mockInputNode2.SetupGet(mock => mock.InputSize).Returns(1); mockOutputNode1.SetupGet(mock => mock.OutputSize).Returns(1); mockOutputNode2.SetupGet(mock => mock.OutputSize).Returns(1); // Program nodes to provide values. mockInputNode1.SetupGet(mock => mock.CachedErrors).Returns(new[] { ErrorSignal }); mockInputNode2.SetupGet(mock => mock.CachedErrors).Returns(new[] { ErrorSignal }); mockOutputNode1.SetupGet(mock => mock.CachedOutputs).Returns(new[] { 0.0d }); mockOutputNode2.SetupGet(mock => mock.CachedOutputs).Returns(new[] { 0.0d }); // Create the test object. var network = new BackpropagationNetwork(new Mock<IErrorCalculator>().Object); network.AddInboundConnection(mockInbound1.Object); network.AddInboundConnection(mockInbound2.Object); network.AddOutboundConnection(mockOutbound1.Object); network.AddOutboundConnection(mockOutbound2.Object); network.AddInputNode(mockInputNode1.Object); network.AddInputNode(mockInputNode2.Object); network.AddOutputNode(mockOutputNode1.Object); network.AddOutputNode(mockOutputNode2.Object); // EXECUTION network.ClearCachedErrors(); // VERIFICATION mockInputNode1.Verify(mock => mock.ClearCachedErrors(), Times.Once()); mockInputNode2.Verify(mock => mock.ClearCachedErrors(), Times.Once()); mockOutbound1.Verify(mock => mock.ClearCachedErrors(), Times.Once()); mockOutbound2.Verify(mock => mock.ClearCachedErrors(), Times.Once()); }