From ba06ac498645b02ff720ed0a8025904f36ede226 Mon Sep 17 00:00:00 2001 From: dota17 Date: Fri, 22 May 2020 15:21:25 +0800 Subject: [PATCH] update the ConvertStreamTo() function and test case --- include/yaml-cpp/node/convert.h | 27 ++++---------- test/integration/load_node_test.cpp | 55 ++++++++++++++--------------- 2 files changed, 33 insertions(+), 49 deletions(-) diff --git a/include/yaml-cpp/node/convert.h b/include/yaml-cpp/node/convert.h index 1d9ae48..3af1ab5 100644 --- a/include/yaml-cpp/node/convert.h +++ b/include/yaml-cpp/node/convert.h @@ -7,10 +7,8 @@ #pragma once #endif -#include #include #include -#include #include #include #include @@ -117,29 +115,16 @@ inner_encode(const T& rhs, std::stringstream& stream){ } template -typename std::enable_if::value, bool>::type +typename std::enable_if<(std::is_same::value || + std::is_same::value), bool>::type ConvertStreamTo(std::stringstream& stream, T& rhs) { - uint16_t num; + int num; if ((stream >> std::noskipws >> num) && (stream >> std::ws).eof()) { - rhs = std::min(num, (uint16_t)UINT8_MAX); - return true; - } - return false; -} - -template -typename std::enable_if::value, bool>::type -ConvertStreamTo(std::stringstream& stream, T& rhs) { - int16_t num; - if ((stream >> std::noskipws >> num) && (stream >> std::ws).eof()) { - if (num > INT8_MAX) { - rhs = INT8_MAX; - } else if (num < INT8_MIN) { - rhs = INT8_MIN; - } else { + if (num >= std::numeric_limits::min() && + num <= std::numeric_limits::max()) { rhs = num; + return true; } - return true; } return false; } diff --git a/test/integration/load_node_test.cpp b/test/integration/load_node_test.cpp index f556413..8186486 100644 --- a/test/integration/load_node_test.cpp +++ b/test/integration/load_node_test.cpp @@ -21,36 +21,35 @@ TEST(LoadNodeTest, FallbackValues) { } TEST(LoadNodeTest, NumericConversion) { - Node node = Load("[1.5, 1, .nan, .inf, -.inf, 0x15, 015, -128, 127, 128, 255, 256, a, ab]"); - EXPECT_EQ(1.5f, node[0].as()); - EXPECT_EQ(1.5, node[0].as()); - EXPECT_THROW(node[0].as(), TypedBadConversion); - EXPECT_EQ(1, node[1].as()); - EXPECT_EQ(1.0f, node[1].as()); - EXPECT_NE(node[2].as(), node[2].as()); - EXPECT_EQ(std::numeric_limits::infinity(), node[3].as()); - EXPECT_EQ(-std::numeric_limits::infinity(), node[4].as()); - EXPECT_EQ(21, node[5].as()); - EXPECT_EQ(13, node[6].as()); - EXPECT_EQ(-128, +node[7].as()); - EXPECT_EQ(127, +node[8].as()); - EXPECT_EQ(127, +node[9].as()); - EXPECT_EQ(255, +node[10].as()); - EXPECT_EQ(255, +node[11].as()); + EXPECT_EQ(1.5f, Load("1.5").as()); + EXPECT_EQ(1.5, Load("1.5").as()); + EXPECT_THROW(Load("1.5").as(), TypedBadConversion); + EXPECT_EQ(1, Load("1").as()); + EXPECT_EQ(1.0f, Load("1").as()); + EXPECT_NE(Load(".nan").as(), Load(".nan").as()); + EXPECT_EQ(std::numeric_limits::infinity(), Load(".inf").as()); + EXPECT_EQ(-std::numeric_limits::infinity(), Load("-.inf").as()); + EXPECT_EQ(21, Load("0x15").as()); + EXPECT_EQ(13, Load("015").as()); + EXPECT_EQ(-128, +Load("-128").as()); + EXPECT_EQ(127, +Load("127").as()); + EXPECT_THROW(Load("128").as(), TypedBadConversion); + EXPECT_EQ(255, +Load("255").as()); + EXPECT_THROW(Load("256").as(), TypedBadConversion); // test as/as with ‘a’,"ab",'1',"127" - EXPECT_EQ('a', node[12].as()); - EXPECT_THROW(node[13].as(), TypedBadConversion); - EXPECT_EQ('1', node[1].as()); - EXPECT_THROW(node[8].as(), TypedBadConversion); - EXPECT_THROW(node[12].as(), TypedBadConversion); - EXPECT_THROW(node[13].as(), TypedBadConversion); - EXPECT_EQ(1, +node[1].as()); + EXPECT_EQ('a', Load("a").as()); + EXPECT_THROW(Load("ab").as(), TypedBadConversion); + EXPECT_EQ('1', Load("1").as()); + EXPECT_THROW(Load("127").as(), TypedBadConversion); + EXPECT_THROW(Load("a").as(), TypedBadConversion); + EXPECT_THROW(Load("ab").as(), TypedBadConversion); + EXPECT_EQ(1, +Load("1").as()); // Throw exception: convert a negative number to an unsigned number. - EXPECT_THROW(node[7].as(), TypedBadConversion); - EXPECT_THROW(node[7].as(), TypedBadConversion); - EXPECT_THROW(node[7].as(), TypedBadConversion); - EXPECT_THROW(node[7].as(), TypedBadConversion); - EXPECT_THROW(node[7].as(), TypedBadConversion); + EXPECT_THROW(Load("-128").as(), TypedBadConversion); + EXPECT_THROW(Load("-128").as(), TypedBadConversion); + EXPECT_THROW(Load("-128").as(), TypedBadConversion); + EXPECT_THROW(Load("-128").as(), TypedBadConversion); + EXPECT_THROW(Load("-128").as(), TypedBadConversion); } TEST(LoadNodeTest, Binary) {