Add tests for binary literals
This commit is contained in:
@@ -650,11 +650,14 @@ namespace chaiscript
|
|||||||
|
|
||||||
const auto val = prefixed?std::string(t_val.begin()+2,t_val.end()):t_val;
|
const auto val = prefixed?std::string(t_val.begin()+2,t_val.end()):t_val;
|
||||||
|
|
||||||
// static_assert(sizeof(long) == sizeof(uint64_t) || sizeof(long) * 2 == sizeof(uint64_t), "Unexpected sizing of integer types");
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
auto u = std::stoll(val,nullptr,base);
|
auto u = std::stoll(val,nullptr,base);
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wsign-compare"
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!unsigned_ && !long_ && u >= std::numeric_limits<int>::min() && u <= std::numeric_limits<int>::max()) {
|
if (!unsigned_ && !long_ && u >= std::numeric_limits<int>::min() && u <= std::numeric_limits<int>::max()) {
|
||||||
return const_var(static_cast<int>(u));
|
return const_var(static_cast<int>(u));
|
||||||
} else if ((unsigned_ || base != 10) && !long_ && u >= std::numeric_limits<unsigned int>::min() && u <= std::numeric_limits<unsigned int>::max()) {
|
} else if ((unsigned_ || base != 10) && !long_ && u >= std::numeric_limits<unsigned int>::min() && u <= std::numeric_limits<unsigned int>::max()) {
|
||||||
@@ -669,6 +672,11 @@ namespace chaiscript
|
|||||||
return const_var(static_cast<unsigned long long>(u));
|
return const_var(static_cast<unsigned long long>(u));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
} catch (const std::out_of_range &) {
|
} catch (const std::out_of_range &) {
|
||||||
auto u = std::stoull(val,nullptr,base);
|
auto u = std::stoull(val,nullptr,base);
|
||||||
|
|
||||||
|
@@ -75,6 +75,39 @@ int main()
|
|||||||
&& TEST_LITERAL(177777777777777777)
|
&& TEST_LITERAL(177777777777777777)
|
||||||
&& TEST_LITERAL(1777777777777777777)
|
&& TEST_LITERAL(1777777777777777777)
|
||||||
|
|
||||||
|
&& test_literal(0xF, "0b1111")
|
||||||
|
&& test_literal(0xFF, "0b11111111")
|
||||||
|
&& test_literal(0xFFF, "0b111111111111")
|
||||||
|
&& test_literal(0xFFFF, "0b1111111111111111")
|
||||||
|
&& test_literal(0xFFFFF, "0b11111111111111111111")
|
||||||
|
&& test_literal(0xFFFFFF, "0b111111111111111111111111")
|
||||||
|
&& test_literal(0xFFFFFFF, "0b1111111111111111111111111111")
|
||||||
|
&& test_literal(0xFFFFFFFF, "0b11111111111111111111111111111111")
|
||||||
|
&& test_literal(0xFFFFFFFFF, "0b111111111111111111111111111111111111")
|
||||||
|
&& test_literal(0xFFFFFFFFFF, "0b1111111111111111111111111111111111111111")
|
||||||
|
&& test_literal(0xFFFFFFFFFFF, "0b11111111111111111111111111111111111111111111")
|
||||||
|
&& test_literal(0xFFFFFFFFFFFF, "0b111111111111111111111111111111111111111111111111")
|
||||||
|
&& test_literal(0xFFFFFFFFFFFFF, "0b1111111111111111111111111111111111111111111111111111")
|
||||||
|
&& test_literal(0xFFFFFFFFFFFFFF, "0b11111111111111111111111111111111111111111111111111111111")
|
||||||
|
&& test_literal(0xFFFFFFFFFFFFFFF, "0b111111111111111111111111111111111111111111111111111111111111")
|
||||||
|
&& test_literal(0xFFFFFFFFFFFFFFFF, "0b1111111111111111111111111111111111111111111111111111111111111111")
|
||||||
|
|
||||||
|
&& test_literal(0x7, "0b111")
|
||||||
|
&& test_literal(0x7F, "0b1111111")
|
||||||
|
&& test_literal(0x7FF, "0b11111111111")
|
||||||
|
&& test_literal(0x7FFF, "0b111111111111111")
|
||||||
|
&& test_literal(0x7FFFF, "0b1111111111111111111")
|
||||||
|
&& test_literal(0x7FFFFF, "0b11111111111111111111111")
|
||||||
|
&& test_literal(0x7FFFFFF, "0b111111111111111111111111111")
|
||||||
|
&& test_literal(0x7FFFFFFF, "0b1111111111111111111111111111111")
|
||||||
|
&& test_literal(0x7FFFFFFFF, "0b11111111111111111111111111111111111")
|
||||||
|
&& test_literal(0x7FFFFFFFFF, "0b111111111111111111111111111111111111111")
|
||||||
|
&& test_literal(0x7FFFFFFFFFF, "0b1111111111111111111111111111111111111111111")
|
||||||
|
&& test_literal(0x7FFFFFFFFFFF, "0b11111111111111111111111111111111111111111111111")
|
||||||
|
&& test_literal(0x7FFFFFFFFFFFF, "0b111111111111111111111111111111111111111111111111111")
|
||||||
|
&& test_literal(0x7FFFFFFFFFFFFF, "0b1111111111111111111111111111111111111111111111111111111")
|
||||||
|
&& test_literal(0x7FFFFFFFFFFFFFF, "0b11111111111111111111111111111111111111111111111111111111111")
|
||||||
|
&& test_literal(0x7FFFFFFFFFFFFFFF, "0b111111111111111111111111111111111111111111111111111111111111111")
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
Reference in New Issue
Block a user