38 lines
1 KiB
Crystal
38 lines
1 KiB
Crystal
macro try (expr)
|
|
printf "%-*s # => ", padding, {{expr.stringify}}
|
|
begin
|
|
puts {{expr}}
|
|
rescue ex
|
|
puts "Exception: #{ex.message}"
|
|
end
|
|
end
|
|
|
|
padding = 25
|
|
puts "Result does not fit into a 32-bit signed integer:"
|
|
try -(-2147483647-1)
|
|
try 2000000000 + 2000000000
|
|
try -2147483647 - 2147483647
|
|
try 46341 * 46341
|
|
try (-2147483647-1) // -1
|
|
|
|
padding = 52
|
|
puts "\nResult does not fit into a 64-bit signed integer:"
|
|
try -(-9223372036854775807 - 1)
|
|
try 5000000000000000000 + 5000000000000000000
|
|
try -9223372036854775807 - 9223372036854775807
|
|
try 3037000500 * 3037000500
|
|
try (-9223372036854775807 - 1) // -1
|
|
|
|
padding = 32
|
|
puts "\nResult does not fit into a 32-bit unsigned integer:"
|
|
try -4294967295.to_u32
|
|
try 3000000000_u32 + 3000000000_u32
|
|
try 2147483647_u32 - 4294967295_u32
|
|
try 65537_u32 * 65537_u32
|
|
|
|
padding = 52
|
|
puts "\nResult that does not fit into a 64-bit unsigned integer:"
|
|
try -18446744073709551615_i128.to_u64
|
|
try 10000000000000000000_u64 + 10000000000000000000_u64
|
|
try 9223372036854775807_u64 - 18446744073709551615_u64
|
|
try 4294967296_u64 * 4294967296_64
|
|
|