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());
        }