public static void RunDoubleExplicitCastFromBigIntegerTests()
{
BigInteger bigInteger;
// Double Explicit Cast from BigInteger: Random value < Double.MinValue
bigInteger = GenerateRandomBigIntegerLessThan(Double.MinValue, s_random);
bigInteger *= 2;
VerifyDoubleExplicitCastFromBigInteger(Double.NegativeInfinity, bigInteger);
// Double Explicit Cast from BigInteger: Double.MinValue - 1
bigInteger = new BigInteger(Double.MinValue);
bigInteger -= BigInteger.One;
VerifyDoubleExplicitCastFromBigInteger(Double.MinValue, bigInteger);
// Double Explicit Cast from BigInteger: Double.MinValue
VerifyDoubleExplicitCastFromBigInteger(Double.MinValue);
// Double Explicit Cast from BigInteger: Random Negative
for (int i = 0; i < NumberOfRandomIterations; ++i)
{
VerifyDoubleExplicitCastFromBigInteger(((Double)(Double.MaxValue * s_random.NextDouble())) - Double.MaxValue);
}
// Double Explicit Cast from BigInteger: Random Negative Non-integral > -100
for (int i = 0; i < NumberOfRandomIterations; ++i)
{
VerifyDoubleExplicitCastFromBigInteger(((Double)(100 * s_random.NextDouble())) - 100);
}
// Double Explicit Cast from BigInteger: -1
VerifyDoubleExplicitCastFromBigInteger(-1);
// Double Explicit Cast from BigInteger: 0
VerifyDoubleExplicitCastFromBigInteger(0);
// Double Explicit Cast from BigInteger: 1
VerifyDoubleExplicitCastFromBigInteger(1);
// Double Explicit Cast from BigInteger: Random Positive Non-integral < 100
for (int i = 0; i < NumberOfRandomIterations; ++i)
{
VerifyDoubleExplicitCastFromBigInteger((Double)(100 * s_random.NextDouble()));
}
// Double Explicit Cast from BigInteger: Random Positive
for (int i = 0; i < NumberOfRandomIterations; ++i)
{
VerifyDoubleExplicitCastFromBigInteger((Double)(Double.MaxValue * s_random.NextDouble()));
}
// Double Explicit Cast from BigInteger: Double.MaxValue
VerifyDoubleExplicitCastFromBigInteger(Double.MaxValue);
// Double Explicit Cast from BigInteger: Double.MaxValue + 1
bigInteger = new BigInteger(Double.MaxValue);
bigInteger += BigInteger.One;
VerifyDoubleExplicitCastFromBigInteger(Double.MaxValue, bigInteger);
// Double Explicit Cast from BigInteger: Double.MinValue - 1
bigInteger = new BigInteger(Double.MinValue);
bigInteger -= BigInteger.One;
VerifyDoubleExplicitCastFromBigInteger(Double.MinValue, bigInteger);
// Double Explicit Cast from BigInteger: Random value > Double.MaxValue
bigInteger = GenerateRandomBigIntegerGreaterThan(Double.MaxValue, s_random);
bigInteger *= 2;
VerifyDoubleExplicitCastFromBigInteger(Double.PositiveInfinity, bigInteger);
// Double Explicit Cast from BigInteger: Random value < -Double.MaxValue
VerifyDoubleExplicitCastFromBigInteger(Double.NegativeInfinity, -bigInteger);
// Double Explicit Cast from BigInteger: very large values (more than Int32.MaxValue bits) should be infinity
DoubleExplicitCastFromLargeBigIntegerTests(128, 1);
// Double Explicit Cast from BigInteger: value < Double.MaxValue but can not be accurately represented in a Double
bigInteger = new BigInteger(9007199254740993);
VerifyDoubleExplicitCastFromBigInteger(9007199254740992, bigInteger);
// Double Explicit Cast from BigInteger: Double.MinValue < value but can not be accurately represented in a Double
bigInteger = new BigInteger(-9007199254740993);
VerifyDoubleExplicitCastFromBigInteger(-9007199254740992, bigInteger);
}