123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- // Copyright 2017 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "components/assist_ranker/ranker_example_util.h"
- #include "testing/gmock/include/gmock/gmock.h"
- #include "testing/gtest/include/gtest/gtest.h"
- namespace assist_ranker {
- using ::testing::ElementsAreArray;
- class RankerExampleUtilTest : public ::testing::Test {
- protected:
- void SetUp() override {
- auto& features = *example_.mutable_features();
- features[bool_name_].set_bool_value(bool_value_);
- features[int32_name_].set_int32_value(int32_value_);
- features[float_name_].set_float_value(float_value_);
- features[one_hot_name_].set_string_value(one_hot_value_);
- }
- RankerExample example_;
- const std::string bool_name_ = "bool_feature";
- const bool bool_value_ = true;
- const std::string int32_name_ = "int32_feature";
- const int int32_value_ = 2;
- const std::string float_name_ = "float_feature";
- const float float_value_ = 3.0f;
- const std::string one_hot_name_ = "one_hot_feature";
- const std::string elem1_ = "elem1";
- const std::string elem2_ = "elem2";
- const std::string one_hot_value_ = elem1_;
- const float epsilon_ = 0.00000001f;
- };
- TEST_F(RankerExampleUtilTest, CheckFeature) {
- EXPECT_TRUE(SafeGetFeature(bool_name_, example_, nullptr));
- EXPECT_TRUE(SafeGetFeature(int32_name_, example_, nullptr));
- EXPECT_TRUE(SafeGetFeature(float_name_, example_, nullptr));
- EXPECT_TRUE(SafeGetFeature(one_hot_name_, example_, nullptr));
- EXPECT_FALSE(SafeGetFeature("", example_, nullptr));
- EXPECT_FALSE(SafeGetFeature("foo", example_, nullptr));
- }
- TEST_F(RankerExampleUtilTest, SafeGetFeature) {
- Feature feature;
- EXPECT_TRUE(SafeGetFeature(bool_name_, example_, &feature));
- EXPECT_TRUE(feature.bool_value());
- feature.Clear();
- EXPECT_TRUE(SafeGetFeature(int32_name_, example_, &feature));
- EXPECT_EQ(int32_value_, feature.int32_value());
- feature.Clear();
- EXPECT_TRUE(SafeGetFeature(float_name_, example_, &feature));
- EXPECT_NEAR(float_value_, feature.float_value(), epsilon_);
- feature.Clear();
- EXPECT_TRUE(SafeGetFeature(one_hot_name_, example_, &feature));
- EXPECT_EQ(one_hot_value_, feature.string_value());
- feature.Clear();
- EXPECT_FALSE(SafeGetFeature("", example_, &feature));
- EXPECT_FALSE(SafeGetFeature("foo", example_, &feature));
- }
- TEST_F(RankerExampleUtilTest, GetFeatureValueAsFloat) {
- float value;
- EXPECT_TRUE(GetFeatureValueAsFloat(bool_name_, example_, &value));
- EXPECT_NEAR(1.0f, value, epsilon_);
- EXPECT_TRUE(GetFeatureValueAsFloat(int32_name_, example_, &value));
- EXPECT_NEAR(2.0f, value, epsilon_);
- EXPECT_TRUE(GetFeatureValueAsFloat(float_name_, example_, &value));
- EXPECT_NEAR(3.0f, value, epsilon_);
- EXPECT_FALSE(GetFeatureValueAsFloat(one_hot_name_, example_, &value));
- // Value remains unchanged if GetFeatureValueAsFloat returns false.
- EXPECT_NEAR(3.0f, value, epsilon_);
- EXPECT_FALSE(GetFeatureValueAsFloat("", example_, &value));
- EXPECT_FALSE(GetFeatureValueAsFloat("foo", example_, &value));
- }
- TEST_F(RankerExampleUtilTest, GetOneHotValue) {
- std::string value;
- EXPECT_FALSE(GetOneHotValue(bool_name_, example_, &value));
- EXPECT_FALSE(GetOneHotValue(int32_name_, example_, &value));
- EXPECT_FALSE(GetOneHotValue(float_name_, example_, &value));
- EXPECT_TRUE(GetOneHotValue(one_hot_name_, example_, &value));
- EXPECT_EQ(one_hot_value_, value);
- EXPECT_FALSE(GetOneHotValue("", example_, &value));
- EXPECT_FALSE(GetOneHotValue("foo", example_, &value));
- }
- TEST_F(RankerExampleUtilTest, ScalarFeatureInt64Conversion) {
- Feature feature;
- int64_t int64_value;
- feature.set_bool_value(true);
- EXPECT_TRUE(FeatureToInt64(feature, &int64_value));
- EXPECT_EQ(int64_value, 72057594037927937LL);
- feature.set_int32_value(std::numeric_limits<int32_t>::max());
- EXPECT_TRUE(FeatureToInt64(feature, &int64_value));
- EXPECT_EQ(int64_value, 216172784261267455LL);
- feature.set_int32_value(std::numeric_limits<int32_t>::lowest());
- EXPECT_TRUE(FeatureToInt64(feature, &int64_value));
- EXPECT_EQ(int64_value, 216172784261267456LL);
- feature.set_string_value("foo");
- EXPECT_TRUE(FeatureToInt64(feature, &int64_value));
- EXPECT_EQ(int64_value, 288230377439557724LL);
- }
- TEST_F(RankerExampleUtilTest, FloatFeatureInt64Conversion) {
- Feature feature;
- int64_t int64_value;
- feature.set_float_value(std::numeric_limits<float>::epsilon());
- EXPECT_TRUE(FeatureToInt64(feature, &int64_value));
- EXPECT_EQ(int64_value, 144115188948271104LL);
- feature.set_float_value(-std::numeric_limits<float>::epsilon());
- EXPECT_TRUE(FeatureToInt64(feature, &int64_value));
- EXPECT_EQ(int64_value, 144115191095754752LL);
- feature.set_float_value(std::numeric_limits<float>::max());
- EXPECT_TRUE(FeatureToInt64(feature, &int64_value));
- EXPECT_EQ(int64_value, 144115190214950911LL);
- feature.set_float_value(std::numeric_limits<float>::lowest());
- EXPECT_TRUE(FeatureToInt64(feature, &int64_value));
- EXPECT_EQ(int64_value, 144115192362434559LL);
- }
- TEST_F(RankerExampleUtilTest, StringListInt64Conversion) {
- Feature feature;
- int64_t int64_value;
- feature.mutable_string_list()->add_string_value("");
- feature.mutable_string_list()->add_string_value("TEST");
- EXPECT_TRUE(FeatureToInt64(feature, &int64_value, 1));
- EXPECT_EQ(int64_value, 360287974776690660LL);
- }
- TEST_F(RankerExampleUtilTest, HashExampleFeatureNames) {
- auto hashed_example = HashExampleFeatureNames(example_);
- // Hashed example has the same number of features.
- EXPECT_EQ(example_.features().size(), hashed_example.features().size());
- // But the feature names have changed.
- EXPECT_FALSE(SafeGetFeature(bool_name_, hashed_example, nullptr));
- EXPECT_FALSE(SafeGetFeature(int32_name_, hashed_example, nullptr));
- EXPECT_FALSE(SafeGetFeature(float_name_, hashed_example, nullptr));
- EXPECT_FALSE(SafeGetFeature(one_hot_name_, hashed_example, nullptr));
- EXPECT_TRUE(
- SafeGetFeature(HashFeatureName(bool_name_), hashed_example, nullptr));
- // Values have not changed.
- float float_value;
- EXPECT_TRUE(GetFeatureValueAsFloat(HashFeatureName(float_name_),
- hashed_example, &float_value));
- EXPECT_EQ(float_value_, float_value);
- std::string string_value;
- EXPECT_TRUE(GetOneHotValue(HashFeatureName(one_hot_name_), hashed_example,
- &string_value));
- EXPECT_EQ(one_hot_value_, string_value);
- }
- } // namespace assist_ranker
|