From 54e0afae103de0bce86638cee4d8c7d6c498375a Mon Sep 17 00:00:00 2001 From: Wuwei Lin Date: Thu, 28 Jun 2018 20:34:05 +0800 Subject: [PATCH] Add unittest of normone --- tests/unit/preprocessor/NormOne_unittest.cc | 65 +++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 tests/unit/preprocessor/NormOne_unittest.cc diff --git a/tests/unit/preprocessor/NormOne_unittest.cc b/tests/unit/preprocessor/NormOne_unittest.cc new file mode 100644 index 00000000000..855eb9da64a --- /dev/null +++ b/tests/unit/preprocessor/NormOne_unittest.cc @@ -0,0 +1,65 @@ +/* + * This software is distributed under BSD 3-clause license (see LICENSE file). + * + * Authors: Wuwei Lin + */ + +#include +#include +#include + +using namespace shogun; + +class NormOne : public ::testing::Test +{ +public: + NormOne() + : feats(Some>::from_raw(nullptr)) + , transformer(some()) + { + SGMatrix m(data, num_features, num_vectors, false); + m = m.clone(); + feats = some>(m); + } + +protected: + float64_t data[6] = {1,2,3,4,5,6}; + float64_t norm [2] = {std::sqrt(1+2*2+3*3), std::sqrt(4*4+5*5+6*6)}; + int32_t num_vectors = 2; + int32_t num_features = 3; + + Some> feats; + Some transformer; +}; + +TEST_F(NormOne, transform) +{ + transformer->fit(feats); + feats = wrap(transformer->transform(feats)->as>()); + + EXPECT_EQ(feats->get_num_vectors(), num_vectors); + + for (auto i : range(num_vectors)) + { + SGVector v = feats->get_feature_vector(i); + EXPECT_EQ(v.vlen, num_features); + for (auto j : range(v.vlen)) { + EXPECT_DOUBLE_EQ(v[j], data[num_features*i+j]/norm[i]); + } + } +} + +TEST_F(NormOne, apply_to_vector) +{ + transformer->fit(feats); + + for (auto i : range(num_vectors)) + { + SGVector v = feats->get_feature_vector(i); + auto result = transformer->apply_to_feature_vector(v); + EXPECT_EQ(result.vlen, num_features); + for (auto j : range(v.vlen)) { + EXPECT_DOUBLE_EQ(result[j], data[num_features*i+j]/norm[i]); + } + } +}