diff --git a/src/shogun/base/class_list.h b/src/shogun/base/class_list.h index 9858afbb28c..3eeaedc536f 100644 --- a/src/shogun/base/class_list.h +++ b/src/shogun/base/class_list.h @@ -43,6 +43,7 @@ namespace shogun { auto* cast = dynamic_cast(object); if (!cast) { + delete object; SG_SERROR("Type mismatch"); } return cast; diff --git a/src/shogun/base/progress.h b/src/shogun/base/progress.h index 1c13095617b..6ebf50aced0 100644 --- a/src/shogun/base/progress.h +++ b/src/shogun/base/progress.h @@ -84,8 +84,8 @@ namespace shogun const SGIO& io, float64_t max_value, float64_t min_value, const std::string& prefix, const SG_PRG_MODE mode) : m_io(io), m_max_value(max_value), m_min_value(min_value), - m_prefix(prefix), m_mode(mode), m_last_progress(0), - m_last_progress_time(0), + m_prefix(prefix), m_mode(mode), m_columns_num(0), m_rows_num(0), + m_last_progress(0), m_last_progress_time(0), m_progress_start_time(CTime::get_curtime()), m_current_value(min_value) { @@ -397,6 +397,8 @@ namespace shogun m_rows_num = csbi.srWindow.Bottom - csbi.srWindow.Top + 1; #else struct winsize wind; + wind.ws_col = 0; + wind.ws_row = 0; ioctl(STDOUT_FILENO, TIOCGWINSZ, &wind); m_columns_num = wind.ws_col; m_rows_num = wind.ws_row; diff --git a/src/shogun/classifier/LDA.cpp b/src/shogun/classifier/LDA.cpp index 51085187aa5..2c14ee7d8f5 100644 --- a/src/shogun/classifier/LDA.cpp +++ b/src/shogun/classifier/LDA.cpp @@ -75,27 +75,26 @@ bool CLDA::train_machine(CFeatures *data) SG_ERROR("Specified features are not of type CDotFeatures\n") set_features((CDotFeatures*) data); } - else + else if (!features) { - data = get_features(); REQUIRE(data, "Features have not been provided.\n") } REQUIRE( - data->get_num_vectors() == m_labels->get_num_labels(), + features->get_num_vectors() == m_labels->get_num_labels(), "Number of training examples(%d) should be equal to number of labels " "(%d)!\n", - data->get_num_vectors(), m_labels->get_num_labels()); + features->get_num_vectors(), m_labels->get_num_labels()); REQUIRE( features->get_feature_class() == C_DENSE, "LDA only works with dense features") - if(data->get_feature_type() == F_SHORTREAL) + if (features->get_feature_type() == F_SHORTREAL) return CLDA::train_machine_templated(); - else if(data->get_feature_type() == F_DREAL) + else if (features->get_feature_type() == F_DREAL) return CLDA::train_machine_templated(); - else if(data->get_feature_type() == F_LONGREAL) + else if (features->get_feature_type() == F_LONGREAL) return CLDA::train_machine_templated(); return false; diff --git a/src/shogun/preprocessor/KernelPCA.cpp b/src/shogun/preprocessor/KernelPCA.cpp index e14ba797204..d524829255f 100644 --- a/src/shogun/preprocessor/KernelPCA.cpp +++ b/src/shogun/preprocessor/KernelPCA.cpp @@ -149,11 +149,13 @@ SGVector CKernelPCA::apply_to_feature_vector(SGVector vect { ASSERT(m_initialized) - std::unique_ptr features( - new CDenseFeatures(SGMatrix(vector))); + CFeatures* features = + new CDenseFeatures(SGMatrix(vector)); + SG_REF(features) - SGMatrix result_matrix = apply_to_feature_matrix(features.get()); + SGMatrix result_matrix = apply_to_feature_matrix(features); + SG_UNREF(features) return SGVector(result_matrix); } diff --git a/tests/unit/preprocessor/FisherLDA_unittest.cc b/tests/unit/preprocessor/FisherLDA_unittest.cc index 49167bf3ddb..15ce676b5f0 100644 --- a/tests/unit/preprocessor/FisherLDA_unittest.cc +++ b/tests/unit/preprocessor/FisherLDA_unittest.cc @@ -119,7 +119,16 @@ class FLDATest: public::testing::Test labels_vector[i*num+j]=i; labels=new CMulticlassLabels(labels_vector); + SG_REF(dense_feat); + SG_REF(labels); } + + ~FLDATest() + { + SG_UNREF(dense_feat); + SG_UNREF(labels); + } + CDenseFeatures* dense_feat; CMulticlassLabels* labels; }; diff --git a/tests/unit/preprocessor/KernelPCA_unittest.cc b/tests/unit/preprocessor/KernelPCA_unittest.cc index c89d1892769..004c0f8e6fd 100644 --- a/tests/unit/preprocessor/KernelPCA_unittest.cc +++ b/tests/unit/preprocessor/KernelPCA_unittest.cc @@ -41,10 +41,15 @@ TEST(KernelPCA, apply_to_feature_matrix) CDenseFeatures* test_feats = new CDenseFeatures(test_matrix); + SG_REF(train_feats) + SG_REF(test_feats) + CGaussianKernel* kernel = new CGaussianKernel(); + SG_REF(kernel) kernel->set_width(1); CKernelPCA* kpca = new CKernelPCA(kernel); + SG_REF(kpca) kpca->set_target_dim(target_dim); kpca->init(train_feats); @@ -54,7 +59,10 @@ TEST(KernelPCA, apply_to_feature_matrix) for (index_t i = 0; i < num_test_vectors * target_dim; ++i) EXPECT_NEAR(CMath::abs(embedding[i]), CMath::abs(resdata[i]), 1E-6); - SG_FREE(kpca); + SG_UNREF(train_feats) + SG_UNREF(test_feats) + SG_UNREF(kpca); + SG_UNREF(kernel); } TEST(KernelPCA, apply_to_feature_vector) @@ -65,11 +73,14 @@ TEST(KernelPCA, apply_to_feature_vector) CDenseFeatures* train_feats = new CDenseFeatures(train_matrix); + SG_REF(train_feats) CGaussianKernel* kernel = new CGaussianKernel(); + SG_REF(kernel) kernel->set_width(1); CKernelPCA* kpca = new CKernelPCA(kernel); + SG_REF(kpca) kpca->set_target_dim(target_dim); kpca->init(train_feats); @@ -79,5 +90,7 @@ TEST(KernelPCA, apply_to_feature_vector) for (index_t i = 0; i < target_dim; ++i) EXPECT_NEAR(CMath::abs(embedding[i]), CMath::abs(resdata[i]), 1E-6); - SG_FREE(kpca); + SG_UNREF(train_feats) + SG_UNREF(kpca); + SG_UNREF(kernel); } diff --git a/tests/unit/regression/krrnystrom_unittest.cc b/tests/unit/regression/krrnystrom_unittest.cc index b8770462e72..16c523f3355 100644 --- a/tests/unit/regression/krrnystrom_unittest.cc +++ b/tests/unit/regression/krrnystrom_unittest.cc @@ -36,8 +36,6 @@ #include #include -#ifdef HAVE_CXX11 - using namespace shogun; /** @@ -93,8 +91,10 @@ TEST(KRRNystrom, apply_and_compare_to_KRR_with_all_columns) for (index_t i=0; iapply_regression(test_features); - auto result_krr=krr->apply_regression(test_features); + auto result = Some::from_raw( + nystrom->apply_regression(test_features)); + auto result_krr = + Some::from_raw(krr->apply_regression(test_features)); for (index_t i=0; iget_label(i), result_krr->get_label(i), 1E-5); @@ -149,11 +149,11 @@ TEST(KRRNystrom, apply_and_compare_to_KRR_with_column_subset) nystrom->train(); krr->train(); - auto result=nystrom->apply_regression(test_features); - auto result_krr=krr->apply_regression(test_features); + auto result = Some::from_raw( + nystrom->apply_regression(test_features)); + auto result_krr = + Some::from_raw(krr->apply_regression(test_features)); for (index_t i=0; iget_label(i), result_krr->get_label(i), 1E-1); } - -#endif /* HAVE_CXX11 */