Fixed "constant exceeds range of float [-Woverflow]" (issue #544)

This commit is contained in:
Benoit Blanchon
2017-07-09 15:24:58 +02:00
parent 788c9be016
commit abfd3997eb
8 changed files with 163 additions and 111 deletions

View File

@ -19,13 +19,14 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "(GNU|Clang)")
-Wformat=2
-Winit-self
-Wmissing-include-dirs
-Wparentheses
-Wnon-virtual-dtor
-Wold-style-cast
-Woverloaded-virtual
-Wparentheses
-Wredundant-decls
-Wshadow
-Wsign-promo
-Wstrict-aliasing
-Wstrict-overflow=5
-Wundef
)

View File

@ -10,5 +10,12 @@ add_executable(IntegrationTests
round_trip.cpp
)
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
target_compile_options(IntegrationTests
PUBLIC
-fsingle-precision-constant # issue 544
)
endif()
target_link_libraries(IntegrationTests catch)
add_test(IntegrationTests IntegrationTests)

View File

@ -8,6 +8,7 @@
add_executable(PolyfillsTests
isFloat.cpp
isInteger.cpp
normalize.cpp
parseFloat.cpp
parseInteger.cpp
)

View File

@ -0,0 +1,43 @@
// Copyright Benoit Blanchon 2014-2017
// MIT License
//
// Arduino JSON library
// https://bblanchon.github.io/ArduinoJson/
// If you like this project, please add a star!
#include <ArduinoJson/Polyfills/normalize.hpp>
#include <catch.hpp>
using namespace ArduinoJson::Polyfills;
TEST_CASE("normalize<double>()") {
SECTION("1.7976931348623157E+308") {
double value = 1.7976931348623157E+308;
int exp = normalize(value);
REQUIRE(value == Approx(1.7976931348623157));
REQUIRE(exp == 308);
}
SECTION("4.94065645841247e-324") {
double value = 4.94065645841247e-324;
int exp = normalize(value);
REQUIRE(value == Approx(4.94065645841247));
REQUIRE(exp == -324);
}
}
TEST_CASE("normalize<float>()") {
SECTION("3.4E+38") {
float value = 3.4E+38f;
int exp = normalize(value);
REQUIRE(value == Approx(3.4f));
REQUIRE(exp == 38);
}
SECTION("1.17549435e38") {
float value = 1.17549435e-38f;
int exp = normalize(value);
REQUIRE(value == Approx(1.17549435));
REQUIRE(exp == -38);
}
}