Make string_to_num work with floats.
It basically amounts to a name change, because the functionality
was already there. There's also a new test for it.
Change-Id: I982ed9de87862bd65b29a81be858b45040bc9d45
diff --git a/aos/common/util/string_to_num.h b/aos/common/util/string_to_num.h
index c6dcb30..d99ed91 100644
--- a/aos/common/util/string_to_num.h
+++ b/aos/common/util/string_to_num.h
@@ -7,11 +7,11 @@
namespace aos {
namespace util {
-// Converts a string into a specified integral type. If it can't be converted
+// Converts a string into a specified numeric type. If it can't be converted
// completely or at all, or if the converted number would overflow the
-// specified integral type, it returns false.
+// specified type, it returns false.
template<typename T>
-inline bool StringToInteger(const ::std::string &input, T *out_num) {
+inline bool StringToNumber(const ::std::string &input, T *out_num) {
::std::istringstream stream(input);
stream >> *out_num;
diff --git a/aos/common/util/string_to_num_test.cc b/aos/common/util/string_to_num_test.cc
index e1ee1cb..705de42 100644
--- a/aos/common/util/string_to_num_test.cc
+++ b/aos/common/util/string_to_num_test.cc
@@ -12,30 +12,36 @@
TEST(StringToNumTest, CorrectNumber) {
int result;
- ASSERT_TRUE(StringToInteger<int>(::std::string("42"), &result));
+ ASSERT_TRUE(StringToNumber<int>(::std::string("42"), &result));
EXPECT_EQ(result, 42);
}
TEST(StringToNumTest, NegativeTest) {
int result;
- ASSERT_TRUE(StringToInteger<int>(::std::string("-42"), &result));
+ ASSERT_TRUE(StringToNumber<int>(::std::string("-42"), &result));
EXPECT_EQ(result, -42);
}
TEST(StringToNumTest, NonNumber) {
int result;
- ASSERT_FALSE(StringToInteger<int>(::std::string("Daniel"), &result));
+ ASSERT_FALSE(StringToNumber<int>(::std::string("Daniel"), &result));
}
TEST(StringToNumTest, NumberWithText) {
int result;
- ASSERT_FALSE(StringToInteger<int>(::std::string("42Daniel"), &result));
+ ASSERT_FALSE(StringToNumber<int>(::std::string("42Daniel"), &result));
}
TEST(StringToNumTest, OverflowTest) {
uint32_t result;
// 2 << 32 should overflow.
- ASSERT_FALSE(StringToInteger<uint32_t>(::std::string("4294967296"), &result));
+ ASSERT_FALSE(StringToNumber<uint32_t>(::std::string("4294967296"), &result));
+}
+
+TEST(StringToNumTest, FloatingPointTest) {
+ double result;
+ ASSERT_TRUE(StringToNumber<double>(::std::string("3.1415927")));
+ EXPECT_EQ(result, 3.1415927);
}
} // testing