Enhance number parsing tests
This commit is contained in:
parent
3e04210027
commit
d8d7bc79b7
@ -757,7 +757,7 @@ namespace chaiscript
|
|||||||
try {
|
try {
|
||||||
auto u = std::stoull(val,nullptr,base);
|
auto u = std::stoull(val,nullptr,base);
|
||||||
|
|
||||||
if (u >= std::numeric_limits<unsigned long>::min() && u <= std::numeric_limits<unsigned long>::max()) {
|
if (!longlong_ && u >= std::numeric_limits<unsigned long>::min() && u <= std::numeric_limits<unsigned long>::max()) {
|
||||||
return const_var(static_cast<unsigned long>(u));
|
return const_var(static_cast<unsigned long>(u));
|
||||||
} else {
|
} else {
|
||||||
return const_var(static_cast<unsigned long long>(u));
|
return const_var(static_cast<unsigned long long>(u));
|
||||||
|
@ -4,13 +4,25 @@
|
|||||||
|
|
||||||
|
|
||||||
#define TEST_LITERAL(v) test_literal(v, #v)
|
#define TEST_LITERAL(v) test_literal(v, #v)
|
||||||
|
#define TEST_LITERAL_SIGNED(v) test_literal(v, #v, true)
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
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;
|
std::cout << '(' << str << ") Comparing : C++ '" << val;
|
||||||
chaiscript::ChaiScript_Basic chai(create_chaiscript_stdlib(),create_chaiscript_parser());
|
chaiscript::ChaiScript_Basic chai(create_chaiscript_stdlib(),create_chaiscript_parser());
|
||||||
T val2 = chai.eval<T>(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<T>(str);
|
||||||
|
} else {
|
||||||
|
return chai.eval<chaiscript::Boxed_Number>(str).get_as<T>();
|
||||||
|
}
|
||||||
|
}();
|
||||||
|
|
||||||
std::cout << "' chai '" << val2 << "'\n";
|
std::cout << "' chai '" << val2 << "'\n";
|
||||||
return val == val2;
|
return val == val2;
|
||||||
}
|
}
|
||||||
@ -222,20 +234,20 @@ int main()
|
|||||||
&& TEST_LITERAL(16777215ull)
|
&& TEST_LITERAL(16777215ull)
|
||||||
&& TEST_LITERAL(4294967295ull)
|
&& TEST_LITERAL(4294967295ull)
|
||||||
|
|
||||||
&& TEST_LITERAL(-255ull)
|
&& TEST_LITERAL_SIGNED(-255ull)
|
||||||
&& TEST_LITERAL(-65535ull)
|
&& TEST_LITERAL_SIGNED(-65535ull)
|
||||||
&& TEST_LITERAL(-16777215ull)
|
&& TEST_LITERAL_SIGNED(-16777215ull)
|
||||||
&& TEST_LITERAL(-4294967295ull)
|
&& TEST_LITERAL_SIGNED(-4294967295ull)
|
||||||
|
|
||||||
&& TEST_LITERAL(255ll)
|
&& TEST_LITERAL(255ll)
|
||||||
&& TEST_LITERAL(65535ll)
|
&& TEST_LITERAL(65535ll)
|
||||||
&& TEST_LITERAL(16777215ll)
|
&& TEST_LITERAL(16777215ll)
|
||||||
&& TEST_LITERAL(4294967295ll)
|
&& TEST_LITERAL(4294967295ll)
|
||||||
|
|
||||||
&& TEST_LITERAL(-255ll)
|
&& TEST_LITERAL_SIGNED(-255ll)
|
||||||
&& TEST_LITERAL(-65535ll)
|
&& TEST_LITERAL_SIGNED(-65535ll)
|
||||||
&& TEST_LITERAL(-16777215ll)
|
&& TEST_LITERAL_SIGNED(-16777215ll)
|
||||||
&& TEST_LITERAL(-4294967295ll)
|
&& TEST_LITERAL_SIGNED(-4294967295ll)
|
||||||
|
|
||||||
|
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user