private void UnitTest1()
        {
            OutputText.Text = "";
            NetworkDocument doc = new NetworkDocument();
            InputNeuron i1 = new InputNeuron() {OutputValue = 0.7};
            InputNeuron i2 = new InputNeuron() {OutputValue = 0.1};
            InputNeuron i3 = new InputNeuron() {OutputValue = 0.3};

            doc.Inputs.Add(i1);
            doc.Inputs.Add(i2);
            doc.Inputs.Add(i3);

            OutputNeuron o = new OutputNeuron();
            doc.Outputs.Add(new OutputNeuron());

            NeuronHelper.ConnectNodes(i1, o, -0.3);
            NeuronHelper.ConnectNodes(i2, o, 3.1);
            NeuronHelper.ConnectNodes(i3, o, 0.5);
            double expected = 0.25;
            double answer = o.SumInputs(true);

            OutputText.Text += "Summation test 3 inputs values 0.7, 0.1,0.3 respective weights 0.3,3.1,0.5" +
                               Environment.NewLine;
            OutputText.Text += "Expected = " + expected + Environment.NewLine;
            OutputText.Text += "Actual = " + answer + Environment.NewLine;
        }
        private void UnitTest3()
        {
            double output1;
            double output2;
            OutputText.Text = "";
            NetworkDocument doc = new NetworkDocument() {Bias = -2.0,Momentum = 0.05,LearningRate = 0.5};
            doc.ActivationFunction = Enumerations.ActivationFunctions.ActivationSigmoidal;
            doc.UsesBias = true;
            InputNeuron i0 = new InputNeuron() { OutputValue = 0.1 };
            InputNeuron i1 = new InputNeuron() { OutputValue = 0.9 };
            doc.Inputs.Add(i0);
            doc.Inputs.Add(i1);
            doc.NumLayers = 2;//this should build the layers
            HiddenNeuron l00 = new HiddenNeuron(){BiasValue = 2.0};
            HiddenNeuron l01 = new HiddenNeuron() { BiasValue = 2.0 };
            HiddenNeuron l10 = new HiddenNeuron() { BiasValue = 3.0 };
            HiddenNeuron l11 = new HiddenNeuron() { BiasValue = -2.0 };
            doc.Hidden[0].Add(l00);
            doc.Hidden[0].Add(l01);
            doc.Hidden[1].Add(l10);
            doc.Hidden[1].Add(l11);
            OutputNeuron o = new OutputNeuron() {ExpectedValue = 0.9,BiasValue = -2};
            doc.Outputs.Add(o);
            //connect layer 1
            NeuronHelper.ConnectNodes(i0, l00, -2);
            NeuronHelper.ConnectNodes(i0, l01, 3);
            NeuronHelper.ConnectNodes(i1, l00, -2);
            NeuronHelper.ConnectNodes(i1, l01, 3);
            //connect layer 2
            NeuronHelper.ConnectNodes(l00, l10, -2);
            NeuronHelper.ConnectNodes(l00, l11, 2);
            NeuronHelper.ConnectNodes(l01, l10, -4);
            NeuronHelper.ConnectNodes(l01, l11, 2);
            //output layer
            NeuronHelper.ConnectNodes(l10, o, 3);
            NeuronHelper.ConnectNodes(l11, o, 1);

            output1 = l00.SumInputs(true);
            output2 = l01.SumInputs(true);
            WriteOutput(0, output1);
            WriteOutput(5, output2);

            output1 = l00.CalcOutput(doc);
            output2 = l01.CalcOutput(doc);
            WriteOutput(0.5, output1);
            WriteOutput(0.99, output2);

            output1 = l10.SumInputs(doc.UsesBias);
            output2 = l11.SumInputs(doc.UsesBias);
            WriteOutput(-1.972, output1);
            WriteOutput(0.98, output2);

            output1 = l10.CalcOutput(doc);
            output2 = l11.CalcOutput(doc);
            WriteOutput(0.122, output1);
            WriteOutput(0.728, output2);

            output1 = doc.Outputs[0].SumInputs(doc.UsesBias);
            output2 = doc.Outputs[0].CalcOutput(doc);
            WriteOutput(-0.906, output1);
            WriteOutput(0.288, output2);

            //backward pass
            output1 = doc.Outputs[0].CalcError();
            WriteOutput(0.125, output1);

            output1 = l10.CalcError();
            WriteOutput(0.040, output1);
            output1 = l11.CalcError();
            WriteOutput(0.025, output1);

            output1 = l00.CalcError();
            WriteOutput(0, output1);
            output1 = l01.CalcError();
            WriteOutput(0, output1);

            o.AdjustFromWeights(doc);
            l10.AdjustFromWeights(doc);
            l11.AdjustFromWeights(doc);
            l00.AdjustFromWeights(doc);
            l01.AdjustFromWeights(doc);
        }