Enhance testing of integer literals
* enable the ability to check a boxed_number conversion * fix integer_literal_test to pass on MacOS
This commit is contained in:
parent
ca7d4ab734
commit
dca3ce4ea6
@ -585,6 +585,59 @@ namespace chaiscript
|
||||
|
||||
}
|
||||
|
||||
template<typename Source, typename Target>
|
||||
static void check_type()
|
||||
{
|
||||
if (sizeof(Source) != sizeof(Target)
|
||||
|| std::is_signed<Source>() != std::is_signed<Target>()
|
||||
|| std::is_floating_point<Source>() != std::is_floating_point<Target>())
|
||||
{
|
||||
throw chaiscript::detail::exception::bad_any_cast();
|
||||
}
|
||||
}
|
||||
|
||||
template<typename Target> Target get_as_checked() const
|
||||
{
|
||||
switch (get_common_type(bv)) {
|
||||
case Common_Types::t_int32:
|
||||
check_type<int32_t, Target>();
|
||||
return get_as_aux<Target, int32_t>(bv);
|
||||
case Common_Types::t_uint8:
|
||||
check_type<uint8_t, Target>();
|
||||
return get_as_aux<Target, uint8_t>(bv);
|
||||
case Common_Types::t_int8:
|
||||
check_type<int8_t, Target>();
|
||||
return get_as_aux<Target, int8_t>(bv);
|
||||
case Common_Types::t_uint16:
|
||||
check_type<uint16_t, Target>();
|
||||
return get_as_aux<Target, uint16_t>(bv);
|
||||
case Common_Types::t_int16:
|
||||
check_type<int16_t, Target>();
|
||||
return get_as_aux<Target, int16_t>(bv);
|
||||
case Common_Types::t_uint32:
|
||||
check_type<uint32_t, Target>();
|
||||
return get_as_aux<Target, uint32_t>(bv);
|
||||
case Common_Types::t_uint64:
|
||||
check_type<uint64_t, Target>();
|
||||
return get_as_aux<Target, uint64_t>(bv);
|
||||
case Common_Types::t_int64:
|
||||
check_type<int64_t, Target>();
|
||||
return get_as_aux<Target, int64_t>(bv);
|
||||
case Common_Types::t_double:
|
||||
check_type<double, Target>();
|
||||
return get_as_aux<Target, double>(bv);
|
||||
case Common_Types::t_float:
|
||||
check_type<float, Target>();
|
||||
return get_as_aux<Target, float>(bv);
|
||||
case Common_Types::t_long_double:
|
||||
check_type<long double, Target>();
|
||||
return get_as_aux<Target, long double>(bv);
|
||||
}
|
||||
|
||||
throw chaiscript::detail::exception::bad_any_cast();
|
||||
}
|
||||
|
||||
|
||||
template<typename Target> Target get_as() const
|
||||
{
|
||||
switch (get_common_type(bv)) {
|
||||
|
@ -19,7 +19,7 @@ bool test_literal(T val, const std::string &str, bool use_boxed_number = false)
|
||||
if (!use_boxed_number) {
|
||||
return chai.eval<T>(str);
|
||||
} else {
|
||||
return chai.eval<chaiscript::Boxed_Number>(str).get_as<T>();
|
||||
return chai.eval<chaiscript::Boxed_Number>(str).get_as_checked<T>();
|
||||
}
|
||||
}();
|
||||
|
||||
@ -126,66 +126,66 @@ int main()
|
||||
&& test_literal(0x7FFFFFFFFFFFFFFF, "0b111111111111111111111111111111111111111111111111111111111111111")
|
||||
|
||||
|
||||
&& TEST_LITERAL(-0xF)
|
||||
&& TEST_LITERAL(-0xFF)
|
||||
&& TEST_LITERAL(-0xFFF)
|
||||
&& TEST_LITERAL(-0xFFFF)
|
||||
&& TEST_LITERAL(-0xFFFFF)
|
||||
&& TEST_LITERAL(-0xFFFFFF)
|
||||
&& TEST_LITERAL(-0xFFFFFFF)
|
||||
&& TEST_LITERAL(-0xFFFFFFFF)
|
||||
&& TEST_LITERAL(-0xFFFFFFFFF)
|
||||
&& TEST_LITERAL(-0xFFFFFFFFFF)
|
||||
&& TEST_LITERAL(-0xFFFFFFFFFFF)
|
||||
&& TEST_LITERAL(-0xFFFFFFFFFFFF)
|
||||
&& TEST_LITERAL(-0xFFFFFFFFFFFFF)
|
||||
&& TEST_LITERAL(-0xFFFFFFFFFFFFFF)
|
||||
&& TEST_LITERAL(-0xFFFFFFFFFFFFFFF)
|
||||
&& TEST_LITERAL(-0xFFFFFFFFFFFFFFFF)
|
||||
&& TEST_LITERAL_SIGNED(-0xF)
|
||||
&& TEST_LITERAL_SIGNED(-0xFF)
|
||||
&& TEST_LITERAL_SIGNED(-0xFFF)
|
||||
&& TEST_LITERAL_SIGNED(-0xFFFF)
|
||||
&& TEST_LITERAL_SIGNED(-0xFFFFF)
|
||||
&& TEST_LITERAL_SIGNED(-0xFFFFFF)
|
||||
&& TEST_LITERAL_SIGNED(-0xFFFFFFF)
|
||||
&& TEST_LITERAL_SIGNED(-0xFFFFFFFF)
|
||||
&& TEST_LITERAL_SIGNED(-0xFFFFFFFFF)
|
||||
&& TEST_LITERAL_SIGNED(-0xFFFFFFFFFF)
|
||||
&& TEST_LITERAL_SIGNED(-0xFFFFFFFFFFF)
|
||||
&& TEST_LITERAL_SIGNED(-0xFFFFFFFFFFFF)
|
||||
&& TEST_LITERAL_SIGNED(-0xFFFFFFFFFFFFF)
|
||||
&& TEST_LITERAL_SIGNED(-0xFFFFFFFFFFFFFF)
|
||||
&& TEST_LITERAL_SIGNED(-0xFFFFFFFFFFFFFFF)
|
||||
&& TEST_LITERAL_SIGNED(-0xFFFFFFFFFFFFFFFF)
|
||||
|
||||
|
||||
&& TEST_LITERAL(-01)
|
||||
&& TEST_LITERAL(-017)
|
||||
&& TEST_LITERAL(-0177)
|
||||
&& TEST_LITERAL(-01777)
|
||||
&& TEST_LITERAL(-017777)
|
||||
&& TEST_LITERAL(-0177777)
|
||||
&& TEST_LITERAL(-01777777)
|
||||
&& TEST_LITERAL(-017777777)
|
||||
&& TEST_LITERAL(-0177777777)
|
||||
&& TEST_LITERAL(-01777777777)
|
||||
&& TEST_LITERAL(-017777777777)
|
||||
&& TEST_LITERAL(-0177777777777)
|
||||
&& TEST_LITERAL(-01777777777777)
|
||||
&& TEST_LITERAL(-017777777777777)
|
||||
&& TEST_LITERAL(-0177777777777777)
|
||||
&& TEST_LITERAL(-01777777777777777)
|
||||
&& TEST_LITERAL(-017777777777777777)
|
||||
&& TEST_LITERAL(-0177777777777777777)
|
||||
&& TEST_LITERAL(-01777777777777777777)
|
||||
&& TEST_LITERAL(-017777777777777777777)
|
||||
&& TEST_LITERAL(-0177777777777777777777)
|
||||
&& TEST_LITERAL(-01777777777777777777777)
|
||||
&& TEST_LITERAL_SIGNED(-01)
|
||||
&& TEST_LITERAL_SIGNED(-017)
|
||||
&& TEST_LITERAL_SIGNED(-0177)
|
||||
&& TEST_LITERAL_SIGNED(-01777)
|
||||
&& TEST_LITERAL_SIGNED(-017777)
|
||||
&& TEST_LITERAL_SIGNED(-0177777)
|
||||
&& TEST_LITERAL_SIGNED(-01777777)
|
||||
&& TEST_LITERAL_SIGNED(-017777777)
|
||||
&& TEST_LITERAL_SIGNED(-0177777777)
|
||||
&& TEST_LITERAL_SIGNED(-01777777777)
|
||||
&& TEST_LITERAL_SIGNED(-017777777777)
|
||||
&& TEST_LITERAL_SIGNED(-0177777777777)
|
||||
&& TEST_LITERAL_SIGNED(-01777777777777)
|
||||
&& TEST_LITERAL_SIGNED(-017777777777777)
|
||||
&& TEST_LITERAL_SIGNED(-0177777777777777)
|
||||
&& TEST_LITERAL_SIGNED(-01777777777777777)
|
||||
&& TEST_LITERAL_SIGNED(-017777777777777777)
|
||||
&& TEST_LITERAL_SIGNED(-0177777777777777777)
|
||||
&& TEST_LITERAL_SIGNED(-01777777777777777777)
|
||||
&& TEST_LITERAL_SIGNED(-017777777777777777777)
|
||||
&& TEST_LITERAL_SIGNED(-0177777777777777777777)
|
||||
&& TEST_LITERAL_SIGNED(-01777777777777777777777)
|
||||
|
||||
&& TEST_LITERAL(-1)
|
||||
&& TEST_LITERAL(-17)
|
||||
&& TEST_LITERAL(-177)
|
||||
&& TEST_LITERAL(-1777)
|
||||
&& TEST_LITERAL(-17777)
|
||||
&& TEST_LITERAL(-177777)
|
||||
&& TEST_LITERAL(-1777777)
|
||||
&& TEST_LITERAL(-17777777)
|
||||
&& TEST_LITERAL(-177777777)
|
||||
&& TEST_LITERAL(-1777777777)
|
||||
&& TEST_LITERAL(-17777777777)
|
||||
&& TEST_LITERAL(-177777777777)
|
||||
&& TEST_LITERAL(-1777777777777)
|
||||
&& TEST_LITERAL(-17777777777777)
|
||||
&& TEST_LITERAL(-177777777777777)
|
||||
&& TEST_LITERAL(-1777777777777777)
|
||||
&& TEST_LITERAL(-17777777777777777)
|
||||
&& TEST_LITERAL(-177777777777777777)
|
||||
&& TEST_LITERAL(-1777777777777777777)
|
||||
&& TEST_LITERAL_SIGNED(-1)
|
||||
&& TEST_LITERAL_SIGNED(-17)
|
||||
&& TEST_LITERAL_SIGNED(-177)
|
||||
&& TEST_LITERAL_SIGNED(-1777)
|
||||
&& TEST_LITERAL_SIGNED(-17777)
|
||||
&& TEST_LITERAL_SIGNED(-177777)
|
||||
&& TEST_LITERAL_SIGNED(-1777777)
|
||||
&& TEST_LITERAL_SIGNED(-17777777)
|
||||
&& TEST_LITERAL_SIGNED(-177777777)
|
||||
&& TEST_LITERAL_SIGNED(-1777777777)
|
||||
&& TEST_LITERAL_SIGNED(-17777777777)
|
||||
&& TEST_LITERAL_SIGNED(-177777777777)
|
||||
&& TEST_LITERAL_SIGNED(-1777777777777)
|
||||
&& TEST_LITERAL_SIGNED(-17777777777777)
|
||||
&& TEST_LITERAL_SIGNED(-177777777777777)
|
||||
&& TEST_LITERAL_SIGNED(-1777777777777777)
|
||||
&& TEST_LITERAL_SIGNED(-17777777777777777)
|
||||
&& TEST_LITERAL_SIGNED(-177777777777777777)
|
||||
&& TEST_LITERAL_SIGNED(-1777777777777777777)
|
||||
|
||||
// Test 8/16/24/32 bit boundaries for various types
|
||||
|
||||
@ -194,10 +194,10 @@ int main()
|
||||
&& TEST_LITERAL(16777215)
|
||||
&& TEST_LITERAL(4294967295)
|
||||
|
||||
&& TEST_LITERAL(-255)
|
||||
&& TEST_LITERAL(-65535)
|
||||
&& TEST_LITERAL(-16777215)
|
||||
&& TEST_LITERAL(-4294967295)
|
||||
&& TEST_LITERAL_SIGNED(-255)
|
||||
&& TEST_LITERAL_SIGNED(-65535)
|
||||
&& TEST_LITERAL_SIGNED(-16777215)
|
||||
&& TEST_LITERAL_SIGNED(-4294967295)
|
||||
|
||||
&& TEST_LITERAL(255u)
|
||||
&& TEST_LITERAL(65535u)
|
||||
|
Loading…
x
Reference in New Issue
Block a user