public void UInt128Comparison() { UInt128[] orderedValues = new UInt128[] { UInt128.Zero, UInt128.One, Int64.MaxValue /* why without cast */, UInt64.MaxValue, /*Int128.MaxValue, */ UInt128.MaxValue }; for (int i = 0; i < orderedValues.Length; i++) { for (int j = 0; j < orderedValues.Length; j++) { if (i < j) { Assert.IsTrue(UInt128.Compare(orderedValues[i], orderedValues[j]) == -1); Assert.IsTrue(orderedValues[i].CompareTo(orderedValues[j]) == -1); Assert.IsTrue(orderedValues[i] < orderedValues[j]); Assert.IsFalse(orderedValues[i] >= orderedValues[j]); } else if (i == j) { Assert.IsTrue(UInt128.Compare(orderedValues[i], orderedValues[j]) == 0); Assert.IsTrue(orderedValues[i].CompareTo(orderedValues[j]) == 0); Assert.IsFalse(orderedValues[i] < orderedValues[j]); Assert.IsFalse(orderedValues[i] > orderedValues[j]); Assert.IsTrue(orderedValues[i] <= orderedValues[j]); } else { Assert.IsTrue(UInt128.Compare(orderedValues[i], orderedValues[j]) == +1); Assert.IsTrue(orderedValues[i].CompareTo(orderedValues[j]) == +1); Assert.IsTrue(orderedValues[i] > orderedValues[j]); Assert.IsFalse(orderedValues[i] <= orderedValues[j]); } } } }
public void UInt128BigIntegerAgreement() { BigInteger b = BigInteger.Parse(UInt128.MaxValue.ToString()) + 1; foreach (UInt128 u in GetRandomUInt128(new Random(2), 16)) { BigInteger u1 = (BigInteger)u; foreach (UInt128 v in GetRandomUInt128(new Random(3), 16)) { BigInteger v1 = (BigInteger)v; // Comparison Assert.IsTrue(UInt128.Compare(u, v) == BigInteger.Compare(u1, v1)); Assert.IsTrue((u < v) == (u1 < v1)); Assert.IsTrue((u > v) == (u1 > v1)); // Sum UInt128 s = u + v; BigInteger s1 = (u1 + v1) % b; Assert.IsTrue((BigInteger)s == s1); // Difference if (u >= v) { UInt128 d = u - v; BigInteger d1 = u1 - v1; Assert.IsTrue((BigInteger)d == d1); } // Product UInt128 p = u * v; BigInteger p1 = (u1 * v1) % b; Assert.IsTrue((BigInteger)p == p1); // Quotient UInt128 q = u / v; BigInteger q1 = u1 / v1; Assert.IsTrue((BigInteger)q == q1); } } }