From 4ded1b0cd23aeb12113a407244e510ede1e0a71b Mon Sep 17 00:00:00 2001 From: cxl Date: Mon, 21 Oct 2013 18:34:12 +0000 Subject: [PATCH] .upptst git-svn-id: svn://ultimatepp.org/upp/trunk@6463 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- upptst/CParser/main.cpp | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/upptst/CParser/main.cpp b/upptst/CParser/main.cpp index 0d3d69c87..f111464ef 100644 --- a/upptst/CParser/main.cpp +++ b/upptst/CParser/main.cpp @@ -2,6 +2,21 @@ using namespace Upp; +#define CHECK_OVERFLOW(s, method, overflow) \ +{ \ + DLOG(s << ' ' << #method); \ + bool isoverflow = false; \ + try { \ + CParser p(s); \ + DDUMP(p.method); \ + } \ + catch(CParser::Error) { \ + DLOG("Overflow"); \ + isoverflow = true; \ + } \ + ASSERT(isoverflow == overflow); \ +} + CONSOLE_APP_MAIN { CParser p("i if while 12345 alfa"); @@ -12,4 +27,27 @@ CONSOLE_APP_MAIN ASSERT(p.ReadInt() == 12345); ASSERT(p.IsId()); ASSERT(p.ReadId() == "alfa"); + + CHECK_OVERFLOW("2147483647", ReadInt(), false); + CHECK_OVERFLOW("2147483648", ReadInt(), true); + + CHECK_OVERFLOW("-2147483648", ReadInt(), false); + CHECK_OVERFLOW("-2147483649", ReadInt(), true); + + CHECK_OVERFLOW("ffffffff", ReadNumber(16), false); + CHECK_OVERFLOW("100000000", ReadNumber(16), true); + + CHECK_OVERFLOW("9223372036854775807", ReadInt64(), false); + CHECK_OVERFLOW("9223372036854775808", ReadInt64(), true); + + CHECK_OVERFLOW("-9223372036854775808", ReadInt64(), false); + CHECK_OVERFLOW("-9223372036854775809", ReadInt64(), true); + + CHECK_OVERFLOW("ffffffffffffffff", ReadNumber64(16), false); + CHECK_OVERFLOW("10000000000000000", ReadNumber64(16), true); + +// CHECK_OVERFLOW("1e300", ReadDouble(), false); +// CHECK_OVERFLOW("1e500", ReadDouble(), true); +// CHECK_OVERFLOW("-1e300", ReadDouble(), false); +// CHECK_OVERFLOW("-1e500", ReadDouble(), true); }