Skip to content

Commit

Permalink
Fixed unit test failure on IBM AIX xlC by hard-coding the maxUInt64As…
Browse files Browse the repository at this point in the history
…Double as double constant instead of relying on double(Value::maxUInt64) which produces an incorrect value.

git-svn-id: https://jsoncpp.svn.sourceforge.net/svnroot/jsoncpp/trunk@232 1f120ed1-78a5-a849-adca-83f0a9e25bb6
  • Loading branch information
blep authored and rjeczalik committed Dec 17, 2012
1 parent 43f1874 commit 5b32279
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion src/lib_json/json_value.cpp
Expand Up @@ -35,6 +35,10 @@ const UInt Value::maxUInt = UInt(-1);
const Int64 Value::minInt64 = Int64( ~(UInt64(-1)/2) );
const Int64 Value::maxInt64 = Int64( UInt64(-1)/2 );
const UInt64 Value::maxUInt64 = UInt64(-1);
// The constant is hard-coded because some compiler have trouble
// converting Value::maxUInt64 to a double correctly (AIX/xlC).
// Assumes that UInt64 is a 64 bits integer.
static const double maxUInt64AsDouble = 18446744073709551615.0;
#endif // defined(JSON_HAS_INT64)
const LargestInt Value::minLargestInt = LargestInt( ~(LargestUInt(-1)/2) );
const LargestInt Value::maxLargestInt = LargestInt( LargestUInt(-1)/2 );
Expand Down Expand Up @@ -1443,7 +1447,7 @@ Value::isUInt64() const
// double, so double(maxUInt64) will be rounded up to 2^64. Therefore we
// require the value to be strictly less than the limit.
return value_.real_ >= 0 &&
value_.real_ < double(maxUInt64) &&
value_.real_ < maxUInt64AsDouble &&
IsIntegral(value_.real_);
default:
break;
Expand Down

0 comments on commit 5b32279

Please sign in to comment.