summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@oath.com>2019-06-14 15:39:32 +0000
committerHenning Baldersheim <balder@oath.com>2019-06-14 15:39:32 +0000
commit44f5b006837d5905c8140813e2ca48e2998cc09d (patch)
treea4de918f146340a423b61d086e6657c8b5d083c7 /searchlib
parentf1fcc615286a9637101458c298980525a0d1eaa7 (diff)
Add test and fix decoding of hex numbers.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/tests/features/util/util_test.cpp20
-rw-r--r--searchlib/src/vespa/searchlib/features/utils.cpp4
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);
}