Commit 7c93afc9 authored by Martin Beseda's avatar Martin Beseda

Commit before merge

parents 99514ea1 5fe40bf3
Summary
**Summary**
(Summarize the bug encountered concisely)
Steps to reproduce
**Steps to reproduce**
(How one can reproduce the issue - this is very important)
What is the current bug behavior?
**What is the current bug behavior?**
(What actually happens)
What is the expected correct behavior?
**What is the expected correct behavior?**
(What you should see instead)
Relevant logs and/or screenshots
**Relevant logs and/or screenshots**
(Paste any relevant logs - please use code blocks (```) to format console output,
logs, and code as it's very hard to read otherwise.)
Possible fixes
**Possible fixes**
(If you can, link to the line of code that might be responsible for the problem)
......
Summary
**Summary**
(Summarize the bug encountered concisely)
Associated classes
**Associated classes**
(Classes, which need to be modified, if any)
......
......@@ -16,6 +16,7 @@
```
git clone git@code.it4i.cz:moldyn/lib4neuro.git
```
- Clone the repository of `exprtk`
......@@ -29,8 +30,11 @@
```
sudo apt-get install libboost-all-dev
```
- Go to the `lib4Neuro` folder
- Go to the `lib4Neuro` folder and run
- Set variables `BUILD_TYPE` and `CXX_COMPILER` in the file `build.sh`
- Run
```
./build.sh
......@@ -46,13 +50,15 @@
bootstrap.bat
b2.exe --build-type=complete
```
- set `BOOST_ROOT` variable to the path of your folder with `Boost`
- Set `BOOST_ROOT` variable to the path of your folder with `Boost`
```
setx BOOST_ROOT YOUR_PATH
```
- go to the `lib4neuro` folder and run
- Go to the `lib4neuro` folder
- Set variables `BUILD_TYPE`, `CXX_COMPILER` and `C_COMPILER` in the file `build.bat`
- Run
```
build.bat
......
#TODO uncomment
#add_subdirectory(tests bin/unit-tests)
add_subdirectory(examples bin/examples)
add_library(4neuro SHARED
Neuron/Neuron.cpp
Neuron/NeuronBinary.cpp
Neuron/NeuronConstant.cpp
Neuron/NeuronLinear.cpp
Neuron/NeuronLogistic.cpp
Network/NeuralNetwork.cpp
Network/NeuralNetworkSum.cpp
NetConnection/ConnectionFunctionGeneral.cpp
NetConnection/ConnectionFunctionIdentity.cpp
LearningMethods/ParticleSwarm.cpp
DataSet/DataSet.cpp
ErrorFunction/ErrorFunctions.cpp
Solvers/DESolver.cpp
LearningMethods/ILearningMethods.h)
#list(REMOVE_ITEM Boost_LIBRARIES "optimized" "debug")
#
#set(TMP "")
#set(TMP2 "")
#foreach(e ${Boost_LIBRARIES})
# string(REPLACE "/" "\\" TMP2 ${e})
# list(APPEND TMP ${TMP2})
#endforeach(e)
#
#set(Boost_LIBRARIES ${TMP})
message("Boost_LIBRARIES sadf: ${Boost_LIBRARIES}")
target_link_libraries(4neuro ${Boost_LIBRARIES})
add_library(boost_unit_test SHARED boost_test_lib_dummy.cpp)
add_library(exprtk SHARED exprtk.cpp)
#TODO uncomment
#add_subdirectory(tests bin/unit-tests)
add_subdirectory(examples bin/examples)
add_library(4neuro SHARED
Neuron/Neuron.cpp
Neuron/NeuronBinary.cpp
Neuron/NeuronConstant.cpp
Neuron/NeuronLinear.cpp
Neuron/NeuronLogistic.cpp
Network/NeuralNetwork.cpp
Network/NeuralNetworkSum.cpp
NetConnection/ConnectionFunctionGeneral.cpp
NetConnection/ConnectionFunctionIdentity.cpp
LearningMethods/ParticleSwarm.cpp
DataSet/DataSet.cpp
ErrorFunction/ErrorFunctions.cpp
Solvers/DESolver.cpp
LearningMethods/ILearningMethods.h)
message("Boost_LIBRARIES sadf: ${Boost_LIBRARIES}")
target_link_libraries(4neuro ${Boost_LIBRARIES})
add_library(boost_unit_test SHARED boost_test_lib_dummy.cpp)
add_library(exprtk SHARED exprtk.cpp)
......@@ -3,3 +3,4 @@
//
#define BOOST_TEST_MODULE neuron_test
#include <boost/test/included/unit_test.hpp>
......@@ -2,29 +2,50 @@
# UNIT TESTS #
##############
<<<<<<< HEAD
add_executable(neuron_test neuron_test.cpp)
target_link_libraries(neuron_test boost_unit_test 4neuro)
=======
#add_executable(neuron_test Neuron_test.cpp)
#target_link_libraries(neuron_test boost_unit_test 4neuro)
>>>>>>> 5fe40bf3d3cae575f15db8b0ad440aa5b558ff1d
add_executable(linear_neuron_test NeuronLinear_test.cpp)
target_link_libraries(linear_neuron_test boost_unit_test 4neuro)
<<<<<<< HEAD
=======
add_executable(constant_neuron_test NeuronConstant_test.cpp)
target_link_libraries(constant_neuron_test boost_unit_test 4neuro)
>>>>>>> 5fe40bf3d3cae575f15db8b0ad440aa5b558ff1d
add_executable(binary_neuron_test NeuronBinary_test.cpp)
target_link_libraries(binary_neuron_test boost_unit_test 4neuro)
add_executable(logistic_neuron_test NeuronLogistic_test.cpp)
target_link_libraries(logistic_neuron_test boost_unit_test 4neuro)
<<<<<<< HEAD
add_executable(connection_weight_test ConnectionWeight_test.cpp)
target_link_libraries(connection_weight_test boost_unit_test 4neuro)
add_executable(connection_test Connection_test.cpp)
target_link_libraries(connection_test boost_unit_test 4neuro)
=======
add_executable(connectionFunctionGeneral_test ConnectionFunctionGeneral_test.cpp)
target_link_libraries(connectionFunctionGeneral_test boost_unit_test 4neuro)
>>>>>>> 5fe40bf3d3cae575f15db8b0ad440aa5b558ff1d
add_executable(neural_network_test NeuralNetwork_test.cpp)
target_link_libraries(neural_network_test boost_unit_test 4neuro)
<<<<<<< HEAD
add_executable(connection_weight_identity_test ConnectionWeightIdentity_test.cpp)
target_link_libraries(connection_weight_identity_test boost_unit_test 4neuro)
=======
add_executable(connection_Function_identity_test ConnectionFunctionIdentity_test.cpp)
target_link_libraries(connection_Function_identity_test boost_unit_test 4neuro)
>>>>>>> 5fe40bf3d3cae575f15db8b0ad440aa5b558ff1d
add_executable(dataset_test DataSet_test.cpp)
target_link_libraries(dataset_test boost_unit_test 4neuro)
......@@ -41,3 +62,10 @@ target_link_libraries(particle_test boost_unit_test 4neuro)
add_executable(NeuralNetworkSum_test NeuralNetworkSum_test.cpp)
target_link_libraries(NeuralNetworkSum_test boost_unit_test 4neuro)
<<<<<<< HEAD
=======
add_executable(DESolver_test DESolver_test.cpp)
target_link_libraries(DESolver_test boost_unit_test 4neuro)
>>>>>>> 5fe40bf3d3cae575f15db8b0ad440aa5b558ff1d
///**
//* DESCRIPTION OF THE CLASS
//*
//* @author David Vojtek
//* @date 2018
//*/
//
//#define BOOST_TEST_NO_MAIN
//
//#include <boost/test/unit_test.hpp>
//#include "../NetConnection/ConnectionFunctionIdentity.h"
//
///**
// * Boost testing suite for testing ConnectionWeightIdentity.h
// */
//BOOST_AUTO_TEST_SUITE(ConnectionWeightIdentity_test)
//
// /**
// * Test of correct construction of ConnectionWeightIdentity
// */
// BOOST_AUTO_TEST_CASE(ConnectionWeightIdentity_construction_test) {
// std::vector<double> weight_array = {1, 2, 3, 4, 5};
// //Test of none exception when creation new instance of ConnectionFunctionIdentity
// BOOST_CHECK_NO_THROW(ConnectionFunctionIdentity CWI(&weight_array));
// }
//
// /**
// * Test of eval method
// */
// BOOST_AUTO_TEST_CASE(ConnectionWeightIdentity_eval_test) {
// std::vector<double> weight_array = {1, 2, 3, 4, 5};
// ConnectionFunctionIdentity CWI(&weight_array);
// int para[5] = {3, 1, 2, 3, 4};
// CWI.SetParamIndices(para);
//
// //Test of correct output of eval method
// BOOST_CHECK_EQUAL(4, CWI.eval());
// }
//
//BOOST_AUTO_TEST_SUITE_END()
///**
// * DESCRIPTION OF THE CLASS
// *
// * @author David Vojtek
// * @date 2018
// */
//
//#define BOOST_TEST_NO_MAIN
//
//#include <boost/test/unit_test.hpp>
//#include "../NetConnection/ConnectionFunctionGeneral.h"
//
///**
// * Boost testing suite for testing ConnectionWeight.h
// */
//BOOST_AUTO_TEST_SUITE(ConnectionWeight_test)
//
// /**
// * Test of construction of ConnectionWeight
// */
// BOOST_AUTO_TEST_CASE(ConnectionWeight_construction__test) {
// std::vector<double> * w_array = nullptr ;
//
// //Tests of no exception when, create new instance
// BOOST_CHECK_NO_THROW( ConnectionFunctionGeneral conn(2, w_array ));
// BOOST_CHECK_NO_THROW( ConnectionFunctionGeneral conn);
// }
//
// /**
// * Test of setParamIndices and SetParamIndex methods
// */
// BOOST_AUTO_TEST_CASE(ConnectionWeight_param_test){
// std::vector<double> w_array= {0,1,2,3,4} ;
//
// ConnectionFunctionGeneral conn(5, &w_array );
// ConnectionFunctionGeneral connbad(7, &w_array);
// int para[5]={0,1,2,3,4};
//
// //Test of no exception when call SetParamIndices method on instance created with with correct parameters
// BOOST_CHECK_NO_THROW(conn.SetParamIndices(para));
// //Test of no exception when call SetParamIndex method on instance created with with correct parameters
// BOOST_CHECK_NO_THROW(conn.SetParamIndex(2,2));
// // Features not implemented yet
// //Test of expected exception out_of_range when call SetParamIndices method on instance created with with incorrect parameters
// //BOOST_CHECK_THROW(connbad.SetParamIndices(para), std::out_of_range);
// //Test of expected exception out_of_range when call SetParamIndex method on instance created with incorrect parameters
// //BOOST_CHECK_THROW(connbad.SetParamIndex(2,8), std::out_of_range);
// }
//
// /**
// * Test of eval method
// */
// BOOST_AUTO_TEST_CASE(ConnectionWeight_eval__test) {
// std::vector<double> w_array= {1,2,3,4,5} ;
//
// ConnectionFunctionGeneral conn(5, &w_array );
// int para[5]={1,2,3,4,5};
// conn.SetParamIndices(para);
//
// //Test of correct output after calling eval() method
// BOOST_CHECK_EQUAL(120, conn.eval());
// }
//
// /**
// * Test of adjust_weights method
// */
// BOOST_AUTO_TEST_CASE(ConnectionWeight_weight_adjustment_test) {
// std::vector<double> w_array= {1,2,3,4,5} ;
// double w_array2[5] = {5,4,3,2,1};
//
// ConnectionFunctionGeneral conn(5, &w_array);
// int para[5]={0,1,2,3,4};
// conn.SetParamIndices(para);
// conn.adjust_weights(w_array2);
//
// //Test of correct eval output after adjusting weights
// BOOST_CHECK_EQUAL(7776, conn.eval());
// }
//
// /**
// * Test of set_weights method
// */
// BOOST_AUTO_TEST_CASE(ConnectionWeight_weight_set_test) {
// std::vector<double> w_array= {2,3,4,5,6} ;
// double w_array2[5] = {1,2,3,4,5};
// ConnectionFunctionGeneral conn(5, &w_array );
// conn.eval();
// int para[5]={0,1,2,3,4};
// conn.SetParamIndices(para);
// conn.set_weights(w_array2);
//
// //Test of correct eval output after setting new weights
// BOOST_CHECK_EQUAL(120, conn.eval());
// }
//
//
//BOOST_AUTO_TEST_SUITE_END()
\ No newline at end of file
///**
// * DESCRIPTION OF THE CLASS
// *
// * @author David Vojtek
// * @date 2018
// */
//
//#define BOOST_TEST_NO_MAIN
//
//#include <boost/test/unit_test.hpp>
//
//
//#include "../NetConnection/ConnectionFunctionGeneral.h"
//#include "../Neuron/NeuronLinear.h"
//#include <iostream>
///**
// * Boost testing suite for testing ConnectionFunctionGeneral.h
// */
//
//BOOST_AUTO_TEST_SUITE(Connection_test)
//
///**
// * Test of constructor of Connection
// */
//BOOST_AUTO_TEST_CASE(Connection_construction__test) {
//
// Neuron *neuron1 = new NeuronLinear(2, 3);
// Neuron *neuron2 = new NeuronLinear(4, 5);
// std::vector<double> w_array = {2, 3, 4, 5, 6};
//
// ConnectionWeight *conn = new ConnectionWeight(2, &w_array);
// Connection connection(neuron1, neuron2, conn);
// //Test of correct input neuron
// BOOST_CHECK_EQUAL(neuron1, connection.get_neuron_in());
// //Test of correct output neuron
// BOOST_CHECK_EQUAL(neuron2, connection.get_neuron_out());
//}
//
///**
// * Test of pass_signal method
// */
//BOOST_AUTO_TEST_CASE(Connection_pass_signal_test) {
//
// Neuron *neuron1 = new NeuronLinear(2, 3);
// Neuron *neuron2 = new NeuronLinear(4, 5);
// std::vector<double> w_array = {2, 3, 4, 5, 6};
// std::function<double(double *, int *, int)> f = [](double *weight_array, int *index_array, int n_params) {
// double a = weight_array[0];
// double b = weight_array[1];
// return (a + 1.5 * b);
// };
//
//
// ConnectionWeight *conn = new ConnectionWeight(2, &w_array);
//
// Connection connection(neuron1, neuron2, conn);
//
// neuron1->activate();
// neuron2->activate();
// // test of neuron state before passing signal
// BOOST_CHECK_EQUAL(4, neuron2->get_state());
// connection.pass_signal();
// neuron2->activate();
// // test of neuron state after passing signal
// BOOST_CHECK_EQUAL(7204, neuron2->get_state());
//
//}
//
//
//BOOST_AUTO_TEST_SUITE_END()
\ No newline at end of file
///**
// * DESCRIPTION OF THE CLASS
// *
// * @author David Vojtek
// * @date 2018
// */
//
//#define BOOST_TEST_NO_MAIN
//
//#include <boost/test/unit_test.hpp>
//#include <boost/test/output_test_stream.hpp>
//#include "../DataSet/DataSet.h"
////#include <boost/filesystem.hpp>
//
//
///**
// * Boost testing suite for testing DataSet.h
// */
//BOOST_AUTO_TEST_SUITE(DataSet_test)
//
// struct cout_redirect {
// cout_redirect(std::streambuf *new_buffer)
// : old(std::cout.rdbuf(new_buffer)) {}
//
// ~cout_redirect() {
// std::cout.rdbuf(old);
// }
//
// private:
// std::streambuf *old;
// };
//
///**
// * Test of DataSet constructor with filepath parameter
// */
// BOOST_AUTO_TEST_CASE(DataSet_construction_from_file_test) {
// //test of exception with non-existing file path
// //TODO resolve exception throw
// DataSet dataSet("file/unknown");
// //BOOST_CHECK_THROW(DataSet dataSet("file unknown"), boost::archive::archive_exception::input_stream_error);
// }
//
///**
// * Test of DataSet constructor with vector parameter
// */
// BOOST_AUTO_TEST_CASE(DataSet_construction_from_vector_test) {
// std::vector<std::pair<std::vector<double>, std::vector<double>>> data_vec;
// std::vector<double> inp, out;
//
// for (int i = 0; i < 3; i++) {
// inp.push_back(i);
// out.push_back(i + 4);
// }
//
// data_vec.emplace_back(std::make_pair(inp, out));
//
// DataSet dataSet(&data_vec);
//
// //test of no exception when create object DataSet
// BOOST_CHECK_NO_THROW(DataSet dataSet(&data_vec));
// }
//
///**
// * Test of get_data method
// */
// BOOST_AUTO_TEST_CASE(DataSet_get_data_test) {
// std::vector<std::pair<std::vector<double>, std::vector<double>>> data_vec;
// std::vector<double> inp, out;
//
// for (int i = 0; i < 1; i++) {
// inp.push_back(i);
// out.push_back(i + 4);
// }
//
// data_vec.emplace_back(std::make_pair(inp, out));
// DataSet dataSet(&data_vec);
//
// //test of equal data
// //TODO out of range, ==
// BOOST_CHECK_EQUAL(0, dataSet.get_data()->at(0).first.at(0));
// BOOST_CHECK_EQUAL(4, dataSet.get_data()->at(0).second.at(0));
//
// }
//
///**
// * Test of add_data_pair method
// */
// BOOST_AUTO_TEST_CASE(DataSet_add_daata_pair_test) {
// std::vector<std::pair<std::vector<double>, std::vector<double>>> data_vec;
// std::vector<double> inp, out;
//
// for (int i = 0; i < 3; i++) {
// inp.push_back(i);
// out.push_back(i + 4);
// }
//
// data_vec.emplace_back(std::make_pair(inp, out));
//
// DataSet dataSet(&data_vec);
//
// inp.clear();
// out.clear();
// for (int i = 8; i < 11; i++) {
// inp.push_back(i);
// out.push_back(i + 4);
// }
//
// dataSet.add_data_pair(inp, out);
//
// // Test of correct add of input
// BOOST_CHECK_EQUAL(8, dataSet.get_data()->at(1).first.at(0));
// // Test of correct add of output
// BOOST_CHECK_EQUAL(12, dataSet.get_data()->at(1).second.at(0));
//
// }
//
// /**
// * Test of get_input_dim and get_output_dim methods
// */
// BOOST_AUTO_TEST_CASE(DataSet_dimension_test) {
// std::vector<std::pair<std::vector<double>, std::vector<double>>> data_vec;
// std::vector<double> inp, out;
//
// for (int i = 0; i < 3; i++) {
// inp.push_back(i);
// out.push_back(i + 4);
// }
//
// data_vec.emplace_back(std::make_pair(inp, out));
//
// DataSet dataSet(&data_vec);
//
// //Test of correct input dimension
// BOOST_CHECK_EQUAL(3, dataSet.get_input_dim());
// //Test of correct output dimension
// BOOST_CHECK_EQUAL(3, dataSet.get_output_dim());
// }
//
///**
// * Test of get_n_elements method
// */
// BOOST_AUTO_TEST_CASE(DataSet_get_number_of_elements_test) {
// std::vector<std::pair<std::vector<double>, std::vector<double>>> data_vec;
// std::vector<double> inp, out;
//
// for (int i = 0; i < 3; i++) {
// inp.push_back(i);
// out.push_back(i + 4);
// }
// data_vec.emplace_back(std::make_pair(inp, out));
// inp.clear();
// out.clear();
// for (int i = 8; i < 11; i++) {
// inp.push_back(i);
// out.push_back(i + 4);
// }
// data_vec.emplace_back(std::make_pair(inp, out));
//
// DataSet dataSet(&data_vec);
//
// //Test of correct number of elements
// BOOST_CHECK_EQUAL(2, dataSet.get_n_elements());
// }
//
///**
// * Test of print_data method
// */
// BOOST_AUTO_TEST_CASE(DataSet_print_data_test) {
// std::vector<std::pair<std::vector<double>, std::vector<double>>> data_vec;
// std::vector<double> inp, out;
//
// for (int i = 0; i < 1; i++) {
// inp.push_back(i);
// out.push_back(i + 4);
// }
//
// data_vec.emplace_back(std::make_pair(inp, out));
//
// DataSet dataSet(&data_vec);
//
// boost::test_tools::output_test_stream output;
// {
// cout_redirect guard(output.rdbuf());
// dataSet.print_data();
// }
//
// //Test of correct print of DataSet
// BOOST_CHECK(output.is_equal("0 -> 4 \n"));
// }
//
///**
// * Test of store_text method
// */
// BOOST_AUTO_TEST_CASE(DataSet_store_text_test) {
// std::vector<std::pair<std::vector<double>, std::vector<double>>> data_vec;
// std::vector<double> inp, out;
//
// for (int i = 0; i < 3; i++) {
// inp.push_back(i);
// out.push_back(i + 4);
// }
//
// data_vec.emplace_back(std::make_pair(inp, out));
//
// DataSet dataSet(&data_vec);
// int elements = dataSet.get_n_elements();
// dataSet.store_text("testDataSet");
//
// //Test of correct file creations
// //BOOST_CHECK(boost::filesystem::exists( "testDataSet" ));
//
// DataSet newDataSet("testDataSet");
//
// //Test of correct number of element from dataSet from file
// BOOST_CHECK_EQUAL(elements, newDataSet.get_n_elements());
//
// // removing of created file
// remove("testDataSet");
// }
//
//BOOST_AUTO_TEST_SUITE_END()
\ No newline at end of file
///**
// * DESCRIPTION OF THE CLASS
// *
// * @author David Vojtek
// * @date 2018
// */
//
//#define BOOST_TEST_NO_MAIN
//
//#include <boost/test/unit_test.hpp>
//#include "../ErrorFunction/ErrorFunctions.h"
//
///**
// * Boost testing suite for testing ErrorFunction.h
// * doesn't test inherited methods
// */
//BOOST_AUTO_TEST_SUITE(ErrorFunctions_test)
//
// BOOST_AUTO_TEST_CASE(ErrorFunction_MSE_Construction_Test) {
// NeuralNetwork network;
// std::vector<std::pair<std::vector<double>, std::vector<double>>> data_vec;
// std::vector<double> inp, out;
// for (int i = 0; i < 3; i++) {
// inp.push_back(i);
// out.push_back(i + 4);
// }
// data_vec.emplace_back(std::make_pair(inp, out));
// DataSet dataSet(&data_vec);
// BOOST_CHECK_NO_THROW(MSE mse(&network, &dataSet));
// }
//
// BOOST_AUTO_TEST_CASE(ErrorFunction_MSE_Eval_Test) {
// Neuron *n1 = new NeuronLinear(1, 1);
// Neuron *n2 = new NeuronLinear(2, 2);
// NeuralNetwork network;
// std::vector<std::pair<std::vector<double>, std::vector<double>>> data_vec;
// std::vector<double> inp, out;
// for (int i = 0; i < 1; i++) {
// inp.push_back(i);
// out.push_back(i + 4);
// }
// data_vec.emplace_back(std::make_pair(inp, out));
// network.add_neuron(n1);
// network.add_neuron(n2);
// network.add_connection_simple(0, 1, 0, 2.5);
// network.randomize_weights();
// std::vector<size_t> net_input_neurons_indices(1);
// std::vector<size_t> net_output_neurons_indices(1);
// net_input_neurons_indices[0] = 0;
// net_output_neurons_indices[0] = 1;
// network.specify_input_neurons(net_input_neurons_indices);
// network.specify_output_neurons(net_output_neurons_indices);
//
// DataSet dataSet(&data_vec);
//
// double weights[1] = {0};
//
// MSE mse(&network, &dataSet);
//
// BOOST_CHECK_EQUAL(4, mse.eval(&weights[0]));
// }
//
// BOOST_AUTO_TEST_CASE(ErrorFunction_MSE_Get_dimension_test) {
// Neuron *n1 = new NeuronLinear(1, 1);
// Neuron *n2 = new NeuronLinear(2, 2);
// NeuralNetwork network;
// std::vector<std::pair<std::vector<double>, std::vector<double>>> data_vec;
// std::vector<double> inp, out;
// for (int i = 0; i < 1; i++) {
// inp.push_back(i);
// out.push_back(i + 4);
// }
// data_vec.emplace_back(std::make_pair(inp, out));
// network.add_neuron(n1);
// network.add_neuron(n2);
// network.add_connection_simple(0, 1, 0, 2.5);
// network.randomize_weights();
// std::vector<size_t> net_input_neurons_indices(1);
// std::vector<size_t> net_output_neurons_indices(1);
// net_input_neurons_indices[0] = 0;
// net_output_neurons_indices[0] = 1;
// network.specify_input_neurons(net_input_neurons_indices);
// network.specify_output_neurons(net_output_neurons_indices);
//
// DataSet dataSet(&data_vec);
//
// MSE mse(&network, &dataSet);
//
// BOOST_CHECK_EQUAL(1, mse.get_dimension());
// }
//
// BOOST_AUTO_TEST_CASE(ErrorFunction_MSE_SUM_Construction_Test) {
// BOOST_CHECK_NO_THROW(ErrorSum mse_sum);
// }
//
// BOOST_AUTO_TEST_CASE(ErrorFunction_MSE_SUM_Add_Error_Function_Test) {
// NeuralNetwork network;
// std::vector<std::pair<std::vector<double>, std::vector<double>>> data_vec;
// std::vector<double> inp, out;
// for (int i = 0; i < 3; i++) {
// inp.push_back(i);
// out.push_back(i + 4);
// }
// data_vec.emplace_back(std::make_pair(inp, out));
// DataSet dataSet(&data_vec);
//
// ErrorFunction *f = new MSE(&network, &dataSet);
//
// ErrorSum mse_sum;
// BOOST_CHECK_NO_THROW(mse_sum.add_error_function(f));
// }
//
// BOOST_AUTO_TEST_CASE(ErrorFunction_MSE_SUM_Eval_Test) {