From d8d7bc79b74c7f53018390dd1e19bcc2aafe4c82 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Wed, 1 Feb 2017 09:07:40 -0800 Subject: [PATCH] Enhance number parsing tests --- .../chaiscript/language/chaiscript_parser.hpp | 2 +- unittests/integer_literal_test.cpp | 32 +++++++++++++------ 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/include/chaiscript/language/chaiscript_parser.hpp b/include/chaiscript/language/chaiscript_parser.hpp index 3e7315b..f0b57f0 100644 --- a/include/chaiscript/language/chaiscript_parser.hpp +++ b/include/chaiscript/language/chaiscript_parser.hpp @@ -757,7 +757,7 @@ namespace chaiscript try { auto u = std::stoull(val,nullptr,base); - if (u >= std::numeric_limits::min() && u <= std::numeric_limits::max()) { + if (!longlong_ && u >= std::numeric_limits::min() && u <= std::numeric_limits::max()) { return const_var(static_cast(u)); } else { return const_var(static_cast(u)); diff --git a/unittests/integer_literal_test.cpp b/unittests/integer_literal_test.cpp index 9403a1d..bd5ef10 100644 --- a/unittests/integer_literal_test.cpp +++ b/unittests/integer_literal_test.cpp @@ -4,13 +4,25 @@ #define TEST_LITERAL(v) test_literal(v, #v) +#define TEST_LITERAL_SIGNED(v) test_literal(v, #v, true) template -bool test_literal(T val, const std::string &str) +bool test_literal(T val, const std::string &str, bool use_boxed_number = false) { std::cout << '(' << str << ") Comparing : C++ '" << val; chaiscript::ChaiScript_Basic chai(create_chaiscript_stdlib(),create_chaiscript_parser()); - T val2 = chai.eval(str); + + // Note, after applying the `-` it's possible that chaiscript has internally converted + // between two equivalently sized types (ie, unsigned long and unsigned long long on a 64bit system) + // so we're going to allow some leeway with the signed tests + T val2 = [&](){ + if (!use_boxed_number) { + return chai.eval(str); + } else { + return chai.eval(str).get_as(); + } + }(); + std::cout << "' chai '" << val2 << "'\n"; return val == val2; } @@ -222,20 +234,20 @@ int main() && TEST_LITERAL(16777215ull) && TEST_LITERAL(4294967295ull) - && TEST_LITERAL(-255ull) - && TEST_LITERAL(-65535ull) - && TEST_LITERAL(-16777215ull) - && TEST_LITERAL(-4294967295ull) + && TEST_LITERAL_SIGNED(-255ull) + && TEST_LITERAL_SIGNED(-65535ull) + && TEST_LITERAL_SIGNED(-16777215ull) + && TEST_LITERAL_SIGNED(-4294967295ull) && TEST_LITERAL(255ll) && TEST_LITERAL(65535ll) && TEST_LITERAL(16777215ll) && TEST_LITERAL(4294967295ll) - && TEST_LITERAL(-255ll) - && TEST_LITERAL(-65535ll) - && TEST_LITERAL(-16777215ll) - && TEST_LITERAL(-4294967295ll) + && TEST_LITERAL_SIGNED(-255ll) + && TEST_LITERAL_SIGNED(-65535ll) + && TEST_LITERAL_SIGNED(-16777215ll) + && TEST_LITERAL_SIGNED(-4294967295ll) )