Skip to content
Snippets Groups Projects
Commit 95e3cc97 authored by David Vojtek's avatar David Vojtek
Browse files

Add tests for new functions

parent 5fe40bf3
No related branches found
No related tags found
No related merge requests found
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
#include <boost/test/unit_test.hpp> #include <boost/test/unit_test.hpp>
#include <iostream> #include <iostream>
#include <boost/test/output_test_stream.hpp> #include <boost/test/output_test_stream.hpp>
#include "../Solvers/DESolver.h" #include "../Solvers/DESolver.h"
/** /**
...@@ -116,6 +115,26 @@ BOOST_AUTO_TEST_SUITE(DESolver_test) ...@@ -116,6 +115,26 @@ BOOST_AUTO_TEST_SUITE(DESolver_test)
BOOST_CHECK_EQUAL(1, network->get_n_outputs()); BOOST_CHECK_EQUAL(1, network->get_n_outputs());
} }
BOOST_AUTO_TEST_CASE(DESolver_add_eq_test){
DESolver *deSolver = new DESolver(1,1,1);
MultiIndex *multiIndex = new MultiIndex(2);
multiIndex->set_partial_derivative(0,1);
multiIndex->set_partial_derivative(1,0.5);
deSolver->add_to_differential_equation(0, *multiIndex, 0.5);
std::vector<double> inp, out;
std::vector<std::pair<std::vector<double>, std::vector<double>>> data_vec_dy;
inp = {0.0};
out = {8.0};
data_vec_dy.emplace_back(std::make_pair(inp, out));
DataSet ds_02(&data_vec_dy);
deSolver->set_error_function( 0, ErrorFunctionType::ErrorFuncMSE, &ds_02 );
std::vector<double> weights;
weights.push_back(1.0);
BOOST_CHECK_EQUAL(64,deSolver->eval_total_error(weights));
}
BOOST_AUTO_TEST_SUITE_END() BOOST_AUTO_TEST_SUITE_END()
...@@ -13,14 +13,15 @@ ...@@ -13,14 +13,15 @@
struct cerr_redirect { struct cerr_redirect {
cerr_redirect(std::streambuf *new_buffer) cerr_redirect(std::streambuf *new_buffer)
: old(std::cerr.rdbuf(new_buffer) : old(std::cerr.rdbuf(new_buffer)
) {} ) {}
~cerr_redirect() { ~cerr_redirect() {
std::cout.rdbuf(old); std::cout.rdbuf(old);
} }
private:
std::streambuf *old; private:
std::streambuf *old;
}; };
/** /**
...@@ -38,7 +39,6 @@ BOOST_AUTO_TEST_SUITE(NeuralNetwork_test) ...@@ -38,7 +39,6 @@ BOOST_AUTO_TEST_SUITE(NeuralNetwork_test)
/** /**
* Test of add_neuron method * Test of add_neuron method
* TODO
* Existing bias out of range cancelation * Existing bias out of range cancelation
*/ */
BOOST_AUTO_TEST_CASE(NeuralNetwork_add_neuron_test) { BOOST_AUTO_TEST_CASE(NeuralNetwork_add_neuron_test) {
...@@ -47,7 +47,6 @@ BOOST_AUTO_TEST_SUITE(NeuralNetwork_test) ...@@ -47,7 +47,6 @@ BOOST_AUTO_TEST_SUITE(NeuralNetwork_test)
Neuron *n3 = new NeuronLinear(); Neuron *n3 = new NeuronLinear();
Neuron *n4 = new NeuronLinear(); Neuron *n4 = new NeuronLinear();
NeuralNetwork network; NeuralNetwork network;
//Tests of correct neuron indexs when add_neuron //Tests of correct neuron indexs when add_neuron
...@@ -56,16 +55,18 @@ BOOST_AUTO_TEST_SUITE(NeuralNetwork_test) ...@@ -56,16 +55,18 @@ BOOST_AUTO_TEST_SUITE(NeuralNetwork_test)
BOOST_CHECK_EQUAL(1, network.add_neuron(n2, BIAS_TYPE::NEXT_BIAS)); BOOST_CHECK_EQUAL(1, network.add_neuron(n2, BIAS_TYPE::NEXT_BIAS));
BOOST_CHECK_EQUAL(2, network.add_neuron(n4, BIAS_TYPE::NO_BIAS)); BOOST_CHECK_EQUAL(2, network.add_neuron(n4, BIAS_TYPE::NO_BIAS));
//TODO fix dumping stack error
// boost::test_tools::output_test_stream output;
// {
// cerr_redirect guard(output.rdbuf());
// network.add_neuron(n3, BIAS_TYPE::EXISTING_BIAS, 3);
// }
// BOOST_CHECK(output.is_equal("The supplied bias index is too large!\n\n"));
BOOST_CHECK_EQUAL(3, network.get_n_neurons());
BOOST_CHECK_EQUAL(2, network.get_n_biases());
////TODO fix dumping stack error
boost::test_tools::output_test_stream output;
{
cerr_redirect guard(output.rdbuf());
network.add_neuron(n3, BIAS_TYPE::EXISTING_BIAS, 3);
}
BOOST_CHECK(output.is_equal("The supplied bias index is too large!\n\n"));
} }
/** /**
...@@ -78,12 +79,13 @@ BOOST_AUTO_TEST_SUITE(NeuralNetwork_test) ...@@ -78,12 +79,13 @@ BOOST_AUTO_TEST_SUITE(NeuralNetwork_test)
network.add_neuron(n1, BIAS_TYPE::NO_BIAS); network.add_neuron(n1, BIAS_TYPE::NO_BIAS);
network.add_neuron(n2, BIAS_TYPE::NO_BIAS); network.add_neuron(n2, BIAS_TYPE::NO_BIAS);
BOOST_CHECK_EQUAL(0, network.add_connection_simple(0, 1, SIMPLE_CONNECTION_TYPE::NEXT_WEIGHT)); BOOST_CHECK_EQUAL(0, network.add_connection_simple(0, 1, SIMPLE_CONNECTION_TYPE::NEXT_WEIGHT));
BOOST_CHECK_EQUAL(1, network.add_connection_simple(0, 1, SIMPLE_CONNECTION_TYPE::NEXT_WEIGHT, 5)); BOOST_CHECK_EQUAL(1, network.add_connection_simple(0, 1, SIMPLE_CONNECTION_TYPE::NEXT_WEIGHT, 5));
BOOST_CHECK_EQUAL(2, network.add_connection_simple(0, 1, SIMPLE_CONNECTION_TYPE::UNITARY_WEIGHT)); BOOST_CHECK_EQUAL(2, network.add_connection_simple(0, 1, SIMPLE_CONNECTION_TYPE::UNITARY_WEIGHT));
BOOST_CHECK_EQUAL(3, network.add_connection_simple(0, 1, SIMPLE_CONNECTION_TYPE::UNITARY_WEIGHT,5)); BOOST_CHECK_EQUAL(3, network.add_connection_simple(0, 1, SIMPLE_CONNECTION_TYPE::UNITARY_WEIGHT, 5));
BOOST_CHECK_EQUAL(4, network.add_connection_simple(0, 1, SIMPLE_CONNECTION_TYPE::EXISTING_WEIGHT,1)); BOOST_CHECK_EQUAL(4, network.add_connection_simple(0, 1, SIMPLE_CONNECTION_TYPE::EXISTING_WEIGHT, 1));
BOOST_CHECK_EQUAL(2, network.get_n_weights());
//TODO fix dumping stack error //TODO fix dumping stack error
// boost::test_tools::output_test_stream output; // boost::test_tools::output_test_stream output;
// { // {
...@@ -91,7 +93,6 @@ BOOST_AUTO_TEST_SUITE(NeuralNetwork_test) ...@@ -91,7 +93,6 @@ BOOST_AUTO_TEST_SUITE(NeuralNetwork_test)
// network.add_connection_simple(0, 1, SIMPLE_CONNECTION_TYPE::EXISTING_WEIGHT,10); // network.add_connection_simple(0, 1, SIMPLE_CONNECTION_TYPE::EXISTING_WEIGHT,10);
// } // }
// BOOST_CHECK(output.is_equal("The supplied connection weight index is too large!\n\n")); // BOOST_CHECK(output.is_equal("The supplied connection weight index is too large!\n\n"));
} }
/** /**
...@@ -108,8 +109,8 @@ BOOST_AUTO_TEST_SUITE(NeuralNetwork_test) ...@@ -108,8 +109,8 @@ BOOST_AUTO_TEST_SUITE(NeuralNetwork_test)
BOOST_CHECK_EQUAL(0, network.get_n_inputs()); BOOST_CHECK_EQUAL(0, network.get_n_inputs());
network.specify_input_neurons(inputs); network.specify_input_neurons(inputs);
BOOST_CHECK_EQUAL(1, network.get_n_inputs()); BOOST_CHECK_EQUAL(1, network.get_n_inputs());
} }
BOOST_AUTO_TEST_CASE(NeuralNetwork_specify_outputs_neurons_test) { BOOST_AUTO_TEST_CASE(NeuralNetwork_specify_outputs_neurons_test) {
NeuralNetwork network; NeuralNetwork network;
Neuron *n1 = new NeuronLinear(); Neuron *n1 = new NeuronLinear();
...@@ -121,7 +122,6 @@ BOOST_AUTO_TEST_SUITE(NeuralNetwork_test) ...@@ -121,7 +122,6 @@ BOOST_AUTO_TEST_SUITE(NeuralNetwork_test)
BOOST_CHECK_EQUAL(0, network.get_n_outputs()); BOOST_CHECK_EQUAL(0, network.get_n_outputs());
network.specify_output_neurons(outputs); network.specify_output_neurons(outputs);
BOOST_CHECK_EQUAL(1, network.get_n_outputs()); BOOST_CHECK_EQUAL(1, network.get_n_outputs());
} }
BOOST_AUTO_TEST_CASE(NeuralNetwork_eval_single_test) { BOOST_AUTO_TEST_CASE(NeuralNetwork_eval_single_test) {
...@@ -132,8 +132,7 @@ BOOST_AUTO_TEST_SUITE(NeuralNetwork_test) ...@@ -132,8 +132,7 @@ BOOST_AUTO_TEST_SUITE(NeuralNetwork_test)
network.add_neuron(n1); network.add_neuron(n1);
network.add_neuron(n2); network.add_neuron(n2);
network.add_connection_simple(0, 1, SIMPLE_CONNECTION_TYPE::UNITARY_WEIGHT, 2.5);
network.add_connection_simple(0, 1, SIMPLE_CONNECTION_TYPE::UNITARY_WEIGHT , 2.5);
std::vector<size_t> output_neuron_indices; std::vector<size_t> output_neuron_indices;
output_neuron_indices.push_back(1); output_neuron_indices.push_back(1);
...@@ -150,7 +149,28 @@ BOOST_AUTO_TEST_SUITE(NeuralNetwork_test) ...@@ -150,7 +149,28 @@ BOOST_AUTO_TEST_SUITE(NeuralNetwork_test)
network.eval_single(input, output); network.eval_single(input, output);
BOOST_CHECK_EQUAL(5, output.at(0)); BOOST_CHECK_EQUAL(5, output.at(0));
}
BOOST_AUTO_TEST_CASE(NeuralNetwork_randomize_weights_test) {
Neuron *n1 = new NeuronLinear();
Neuron *n2 = new NeuronLinear();
NeuralNetwork network;
network.add_neuron(n1, BIAS_TYPE::NO_BIAS);
network.add_neuron(n2, BIAS_TYPE::NO_BIAS);
for (int i = 0; i < 100; i++) {
network.add_connection_simple(0, 1, SIMPLE_CONNECTION_TYPE::NEXT_WEIGHT);
}
network.randomize_weights();
std::vector<double> *weights = network.get_parameter_ptr_weights();
double sum=0;
for (int i = 0; i < 100; i++) {
sum += weights->at(i);
}
sum=sum/100;
BOOST_CHECK(sum<0.15 && sum>-0.15);
} }
BOOST_AUTO_TEST_SUITE_END() BOOST_AUTO_TEST_SUITE_END()
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment