diff --git a/CMakeLists.txt b/CMakeLists.txt
index 95951e39bdcb1b68de9d1930b709ce8535d6529f..52cdc9fc7d0f4b685784569f6e2c4e8d4b3a6cfd 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -78,13 +78,13 @@ endif()
 message("Detecting available cores count...")
 include(ProcessorCount)
 ProcessorCount(N_CORES)
-if(n_cores GREATER 1)
+if(N_CORES GREATER 1)
     math(EXPR N_CORES "${N_CORES}-1")
-    message("Build will be performed on ${N_CORES} cores.")
     set(CTEST_BUILD_FLAGS -j${N_CORES})
     set(ENV{N_CORES} ${N_CORES})
     set(ctest_test_args ${ctest_test_args} PARALLEL_LEVEL ${N_CORES})
 endif()
+message("Build will be performed on ${N_CORES} cores.")
 
 #-------------------------#
 # Find external libraries #
@@ -118,31 +118,19 @@ elseif(NOT Boost_FOUND)
     message(FATAL_ERROR "Boost was not found! Set variables BOOST_LIBRARYDIR and BOOST_INCLUDEDIR manually or set ALLOW_DEPENDENCIES_DOWNLOAD to ON to allow automatic download and compilation of Boost.")
 endif()
 
-#find_package(Exprtk)
-#
-#if(NOT EXPRTK_FOUND AND ALLOW_DEPENDENCIES_DOWNLOAD)
-#    message("Exprt will be downloaded and compiled locally in 'external_dependencies' folder.")
-#    include(DownloadExprtk)
-#endif()
-#
-#find_package(Turtle)
-#
-#if(NOT TURTLE_FOUND AND ALLOW_DEPENDENCIES_DOWNLOAD)
-#    message("Turtle will be downloaded and compiled locally in 'external_dependencies folder.")
-#    include(DownloadTurtle)
-#endif()
-#
-#
-#set(Boost_USE_MULTITHREADED ON)
-#set(Boost_DEBUG OFF)
-#
-#
-#
-#find_package(exprtk)
-#message("EXPRTK_INCLUDE_DIRS: ${EXPRTK_INCLUDE_DIRS}")
-#
-#find_package(Turtle)
-#message("TURTLE_INCLUDE_DIR: ${TURTLE_INCLUDE_DIR}")
+find_package(Exprtk)
+
+if(NOT EXPRTK_FOUND AND ALLOW_DEPENDENCIES_DOWNLOAD)
+    message("Exprt will be downloaded and compiled locally in 'external_dependencies' folder.")
+    include(DownloadExprtk)
+endif()
+
+find_package(Turtle)
+
+if(NOT TURTLE_FOUND AND ALLOW_DEPENDENCIES_DOWNLOAD)
+    message("Turtle will be downloaded and compiled locally in 'external_dependencies folder.")
+    include(DownloadTurtle)
+endif()
 
 #---------------#
 # Set variables #
diff --git a/DownloadBoost.cmake b/DownloadBoost.cmake
index fd4704d8896e946e7d6d3f1df1d0d4564b7beb24..832d0273bdd171d4797f2bab97ee0dcd5e78032a 100644
--- a/DownloadBoost.cmake
+++ b/DownloadBoost.cmake
@@ -20,7 +20,12 @@ FetchContent_Declare(
                     libs/predef libs/move libs/io libs/iterator
                     libs/detail libs/spirit libs/optional
                     libs/function libs/type_index libs/bind
-                    libs/container_hash libs/array
+                    libs/container_hash libs/array libs/test
+                    libs/timer libs/exception libs/algorithm
+                    libs/range libs/numeric libs/format
+                    libs/lexical_cast libs/concept_check
+                    libs/container libs/math libs/function_types
+                    libs/typeof
 )
 
 set(FETCHCONTENT_QUIET FALSE)
diff --git a/clean.sh b/clean.sh
index 008a291a0a230195ee0297a5e5c9a1e4f2c4c850..3a0e8d6fe8123e85a8511410c6b100e402ed9ae9 100755
--- a/clean.sh
+++ b/clean.sh
@@ -10,3 +10,4 @@ rm -f CMakeCache.txt
 rm -f cmake_install.cmake src/cmake_install.cmake
 rm -rf CMakeFiles src/CMakeFiles src/examples/CMakeFiles src/tests/CMakeFiles
 rm -rf external_dependencies/*
+rm -rf _deps
diff --git a/src/ErrorFunction/ErrorFunctions.h b/src/ErrorFunction/ErrorFunctions.h
index b61430643b4244921b3d72638dab61c6098ebf93..3699ca5d632f1ed72a03ec959fed836e08f62dc2 100644
--- a/src/ErrorFunction/ErrorFunctions.h
+++ b/src/ErrorFunction/ErrorFunctions.h
@@ -140,7 +140,6 @@ namespace lib4neuro {
                                         bool denormalize_data = true,
                                         bool verbose = false) = 0;
 
-
     protected:
 
         /**
diff --git a/src/tests/ErrorFunctions_test.cpp b/src/tests/ErrorFunctions_test.cpp
index d0849efa79cc36ca0ddc6e544a9e56f46d0bf45f..ef3210b758d28f069b172f94c4f62d84eddcb1e7 100644
--- a/src/tests/ErrorFunctions_test.cpp
+++ b/src/tests/ErrorFunctions_test.cpp
@@ -50,7 +50,7 @@ MOCK_BASE_CLASS(mock_network, lib4neuro::NeuralNetwork)
 
 MOCK_BASE_CLASS(mock_error_fun, ErrorFunction)
 {
-	MOCK_METHOD(eval, 1)
+	MOCK_METHOD(eval, 3)
 	MOCK_METHOD(get_dimension, 0)
 	MOCK_METHOD(calculate_error_gradient, 4)
 	MOCK_METHOD(get_parameters, 0)
@@ -58,12 +58,12 @@ MOCK_BASE_CLASS(mock_error_fun, ErrorFunction)
 	MOCK_METHOD(get_network_instance, 0)
 	MOCK_METHOD(divide_data_train_test, 1)
 	MOCK_METHOD(return_full_data_set_for_training, 0)
-	MOCK_METHOD(eval_on_test_data, 1, double(std::vector<double>*), id1)
-	MOCK_METHOD(eval_on_test_data, 2, double(std::string, std::vector<double>*), id2)
-	MOCK_METHOD(eval_on_test_data, 2, double(std::ofstream*, std::vector<double>*), id3)
-	MOCK_METHOD(eval_on_data_set, 2, double(DataSet*, std::vector<double>*), id4)
-	MOCK_METHOD(eval_on_data_set, 3, double(DataSet*, std::string, std::vector<double>*), id5)
-	MOCK_METHOD(eval_on_data_set, 3, double(DataSet*, std::ofstream*, std::vector<double>*), id6)
+	MOCK_METHOD(eval_on_test_data, 2, double(std::vector<double>*, bool), id1)
+	MOCK_METHOD(eval_on_test_data, 3, double(std::string, std::vector<double>*, bool), id2)
+	MOCK_METHOD(eval_on_test_data, 3, double(std::ofstream*, std::vector<double>*, bool), id3)
+	MOCK_METHOD(eval_on_data_set, 3, double(DataSet*, std::vector<double>*, bool), id4)
+	MOCK_METHOD(eval_on_data_set, 4, double(DataSet*, std::string, std::vector<double>*, bool), id5)
+	MOCK_METHOD(eval_on_data_set, 5, double(DataSet*, std::ofstream*, std::vector<double>*, bool, bool), id6)
 };
 
 MOCK_BASE_CLASS(mock_dataSet, lib4neuro::DataSet)
diff --git a/src/tests/ParticleSwarm_test.cpp b/src/tests/ParticleSwarm_test.cpp
index 18116cf8c4d2832ea34507cdcdb031ec8affeae8..134d2d6df2f87ac32c64ed5c37d27368509c7e8c 100644
--- a/src/tests/ParticleSwarm_test.cpp
+++ b/src/tests/ParticleSwarm_test.cpp
@@ -31,7 +31,7 @@ using namespace lib4neuro;
 
 MOCK_BASE_CLASS(mock_Error, ErrorFunction)
 {
-	MOCK_METHOD(eval, 1)
+	MOCK_METHOD(eval, 3)
 	MOCK_METHOD(get_dimension, 0)
 	MOCK_METHOD(calculate_error_gradient, 4)
 	MOCK_METHOD(get_parameters, 0)
@@ -39,12 +39,12 @@ MOCK_BASE_CLASS(mock_Error, ErrorFunction)
 	MOCK_METHOD(get_network_instance, 0)
 	MOCK_METHOD(divide_data_train_test, 1)
 	MOCK_METHOD(return_full_data_set_for_training, 0)
-	MOCK_METHOD(eval_on_test_data, 1, double(std::vector<double>*), id1)
-	MOCK_METHOD(eval_on_test_data, 2, double(std::string, std::vector<double>*), id2)
-	MOCK_METHOD(eval_on_test_data, 2, double(std::ofstream*, std::vector<double>*), id3)
-	MOCK_METHOD(eval_on_data_set, 2, double(DataSet*, std::vector<double>*), id4)
-	MOCK_METHOD(eval_on_data_set, 3, double(DataSet*, std::string, std::vector<double>*), id5)
-	MOCK_METHOD(eval_on_data_set, 3, double(DataSet*, std::ofstream*, std::vector<double>*), id6)
+	MOCK_METHOD(eval_on_test_data, 2, double(std::vector<double>*, bool), id1)
+	MOCK_METHOD(eval_on_test_data, 3, double(std::string, std::vector<double>*, bool), id2)
+	MOCK_METHOD(eval_on_test_data, 3, double(std::ofstream*, std::vector<double>*, bool), id3)
+	MOCK_METHOD(eval_on_data_set, 3, double(DataSet*, std::vector<double>*, bool), id4)
+	MOCK_METHOD(eval_on_data_set, 4, double(DataSet*, std::string, std::vector<double>*, bool), id5)
+	MOCK_METHOD(eval_on_data_set, 5, double(DataSet*, std::ofstream*, std::vector<double>*, bool, bool), id6)
 };
 
 /**
diff --git a/src/tests/Particle_test.cpp b/src/tests/Particle_test.cpp
index 0405bec0a34337c6c43e3ee5376dccc10dbf2051..f7c85a545ff119163194265be3dc4ab4e222eaa1 100644
--- a/src/tests/Particle_test.cpp
+++ b/src/tests/Particle_test.cpp
@@ -30,22 +30,21 @@ using namespace lib4neuro;
 
 MOCK_BASE_CLASS(mock_Error, ErrorFunction)
 {
-    MOCK_METHOD(eval, 1)
-    MOCK_METHOD(get_dimension, 0)
-    MOCK_METHOD(calculate_error_gradient, 4)
-    MOCK_METHOD(get_parameters, 0)
-    MOCK_METHOD(get_dataset, 0)
-    MOCK_METHOD(get_network_instance, 0)
-    MOCK_METHOD(divide_data_train_test, 1)
-    MOCK_METHOD(return_full_data_set_for_training, 0)
-    MOCK_METHOD(eval_on_test_data, 1, double(std::vector<double>*), id1)
-    MOCK_METHOD(eval_on_test_data, 2, double(std::string, std::vector<double>*), id2)
-    MOCK_METHOD(eval_on_test_data, 2, double(std::ofstream*, std::vector<double>*), id3)
-    MOCK_METHOD(eval_on_data_set, 2, double(DataSet*, std::vector<double>*), id4)
-    MOCK_METHOD(eval_on_data_set, 3, double(DataSet*, std::string, std::vector<double>*), id5)
-    MOCK_METHOD(eval_on_data_set, 3, double(DataSet*, std::ofstream*, std::vector<double>*), id6)
+	MOCK_METHOD(eval, 3)
+	MOCK_METHOD(get_dimension, 0)
+	MOCK_METHOD(calculate_error_gradient, 4)
+	MOCK_METHOD(get_parameters, 0)
+	MOCK_METHOD(get_dataset, 0)
+	MOCK_METHOD(get_network_instance, 0)
+	MOCK_METHOD(divide_data_train_test, 1)
+	MOCK_METHOD(return_full_data_set_for_training, 0)
+	MOCK_METHOD(eval_on_test_data, 2, double(std::vector<double>*, bool), id1)
+	MOCK_METHOD(eval_on_test_data, 3, double(std::string, std::vector<double>*, bool), id2)
+	MOCK_METHOD(eval_on_test_data, 3, double(std::ofstream*, std::vector<double>*, bool), id3)
+	MOCK_METHOD(eval_on_data_set, 3, double(DataSet*, std::vector<double>*, bool), id4)
+	MOCK_METHOD(eval_on_data_set, 4, double(DataSet*, std::string, std::vector<double>*, bool), id5)
+	MOCK_METHOD(eval_on_data_set, 5, double(DataSet*, std::ofstream*, std::vector<double>*, bool, bool), id6)
 };
-
 /**
  * Boost testing suite for testing ParticleSwarm.h
  * TODO