diff options
author | Henning Baldersheim <balder@oath.com> | 2019-06-14 15:39:32 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@oath.com> | 2019-06-14 15:39:32 +0000 |
commit | 44f5b006837d5905c8140813e2ca48e2998cc09d (patch) | |
tree | a4de918f146340a423b61d086e6657c8b5d083c7 | |
parent | f1fcc615286a9637101458c298980525a0d1eaa7 (diff) |
Add test and fix decoding of hex numbers.
-rw-r--r-- | searchlib/src/tests/features/util/util_test.cpp | 20 | ||||
-rw-r--r-- | searchlib/src/vespa/searchlib/features/utils.cpp | 4 |
2 files changed, 22 insertions, 2 deletions
diff --git a/searchlib/src/tests/features/util/util_test.cpp b/searchlib/src/tests/features/util/util_test.cpp index 6b166682346..208c290cff3 100644 --- a/searchlib/src/tests/features/util/util_test.cpp +++ b/searchlib/src/tests/features/util/util_test.cpp @@ -8,6 +8,7 @@ using namespace search; using namespace search::fef; using namespace search::fef::test; using namespace search::features; +using namespace search::features::util; SimpleTermData make_term(uint32_t uid) { SimpleTermData term; @@ -37,4 +38,23 @@ TEST_F("require that label can be mapped to term", TermLabelFixture) { EXPECT_EQUAL((ITermData*)0, util::getTermByLabel(f1.queryEnv, "unknown")); } +template <typename T> +void verifyStrToNum() { + EXPECT_EQUAL(-17, static_cast<long>(strToNum<T>("-17"))); + EXPECT_EQUAL(-1, static_cast<long>(strToNum<T>("-1"))); + EXPECT_EQUAL(0, static_cast<long>(strToNum<T>("0"))); + EXPECT_EQUAL(1, static_cast<long>(strToNum<T>("1"))); + EXPECT_EQUAL(17, static_cast<long>(strToNum<T>("17"))); + EXPECT_EQUAL(0, static_cast<long>(strToNum<T>("0x0"))); + EXPECT_EQUAL(1, static_cast<long>(strToNum<T>("0x1"))); + EXPECT_EQUAL(27, static_cast<long>(strToNum<T>("0x1b"))); +} + +TEST("verify str2Num") { + verifyStrToNum<int8_t>(); + verifyStrToNum<int16_t>(); + verifyStrToNum<int32_t>(); + verifyStrToNum<int64_t>(); +} + TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/searchlib/src/vespa/searchlib/features/utils.cpp b/searchlib/src/vespa/searchlib/features/utils.cpp index 6270ff2bb39..7bfea67b7f6 100644 --- a/searchlib/src/vespa/searchlib/features/utils.cpp +++ b/searchlib/src/vespa/searchlib/features/utils.cpp @@ -9,8 +9,8 @@ template <typename T> T strToInt(vespalib::stringref str) { T retval = 0; - if ((str.size() > 2) && (str[0] == '0') && ((str[0] | 0x20) == 'x')) { - std::from_chars(str.data(), str.data()+str.size(), retval, 16); + if ((str.size() > 2) && (str[0] == '0') && ((str[1] | 0x20) == 'x')) { + std::from_chars(str.data()+2, str.data()+str.size(), retval, 16); } else { std::from_chars(str.data(), str.data()+str.size(), retval, 10); } |