public static void RunUInt64ExplicitCastFromBigIntegerTests()
{
ulong value;
BigInteger bigInteger;
// UInt64 Explicit Cast from BigInteger: Random value < UInt64.MinValue
bigInteger = GenerateRandomBigIntegerLessThan(0, s_random);
value = BitConverter.ToUInt64(ByteArrayMakeMinSize(bigInteger.ToByteArray(), 8), 0);
Assert.Throws<OverflowException>(() => VerifyUInt64ExplicitCastFromBigInteger(value, bigInteger));
// UInt64 Explicit Cast from BigInteger: UInt64.MinValue - 1
bigInteger = new BigInteger(UInt64.MinValue);
bigInteger -= BigInteger.One;
value = BitConverter.ToUInt64(new byte[] { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, 0);
Assert.Throws<OverflowException>(() => VerifyUInt64ExplicitCastFromBigInteger(value, bigInteger));
// UInt64 Explicit Cast from BigInteger: UInt64.MinValue
VerifyUInt64ExplicitCastFromBigInteger(UInt64.MinValue);
// UInt64 Explicit Cast from BigInteger: 0
VerifyUInt64ExplicitCastFromBigInteger(0);
// UInt64 Explicit Cast from BigInteger: 1
VerifyUInt64ExplicitCastFromBigInteger(1);
// UInt64 Explicit Cast from BigInteger: Random Positive
for (int i = 0; i < NumberOfRandomIterations; ++i)
{
VerifyUInt64ExplicitCastFromBigInteger((UInt64)(UInt64.MaxValue * s_random.NextDouble()));
}
// UInt64 Explicit Cast from BigInteger: UInt64.MaxValue
VerifyUInt64ExplicitCastFromBigInteger(UInt64.MaxValue);
// UInt64 Explicit Cast from BigInteger: UInt64.MaxValue + 1
bigInteger = new BigInteger(UInt64.MaxValue);
bigInteger += BigInteger.One;
value = BitConverter.ToUInt64(bigInteger.ToByteArray(), 0);
Assert.Throws<OverflowException>(() => VerifyUInt64ExplicitCastFromBigInteger(value, bigInteger));
// UInt64 Explicit Cast from BigInteger: Random value > UInt64.MaxValue
bigInteger = GenerateRandomBigIntegerGreaterThan(UInt64.MaxValue, s_random);
value = BitConverter.ToUInt64(bigInteger.ToByteArray(), 0);
Assert.Throws<OverflowException>(() => VerifyUInt64ExplicitCastFromBigInteger(value, bigInteger));
}