From 1453bfd7f3d472164bcbddfe1403b92c87d3fc72 Mon Sep 17 00:00:00 2001 From: crookseta Date: Fri, 23 May 2025 15:21:26 -0500 Subject: [PATCH 01/74] - Started migrating to TUnit --- .../Core/Int256Test.GenericMath.cs | 0 .../Core/Int256Test.cs | 0 .../Core/Int512Test.GenericMath.cs | 0 .../Core/Int512Test.cs | 0 .../Core/NumberFormatTest.cs | 0 .../Core/OctoTest.GenericMath.cs | 0 .../Core/OctoTest.TheoryData.cs | 0 .../Core/OctoTest.cs | 0 .../Core/QuadTest.GenericMath.cs | 0 .../Core/QuadTest.TheoryData.cs | 0 .../Core/QuadTest.cs | 0 .../Core/UInt256Test.GenericMath.cs | 0 .../Core/UInt256Test.cs | 0 .../Core/UInt512Test.GenericMath.cs | 0 .../Core/UInt512Test.cs | 0 .../Helpers/BinaryIntegerHelper.cs | 0 .../Helpers/BinaryNumberHelper.cs | 0 .../Helpers/FloatingPoint.cs | 0 .../Helpers/FloatingPointIeee754.cs | 0 .../Helpers/FluentAssertionsExtensions.cs | 0 .../Helpers/GenericFloatingPointFunctions.cs | 0 .../Helpers/GenericMathOperatorsHelper.cs | 0 .../Helpers/MathConstantsHelper.cs | 0 .../Helpers/NumberBaseHelper.cs | 0 .../Helpers/NumberHelper.cs | 0 .../Helpers/TheoryDataTypes.cs | 0 .../Helpers/Values.cs | 0 .../MissingValues.Tests.Old.csproj | 30 ++ .../Usings.cs | 0 .../Core/CalculatorTests.cs | 308 ++++++++++++++++++ .../Data/Int256DataSources.cs | 37 +++ .../Data/Int512DataSources.cs | 37 +++ .../Sources/IBitwiseOperatorsDataSource.cs | 12 + .../Sources/IComparisonOperatorsDataSource.cs | 12 + .../Sources/IEqualityOperatorsDataSource.cs | 10 + .../Data/Sources/IMathOperators.cs | 28 ++ .../Data/Sources/IShiftOperatorsDataSource.cs | 11 + .../Data/UInt256DataSources.cs | 250 ++++++++++++++ .../Data/UInt512DataSources.cs | 42 +++ src/MissingValues.Tests/GlobalSetup.cs | 22 ++ .../MissingValues.Tests.csproj | 20 +- .../Numerics/Int256GenericMathTests.cs | 12 + .../Numerics/Int512GenericMathTests.cs | 12 + .../Numerics/OctoGenericMathTests.cs | 12 + .../Numerics/QuadGenericMathTests.cs | 12 + .../Numerics/UInt256GenericMathTests.cs | 259 +++++++++++++++ .../Numerics/UInt512GenericMathTests.cs | 12 + src/MissingValues.sln | 12 +- 48 files changed, 1128 insertions(+), 22 deletions(-) rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Core/Int256Test.GenericMath.cs (100%) rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Core/Int256Test.cs (100%) rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Core/Int512Test.GenericMath.cs (100%) rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Core/Int512Test.cs (100%) rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Core/NumberFormatTest.cs (100%) rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Core/OctoTest.GenericMath.cs (100%) rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Core/OctoTest.TheoryData.cs (100%) rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Core/OctoTest.cs (100%) rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Core/QuadTest.GenericMath.cs (100%) rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Core/QuadTest.TheoryData.cs (100%) rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Core/QuadTest.cs (100%) rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Core/UInt256Test.GenericMath.cs (100%) rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Core/UInt256Test.cs (100%) rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Core/UInt512Test.GenericMath.cs (100%) rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Core/UInt512Test.cs (100%) rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Helpers/BinaryIntegerHelper.cs (100%) rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Helpers/BinaryNumberHelper.cs (100%) rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Helpers/FloatingPoint.cs (100%) rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Helpers/FloatingPointIeee754.cs (100%) rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Helpers/FluentAssertionsExtensions.cs (100%) rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Helpers/GenericFloatingPointFunctions.cs (100%) rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Helpers/GenericMathOperatorsHelper.cs (100%) rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Helpers/MathConstantsHelper.cs (100%) rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Helpers/NumberBaseHelper.cs (100%) rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Helpers/NumberHelper.cs (100%) rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Helpers/TheoryDataTypes.cs (100%) rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Helpers/Values.cs (100%) create mode 100644 src/MissingValues.Tests.Old/MissingValues.Tests.Old.csproj rename src/{MissingValues.Tests => MissingValues.Tests.Old}/Usings.cs (100%) create mode 100644 src/MissingValues.Tests/Core/CalculatorTests.cs create mode 100644 src/MissingValues.Tests/Data/Int256DataSources.cs create mode 100644 src/MissingValues.Tests/Data/Int512DataSources.cs create mode 100644 src/MissingValues.Tests/Data/Sources/IBitwiseOperatorsDataSource.cs create mode 100644 src/MissingValues.Tests/Data/Sources/IComparisonOperatorsDataSource.cs create mode 100644 src/MissingValues.Tests/Data/Sources/IEqualityOperatorsDataSource.cs create mode 100644 src/MissingValues.Tests/Data/Sources/IMathOperators.cs create mode 100644 src/MissingValues.Tests/Data/Sources/IShiftOperatorsDataSource.cs create mode 100644 src/MissingValues.Tests/Data/UInt256DataSources.cs create mode 100644 src/MissingValues.Tests/Data/UInt512DataSources.cs create mode 100644 src/MissingValues.Tests/GlobalSetup.cs create mode 100644 src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs create mode 100644 src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs create mode 100644 src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs create mode 100644 src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs create mode 100644 src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs create mode 100644 src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs diff --git a/src/MissingValues.Tests/Core/Int256Test.GenericMath.cs b/src/MissingValues.Tests.Old/Core/Int256Test.GenericMath.cs similarity index 100% rename from src/MissingValues.Tests/Core/Int256Test.GenericMath.cs rename to src/MissingValues.Tests.Old/Core/Int256Test.GenericMath.cs diff --git a/src/MissingValues.Tests/Core/Int256Test.cs b/src/MissingValues.Tests.Old/Core/Int256Test.cs similarity index 100% rename from src/MissingValues.Tests/Core/Int256Test.cs rename to src/MissingValues.Tests.Old/Core/Int256Test.cs diff --git a/src/MissingValues.Tests/Core/Int512Test.GenericMath.cs b/src/MissingValues.Tests.Old/Core/Int512Test.GenericMath.cs similarity index 100% rename from src/MissingValues.Tests/Core/Int512Test.GenericMath.cs rename to src/MissingValues.Tests.Old/Core/Int512Test.GenericMath.cs diff --git a/src/MissingValues.Tests/Core/Int512Test.cs b/src/MissingValues.Tests.Old/Core/Int512Test.cs similarity index 100% rename from src/MissingValues.Tests/Core/Int512Test.cs rename to src/MissingValues.Tests.Old/Core/Int512Test.cs diff --git a/src/MissingValues.Tests/Core/NumberFormatTest.cs b/src/MissingValues.Tests.Old/Core/NumberFormatTest.cs similarity index 100% rename from src/MissingValues.Tests/Core/NumberFormatTest.cs rename to src/MissingValues.Tests.Old/Core/NumberFormatTest.cs diff --git a/src/MissingValues.Tests/Core/OctoTest.GenericMath.cs b/src/MissingValues.Tests.Old/Core/OctoTest.GenericMath.cs similarity index 100% rename from src/MissingValues.Tests/Core/OctoTest.GenericMath.cs rename to src/MissingValues.Tests.Old/Core/OctoTest.GenericMath.cs diff --git a/src/MissingValues.Tests/Core/OctoTest.TheoryData.cs b/src/MissingValues.Tests.Old/Core/OctoTest.TheoryData.cs similarity index 100% rename from src/MissingValues.Tests/Core/OctoTest.TheoryData.cs rename to src/MissingValues.Tests.Old/Core/OctoTest.TheoryData.cs diff --git a/src/MissingValues.Tests/Core/OctoTest.cs b/src/MissingValues.Tests.Old/Core/OctoTest.cs similarity index 100% rename from src/MissingValues.Tests/Core/OctoTest.cs rename to src/MissingValues.Tests.Old/Core/OctoTest.cs diff --git a/src/MissingValues.Tests/Core/QuadTest.GenericMath.cs b/src/MissingValues.Tests.Old/Core/QuadTest.GenericMath.cs similarity index 100% rename from src/MissingValues.Tests/Core/QuadTest.GenericMath.cs rename to src/MissingValues.Tests.Old/Core/QuadTest.GenericMath.cs diff --git a/src/MissingValues.Tests/Core/QuadTest.TheoryData.cs b/src/MissingValues.Tests.Old/Core/QuadTest.TheoryData.cs similarity index 100% rename from src/MissingValues.Tests/Core/QuadTest.TheoryData.cs rename to src/MissingValues.Tests.Old/Core/QuadTest.TheoryData.cs diff --git a/src/MissingValues.Tests/Core/QuadTest.cs b/src/MissingValues.Tests.Old/Core/QuadTest.cs similarity index 100% rename from src/MissingValues.Tests/Core/QuadTest.cs rename to src/MissingValues.Tests.Old/Core/QuadTest.cs diff --git a/src/MissingValues.Tests/Core/UInt256Test.GenericMath.cs b/src/MissingValues.Tests.Old/Core/UInt256Test.GenericMath.cs similarity index 100% rename from src/MissingValues.Tests/Core/UInt256Test.GenericMath.cs rename to src/MissingValues.Tests.Old/Core/UInt256Test.GenericMath.cs diff --git a/src/MissingValues.Tests/Core/UInt256Test.cs b/src/MissingValues.Tests.Old/Core/UInt256Test.cs similarity index 100% rename from src/MissingValues.Tests/Core/UInt256Test.cs rename to src/MissingValues.Tests.Old/Core/UInt256Test.cs diff --git a/src/MissingValues.Tests/Core/UInt512Test.GenericMath.cs b/src/MissingValues.Tests.Old/Core/UInt512Test.GenericMath.cs similarity index 100% rename from src/MissingValues.Tests/Core/UInt512Test.GenericMath.cs rename to src/MissingValues.Tests.Old/Core/UInt512Test.GenericMath.cs diff --git a/src/MissingValues.Tests/Core/UInt512Test.cs b/src/MissingValues.Tests.Old/Core/UInt512Test.cs similarity index 100% rename from src/MissingValues.Tests/Core/UInt512Test.cs rename to src/MissingValues.Tests.Old/Core/UInt512Test.cs diff --git a/src/MissingValues.Tests/Helpers/BinaryIntegerHelper.cs b/src/MissingValues.Tests.Old/Helpers/BinaryIntegerHelper.cs similarity index 100% rename from src/MissingValues.Tests/Helpers/BinaryIntegerHelper.cs rename to src/MissingValues.Tests.Old/Helpers/BinaryIntegerHelper.cs diff --git a/src/MissingValues.Tests/Helpers/BinaryNumberHelper.cs b/src/MissingValues.Tests.Old/Helpers/BinaryNumberHelper.cs similarity index 100% rename from src/MissingValues.Tests/Helpers/BinaryNumberHelper.cs rename to src/MissingValues.Tests.Old/Helpers/BinaryNumberHelper.cs diff --git a/src/MissingValues.Tests/Helpers/FloatingPoint.cs b/src/MissingValues.Tests.Old/Helpers/FloatingPoint.cs similarity index 100% rename from src/MissingValues.Tests/Helpers/FloatingPoint.cs rename to src/MissingValues.Tests.Old/Helpers/FloatingPoint.cs diff --git a/src/MissingValues.Tests/Helpers/FloatingPointIeee754.cs b/src/MissingValues.Tests.Old/Helpers/FloatingPointIeee754.cs similarity index 100% rename from src/MissingValues.Tests/Helpers/FloatingPointIeee754.cs rename to src/MissingValues.Tests.Old/Helpers/FloatingPointIeee754.cs diff --git a/src/MissingValues.Tests/Helpers/FluentAssertionsExtensions.cs b/src/MissingValues.Tests.Old/Helpers/FluentAssertionsExtensions.cs similarity index 100% rename from src/MissingValues.Tests/Helpers/FluentAssertionsExtensions.cs rename to src/MissingValues.Tests.Old/Helpers/FluentAssertionsExtensions.cs diff --git a/src/MissingValues.Tests/Helpers/GenericFloatingPointFunctions.cs b/src/MissingValues.Tests.Old/Helpers/GenericFloatingPointFunctions.cs similarity index 100% rename from src/MissingValues.Tests/Helpers/GenericFloatingPointFunctions.cs rename to src/MissingValues.Tests.Old/Helpers/GenericFloatingPointFunctions.cs diff --git a/src/MissingValues.Tests/Helpers/GenericMathOperatorsHelper.cs b/src/MissingValues.Tests.Old/Helpers/GenericMathOperatorsHelper.cs similarity index 100% rename from src/MissingValues.Tests/Helpers/GenericMathOperatorsHelper.cs rename to src/MissingValues.Tests.Old/Helpers/GenericMathOperatorsHelper.cs diff --git a/src/MissingValues.Tests/Helpers/MathConstantsHelper.cs b/src/MissingValues.Tests.Old/Helpers/MathConstantsHelper.cs similarity index 100% rename from src/MissingValues.Tests/Helpers/MathConstantsHelper.cs rename to src/MissingValues.Tests.Old/Helpers/MathConstantsHelper.cs diff --git a/src/MissingValues.Tests/Helpers/NumberBaseHelper.cs b/src/MissingValues.Tests.Old/Helpers/NumberBaseHelper.cs similarity index 100% rename from src/MissingValues.Tests/Helpers/NumberBaseHelper.cs rename to src/MissingValues.Tests.Old/Helpers/NumberBaseHelper.cs diff --git a/src/MissingValues.Tests/Helpers/NumberHelper.cs b/src/MissingValues.Tests.Old/Helpers/NumberHelper.cs similarity index 100% rename from src/MissingValues.Tests/Helpers/NumberHelper.cs rename to src/MissingValues.Tests.Old/Helpers/NumberHelper.cs diff --git a/src/MissingValues.Tests/Helpers/TheoryDataTypes.cs b/src/MissingValues.Tests.Old/Helpers/TheoryDataTypes.cs similarity index 100% rename from src/MissingValues.Tests/Helpers/TheoryDataTypes.cs rename to src/MissingValues.Tests.Old/Helpers/TheoryDataTypes.cs diff --git a/src/MissingValues.Tests/Helpers/Values.cs b/src/MissingValues.Tests.Old/Helpers/Values.cs similarity index 100% rename from src/MissingValues.Tests/Helpers/Values.cs rename to src/MissingValues.Tests.Old/Helpers/Values.cs diff --git a/src/MissingValues.Tests.Old/MissingValues.Tests.Old.csproj b/src/MissingValues.Tests.Old/MissingValues.Tests.Old.csproj new file mode 100644 index 0000000..5a178aa --- /dev/null +++ b/src/MissingValues.Tests.Old/MissingValues.Tests.Old.csproj @@ -0,0 +1,30 @@ + + + + net9.0 + enable + enable + + false + true + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + + diff --git a/src/MissingValues.Tests/Usings.cs b/src/MissingValues.Tests.Old/Usings.cs similarity index 100% rename from src/MissingValues.Tests/Usings.cs rename to src/MissingValues.Tests.Old/Usings.cs diff --git a/src/MissingValues.Tests/Core/CalculatorTests.cs b/src/MissingValues.Tests/Core/CalculatorTests.cs new file mode 100644 index 0000000..70be92e --- /dev/null +++ b/src/MissingValues.Tests/Core/CalculatorTests.cs @@ -0,0 +1,308 @@ +using MissingValues.Internals; +using TUnit.Assertions.AssertConditions.Throws; + +namespace MissingValues.Tests.Core; + +public class CalculatorTests +{ + [Test] + public async Task AddWithCarry_NoOverflow_ReturnsCorrectSumAndZeroCarry() + { + ulong a = 10; + ulong b = 20; + + ulong result = Calculator.AddWithCarry(a, b, out ulong carry); + + await Assert.That(result).IsEqualTo(30UL); + await Assert.That(carry).IsEqualTo(0UL); + } + [Test] + public async Task AddWithCarry_MaxValueAndOne_ReturnsZeroAndCarry() + { + ulong a = ulong.MaxValue; + ulong b = 1; + + ulong result = Calculator.AddWithCarry(a, b, out ulong carry); + + await Assert.That(result).IsEqualTo(0UL); + await Assert.That(carry).IsEqualTo(1UL); + } + [Test] + public async Task AddWithCarry_OverflowCase_ReturnsCorrectResultAndCarry() + { + ulong a = ulong.MaxValue - 1; + ulong b = 5; + + ulong result = Calculator.AddWithCarry(a, b, out ulong carry); + + await Assert.That(result).IsEqualTo(3UL); + await Assert.That(carry).IsEqualTo(1UL); + } + [Test] + public async Task AddWithCarry_AddZero_ReturnsSameValueAndZeroCarry() + { + ulong a = 123456789; + ulong b = 0; + + ulong result = Calculator.AddWithCarry(a, b, out ulong carry); + + await Assert.That(result).IsEqualTo(a); + await Assert.That(carry).IsEqualTo(0UL); + } + [Test] + public async Task AddWithCarry_BothZero_ReturnsZeroAndZeroCarry() + { + ulong a = 0; + ulong b = 0; + + ulong result = Calculator.AddWithCarry(a, b, out ulong carry); + + await Assert.That(result).IsEqualTo(0UL); + await Assert.That(carry).IsEqualTo(0UL); + } + [Test] + public async Task AddWithCarry_ExactMaxValueSum_ReturnsMaxValueAndZeroCarry() + { + ulong a = ulong.MaxValue / 2; + ulong b = ulong.MaxValue / 2; + + ulong result = Calculator.AddWithCarry(a, b, out ulong carry); + + await Assert.That(result).IsEqualTo(ulong.MaxValue - 1); + await Assert.That(carry).IsEqualTo(0UL); + } + [Test] + public async Task AddWithCarry_CarryOnlyTriggeredWhenOverflow() + { + ulong a = ulong.MaxValue; + ulong b = 0; + + ulong result = Calculator.AddWithCarry(a, b, out ulong carry); + + await Assert.That(result).IsEqualTo(ulong.MaxValue); + await Assert.That(carry).IsEqualTo(0UL); + } + + [Test] + public async Task BigMulAdd_SimpleMultiplicationAndAddition() + { + ulong a = 2; + ulong b = 3; + ulong c = 5; + + var (hi, lo) = Calculator.BigMulAdd(a, b, c); + + await Assert.That(hi).IsEqualTo(0UL); + await Assert.That(lo).IsEqualTo(11UL); + } + [Test] + public async Task BigMulAdd_WithOverflowFromLowToHigh() + { + ulong a = ulong.MaxValue; + ulong b = 2; + ulong c = 1; + + var (hi, lo) = Calculator.BigMulAdd(a, b, c); + + await Assert.That(hi).IsEqualTo(1UL); + await Assert.That(lo).IsEqualTo(0xFFFFFFFFFFFFFFFFUL); + } + [Test] + public async Task BigMulAdd_MaxValues() + { + ulong a = ulong.MaxValue; + ulong b = ulong.MaxValue; + ulong c = ulong.MaxValue; + + var (hi, lo) = Calculator.BigMulAdd(a, b, c); + + await Assert.That(hi).IsEqualTo(0xFFFFFFFFFFFFFFFFUL); + await Assert.That(lo).IsEqualTo(0UL); + } + [Test] + public async Task BigMulAdd_NoCarryOrOverflow() + { + ulong a = 1000; + ulong b = 1000; + ulong c = 1; + + var (hi, lo) = Calculator.BigMulAdd(a, b, c); + + await Assert.That(hi).IsEqualTo(0UL); + await Assert.That(lo).IsEqualTo(1_000_001UL); + } + [Test] + public async Task BigMulAdd_CausesCarryFromAdditionOnly() + { + ulong a = ulong.MaxValue; + ulong b = 1; + ulong c = 1; + + var (hi, lo) = Calculator.BigMulAdd(a, b, c); + + await Assert.That(hi).IsEqualTo(1UL); + await Assert.That(lo).IsEqualTo(0UL); + } + [Test] + public async Task BigMulAdd_CausesNoCarryWithZeroInputs() + { + ulong a = 0; + ulong b = 0; + ulong c = 0; + + var (hi, lo) = Calculator.BigMulAdd(a, b, c); + + await Assert.That(hi).IsEqualTo(0UL); + await Assert.That(lo).IsEqualTo(0UL); + } + + [Test] + public async Task DivRemByUInt32_BasicDivision() + { + ulong left = 100; + uint right = 7; + + var (quotient, remainder) = Calculator.DivRemByUInt32(left, right); + + await Assert.That(quotient).IsEqualTo(14UL); + await Assert.That(remainder).IsEqualTo(2U); + } + [Test] + public async Task DivRemByUInt32_DivideByOne() + { + ulong left = 1234567890123456789; + uint right = 1; + + var (quotient, remainder) = Calculator.DivRemByUInt32(left, right); + + await Assert.That(quotient).IsEqualTo(left); + await Assert.That(remainder).IsEqualTo(0U); + } + [Test] + public async Task DivRemByUInt32_DivideByMaxUInt32() + { + ulong left = (ulong)uint.MaxValue + 1; + uint right = uint.MaxValue; + + var (quotient, remainder) = Calculator.DivRemByUInt32(left, right); + + await Assert.That(quotient).IsEqualTo(1UL); + await Assert.That(remainder).IsEqualTo(1U); + } + [Test] + public async Task DivRemByUInt32_ZeroDividend() + { + ulong left = 0; + uint right = uint.MaxValue; + + var (quotient, remainder) = Calculator.DivRemByUInt32(left, right); + + await Assert.That(quotient).IsEqualTo(0UL); + await Assert.That(remainder).IsEqualTo(0U); + } + [Test] + public async Task DivRemByUInt32_ExactDivision() + { + ulong left = 400; + uint right = 20; + + var (quotient, remainder) = Calculator.DivRemByUInt32(left, right); + + await Assert.That(quotient).IsEqualTo(20UL); + await Assert.That(remainder).IsEqualTo(0U); + } + [Test] + public async Task DivRemByUInt32_MaxValues() + { + ulong left = ulong.MaxValue; + uint right = uint.MaxValue; + + var (quotient, remainder) = Calculator.DivRemByUInt32(left, right); + + await Assert.That(quotient).IsEqualTo(ulong.MaxValue / uint.MaxValue); + await Assert.That(remainder).IsEqualTo((uint)(ulong.MaxValue % uint.MaxValue)); + } + [Test] + public async Task DivRemByUInt32_DivideByZero_Throws() + { + ulong left = 100; + uint right = 0; + + await Assert.That(() => Calculator.DivRemByUInt32(left, right)).Throws(); + } + + [Test] + public async Task DivRemByUInt64_BasicDivision() + { + UInt128 left = new UInt128(0, 1000); + ulong right = 30; + + var (quotient, remainder) = Calculator.DivRemByUInt64(left, right); + + await Assert.That(quotient).IsEqualTo(new UInt128(0, 33)); + await Assert.That(remainder).IsEqualTo(10UL); + } + [Test] + public async Task DivRemByUInt64_ZeroDividend() + { + UInt128 left = new UInt128(0, 0); + ulong right = 12345; + + var (quotient, remainder) = Calculator.DivRemByUInt64(left, right); + + await Assert.That(quotient).IsEqualTo(UInt128.Zero); + await Assert.That(remainder).IsEqualTo(0UL); + } + [Test] + public async Task DivRemByUInt64_DivideByOne() + { + UInt128 left = new UInt128(123456789, 9876543210); + ulong right = 1; + + var (quotient, remainder) = Calculator.DivRemByUInt64(left, right); + + await Assert.That(quotient).IsEqualTo(new UInt128(123456789, 9876543210)); + await Assert.That(remainder).IsEqualTo(0UL); + } + [Test] + public async Task DivRemByUInt64_ExactDivision() + { + UInt128 left = new UInt128(0, 1000); + ulong right = 1000; + + var (quotient, remainder) = Calculator.DivRemByUInt64(left, right); + + await Assert.That(quotient).IsEqualTo(new UInt128(0, 1)); + await Assert.That(remainder).IsEqualTo(0UL); + } + [Test] + public async Task DivRemByUInt64_UpperBitsUsed() + { + UInt128 left = new UInt128(1, 0); + ulong right = 2; + + var (quotient, remainder) = Calculator.DivRemByUInt64(left, right); + + await Assert.That(quotient).IsEqualTo(new UInt128(0, 1UL << 63)); + await Assert.That(remainder).IsEqualTo(0UL); + } + [Test] + public async Task DivRemByUInt64_MaxValues() + { + UInt128 left = UInt128.MaxValue; + ulong right = ulong.MaxValue; + + var (quotient, remainder) = Calculator.DivRemByUInt64(left, right); + + await Assert.That(quotient).IsEqualTo(UInt128.MaxValue / ulong.MaxValue); + await Assert.That(remainder).IsEqualTo((ulong)(UInt128.MaxValue % ulong.MaxValue)); + } + [Test] + public async Task DivRemByUInt64_DivideByZero_Throws() + { + UInt128 left = new UInt128(1, 0); + ulong right = 0; + + await Assert.That(() => Calculator.DivRemByUInt64(left, right)).Throws(); + } +} diff --git a/src/MissingValues.Tests/Data/Int256DataSources.cs b/src/MissingValues.Tests/Data/Int256DataSources.cs new file mode 100644 index 0000000..09c0035 --- /dev/null +++ b/src/MissingValues.Tests/Data/Int256DataSources.cs @@ -0,0 +1,37 @@ +using MissingValues.Tests.Data.Sources; + +namespace MissingValues.Tests.Data; + +public class Int256DataSources + : IMathOperatorsDataSource, + IShiftOperatorsDataSource, + IBitwiseOperatorsDataSource, + IEqualityOperatorsDataSource, + IComparisonOperatorsDataSource +{ + public static IEnumerable> op_AdditionTestData() => throw new NotImplementedException(); + public static IEnumerable> op_BitwiseAndTestData() => throw new NotImplementedException(); + public static IEnumerable> op_BitwiseOrTestData() => throw new NotImplementedException(); + public static IEnumerable> op_BitwiseXorTestData() => throw new NotImplementedException(); + public static IEnumerable> op_CheckedAdditionTestData() => throw new NotImplementedException(); + public static IEnumerable> op_CheckedDecrementTestData() => throw new NotImplementedException(); + public static IEnumerable> op_CheckedIncrementTestData() => throw new NotImplementedException(); + public static IEnumerable> op_CheckedMultiplyTestData() => throw new NotImplementedException(); + public static IEnumerable> op_CheckedSubtractionTestData() => throw new NotImplementedException(); + public static IEnumerable> op_DecrementTestData() => throw new NotImplementedException(); + public static IEnumerable> op_DivisionTestData() => throw new NotImplementedException(); + public static IEnumerable> op_EqualityTestData() => throw new NotImplementedException(); + public static IEnumerable> op_GreaterThanOrEqualTestData() => throw new NotImplementedException(); + public static IEnumerable> op_GreaterThanTestData() => throw new NotImplementedException(); + public static IEnumerable> op_IncrementTestData() => throw new NotImplementedException(); + public static IEnumerable> op_InequalityTestData() => throw new NotImplementedException(); + public static IEnumerable> op_LessThanOrEqualTestData() => throw new NotImplementedException(); + public static IEnumerable> op_LessThanTestData() => throw new NotImplementedException(); + public static IEnumerable> op_ModulusTestData() => throw new NotImplementedException(); + public static IEnumerable> op_MultiplyTestData() => throw new NotImplementedException(); + public static IEnumerable> op_OnesComplementTestData() => throw new NotImplementedException(); + public static IEnumerable> op_ShiftLeftTestData() => throw new NotImplementedException(); + public static IEnumerable> op_ShiftRightTestData() => throw new NotImplementedException(); + public static IEnumerable> op_SubtractionTestData() => throw new NotImplementedException(); + public static IEnumerable> op_UnsignedShiftRightTestData() => throw new NotImplementedException(); +} diff --git a/src/MissingValues.Tests/Data/Int512DataSources.cs b/src/MissingValues.Tests/Data/Int512DataSources.cs new file mode 100644 index 0000000..9a0cd4e --- /dev/null +++ b/src/MissingValues.Tests/Data/Int512DataSources.cs @@ -0,0 +1,37 @@ +using MissingValues.Tests.Data.Sources; + +namespace MissingValues.Tests.Data; + +public class Int512DataSources + : IMathOperatorsDataSource, + IShiftOperatorsDataSource, + IBitwiseOperatorsDataSource, + IEqualityOperatorsDataSource, + IComparisonOperatorsDataSource +{ + public static IEnumerable> op_AdditionTestData() => throw new NotImplementedException(); + public static IEnumerable> op_BitwiseAndTestData() => throw new NotImplementedException(); + public static IEnumerable> op_BitwiseOrTestData() => throw new NotImplementedException(); + public static IEnumerable> op_BitwiseXorTestData() => throw new NotImplementedException(); + public static IEnumerable> op_CheckedAdditionTestData() => throw new NotImplementedException(); + public static IEnumerable> op_CheckedDecrementTestData() => throw new NotImplementedException(); + public static IEnumerable> op_CheckedIncrementTestData() => throw new NotImplementedException(); + public static IEnumerable> op_CheckedMultiplyTestData() => throw new NotImplementedException(); + public static IEnumerable> op_CheckedSubtractionTestData() => throw new NotImplementedException(); + public static IEnumerable> op_DecrementTestData() => throw new NotImplementedException(); + public static IEnumerable> op_DivisionTestData() => throw new NotImplementedException(); + public static IEnumerable> op_EqualityTestData() => throw new NotImplementedException(); + public static IEnumerable> op_GreaterThanOrEqualTestData() => throw new NotImplementedException(); + public static IEnumerable> op_GreaterThanTestData() => throw new NotImplementedException(); + public static IEnumerable> op_IncrementTestData() => throw new NotImplementedException(); + public static IEnumerable> op_InequalityTestData() => throw new NotImplementedException(); + public static IEnumerable> op_LessThanOrEqualTestData() => throw new NotImplementedException(); + public static IEnumerable> op_LessThanTestData() => throw new NotImplementedException(); + public static IEnumerable> op_ModulusTestData() => throw new NotImplementedException(); + public static IEnumerable> op_MultiplyTestData() => throw new NotImplementedException(); + public static IEnumerable> op_OnesComplementTestData() => throw new NotImplementedException(); + public static IEnumerable> op_ShiftLeftTestData() => throw new NotImplementedException(); + public static IEnumerable> op_ShiftRightTestData() => throw new NotImplementedException(); + public static IEnumerable> op_SubtractionTestData() => throw new NotImplementedException(); + public static IEnumerable> op_UnsignedShiftRightTestData() => throw new NotImplementedException(); +} diff --git a/src/MissingValues.Tests/Data/Sources/IBitwiseOperatorsDataSource.cs b/src/MissingValues.Tests/Data/Sources/IBitwiseOperatorsDataSource.cs new file mode 100644 index 0000000..36742e8 --- /dev/null +++ b/src/MissingValues.Tests/Data/Sources/IBitwiseOperatorsDataSource.cs @@ -0,0 +1,12 @@ +using System.Numerics; + +namespace MissingValues.Tests.Data.Sources; + +public interface IBitwiseOperatorsDataSource + where T : IBitwiseOperators +{ + static abstract IEnumerable> op_BitwiseAndTestData(); + static abstract IEnumerable> op_BitwiseOrTestData(); + static abstract IEnumerable> op_BitwiseXorTestData(); + static abstract IEnumerable> op_OnesComplementTestData(); +} \ No newline at end of file diff --git a/src/MissingValues.Tests/Data/Sources/IComparisonOperatorsDataSource.cs b/src/MissingValues.Tests/Data/Sources/IComparisonOperatorsDataSource.cs new file mode 100644 index 0000000..b9f9b99 --- /dev/null +++ b/src/MissingValues.Tests/Data/Sources/IComparisonOperatorsDataSource.cs @@ -0,0 +1,12 @@ +using System.Numerics; + +namespace MissingValues.Tests.Data.Sources; + +public interface IComparisonOperatorsDataSource + where T : IComparisonOperators +{ + static abstract IEnumerable> op_GreaterThanOrEqualTestData(); + static abstract IEnumerable> op_GreaterThanTestData(); + static abstract IEnumerable> op_LessThanOrEqualTestData(); + static abstract IEnumerable> op_LessThanTestData(); +} \ No newline at end of file diff --git a/src/MissingValues.Tests/Data/Sources/IEqualityOperatorsDataSource.cs b/src/MissingValues.Tests/Data/Sources/IEqualityOperatorsDataSource.cs new file mode 100644 index 0000000..70b6f26 --- /dev/null +++ b/src/MissingValues.Tests/Data/Sources/IEqualityOperatorsDataSource.cs @@ -0,0 +1,10 @@ +using System.Numerics; + +namespace MissingValues.Tests.Data.Sources; + +public interface IEqualityOperatorsDataSource + where T : IEqualityOperators +{ + static abstract IEnumerable> op_EqualityTestData(); + static abstract IEnumerable> op_InequalityTestData(); +} \ No newline at end of file diff --git a/src/MissingValues.Tests/Data/Sources/IMathOperators.cs b/src/MissingValues.Tests/Data/Sources/IMathOperators.cs new file mode 100644 index 0000000..512debc --- /dev/null +++ b/src/MissingValues.Tests/Data/Sources/IMathOperators.cs @@ -0,0 +1,28 @@ +using System.Numerics; + +namespace MissingValues.Tests.Data.Sources; + +public interface IMathOperatorsDataSource + where T + : + IAdditionOperators, + IIncrementOperators, + ISubtractionOperators, + IDecrementOperators, + IMultiplyOperators, + IDivisionOperators, + IModulusOperators +{ + static abstract IEnumerable> op_AdditionTestData(); + static abstract IEnumerable> op_CheckedAdditionTestData(); + static abstract IEnumerable> op_CheckedDecrementTestData(); + static abstract IEnumerable> op_CheckedIncrementTestData(); + static abstract IEnumerable> op_CheckedMultiplyTestData(); + static abstract IEnumerable> op_CheckedSubtractionTestData(); + static abstract IEnumerable> op_DecrementTestData(); + static abstract IEnumerable> op_DivisionTestData(); + static abstract IEnumerable> op_IncrementTestData(); + static abstract IEnumerable> op_ModulusTestData(); + static abstract IEnumerable> op_MultiplyTestData(); + static abstract IEnumerable> op_SubtractionTestData(); +} \ No newline at end of file diff --git a/src/MissingValues.Tests/Data/Sources/IShiftOperatorsDataSource.cs b/src/MissingValues.Tests/Data/Sources/IShiftOperatorsDataSource.cs new file mode 100644 index 0000000..6f40c21 --- /dev/null +++ b/src/MissingValues.Tests/Data/Sources/IShiftOperatorsDataSource.cs @@ -0,0 +1,11 @@ +using System.Numerics; + +namespace MissingValues.Tests.Data.Sources; + +public interface IShiftOperatorsDataSource + where T : IShiftOperators +{ + static abstract IEnumerable> op_ShiftLeftTestData(); + static abstract IEnumerable> op_ShiftRightTestData(); + static abstract IEnumerable> op_UnsignedShiftRightTestData(); +} \ No newline at end of file diff --git a/src/MissingValues.Tests/Data/UInt256DataSources.cs b/src/MissingValues.Tests/Data/UInt256DataSources.cs new file mode 100644 index 0000000..fa8485b --- /dev/null +++ b/src/MissingValues.Tests/Data/UInt256DataSources.cs @@ -0,0 +1,250 @@ +using MissingValues.Tests.Data.Sources; + +namespace MissingValues.Tests.Data; + +public class UInt256DataSources + : IMathOperatorsDataSource, + IShiftOperatorsDataSource, + IBitwiseOperatorsDataSource, + IEqualityOperatorsDataSource, + IComparisonOperatorsDataSource +{ + public static IEnumerable> op_AdditionTestData() + { + yield return () => (UInt256.Zero, UInt256.Zero, UInt256.Zero); + yield return () => (UInt256.Zero, UInt256.One, UInt256.One); + yield return () => (new UInt256(0, 0, 0, 1), new UInt256(0, 0, 0, 2), new UInt256(0, 0, 0, 3)); + yield return () => (new UInt256(0, 0, 1, ulong.MaxValue), new UInt256(0, 0, 1, 1), new UInt256(0, 0, 3, 0)); + yield return () => (new UInt256(0, 1, ulong.MaxValue, ulong.MaxValue), new UInt256(0, 1, 1, 1), new UInt256(0, 3, 1, 0)); + yield return () => (new UInt256(1, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new UInt256(1, 1, 1, 1), new UInt256(3, 1, 1, 0)); + yield return () => (UInt256.MaxValue, UInt256.One, UInt256.Zero); + } + public static IEnumerable> op_CheckedAdditionTestData() + { + yield return () => (UInt256.Zero, UInt256.Zero, UInt256.Zero, false); + yield return () => (UInt256.Zero, UInt256.One, UInt256.One, false); + yield return () => (new UInt256(0, 0, 0, 1), new UInt256(0, 0, 0, 2), new UInt256(0, 0, 0, 3), false); + yield return () => (new UInt256(0, 0, 1, ulong.MaxValue), new UInt256(0, 0, 1, 1), new UInt256(0, 0, 3, 0), false); + yield return () => (new UInt256(0, 1, ulong.MaxValue, ulong.MaxValue), new UInt256(0, 1, 1, 1), new UInt256(0, 3, 1, 0), false); + yield return () => (new UInt256(1, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new UInt256(1, 1, 1, 1), new UInt256(3, 1, 1, 0), false); + yield return () => (UInt256.MaxValue, UInt256.One, UInt256.Zero, true); + yield return () => (new UInt256(ulong.MaxValue, 0, 0, 0), new UInt256(1, 0, 0, 0), UInt256.Zero, true); + } + public static IEnumerable> op_IncrementTestData() + { + yield return () => (UInt256.Zero, UInt256.One); + yield return () => (new UInt256(0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new UInt256(1, 0, 0, 0)); + yield return () => (UInt256.MaxValue, UInt256.Zero); + } + public static IEnumerable> op_CheckedIncrementTestData() + { + yield return () => (UInt256.Zero, UInt256.One, false); + yield return () => (new UInt256(0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new UInt256(1, 0, 0, 0), false); + yield return () => (UInt256.MaxValue, UInt256.Zero, true); + } + public static IEnumerable> op_SubtractionTestData() + { + yield return () => (UInt256.Zero, UInt256.Zero, UInt256.Zero); + yield return () => (new UInt256(1, 2, 3, 4), UInt256.Zero, new UInt256(1, 2, 3, 4)); + yield return () => (new UInt256(1, 2, 3, 4), new UInt256(1, 2, 3, 4), UInt256.Zero); + yield return () => (new UInt256(0, 0, 0, 5), new UInt256(0, 0, 0, 3), new UInt256(0, 0, 0, 2)); + yield return () => (new UInt256(0, 0, 1, 0), new UInt256(0, 0, 0, 1), new UInt256(0, 0, 0, ulong.MaxValue)); + yield return () => (new UInt256(1, 0, 0, 0), UInt256.One, new UInt256(0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); + yield return () => (UInt256.Zero, UInt256.One, UInt256.MaxValue); + } + public static IEnumerable> op_CheckedSubtractionTestData() + { + yield return () => (UInt256.Zero, UInt256.Zero, UInt256.Zero, false); + yield return () => (new UInt256(1, 2, 3, 4), UInt256.Zero, new UInt256(1, 2, 3, 4), false); + yield return () => (new UInt256(1, 2, 3, 4), new UInt256(1, 2, 3, 4), UInt256.Zero, false); + yield return () => (new UInt256(0, 0, 0, 5), new UInt256(0, 0, 0, 3), new UInt256(0, 0, 0, 2), false); + yield return () => (new UInt256(0, 0, 1, 0), new UInt256(0, 0, 0, 1), new UInt256(0, 0, 0, ulong.MaxValue), false); + yield return () => (new UInt256(1, 0, 0, 0), UInt256.One, new UInt256(0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), false); + yield return () => (UInt256.Zero, UInt256.One, UInt256.MaxValue, true); + } + public static IEnumerable> op_DecrementTestData() + { + yield return () => (UInt256.One, UInt256.Zero); + yield return () => (new UInt256(1, 0, 0, 0), new UInt256(0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); + yield return () => (UInt256.Zero, UInt256.MaxValue); + } + public static IEnumerable> op_CheckedDecrementTestData() + { + yield return () => (UInt256.One, UInt256.Zero, false); + yield return () => (new UInt256(1, 0, 0, 0), new UInt256(0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), false); + yield return () => (UInt256.Zero, UInt256.MaxValue, true); + } + public static IEnumerable> op_MultiplyTestData() + { + yield return () => (UInt256.Zero, UInt256.Zero, UInt256.Zero); + yield return () => (new UInt256(1, 2, 3, 4), UInt256.Zero, UInt256.Zero); + yield return () => (UInt256.Zero, new UInt256(1, 2, 3, 4), UInt256.Zero); + yield return () => (new UInt256(1, 2, 3, 4), UInt256.One, new UInt256(1, 2, 3, 4)); + yield return () => (UInt256.One, new UInt256(1, 2, 3, 4), new UInt256(1, 2, 3, 4)); + yield return () => (new UInt256(0, 0, 0, 3), new UInt256(0, 0, 0, 5), new UInt256(0, 0, 0, 15)); + yield return () => (new UInt256(0, 0, 0, ulong.MaxValue), new UInt256(0, 0, 0, ulong.MaxValue), new UInt256(0, 0, ulong.MaxValue - 1, 1)); + yield return () => (new UInt256(0, 0, 1, 0), new UInt256(0, 0, 0, 10), new UInt256(0, 0, 10, 0)); + yield return () => (new UInt256(1, 1, 1, 1), new UInt256(2, 2, 2, 2), new UInt256(8, 6, 4, 2)); + } + public static IEnumerable> op_CheckedMultiplyTestData() + { + yield return () => (UInt256.Zero, UInt256.Zero, UInt256.Zero, false); + yield return () => (new UInt256(1, 2, 3, 4), UInt256.Zero, UInt256.Zero, false); + yield return () => (UInt256.Zero, new UInt256(1, 2, 3, 4), UInt256.Zero, false); + yield return () => (new UInt256(1, 2, 3, 4), UInt256.One, new UInt256(1, 2, 3, 4), false); + yield return () => (UInt256.One, new UInt256(1, 2, 3, 4), new UInt256(1, 2, 3, 4), false); + yield return () => (new UInt256(0, 0, 0, 3), new UInt256(0, 0, 0, 5), new UInt256(0, 0, 0, 15), false); + yield return () => (new UInt256(0, 0, 0, ulong.MaxValue), new UInt256(0, 0, 0, ulong.MaxValue), new UInt256(0, 0, ulong.MaxValue - 1, 1), false); + yield return () => (new UInt256(0, 0, 1, 0), new UInt256(0, 0, 0, 10), new UInt256(0, 0, 10, 0), false); + yield return () => (new UInt256(1, 1, 1, 1), new UInt256(2, 2, 2, 2), new UInt256(8, 6, 4, 2), true); + } + public static IEnumerable> op_DivisionTestData() + { + yield return () => (UInt256.One, UInt256.Zero, UInt256.Zero); + yield return () => (new UInt256(1, 2, 3, 4), UInt256.One, new UInt256(1, 2, 3, 4)); + yield return () => (new UInt256(1, 2, 3, 4), new UInt256(1, 2, 3, 4), UInt256.One); + yield return () => (new UInt256(0, 0, 0, 1), new UInt256(1, 0, 0, 0), UInt256.Zero); + yield return () => (new UInt256(0, 0, 0, 1000), new UInt256(0, 0, 0, 10), new UInt256(0, 0, 0, 100)); + yield return () => (new UInt256(0x0, 0x1, 0x0, 0x0), new UInt256(0x0, 0x0, 0x0, 0x2), new UInt256(0x0, 0x0, 0x8000_0000_0000_0000, 0x0)); + yield return () => (new UInt256(0x0, 0x1, 0x2, 0x3), new UInt256(0x0, 0x0, 0x0, 0x10), new UInt256(0x0, 0x0, 0x1000_0000_0000_0000, 0x2000_0000_0000_0000)); + } + public static IEnumerable> op_ModulusTestData() + { + yield return () => (UInt256.One, UInt256.Zero, UInt256.Zero); + yield return () => (new UInt256(1, 2, 3, 4), UInt256.One, UInt256.Zero); + yield return () => (new UInt256(1, 2, 3, 4), new UInt256(1, 2, 3, 4), UInt256.Zero); + yield return () => (new UInt256(0, 0, 0, 1), new UInt256(1, 0, 0, 0), new UInt256(0, 0, 0, 1)); + yield return () => (new UInt256(0, 0, 0, 1000), new UInt256(0, 0, 0, 10), UInt256.Zero); + yield return () => (new UInt256(0, 0, 0, 1234), new UInt256(0, 0, 0, 1000), new UInt256(0, 0, 0, 234)); + yield return () => (new UInt256(0x2, 0x0, 0x0, 0x0), new UInt256(0x0, 0x1, 0x0, 0x0), UInt256.Zero); + yield return () => (new UInt256(0x0, 0x1, 0x2, 0x3), new UInt256(0x0, 0x0, 0x0, 0x10), new UInt256(0x0, 0x0, 0x0, 0x3)); + } + public static IEnumerable> op_OnesComplementTestData() + { + yield return () => (UInt256.Zero, UInt256.MaxValue); + yield return () => (UInt256.MaxValue, UInt256.Zero); + yield return () => (new UInt256(0xAAAAAAAAAAAAAAAA, 0x5555555555555555, 0xAAAAAAAAAAAAAAAA, 0x5555555555555555), new UInt256(0x5555555555555555, 0xAAAAAAAAAAAAAAAA, 0x5555555555555555, 0xAAAAAAAAAAAAAAAA)); + yield return () => (new UInt256(0x0123456789ABCDEF, 0xFEDCBA9876543210, 0x0F0F0F0F0F0F0F0F, 0xF0F0F0F0F0F0F0F0), new UInt256(~0x0123456789ABCDEFU, ~0xFEDCBA9876543210U, ~0x0F0F0F0F0F0F0F0FU, ~0xF0F0F0F0F0F0F0F0U)); + } + public static IEnumerable> op_BitwiseAndTestData() + { + yield return () => (UInt256.Zero, UInt256.Zero, UInt256.Zero); + yield return () => (UInt256.Zero, UInt256.MaxValue, UInt256.Zero); + yield return () => (new UInt256(1, 2, 3, 4), new UInt256(1, 2, 3, 4), new UInt256(1, 2, 3, 4)); + yield return () => (new UInt256(1, 2, 3, 4), UInt256.MaxValue, new UInt256(1, 2, 3, 4)); + yield return () => (new UInt256(0xFFFFFFFF00000000, 0xAAAAAAAA55555555, 0x123456789ABCDEF0, 0x0F0F0F0F0F0F0F0F), new UInt256(0x00000000FFFFFFFF, 0x55555555AAAAAAAA, 0x0F0F0F0F0F0F0F0F, 0xF0F0F0F0F0F0F0F0), new UInt256(0x0000000000000000, 0x0000000000000000, 0x020406080A0C0E00, 0x0000000000000000)); + } + public static IEnumerable> op_BitwiseOrTestData() + { + yield return () => (UInt256.Zero, UInt256.Zero, UInt256.Zero); + yield return () => (UInt256.Zero, UInt256.MaxValue, UInt256.MaxValue); + yield return () => (new UInt256(1, 2, 3, 4), new UInt256(1, 2, 3, 4), new UInt256(1, 2, 3, 4)); + yield return () => (new UInt256(1, 2, 3, 4), UInt256.MaxValue, UInt256.MaxValue); + yield return () => (new UInt256(0x00000000FFFFFFFF, 0xAAAAAAAA00000000, 0x00000000AAAAAAAA, 0x1234567890ABCDEF), new UInt256(0xFFFFFFFF00000000, 0x0000000055555555, 0x5555555500000000, 0xFEDCBA9876543210), new UInt256(0xFFFFFFFFFFFFFFFF, 0xAAAAAAAA55555555, 0x55555555AAAAAAAA, 0xFEFCFEF8F6FFFFFF)); + } + public static IEnumerable> op_BitwiseXorTestData() + { + yield return () => (UInt256.Zero, UInt256.Zero, UInt256.Zero); + yield return () => (UInt256.Zero, UInt256.MaxValue, UInt256.MaxValue); + yield return () => (new UInt256(1, 2, 3, 4), new UInt256(1, 2, 3, 4), UInt256.Zero); + yield return () => (new UInt256(0x0000000000000000, 0xFFFFFFFFFFFFFFFF, 0x1234567890ABCDEF, 0xFEDCBA9876543210), UInt256.MaxValue, new UInt256(ulong.MaxValue, 0x0, 0xEDCBA9876F543210, 0x0123456789ABCDEF)); + yield return () => (new UInt256(0x1234567890ABCDEF, 0xAAAAAAAA00000000, 0x00000000AAAAAAAA, 0xFFFFFFFFFFFFFFFF), new UInt256(0xFFFFFFFFFFFFFFFF, 0x00000000AAAAAAAA, 0xAAAAAAAA00000000, 0x0000000000000000), new UInt256(0xEDCBA9876F543210, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xFFFFFFFFFFFFFFFF)); + } + public static IEnumerable> op_ShiftLeftTestData() + { + yield return () => (new UInt256(1, 2, 3, 4), 0, new UInt256(1, 2, 3, 4)); + yield return () => (new UInt256(0, 0, 0, 1), 1, new UInt256(0, 0, 0, 2)); + yield return () => (new UInt256(0, 0, 0, 1), 63, new UInt256(0, 0, 0, 0x8000_0000_0000_0000)); + yield return () => (new UInt256(0, 0, 0, 1), 64, new UInt256(0, 0, 1, 0)); + yield return () => (new UInt256(0, 0, 0, 1), 65, new UInt256(0, 0, 2, 0)); + yield return () => (new UInt256(0, 0, 0, 1), 128, new UInt256(0, 1, 0, 0)); + yield return () => (new UInt256(0, 0, 0, 1), 192, new UInt256(1, 0, 0, 0)); + yield return () => (new UInt256(0, 0, 0, 1), 255, new UInt256(0x8000_0000_0000_0000, 0, 0, 0)); + yield return () => (new UInt256(0, 0, 0, 1), 256, new UInt256(0, 0, 0, 1)); + yield return () => (new UInt256(0, 0, 0, 1), 260, new UInt256(0, 0, 0, 16)); + } + public static IEnumerable> op_ShiftRightTestData() + { + yield return () => (new UInt256(1, 2, 3, 4), 0, new UInt256(1, 2, 3, 4)); + yield return () => (new UInt256(0, 0, 0, 16), 1, new UInt256(0, 0, 0, 8)); + yield return () => (new UInt256(0x8000_0000_0000_0000, 0, 0, 0), 63, new UInt256(1, 0, 0, 0)); + yield return () => (new UInt256(1, 2, 3, 4), 64, new UInt256(0, 1, 2, 3)); + yield return () => (new UInt256(1, 0, 0, 0), 65, new UInt256(0, 0, 0x8000_0000_0000_0000, 0)); + yield return () => (new UInt256(1, 0, 0, 0), 128, new UInt256(0, 0, 1, 0)); + yield return () => (new UInt256(1, 0, 0, 0), 192, new UInt256(0, 0, 0, 1)); + yield return () => (new UInt256(0x8000_0000_0000_0000, 0, 0, 0), 255, new UInt256(0, 0, 0, 1)); + yield return () => (new UInt256(0, 0, 0, 1), 256, new UInt256(0, 0, 0, 1)); + yield return () => (new UInt256(0, 0, 0, 16), 260, new UInt256(0, 0, 0, 1)); + } + public static IEnumerable> op_UnsignedShiftRightTestData() + { + yield return () => (new UInt256(1, 2, 3, 4), 0, new UInt256(1, 2, 3, 4)); + yield return () => (new UInt256(0, 0, 0, 16), 1, new UInt256(0, 0, 0, 8)); + yield return () => (new UInt256(0x8000_0000_0000_0000, 0, 0, 0), 63, new UInt256(1, 0, 0, 0)); + yield return () => (new UInt256(1, 2, 3, 4), 64, new UInt256(0, 1, 2, 3)); + yield return () => (new UInt256(1, 0, 0, 0), 65, new UInt256(0, 0, 0x8000_0000_0000_0000, 0)); + yield return () => (new UInt256(1, 0, 0, 0), 128, new UInt256(0, 0, 1, 0)); + yield return () => (new UInt256(1, 0, 0, 0), 192, new UInt256(0, 0, 0, 1)); + yield return () => (new UInt256(0x8000_0000_0000_0000, 0, 0, 0), 255, new UInt256(0, 0, 0, 1)); + yield return () => (new UInt256(0, 0, 0, 1), 256, new UInt256(0, 0, 0, 1)); + yield return () => (new UInt256(0, 0, 0, 16), 260, new UInt256(0, 0, 0, 1)); + } + public static IEnumerable> op_EqualityTestData() + { + yield return () => (UInt256.Zero, UInt256.Zero, true); + yield return () => (new UInt256(1, 2, 3, 4), new UInt256(1, 2, 3, 4), true); + yield return () => (new UInt256(1, 2, 3, 4), new UInt256(1, 2, 3, 5), false); + yield return () => (new UInt256(1, 2, 3, 4), new UInt256(1, 2, 4, 4), false); + yield return () => (new UInt256(1, 2, 3, 4), new UInt256(1, 3, 3, 4), false); + yield return () => (new UInt256(1, 2, 3, 4), new UInt256(2, 2, 3, 4), false); + } + public static IEnumerable> op_InequalityTestData() + { + yield return () => (UInt256.Zero, UInt256.Zero, false); + yield return () => (new UInt256(1, 2, 3, 4), new UInt256(1, 2, 3, 4), false); + yield return () => (new UInt256(1, 2, 3, 4), new UInt256(1, 2, 3, 5), true); + yield return () => (new UInt256(1, 2, 3, 4), new UInt256(1, 2, 4, 4), true); + yield return () => (new UInt256(1, 2, 3, 4), new UInt256(1, 3, 3, 4), true); + yield return () => (new UInt256(1, 2, 3, 4), new UInt256(2, 2, 3, 4), true); + } + public static IEnumerable> op_LessThanTestData() + { + yield return () => (new UInt256(1, 2, 3, 4), new UInt256(1, 2, 3, 4), false); + yield return () => (new UInt256(0, 9, 9, 9), new UInt256(1, 0, 0, 0), true); + yield return () => (new UInt256(2, 0, 0, 0), new UInt256(1, 9, 9, 9), false); + yield return () => (new UInt256(1, 1, 3, 4), new UInt256(1, 2, 3, 4), true); + yield return () => (new UInt256(1, 2, 1, 4), new UInt256(1, 2, 2, 4), true); + yield return () => (new UInt256(1, 2, 3, 3), new UInt256(1, 2, 3, 4), true); + yield return () => (new UInt256(1, 2, 3, 5), new UInt256(1, 2, 3, 4), false); + } + public static IEnumerable> op_LessThanOrEqualTestData() + { + yield return () => (new UInt256(1, 2, 3, 4), new UInt256(1, 2, 3, 4), true); + yield return () => (new UInt256(0, 9, 9, 9), new UInt256(1, 0, 0, 0), true); + yield return () => (new UInt256(2, 0, 0, 0), new UInt256(1, 9, 9, 9), false); + yield return () => (new UInt256(1, 1, 3, 4), new UInt256(1, 2, 3, 4), true); + yield return () => (new UInt256(1, 2, 1, 4), new UInt256(1, 2, 2, 4), true); + yield return () => (new UInt256(1, 2, 3, 3), new UInt256(1, 2, 3, 4), true); + yield return () => (new UInt256(1, 2, 3, 5), new UInt256(1, 2, 3, 4), false); + } + public static IEnumerable> op_GreaterThanTestData() + { + yield return () => (new UInt256(1, 2, 3, 4), new UInt256(1, 2, 3, 4), false); + yield return () => (new UInt256(0, 9, 9, 9), new UInt256(1, 0, 0, 0), false); + yield return () => (new UInt256(2, 0, 0, 0), new UInt256(1, 9, 9, 9), true); + yield return () => (new UInt256(1, 1, 3, 4), new UInt256(1, 2, 3, 4), false); + yield return () => (new UInt256(1, 2, 1, 4), new UInt256(1, 2, 2, 4), false); + yield return () => (new UInt256(1, 2, 3, 3), new UInt256(1, 2, 3, 4), false); + yield return () => (new UInt256(1, 2, 3, 5), new UInt256(1, 2, 3, 4), true); + } + public static IEnumerable> op_GreaterThanOrEqualTestData() + { + yield return () => (new UInt256(1, 2, 3, 4), new UInt256(1, 2, 3, 4), true); + yield return () => (new UInt256(0, 9, 9, 9), new UInt256(1, 0, 0, 0), false); + yield return () => (new UInt256(2, 0, 0, 0), new UInt256(1, 9, 9, 9), true); + yield return () => (new UInt256(1, 1, 3, 4), new UInt256(1, 2, 3, 4), false); + yield return () => (new UInt256(1, 2, 1, 4), new UInt256(1, 2, 2, 4), false); + yield return () => (new UInt256(1, 2, 3, 3), new UInt256(1, 2, 3, 4), false); + yield return () => (new UInt256(1, 2, 3, 5), new UInt256(1, 2, 3, 4), true); + } +} diff --git a/src/MissingValues.Tests/Data/UInt512DataSources.cs b/src/MissingValues.Tests/Data/UInt512DataSources.cs new file mode 100644 index 0000000..00d5d79 --- /dev/null +++ b/src/MissingValues.Tests/Data/UInt512DataSources.cs @@ -0,0 +1,42 @@ +using MissingValues.Tests.Data.Sources; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MissingValues.Tests.Data; + +public class UInt512DataSources + : IMathOperatorsDataSource, + IShiftOperatorsDataSource, + IBitwiseOperatorsDataSource, + IEqualityOperatorsDataSource, + IComparisonOperatorsDataSource +{ + public static IEnumerable> op_AdditionTestData() => throw new NotImplementedException(); + public static IEnumerable> op_BitwiseAndTestData() => throw new NotImplementedException(); + public static IEnumerable> op_BitwiseOrTestData() => throw new NotImplementedException(); + public static IEnumerable> op_BitwiseXorTestData() => throw new NotImplementedException(); + public static IEnumerable> op_CheckedAdditionTestData() => throw new NotImplementedException(); + public static IEnumerable> op_CheckedDecrementTestData() => throw new NotImplementedException(); + public static IEnumerable> op_CheckedIncrementTestData() => throw new NotImplementedException(); + public static IEnumerable> op_CheckedMultiplyTestData() => throw new NotImplementedException(); + public static IEnumerable> op_CheckedSubtractionTestData() => throw new NotImplementedException(); + public static IEnumerable> op_DecrementTestData() => throw new NotImplementedException(); + public static IEnumerable> op_DivisionTestData() => throw new NotImplementedException(); + public static IEnumerable> op_EqualityTestData() => throw new NotImplementedException(); + public static IEnumerable> op_GreaterThanOrEqualTestData() => throw new NotImplementedException(); + public static IEnumerable> op_GreaterThanTestData() => throw new NotImplementedException(); + public static IEnumerable> op_IncrementTestData() => throw new NotImplementedException(); + public static IEnumerable> op_InequalityTestData() => throw new NotImplementedException(); + public static IEnumerable> op_LessThanOrEqualTestData() => throw new NotImplementedException(); + public static IEnumerable> op_LessThanTestData() => throw new NotImplementedException(); + public static IEnumerable> op_ModulusTestData() => throw new NotImplementedException(); + public static IEnumerable> op_MultiplyTestData() => throw new NotImplementedException(); + public static IEnumerable> op_OnesComplementTestData() => throw new NotImplementedException(); + public static IEnumerable> op_ShiftLeftTestData() => throw new NotImplementedException(); + public static IEnumerable> op_ShiftRightTestData() => throw new NotImplementedException(); + public static IEnumerable> op_SubtractionTestData() => throw new NotImplementedException(); + public static IEnumerable> op_UnsignedShiftRightTestData() => throw new NotImplementedException(); +} diff --git a/src/MissingValues.Tests/GlobalSetup.cs b/src/MissingValues.Tests/GlobalSetup.cs new file mode 100644 index 0000000..07c194b --- /dev/null +++ b/src/MissingValues.Tests/GlobalSetup.cs @@ -0,0 +1,22 @@ +// Here you could define global logic that would affect all tests + +// You can use attributes at the assembly level to apply to all tests in the assembly +[assembly: Retry(3)] +[assembly: System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage] + +namespace MissingValues.Tests; + +public class GlobalHooks +{ + [Before(TestSession)] + public static void SetUp() + { + Console.WriteLine(@"Or you can define methods that do stuff before..."); + } + + [After(TestSession)] + public static void CleanUp() + { + Console.WriteLine(@"...and after!"); + } +} \ No newline at end of file diff --git a/src/MissingValues.Tests/MissingValues.Tests.csproj b/src/MissingValues.Tests/MissingValues.Tests.csproj index 5a178aa..3427af0 100644 --- a/src/MissingValues.Tests/MissingValues.Tests.csproj +++ b/src/MissingValues.Tests/MissingValues.Tests.csproj @@ -1,30 +1,18 @@  - net9.0 enable enable - - false - true + Exe + net9.0 - - - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - + - + \ No newline at end of file diff --git a/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs b/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs new file mode 100644 index 0000000..c6db1c6 --- /dev/null +++ b/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MissingValues.Tests.Numerics +{ + class Int256GenericMathTests + { + } +} diff --git a/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs b/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs new file mode 100644 index 0000000..6096124 --- /dev/null +++ b/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MissingValues.Tests.Numerics +{ + class Int512GenericMathTests + { + } +} diff --git a/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs b/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs new file mode 100644 index 0000000..9a25a37 --- /dev/null +++ b/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MissingValues.Tests.Numerics +{ + class OctoGenericMathTests + { + } +} diff --git a/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs b/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs new file mode 100644 index 0000000..0860134 --- /dev/null +++ b/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MissingValues.Tests.Numerics +{ + class QuadGenericMathTests + { + } +} diff --git a/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs b/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs new file mode 100644 index 0000000..4d7e087 --- /dev/null +++ b/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs @@ -0,0 +1,259 @@ +using MissingValues.Tests.Data; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TUnit.Assertions.AssertConditions.Throws; + +namespace MissingValues.Tests.Numerics; + +public class UInt256GenericMathTests +{ + #region Operators + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_AdditionTestData))] + public async Task op_AdditionTest(UInt256 left, UInt256 right, UInt256 expected) + { + var result = left + right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_CheckedAdditionTestData))] + public async Task op_CheckedAdditionTest(UInt256 left, UInt256 right, UInt256 expected, bool overflows) + { + if (overflows) + { + await Assert.That(() => checked(left + right)).Throws(); + } + else + { + var result = checked(left + right); + await Assert.That(result).IsEqualTo(expected); + } + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_IncrementTestData))] + public async Task op_IncrementTest(UInt256 value, UInt256 expected) + { + var result = ++value; + + await Assert.That(result).IsEqualTo(expected).And.IsEqualTo(value); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_CheckedIncrementTestData))] + public async Task op_CheckedIncrementTest(UInt256 value, UInt256 expected, bool overflows) + { + if (overflows) + { + await Assert.That(() => checked(++value)).Throws(); + } + else + { + var result = checked(++value); + await Assert.That(result).IsEqualTo(expected).And.IsEqualTo(value); + } + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_SubtractionTestData))] + public async Task op_SubtractionTest(UInt256 left, UInt256 right, UInt256 expected) + { + var result = left - right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_CheckedSubtractionTestData))] + public async Task op_CheckedSubtractionTest(UInt256 left, UInt256 right, UInt256 expected, bool overflows) + { + if (overflows) + { + await Assert.That(() => checked(left - right)).Throws(); + } + else + { + var result = checked(left - right); + await Assert.That(result).IsEqualTo(expected); + } + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_DecrementTestData))] + public async Task op_DecrementTest(UInt256 value, UInt256 expected) + { + var result = --value; + + await Assert.That(result).IsEqualTo(expected).And.IsEqualTo(value); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_CheckedDecrementTestData))] + public async Task op_CheckedDecrementTest(UInt256 value, UInt256 expected, bool overflows) + { + if (overflows) + { + await Assert.That(() => checked(--value)).Throws(); + } + else + { + var result = checked(--value); + await Assert.That(result).IsEqualTo(expected).And.IsEqualTo(value); + } + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_MultiplyTestData))] + public async Task op_MultiplyTest(UInt256 left, UInt256 right, UInt256 expected) + { + var result = left * right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_CheckedMultiplyTestData))] + public async Task op_CheckedMultiplyTest(UInt256 left, UInt256 right, UInt256 expected, bool overflows) + { + if (overflows) + { + await Assert.That(() => checked(left * right)).Throws(); + } + else + { + var result = checked(left * right); + await Assert.That(result).IsEqualTo(expected); + } + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_DivisionTestData))] + public async Task op_DivisionTest(UInt256 left, UInt256 right, UInt256 expected) + { + if (right == UInt256.Zero) + { + await Assert.That(() => left / right).Throws(); + } + else + { + var result = left / right; + + await Assert.That(result).IsEqualTo(expected); + } + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_ModulusTestData))] + public async Task op_ModulusTest(UInt256 left, UInt256 right, UInt256 expected) + { + if (right == UInt256.Zero) + { + await Assert.That(() => left % right).Throws(); + } + else + { + var result = left % right; + + await Assert.That(result).IsEqualTo(expected); + } + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_OnesComplementTestData))] + public async Task op_OnesComplementTest(UInt256 value, UInt256 expected) + { + var result = ~value; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_BitwiseAndTestData))] + public async Task op_BitwiseAndTest(UInt256 left, UInt256 right, UInt256 expected) + { + var result = left & right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_BitwiseOrTestData))] + public async Task op_BitwiseOrTest(UInt256 left, UInt256 right, UInt256 expected) + { + var result = left | right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_BitwiseXorTestData))] + public async Task op_BitwiseXorTest(UInt256 left, UInt256 right, UInt256 expected) + { + var result = left ^ right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_ShiftLeftTestData))] + public async Task op_ShiftLeftTest(UInt256 value, int shiftAmount, UInt256 expected) + { + var result = value << shiftAmount; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_ShiftRightTestData))] + public async Task op_ShiftRightTest(UInt256 value, int shiftAmount, UInt256 expected) + { + var result = value >> shiftAmount; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_UnsignedShiftRightTestData))] + public async Task op_UnsignedShiftRightTest(UInt256 value, int shiftAmount, UInt256 expected) + { + var result = value >>> shiftAmount; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_EqualityTestData))] + public async Task op_EqualityTest(UInt256 left, UInt256 right, bool expected) + { + var result = left == right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_InequalityTestData))] + public async Task op_InequalityTest(UInt256 left, UInt256 right, bool expected) + { + var result = left != right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_LessThanTestData))] + public async Task op_LessThanTest(UInt256 left, UInt256 right, bool expected) + { + var result = left < right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_LessThanOrEqualTestData))] + public async Task op_LessThanOrEqualTest(UInt256 left, UInt256 right, bool expected) + { + var result = left <= right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_GreaterThanTestData))] + public async Task op_GreaterThanTest(UInt256 left, UInt256 right, bool expected) + { + var result = left > right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_GreaterThanOrEqualTestData))] + public async Task op_GreaterThanOrEqualTest(UInt256 left, UInt256 right, bool expected) + { + var result = left >= right; + + await Assert.That(result).IsEqualTo(expected); + } + #endregion +} diff --git a/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs b/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs new file mode 100644 index 0000000..5da703b --- /dev/null +++ b/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MissingValues.Tests.Numerics +{ + class UInt512GenericMathTests + { + } +} diff --git a/src/MissingValues.sln b/src/MissingValues.sln index 8edf16b..64e0f8d 100644 --- a/src/MissingValues.sln +++ b/src/MissingValues.sln @@ -5,10 +5,10 @@ VisualStudioVersion = 17.6.33723.286 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MissingValues", "MissingValues\MissingValues.csproj", "{2C6A1B89-E93F-4DC1-B5B2-9E062CEACF18}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MissingValues.Tests", "MissingValues.Tests\MissingValues.Tests.csproj", "{F370A95B-2718-4C84-BC74-1CA1EF7B2F3B}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MissingValues.Benchmarks", "MissingValues.Benchmarks\MissingValues.Benchmarks.csproj", "{FE774888-7645-4298-B3F3-751111ACAA36}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MissingValues.Tests", "MissingValues.Tests\MissingValues.Tests.csproj", "{EA33A386-2C6C-4541-93CB-4FC40905DE67}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -19,14 +19,14 @@ Global {2C6A1B89-E93F-4DC1-B5B2-9E062CEACF18}.Debug|Any CPU.Build.0 = Debug|Any CPU {2C6A1B89-E93F-4DC1-B5B2-9E062CEACF18}.Release|Any CPU.ActiveCfg = Release|Any CPU {2C6A1B89-E93F-4DC1-B5B2-9E062CEACF18}.Release|Any CPU.Build.0 = Release|Any CPU - {F370A95B-2718-4C84-BC74-1CA1EF7B2F3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F370A95B-2718-4C84-BC74-1CA1EF7B2F3B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F370A95B-2718-4C84-BC74-1CA1EF7B2F3B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F370A95B-2718-4C84-BC74-1CA1EF7B2F3B}.Release|Any CPU.Build.0 = Release|Any CPU {FE774888-7645-4298-B3F3-751111ACAA36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FE774888-7645-4298-B3F3-751111ACAA36}.Debug|Any CPU.Build.0 = Debug|Any CPU {FE774888-7645-4298-B3F3-751111ACAA36}.Release|Any CPU.ActiveCfg = Release|Any CPU {FE774888-7645-4298-B3F3-751111ACAA36}.Release|Any CPU.Build.0 = Release|Any CPU + {EA33A386-2C6C-4541-93CB-4FC40905DE67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EA33A386-2C6C-4541-93CB-4FC40905DE67}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EA33A386-2C6C-4541-93CB-4FC40905DE67}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EA33A386-2C6C-4541-93CB-4FC40905DE67}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 0c09db6c54b15f4a5bad4d7874e2bde5f2cf6cf2 Mon Sep 17 00:00:00 2001 From: crookseta Date: Mon, 26 May 2025 12:18:28 -0500 Subject: [PATCH 02/74] - Added number data source interfaces --- .../Data/Sources/IBinaryIntegerDataSource.cs | 20 ++++++++++ .../Data/Sources/IBinaryNumberDataSource.cs | 10 +++++ .../Data/Sources/IFloatingPointDataSource.cs | 20 ++++++++++ .../IFloatingPointIeee754DataSource.cs | 19 ++++++++++ .../Data/Sources/INumberBaseDataSource.cs | 38 +++++++++++++++++++ .../Data/Sources/INumberDataSource.cs | 15 ++++++++ 6 files changed, 122 insertions(+) create mode 100644 src/MissingValues.Tests/Data/Sources/IBinaryIntegerDataSource.cs create mode 100644 src/MissingValues.Tests/Data/Sources/IBinaryNumberDataSource.cs create mode 100644 src/MissingValues.Tests/Data/Sources/IFloatingPointDataSource.cs create mode 100644 src/MissingValues.Tests/Data/Sources/IFloatingPointIeee754DataSource.cs create mode 100644 src/MissingValues.Tests/Data/Sources/INumberBaseDataSource.cs create mode 100644 src/MissingValues.Tests/Data/Sources/INumberDataSource.cs diff --git a/src/MissingValues.Tests/Data/Sources/IBinaryIntegerDataSource.cs b/src/MissingValues.Tests/Data/Sources/IBinaryIntegerDataSource.cs new file mode 100644 index 0000000..b0bda8f --- /dev/null +++ b/src/MissingValues.Tests/Data/Sources/IBinaryIntegerDataSource.cs @@ -0,0 +1,20 @@ +using System.Numerics; + +namespace MissingValues.Tests.Data.Sources; + +public interface IBinaryIntegerDataSource + where T : IBinaryInteger +{ + static abstract IEnumerable> DivRemTestData(); + static abstract IEnumerable> LeadingZeroCountTestData(); + static abstract IEnumerable> PopCountTestData(); + static abstract IEnumerable> ReadBigEndianTestData(); + static abstract IEnumerable> ReadLittleEndianTestData(); + static abstract IEnumerable> RotateLeftTestData(); + static abstract IEnumerable> RotateRightTestData(); + static abstract IEnumerable> TrailingZeroCountTestData(); + static abstract IEnumerable> GetByteCountTestData(); + static abstract IEnumerable> GetShortestBitLengthTestData(); + static abstract IEnumerable> WriteBigEndianTestData(); + static abstract IEnumerable> WriteLittleEndianTestData(); +} \ No newline at end of file diff --git a/src/MissingValues.Tests/Data/Sources/IBinaryNumberDataSource.cs b/src/MissingValues.Tests/Data/Sources/IBinaryNumberDataSource.cs new file mode 100644 index 0000000..329de97 --- /dev/null +++ b/src/MissingValues.Tests/Data/Sources/IBinaryNumberDataSource.cs @@ -0,0 +1,10 @@ +using System.Numerics; + +namespace MissingValues.Tests.Data.Sources; + +public interface IBinaryNumberDataSource + where T : IBinaryNumber +{ + static abstract IEnumerable> IsPow2TestData(); + static abstract IEnumerable> Log2TestData(); +} \ No newline at end of file diff --git a/src/MissingValues.Tests/Data/Sources/IFloatingPointDataSource.cs b/src/MissingValues.Tests/Data/Sources/IFloatingPointDataSource.cs new file mode 100644 index 0000000..06ec3b1 --- /dev/null +++ b/src/MissingValues.Tests/Data/Sources/IFloatingPointDataSource.cs @@ -0,0 +1,20 @@ +using System.Numerics; + +namespace MissingValues.Tests.Data.Sources; + +public interface IFloatingPointDataSource + where T : IFloatingPoint +{ + static abstract IEnumerable> CeilingTestData(); + static abstract IEnumerable> FloorTestData(); + static abstract IEnumerable> RoundTestData(); + static abstract IEnumerable> TruncateTestData(); + static abstract IEnumerable> GetExponentByteCountTestData(); + static abstract IEnumerable> GetExponentShortestBitLengthTestData(); + static abstract IEnumerable> GetSignificandBitLengthTestData(); + static abstract IEnumerable> GetSignificandByteCountTestData(); + static abstract IEnumerable> TryWriteExponentBigEndianTestData(); + static abstract IEnumerable> TryWriteExponentLittleEndianTestData(); + static abstract IEnumerable> TryWriteSignificandBigEndianTestData(); + static abstract IEnumerable> TryWriteSignificandLittleEndianTestData(); +} \ No newline at end of file diff --git a/src/MissingValues.Tests/Data/Sources/IFloatingPointIeee754DataSource.cs b/src/MissingValues.Tests/Data/Sources/IFloatingPointIeee754DataSource.cs new file mode 100644 index 0000000..c2fe941 --- /dev/null +++ b/src/MissingValues.Tests/Data/Sources/IFloatingPointIeee754DataSource.cs @@ -0,0 +1,19 @@ +using System.Numerics; + +namespace MissingValues.Tests.Data.Sources; + +public interface IFloatingPointIeee754DataSource + where T : IFloatingPointIeee754 +{ + static abstract IEnumerable> Atan2TestData(); + static abstract IEnumerable> Atan2PiTestData(); + static abstract IEnumerable> BitDecrementTestData(); + static abstract IEnumerable> BitIncrementTestData(); + static abstract IEnumerable> FusedMultiplyAddTestData(); + static abstract IEnumerable> Ieee754RemainderTestData(); + static abstract IEnumerable> ILogBTestData(); + static abstract IEnumerable> LerpTestData(); + static abstract IEnumerable> ReciprocalEstimateTestData(); + static abstract IEnumerable> ReciprocalSqrtEstimateTestData(); + static abstract IEnumerable> ScaleBTestData(); +} \ No newline at end of file diff --git a/src/MissingValues.Tests/Data/Sources/INumberBaseDataSource.cs b/src/MissingValues.Tests/Data/Sources/INumberBaseDataSource.cs new file mode 100644 index 0000000..5ec0253 --- /dev/null +++ b/src/MissingValues.Tests/Data/Sources/INumberBaseDataSource.cs @@ -0,0 +1,38 @@ +using System.Globalization; +using System.Numerics; + +namespace MissingValues.Tests.Data.Sources; + +public interface INumberBaseDataSource + where T : INumberBase +{ + static abstract IEnumerable> AbsTestData(); + static abstract IEnumerable> IsCanonicalTestData(); + static abstract IEnumerable> IsComplexNumberTestData(); + static abstract IEnumerable> IsEvenIntegerTestData(); + static abstract IEnumerable> IsFiniteTestData(); + static abstract IEnumerable> IsImaginaryNumberTestData(); + static abstract IEnumerable> IsInfinityTestData(); + static abstract IEnumerable> IsIntegerTestData(); + static abstract IEnumerable> IsNaNTestData(); + static abstract IEnumerable> IsNegativeTestData(); + static abstract IEnumerable> IsNegativeInfinityTestData(); + static abstract IEnumerable> IsNormalTestData(); + static abstract IEnumerable> IsOddIntegerTestData(); + static abstract IEnumerable> IsPositiveTestData(); + static abstract IEnumerable> IsPositiveInfinityTestData(); + static abstract IEnumerable> IsRealNumberTestData(); + static abstract IEnumerable> IsSubnormalTestData(); + static abstract IEnumerable> IsZeroTestData(); + static abstract IEnumerable> MaxMagnitudeTestData(); + static abstract IEnumerable> MaxMagnitudeNumberTestData(); + static abstract IEnumerable> MinMagnitudeTestData(); + static abstract IEnumerable> MinMagnitudeNumberTestData(); + static abstract IEnumerable> MultiplyAddEstimateTestData(); + static abstract IEnumerable> ParseTestData(); + static abstract IEnumerable> ParseSpanTestData(); + static abstract IEnumerable> ParseUtf8TestData(); + static abstract IEnumerable> TryParseTestData(); + static abstract IEnumerable> TryParseSpanTestData(); + static abstract IEnumerable> TryParseUtf8TestData(); +} \ No newline at end of file diff --git a/src/MissingValues.Tests/Data/Sources/INumberDataSource.cs b/src/MissingValues.Tests/Data/Sources/INumberDataSource.cs new file mode 100644 index 0000000..4ffe8eb --- /dev/null +++ b/src/MissingValues.Tests/Data/Sources/INumberDataSource.cs @@ -0,0 +1,15 @@ +using System.Numerics; + +namespace MissingValues.Tests.Data.Sources; + +public interface INumberDataSource + where T : INumber +{ + static abstract IEnumerable> ClampTestData(); + static abstract IEnumerable> CopySignTestData(); + static abstract IEnumerable> MaxTestData(); + static abstract IEnumerable> MaxNumberTestData(); + static abstract IEnumerable> MinTestData(); + static abstract IEnumerable> MinNumberTestData(); + static abstract IEnumerable> SignTestData(); +} \ No newline at end of file From 613012d8a3883b1eb61d41c48dcfee17e261eec5 Mon Sep 17 00:00:00 2001 From: crookseta Date: Mon, 26 May 2025 12:25:23 -0500 Subject: [PATCH 03/74] - Implemented interfaces to data source classes. --- .../Data/Int256DataSources.cs | 408 ++++++++++++++++-- .../Data/Int512DataSources.cs | 408 ++++++++++++++++-- .../Data/UInt256DataSources.cs | 259 ++++++++++- .../Data/UInt512DataSources.cs | 406 +++++++++++++++-- 4 files changed, 1399 insertions(+), 82 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int256DataSources.cs b/src/MissingValues.Tests/Data/Int256DataSources.cs index 09c0035..27cea04 100644 --- a/src/MissingValues.Tests/Data/Int256DataSources.cs +++ b/src/MissingValues.Tests/Data/Int256DataSources.cs @@ -1,4 +1,5 @@ -using MissingValues.Tests.Data.Sources; +using System.Globalization; +using MissingValues.Tests.Data.Sources; namespace MissingValues.Tests.Data; @@ -7,31 +8,384 @@ public class Int256DataSources IShiftOperatorsDataSource, IBitwiseOperatorsDataSource, IEqualityOperatorsDataSource, - IComparisonOperatorsDataSource + IComparisonOperatorsDataSource, + INumberBaseDataSource, + INumberDataSource, + IBinaryNumberDataSource, + IBinaryIntegerDataSource { - public static IEnumerable> op_AdditionTestData() => throw new NotImplementedException(); - public static IEnumerable> op_BitwiseAndTestData() => throw new NotImplementedException(); - public static IEnumerable> op_BitwiseOrTestData() => throw new NotImplementedException(); - public static IEnumerable> op_BitwiseXorTestData() => throw new NotImplementedException(); - public static IEnumerable> op_CheckedAdditionTestData() => throw new NotImplementedException(); - public static IEnumerable> op_CheckedDecrementTestData() => throw new NotImplementedException(); - public static IEnumerable> op_CheckedIncrementTestData() => throw new NotImplementedException(); - public static IEnumerable> op_CheckedMultiplyTestData() => throw new NotImplementedException(); - public static IEnumerable> op_CheckedSubtractionTestData() => throw new NotImplementedException(); - public static IEnumerable> op_DecrementTestData() => throw new NotImplementedException(); - public static IEnumerable> op_DivisionTestData() => throw new NotImplementedException(); - public static IEnumerable> op_EqualityTestData() => throw new NotImplementedException(); - public static IEnumerable> op_GreaterThanOrEqualTestData() => throw new NotImplementedException(); - public static IEnumerable> op_GreaterThanTestData() => throw new NotImplementedException(); - public static IEnumerable> op_IncrementTestData() => throw new NotImplementedException(); - public static IEnumerable> op_InequalityTestData() => throw new NotImplementedException(); - public static IEnumerable> op_LessThanOrEqualTestData() => throw new NotImplementedException(); - public static IEnumerable> op_LessThanTestData() => throw new NotImplementedException(); - public static IEnumerable> op_ModulusTestData() => throw new NotImplementedException(); - public static IEnumerable> op_MultiplyTestData() => throw new NotImplementedException(); - public static IEnumerable> op_OnesComplementTestData() => throw new NotImplementedException(); - public static IEnumerable> op_ShiftLeftTestData() => throw new NotImplementedException(); - public static IEnumerable> op_ShiftRightTestData() => throw new NotImplementedException(); - public static IEnumerable> op_SubtractionTestData() => throw new NotImplementedException(); - public static IEnumerable> op_UnsignedShiftRightTestData() => throw new NotImplementedException(); + public static IEnumerable> op_AdditionTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_CheckedAdditionTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_CheckedDecrementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_CheckedIncrementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_CheckedMultiplyTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_CheckedSubtractionTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_DecrementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_DivisionTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_IncrementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_ModulusTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_MultiplyTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_SubtractionTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_ShiftLeftTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_ShiftRightTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_UnsignedShiftRightTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_BitwiseAndTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_BitwiseOrTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_BitwiseXorTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_OnesComplementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_EqualityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_InequalityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_GreaterThanOrEqualTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_GreaterThanTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_LessThanOrEqualTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_LessThanTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> AbsTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsCanonicalTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsComplexNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsEvenIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsFiniteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsImaginaryNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsInfinityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsNaNTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsNegativeTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsNegativeInfinityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsNormalTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsOddIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsPositiveTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsPositiveInfinityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsRealNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsSubnormalTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsZeroTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MaxMagnitudeTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MaxMagnitudeNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MinMagnitudeTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MinMagnitudeNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MultiplyAddEstimateTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ParseTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ParseSpanTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ParseUtf8TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TryParseTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TryParseSpanTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TryParseUtf8TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ClampTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> CopySignTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MaxTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MaxNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MinTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MinNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> SignTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsPow2TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> Log2TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> DivRemTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> LeadingZeroCountTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> PopCountTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ReadBigEndianTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ReadLittleEndianTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> RotateLeftTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> RotateRightTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TrailingZeroCountTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> GetByteCountTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> GetShortestBitLengthTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> WriteBigEndianTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> WriteLittleEndianTestData() + { + throw new NotImplementedException(); + } } diff --git a/src/MissingValues.Tests/Data/Int512DataSources.cs b/src/MissingValues.Tests/Data/Int512DataSources.cs index 9a0cd4e..b50f9c7 100644 --- a/src/MissingValues.Tests/Data/Int512DataSources.cs +++ b/src/MissingValues.Tests/Data/Int512DataSources.cs @@ -1,4 +1,5 @@ -using MissingValues.Tests.Data.Sources; +using System.Globalization; +using MissingValues.Tests.Data.Sources; namespace MissingValues.Tests.Data; @@ -7,31 +8,384 @@ public class Int512DataSources IShiftOperatorsDataSource, IBitwiseOperatorsDataSource, IEqualityOperatorsDataSource, - IComparisonOperatorsDataSource + IComparisonOperatorsDataSource, + INumberBaseDataSource, + INumberDataSource, + IBinaryNumberDataSource, + IBinaryIntegerDataSource { - public static IEnumerable> op_AdditionTestData() => throw new NotImplementedException(); - public static IEnumerable> op_BitwiseAndTestData() => throw new NotImplementedException(); - public static IEnumerable> op_BitwiseOrTestData() => throw new NotImplementedException(); - public static IEnumerable> op_BitwiseXorTestData() => throw new NotImplementedException(); - public static IEnumerable> op_CheckedAdditionTestData() => throw new NotImplementedException(); - public static IEnumerable> op_CheckedDecrementTestData() => throw new NotImplementedException(); - public static IEnumerable> op_CheckedIncrementTestData() => throw new NotImplementedException(); - public static IEnumerable> op_CheckedMultiplyTestData() => throw new NotImplementedException(); - public static IEnumerable> op_CheckedSubtractionTestData() => throw new NotImplementedException(); - public static IEnumerable> op_DecrementTestData() => throw new NotImplementedException(); - public static IEnumerable> op_DivisionTestData() => throw new NotImplementedException(); - public static IEnumerable> op_EqualityTestData() => throw new NotImplementedException(); - public static IEnumerable> op_GreaterThanOrEqualTestData() => throw new NotImplementedException(); - public static IEnumerable> op_GreaterThanTestData() => throw new NotImplementedException(); - public static IEnumerable> op_IncrementTestData() => throw new NotImplementedException(); - public static IEnumerable> op_InequalityTestData() => throw new NotImplementedException(); - public static IEnumerable> op_LessThanOrEqualTestData() => throw new NotImplementedException(); - public static IEnumerable> op_LessThanTestData() => throw new NotImplementedException(); - public static IEnumerable> op_ModulusTestData() => throw new NotImplementedException(); - public static IEnumerable> op_MultiplyTestData() => throw new NotImplementedException(); - public static IEnumerable> op_OnesComplementTestData() => throw new NotImplementedException(); - public static IEnumerable> op_ShiftLeftTestData() => throw new NotImplementedException(); - public static IEnumerable> op_ShiftRightTestData() => throw new NotImplementedException(); - public static IEnumerable> op_SubtractionTestData() => throw new NotImplementedException(); - public static IEnumerable> op_UnsignedShiftRightTestData() => throw new NotImplementedException(); + public static IEnumerable> op_AdditionTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_CheckedAdditionTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_CheckedDecrementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_CheckedIncrementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_CheckedMultiplyTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_CheckedSubtractionTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_DecrementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_DivisionTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_IncrementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_ModulusTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_MultiplyTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_SubtractionTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_ShiftLeftTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_ShiftRightTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_UnsignedShiftRightTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_BitwiseAndTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_BitwiseOrTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_BitwiseXorTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_OnesComplementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_EqualityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_InequalityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_GreaterThanOrEqualTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_GreaterThanTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_LessThanOrEqualTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_LessThanTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> AbsTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsCanonicalTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsComplexNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsEvenIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsFiniteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsImaginaryNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsInfinityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsNaNTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsNegativeTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsNegativeInfinityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsNormalTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsOddIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsPositiveTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsPositiveInfinityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsRealNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsSubnormalTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsZeroTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MaxMagnitudeTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MaxMagnitudeNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MinMagnitudeTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MinMagnitudeNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MultiplyAddEstimateTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ParseTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ParseSpanTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ParseUtf8TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TryParseTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TryParseSpanTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TryParseUtf8TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ClampTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> CopySignTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MaxTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MaxNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MinTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MinNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> SignTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsPow2TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> Log2TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> DivRemTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> LeadingZeroCountTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> PopCountTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ReadBigEndianTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ReadLittleEndianTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> RotateLeftTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> RotateRightTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TrailingZeroCountTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> GetByteCountTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> GetShortestBitLengthTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> WriteBigEndianTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> WriteLittleEndianTestData() + { + throw new NotImplementedException(); + } } diff --git a/src/MissingValues.Tests/Data/UInt256DataSources.cs b/src/MissingValues.Tests/Data/UInt256DataSources.cs index fa8485b..a213406 100644 --- a/src/MissingValues.Tests/Data/UInt256DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt256DataSources.cs @@ -1,4 +1,5 @@ -using MissingValues.Tests.Data.Sources; +using System.Globalization; +using MissingValues.Tests.Data.Sources; namespace MissingValues.Tests.Data; @@ -7,7 +8,11 @@ public class UInt256DataSources IShiftOperatorsDataSource, IBitwiseOperatorsDataSource, IEqualityOperatorsDataSource, - IComparisonOperatorsDataSource + IComparisonOperatorsDataSource, + INumberBaseDataSource, + INumberDataSource, + IBinaryNumberDataSource, + IBinaryIntegerDataSource { public static IEnumerable> op_AdditionTestData() { @@ -247,4 +252,254 @@ public class UInt256DataSources yield return () => (new UInt256(1, 2, 3, 3), new UInt256(1, 2, 3, 4), false); yield return () => (new UInt256(1, 2, 3, 5), new UInt256(1, 2, 3, 4), true); } + + public static IEnumerable> AbsTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsCanonicalTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsComplexNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsEvenIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsFiniteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsImaginaryNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsInfinityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsNaNTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsNegativeTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsNegativeInfinityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsNormalTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsOddIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsPositiveTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsPositiveInfinityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsRealNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsSubnormalTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsZeroTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MaxMagnitudeTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MaxMagnitudeNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MinMagnitudeTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MinMagnitudeNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MultiplyAddEstimateTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ParseTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ParseSpanTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ParseUtf8TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TryParseTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TryParseSpanTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TryParseUtf8TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ClampTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> CopySignTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MaxTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MaxNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MinTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MinNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> SignTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsPow2TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> Log2TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> DivRemTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> LeadingZeroCountTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> PopCountTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ReadBigEndianTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ReadLittleEndianTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> RotateLeftTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> RotateRightTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TrailingZeroCountTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> GetByteCountTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> GetShortestBitLengthTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> WriteBigEndianTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> WriteLittleEndianTestData() + { + throw new NotImplementedException(); + } } diff --git a/src/MissingValues.Tests/Data/UInt512DataSources.cs b/src/MissingValues.Tests/Data/UInt512DataSources.cs index 00d5d79..1403a5c 100644 --- a/src/MissingValues.Tests/Data/UInt512DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt512DataSources.cs @@ -1,6 +1,7 @@ using MissingValues.Tests.Data.Sources; using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -12,31 +13,384 @@ public class UInt512DataSources IShiftOperatorsDataSource, IBitwiseOperatorsDataSource, IEqualityOperatorsDataSource, - IComparisonOperatorsDataSource + IComparisonOperatorsDataSource, + INumberBaseDataSource, + INumberDataSource, + IBinaryNumberDataSource, + IBinaryIntegerDataSource { - public static IEnumerable> op_AdditionTestData() => throw new NotImplementedException(); - public static IEnumerable> op_BitwiseAndTestData() => throw new NotImplementedException(); - public static IEnumerable> op_BitwiseOrTestData() => throw new NotImplementedException(); - public static IEnumerable> op_BitwiseXorTestData() => throw new NotImplementedException(); - public static IEnumerable> op_CheckedAdditionTestData() => throw new NotImplementedException(); - public static IEnumerable> op_CheckedDecrementTestData() => throw new NotImplementedException(); - public static IEnumerable> op_CheckedIncrementTestData() => throw new NotImplementedException(); - public static IEnumerable> op_CheckedMultiplyTestData() => throw new NotImplementedException(); - public static IEnumerable> op_CheckedSubtractionTestData() => throw new NotImplementedException(); - public static IEnumerable> op_DecrementTestData() => throw new NotImplementedException(); - public static IEnumerable> op_DivisionTestData() => throw new NotImplementedException(); - public static IEnumerable> op_EqualityTestData() => throw new NotImplementedException(); - public static IEnumerable> op_GreaterThanOrEqualTestData() => throw new NotImplementedException(); - public static IEnumerable> op_GreaterThanTestData() => throw new NotImplementedException(); - public static IEnumerable> op_IncrementTestData() => throw new NotImplementedException(); - public static IEnumerable> op_InequalityTestData() => throw new NotImplementedException(); - public static IEnumerable> op_LessThanOrEqualTestData() => throw new NotImplementedException(); - public static IEnumerable> op_LessThanTestData() => throw new NotImplementedException(); - public static IEnumerable> op_ModulusTestData() => throw new NotImplementedException(); - public static IEnumerable> op_MultiplyTestData() => throw new NotImplementedException(); - public static IEnumerable> op_OnesComplementTestData() => throw new NotImplementedException(); - public static IEnumerable> op_ShiftLeftTestData() => throw new NotImplementedException(); - public static IEnumerable> op_ShiftRightTestData() => throw new NotImplementedException(); - public static IEnumerable> op_SubtractionTestData() => throw new NotImplementedException(); - public static IEnumerable> op_UnsignedShiftRightTestData() => throw new NotImplementedException(); + public static IEnumerable> op_AdditionTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_CheckedAdditionTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_CheckedDecrementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_CheckedIncrementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_CheckedMultiplyTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_CheckedSubtractionTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_DecrementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_DivisionTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_IncrementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_ModulusTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_MultiplyTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_SubtractionTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_ShiftLeftTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_ShiftRightTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_UnsignedShiftRightTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_BitwiseAndTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_BitwiseOrTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_BitwiseXorTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_OnesComplementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_EqualityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_InequalityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_GreaterThanOrEqualTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_GreaterThanTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_LessThanOrEqualTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_LessThanTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> AbsTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsCanonicalTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsComplexNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsEvenIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsFiniteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsImaginaryNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsInfinityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsNaNTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsNegativeTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsNegativeInfinityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsNormalTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsOddIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsPositiveTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsPositiveInfinityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsRealNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsSubnormalTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsZeroTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MaxMagnitudeTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MaxMagnitudeNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MinMagnitudeTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MinMagnitudeNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MultiplyAddEstimateTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ParseTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ParseSpanTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ParseUtf8TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TryParseTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TryParseSpanTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TryParseUtf8TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ClampTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> CopySignTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MaxTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MaxNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MinTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MinNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> SignTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsPow2TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> Log2TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> DivRemTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> LeadingZeroCountTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> PopCountTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ReadBigEndianTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ReadLittleEndianTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> RotateLeftTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> RotateRightTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TrailingZeroCountTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> GetByteCountTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> GetShortestBitLengthTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> WriteBigEndianTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> WriteLittleEndianTestData() + { + throw new NotImplementedException(); + } } From 31dbbb351840ea75f4fc4c4509571f23a6558f82 Mon Sep 17 00:00:00 2001 From: crookseta Date: Mon, 26 May 2025 17:07:00 -0500 Subject: [PATCH 04/74] - Structurized missing data sources classes --- .../Data/Int256DataSources.cs | 540 ++++++++++ .../Data/Int512DataSources.cs | 540 ++++++++++ .../Data/OctoDataSources.cs | 970 +++++++++++++++++ .../Data/QuadDataSources.cs | 971 ++++++++++++++++++ .../Data/UInt256DataSources.cs | 675 +++++++++++- .../Data/UInt512DataSources.cs | 540 ++++++++++ 6 files changed, 4206 insertions(+), 30 deletions(-) create mode 100644 src/MissingValues.Tests/Data/OctoDataSources.cs create mode 100644 src/MissingValues.Tests/Data/QuadDataSources.cs diff --git a/src/MissingValues.Tests/Data/Int256DataSources.cs b/src/MissingValues.Tests/Data/Int256DataSources.cs index 27cea04..191aaff 100644 --- a/src/MissingValues.Tests/Data/Int256DataSources.cs +++ b/src/MissingValues.Tests/Data/Int256DataSources.cs @@ -388,4 +388,544 @@ public class Int256DataSources { throw new NotImplementedException(); } + + public static IEnumerable> ConvertToCheckedByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedOctoTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingOctoTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingOctoTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedOctoTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingOctoTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingOctoTestData() + { + throw new NotImplementedException(); + } } diff --git a/src/MissingValues.Tests/Data/Int512DataSources.cs b/src/MissingValues.Tests/Data/Int512DataSources.cs index b50f9c7..42a2f34 100644 --- a/src/MissingValues.Tests/Data/Int512DataSources.cs +++ b/src/MissingValues.Tests/Data/Int512DataSources.cs @@ -388,4 +388,544 @@ public class Int512DataSources { throw new NotImplementedException(); } + + public static IEnumerable> ConvertToCheckedByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedOctoTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingOctoTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingOctoTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedOctoTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingOctoTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingOctoTestData() + { + throw new NotImplementedException(); + } } diff --git a/src/MissingValues.Tests/Data/OctoDataSources.cs b/src/MissingValues.Tests/Data/OctoDataSources.cs new file mode 100644 index 0000000..d78702f --- /dev/null +++ b/src/MissingValues.Tests/Data/OctoDataSources.cs @@ -0,0 +1,970 @@ +using System.Globalization; +using MissingValues.Tests.Data.Sources; + +namespace MissingValues.Tests.Data; + +public class OctoDataSources + : IMathOperatorsDataSource, + IBitwiseOperatorsDataSource, + IEqualityOperatorsDataSource, + IComparisonOperatorsDataSource, + INumberBaseDataSource, + INumberDataSource, + IBinaryNumberDataSource, + IFloatingPointDataSource, + IFloatingPointIeee754DataSource +{ + public static IEnumerable> op_AdditionTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_CheckedAdditionTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_CheckedDecrementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_CheckedIncrementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_CheckedMultiplyTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_CheckedSubtractionTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_DecrementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_DivisionTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_IncrementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_ModulusTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_MultiplyTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_SubtractionTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_BitwiseAndTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_BitwiseOrTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_BitwiseXorTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_OnesComplementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_EqualityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_InequalityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_GreaterThanOrEqualTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_GreaterThanTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_LessThanOrEqualTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_LessThanTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> AbsTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsCanonicalTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsComplexNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsEvenIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsFiniteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsImaginaryNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsInfinityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsNaNTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsNegativeTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsNegativeInfinityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsNormalTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsOddIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsPositiveTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsPositiveInfinityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsRealNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsSubnormalTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsZeroTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MaxMagnitudeTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MaxMagnitudeNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MinMagnitudeTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MinMagnitudeNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MultiplyAddEstimateTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ParseTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ParseSpanTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ParseUtf8TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TryParseTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TryParseSpanTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TryParseUtf8TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ClampTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> CopySignTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MaxTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MaxNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MinTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MinNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> SignTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsPow2TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> Log2TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> CeilingTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> FloorTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> RoundTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TruncateTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> GetExponentByteCountTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> GetExponentShortestBitLengthTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> GetSignificandBitLengthTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> GetSignificandByteCountTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TryWriteExponentBigEndianTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TryWriteExponentLittleEndianTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TryWriteSignificandBigEndianTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TryWriteSignificandLittleEndianTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> Atan2TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> Atan2PiTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> BitDecrementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> BitIncrementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> FusedMultiplyAddTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> Ieee754RemainderTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ILogBTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> LerpTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ReciprocalEstimateTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ReciprocalSqrtEstimateTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ScaleBTestData() + { + throw new NotImplementedException(); + } + public static IEnumerable> ConvertToCheckedByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingQuadTestData() + { + throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/src/MissingValues.Tests/Data/QuadDataSources.cs b/src/MissingValues.Tests/Data/QuadDataSources.cs new file mode 100644 index 0000000..c2cea24 --- /dev/null +++ b/src/MissingValues.Tests/Data/QuadDataSources.cs @@ -0,0 +1,971 @@ +using System.Globalization; +using MissingValues.Tests.Data.Sources; + +namespace MissingValues.Tests.Data; + +public class QuadDataSources + : IMathOperatorsDataSource, + IBitwiseOperatorsDataSource, + IEqualityOperatorsDataSource, + IComparisonOperatorsDataSource, + INumberBaseDataSource, + INumberDataSource, + IBinaryNumberDataSource, + IFloatingPointDataSource, + IFloatingPointIeee754DataSource +{ + public static IEnumerable> op_AdditionTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_CheckedAdditionTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_CheckedDecrementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_CheckedIncrementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_CheckedMultiplyTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_CheckedSubtractionTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_DecrementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_DivisionTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_IncrementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_ModulusTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_MultiplyTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_SubtractionTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_BitwiseAndTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_BitwiseOrTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_BitwiseXorTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_OnesComplementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_EqualityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_InequalityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_GreaterThanOrEqualTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_GreaterThanTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_LessThanOrEqualTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_LessThanTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> AbsTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsCanonicalTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsComplexNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsEvenIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsFiniteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsImaginaryNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsInfinityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsNaNTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsNegativeTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsNegativeInfinityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsNormalTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsOddIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsPositiveTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsPositiveInfinityTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsRealNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsSubnormalTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsZeroTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MaxMagnitudeTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MaxMagnitudeNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MinMagnitudeTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MinMagnitudeNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MultiplyAddEstimateTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ParseTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ParseSpanTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ParseUtf8TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TryParseTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TryParseSpanTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TryParseUtf8TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ClampTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> CopySignTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MaxTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MaxNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MinTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> MinNumberTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> SignTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> IsPow2TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> Log2TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> CeilingTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> FloorTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> RoundTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TruncateTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> GetExponentByteCountTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> GetExponentShortestBitLengthTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> GetSignificandBitLengthTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> GetSignificandByteCountTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TryWriteExponentBigEndianTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TryWriteExponentLittleEndianTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TryWriteSignificandBigEndianTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> TryWriteSignificandLittleEndianTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> Atan2TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> Atan2PiTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> BitDecrementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> BitIncrementTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> FusedMultiplyAddTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> Ieee754RemainderTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ILogBTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> LerpTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ReciprocalEstimateTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ReciprocalSqrtEstimateTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ScaleBTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedOctoTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingOctoTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingOctoTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedOctoTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingOctoTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingOctoTestData() + { + throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/src/MissingValues.Tests/Data/UInt256DataSources.cs b/src/MissingValues.Tests/Data/UInt256DataSources.cs index a213406..f7e71e2 100644 --- a/src/MissingValues.Tests/Data/UInt256DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt256DataSources.cs @@ -255,112 +255,139 @@ public class UInt256DataSources public static IEnumerable> AbsTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.Zero, UInt256.Zero); + yield return () => (UInt256.One, UInt256.One); + yield return () => (UInt256.MaxValue, UInt256.MaxValue); + yield return () => (UInt256.MinValue, UInt256.MinValue); } public static IEnumerable> IsCanonicalTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.Zero, true); } public static IEnumerable> IsComplexNumberTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.Zero, false); } public static IEnumerable> IsEvenIntegerTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.Zero, true); + yield return () => (UInt256.One, false); + yield return () => (new UInt256(0, 0, 0, 2), true); + yield return () => (new UInt256(0, 0, 0, 3), true); + yield return () => (new UInt256(0, 0, 0, 0x8000_0000_0000_0000), true); + yield return () => (new UInt256(0x8000_0000_0000_0000, 0, 0, 0), true); + yield return () => (new UInt256(0x8000_0000_0000_0000, 0, 0, 1), false); + yield return () => (UInt256.MaxValue, false); } public static IEnumerable> IsFiniteTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.Zero, true); } public static IEnumerable> IsImaginaryNumberTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.Zero, false); } public static IEnumerable> IsInfinityTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.Zero, false); } public static IEnumerable> IsIntegerTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.Zero, true); } public static IEnumerable> IsNaNTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.Zero, false); } public static IEnumerable> IsNegativeTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.Zero, false); } public static IEnumerable> IsNegativeInfinityTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.Zero, false); } public static IEnumerable> IsNormalTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.Zero, false); + yield return () => (UInt256.One, true); + yield return () => (new UInt256(0, 0, 1, 0), true); + yield return () => (new UInt256(0, 1, 0, 0), true); + yield return () => (new UInt256(1, 0, 0, 0), true); + yield return () => (UInt256.MaxValue, true); } public static IEnumerable> IsOddIntegerTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.Zero, false); + yield return () => (UInt256.One, true); + yield return () => (new UInt256(0, 0, 0, 2), false); + yield return () => (new UInt256(0, 0, 0, 3), false); + yield return () => (new UInt256(0, 0, 0, 0x8000_0000_0000_0000), false); + yield return () => (new UInt256(0x8000_0000_0000_0000, 0, 0, 0), false); + yield return () => (new UInt256(0x8000_0000_0000_0000, 0, 0, 1), true); + yield return () => (UInt256.MaxValue, true); } public static IEnumerable> IsPositiveTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.Zero, true); } public static IEnumerable> IsPositiveInfinityTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.Zero, false); } public static IEnumerable> IsRealNumberTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.Zero, true); } public static IEnumerable> IsSubnormalTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.Zero, false); } public static IEnumerable> IsZeroTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.Zero, true); + yield return () => (UInt256.One, false); + yield return () => (new UInt256(0, 0, 1, 0), false); + yield return () => (new UInt256(0, 1, 0, 0), false); + yield return () => (new UInt256(1, 0, 0, 0), false); + yield return () => (UInt256.MaxValue, false); } public static IEnumerable> MaxMagnitudeTestData() { - throw new NotImplementedException(); + return MaxTestData(); } public static IEnumerable> MaxMagnitudeNumberTestData() { - throw new NotImplementedException(); + return MaxTestData(); } public static IEnumerable> MinMagnitudeTestData() { - throw new NotImplementedException(); + return MinTestData(); } public static IEnumerable> MinMagnitudeNumberTestData() { - throw new NotImplementedException(); + return MinTestData(); } public static IEnumerable> MultiplyAddEstimateTestData() @@ -370,32 +397,80 @@ public class UInt256DataSources public static IEnumerable> ParseTestData() { - throw new NotImplementedException(); + yield return () => ("0", NumberStyles.Integer, CultureInfo.InvariantCulture, UInt256.Zero); + yield return () => ("1", NumberStyles.Integer, CultureInfo.InvariantCulture, UInt256.One); + yield return () => ("4294967296", NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 4294967296)); + yield return () => ("18446744073709551616", NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(0, 0, 1, ulong.MaxValue)); + yield return () => ("340282366920938463463374607431768211456", NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(0, 1, ulong.MaxValue, ulong.MaxValue)); + yield return () => ("6277101735386680763835789423207666416102355444464034512896", NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(1, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); + yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639935", NumberStyles.Integer, CultureInfo.InvariantCulture, UInt256.MaxValue); } public static IEnumerable> ParseSpanTestData() { - throw new NotImplementedException(); + yield return () => ("0".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, UInt256.Zero); + yield return () => ("1".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, UInt256.One); + yield return () => ("4294967296".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 4294967296)); + yield return () => ("18446744073709551616".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(0, 0, 1, ulong.MaxValue)); + yield return () => ("340282366920938463463374607431768211456".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(0, 1, ulong.MaxValue, ulong.MaxValue)); + yield return () => ("6277101735386680763835789423207666416102355444464034512896".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(1, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); + yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639935".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, UInt256.MaxValue); } public static IEnumerable> ParseUtf8TestData() { - throw new NotImplementedException(); + yield return () => ("0"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, UInt256.Zero); + yield return () => ("1"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, UInt256.One); + yield return () => ("4294967296"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 4294967296)); + yield return () => ("18446744073709551616"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(0, 0, 1, ulong.MaxValue)); + yield return () => ("340282366920938463463374607431768211456"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(0, 1, ulong.MaxValue, ulong.MaxValue)); + yield return () => ("6277101735386680763835789423207666416102355444464034512896"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(1, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); + yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639935"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, UInt256.MaxValue); } public static IEnumerable> TryParseTestData() { - throw new NotImplementedException(); + yield return () => ("0", NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt256.Zero); + yield return () => ("1", NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt256.One); + yield return () => ("4294967296", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(0, 0, 0, 4294967296)); + yield return () => ("18446744073709551616", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(0, 0, 1, ulong.MaxValue)); + yield return () => ("340282366920938463463374607431768211456", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(0, 1, ulong.MaxValue, ulong.MaxValue)); + yield return () => ("6277101735386680763835789423207666416102355444464034512896", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(1, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); + yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639935", NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt256.MaxValue); + yield return () => ("-1", NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + yield return () => ("2.25", NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639936", NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + yield return () => ("1000000000000000000000000000000000000000000000000000000000000000000000000000000", NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); } public static IEnumerable> TryParseSpanTestData() { - throw new NotImplementedException(); + yield return () => ("0".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt256.Zero); + yield return () => ("1".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt256.One); + yield return () => ("4294967296".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(0, 0, 0, 4294967296)); + yield return () => ("18446744073709551616".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(0, 0, 1, ulong.MaxValue)); + yield return () => ("340282366920938463463374607431768211456".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(0, 1, ulong.MaxValue, ulong.MaxValue)); + yield return () => ("6277101735386680763835789423207666416102355444464034512896".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(1, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); + yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639935".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt256.MaxValue); + yield return () => ("-1".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + yield return () => ("2.25".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639936".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + yield return () => ("1000000000000000000000000000000000000000000000000000000000000000000000000000000".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); } public static IEnumerable> TryParseUtf8TestData() { - throw new NotImplementedException(); + yield return () => ("0"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt256.Zero); + yield return () => ("1"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt256.One); + yield return () => ("4294967296"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(0, 0, 0, 4294967296)); + yield return () => ("18446744073709551616"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(0, 0, 1, ulong.MaxValue)); + yield return () => ("340282366920938463463374607431768211456"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(0, 1, ulong.MaxValue, ulong.MaxValue)); + yield return () => ("6277101735386680763835789423207666416102355444464034512896"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(1, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); + yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639935"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt256.MaxValue); + yield return () => ("-1"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + yield return () => ("2.25"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639936"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + yield return () => ("1000000000000000000000000000000000000000000000000000000000000000000000000000000"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); } public static IEnumerable> ClampTestData() @@ -415,7 +490,7 @@ public class UInt256DataSources public static IEnumerable> MaxNumberTestData() { - throw new NotImplementedException(); + return MaxTestData(); } public static IEnumerable> MinTestData() @@ -425,7 +500,7 @@ public class UInt256DataSources public static IEnumerable> MinNumberTestData() { - throw new NotImplementedException(); + return MinTestData(); } public static IEnumerable> SignTestData() @@ -502,4 +577,544 @@ public class UInt256DataSources { throw new NotImplementedException(); } + + public static IEnumerable> ConvertToCheckedByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedOctoTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingOctoTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingOctoTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedOctoTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingOctoTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingOctoTestData() + { + throw new NotImplementedException(); + } } diff --git a/src/MissingValues.Tests/Data/UInt512DataSources.cs b/src/MissingValues.Tests/Data/UInt512DataSources.cs index 1403a5c..b82bbab 100644 --- a/src/MissingValues.Tests/Data/UInt512DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt512DataSources.cs @@ -393,4 +393,544 @@ public class UInt512DataSources { throw new NotImplementedException(); } + + public static IEnumerable> ConvertToCheckedByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToCheckedOctoTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingOctoTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingOctoTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingUInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingSByteTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt16TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt32TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt64TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt128TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt256TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingInt512TestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingHalfTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingSingleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingDoubleTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingQuadTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromCheckedOctoTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingOctoTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingOctoTestData() + { + throw new NotImplementedException(); + } } From 636538e82443c728dcba856a5c8299c6651b192f Mon Sep 17 00:00:00 2001 From: crookseta Date: Wed, 28 May 2025 17:07:03 -0500 Subject: [PATCH 05/74] - Added more tests for UInt256. --- .../Core/CalculatorTests.cs | 50 +++ .../Data/Int256DataSources.cs | 2 +- .../Data/Int512DataSources.cs | 2 +- .../Data/OctoDataSources.cs | 2 +- .../Data/QuadDataSources.cs | 2 +- .../Data/Sources/INumberDataSource.cs | 2 +- .../Data/UInt256DataSources.cs | 345 +++++++++++++-- .../Data/UInt512DataSources.cs | 2 +- src/MissingValues.Tests/Helper.cs | 258 ++++++++++++ .../Numerics/UInt256GenericMathTests.cs | 395 ++++++++++++++++++ 10 files changed, 1013 insertions(+), 47 deletions(-) create mode 100644 src/MissingValues.Tests/Helper.cs diff --git a/src/MissingValues.Tests/Core/CalculatorTests.cs b/src/MissingValues.Tests/Core/CalculatorTests.cs index 70be92e..10e39e4 100644 --- a/src/MissingValues.Tests/Core/CalculatorTests.cs +++ b/src/MissingValues.Tests/Core/CalculatorTests.cs @@ -13,6 +13,8 @@ public async Task AddWithCarry_NoOverflow_ReturnsCorrectSumAndZeroCarry() ulong result = Calculator.AddWithCarry(a, b, out ulong carry); + using var _ = Assert.Multiple(); + await Assert.That(result).IsEqualTo(30UL); await Assert.That(carry).IsEqualTo(0UL); } @@ -23,6 +25,8 @@ public async Task AddWithCarry_MaxValueAndOne_ReturnsZeroAndCarry() ulong b = 1; ulong result = Calculator.AddWithCarry(a, b, out ulong carry); + + using var _ = Assert.Multiple(); await Assert.That(result).IsEqualTo(0UL); await Assert.That(carry).IsEqualTo(1UL); @@ -34,6 +38,8 @@ public async Task AddWithCarry_OverflowCase_ReturnsCorrectResultAndCarry() ulong b = 5; ulong result = Calculator.AddWithCarry(a, b, out ulong carry); + + using var _ = Assert.Multiple(); await Assert.That(result).IsEqualTo(3UL); await Assert.That(carry).IsEqualTo(1UL); @@ -45,6 +51,8 @@ public async Task AddWithCarry_AddZero_ReturnsSameValueAndZeroCarry() ulong b = 0; ulong result = Calculator.AddWithCarry(a, b, out ulong carry); + + using var _ = Assert.Multiple(); await Assert.That(result).IsEqualTo(a); await Assert.That(carry).IsEqualTo(0UL); @@ -56,6 +64,8 @@ public async Task AddWithCarry_BothZero_ReturnsZeroAndZeroCarry() ulong b = 0; ulong result = Calculator.AddWithCarry(a, b, out ulong carry); + + using var _ = Assert.Multiple(); await Assert.That(result).IsEqualTo(0UL); await Assert.That(carry).IsEqualTo(0UL); @@ -67,6 +77,8 @@ public async Task AddWithCarry_ExactMaxValueSum_ReturnsMaxValueAndZeroCarry() ulong b = ulong.MaxValue / 2; ulong result = Calculator.AddWithCarry(a, b, out ulong carry); + + using var _ = Assert.Multiple(); await Assert.That(result).IsEqualTo(ulong.MaxValue - 1); await Assert.That(carry).IsEqualTo(0UL); @@ -78,6 +90,8 @@ public async Task AddWithCarry_CarryOnlyTriggeredWhenOverflow() ulong b = 0; ulong result = Calculator.AddWithCarry(a, b, out ulong carry); + + using var _ = Assert.Multiple(); await Assert.That(result).IsEqualTo(ulong.MaxValue); await Assert.That(carry).IsEqualTo(0UL); @@ -91,6 +105,8 @@ public async Task BigMulAdd_SimpleMultiplicationAndAddition() ulong c = 5; var (hi, lo) = Calculator.BigMulAdd(a, b, c); + + using var _ = Assert.Multiple(); await Assert.That(hi).IsEqualTo(0UL); await Assert.That(lo).IsEqualTo(11UL); @@ -103,6 +119,8 @@ public async Task BigMulAdd_WithOverflowFromLowToHigh() ulong c = 1; var (hi, lo) = Calculator.BigMulAdd(a, b, c); + + using var _ = Assert.Multiple(); await Assert.That(hi).IsEqualTo(1UL); await Assert.That(lo).IsEqualTo(0xFFFFFFFFFFFFFFFFUL); @@ -115,6 +133,8 @@ public async Task BigMulAdd_MaxValues() ulong c = ulong.MaxValue; var (hi, lo) = Calculator.BigMulAdd(a, b, c); + + using var _ = Assert.Multiple(); await Assert.That(hi).IsEqualTo(0xFFFFFFFFFFFFFFFFUL); await Assert.That(lo).IsEqualTo(0UL); @@ -127,6 +147,8 @@ public async Task BigMulAdd_NoCarryOrOverflow() ulong c = 1; var (hi, lo) = Calculator.BigMulAdd(a, b, c); + + using var _ = Assert.Multiple(); await Assert.That(hi).IsEqualTo(0UL); await Assert.That(lo).IsEqualTo(1_000_001UL); @@ -139,6 +161,8 @@ public async Task BigMulAdd_CausesCarryFromAdditionOnly() ulong c = 1; var (hi, lo) = Calculator.BigMulAdd(a, b, c); + + using var _ = Assert.Multiple(); await Assert.That(hi).IsEqualTo(1UL); await Assert.That(lo).IsEqualTo(0UL); @@ -151,6 +175,8 @@ public async Task BigMulAdd_CausesNoCarryWithZeroInputs() ulong c = 0; var (hi, lo) = Calculator.BigMulAdd(a, b, c); + + using var _ = Assert.Multiple(); await Assert.That(hi).IsEqualTo(0UL); await Assert.That(lo).IsEqualTo(0UL); @@ -163,6 +189,8 @@ public async Task DivRemByUInt32_BasicDivision() uint right = 7; var (quotient, remainder) = Calculator.DivRemByUInt32(left, right); + + using var _ = Assert.Multiple(); await Assert.That(quotient).IsEqualTo(14UL); await Assert.That(remainder).IsEqualTo(2U); @@ -174,6 +202,8 @@ public async Task DivRemByUInt32_DivideByOne() uint right = 1; var (quotient, remainder) = Calculator.DivRemByUInt32(left, right); + + using var _ = Assert.Multiple(); await Assert.That(quotient).IsEqualTo(left); await Assert.That(remainder).IsEqualTo(0U); @@ -185,6 +215,8 @@ public async Task DivRemByUInt32_DivideByMaxUInt32() uint right = uint.MaxValue; var (quotient, remainder) = Calculator.DivRemByUInt32(left, right); + + using var _ = Assert.Multiple(); await Assert.That(quotient).IsEqualTo(1UL); await Assert.That(remainder).IsEqualTo(1U); @@ -196,6 +228,8 @@ public async Task DivRemByUInt32_ZeroDividend() uint right = uint.MaxValue; var (quotient, remainder) = Calculator.DivRemByUInt32(left, right); + + using var _ = Assert.Multiple(); await Assert.That(quotient).IsEqualTo(0UL); await Assert.That(remainder).IsEqualTo(0U); @@ -207,6 +241,8 @@ public async Task DivRemByUInt32_ExactDivision() uint right = 20; var (quotient, remainder) = Calculator.DivRemByUInt32(left, right); + + using var _ = Assert.Multiple(); await Assert.That(quotient).IsEqualTo(20UL); await Assert.That(remainder).IsEqualTo(0U); @@ -218,6 +254,8 @@ public async Task DivRemByUInt32_MaxValues() uint right = uint.MaxValue; var (quotient, remainder) = Calculator.DivRemByUInt32(left, right); + + using var _ = Assert.Multiple(); await Assert.That(quotient).IsEqualTo(ulong.MaxValue / uint.MaxValue); await Assert.That(remainder).IsEqualTo((uint)(ulong.MaxValue % uint.MaxValue)); @@ -238,6 +276,8 @@ public async Task DivRemByUInt64_BasicDivision() ulong right = 30; var (quotient, remainder) = Calculator.DivRemByUInt64(left, right); + + using var _ = Assert.Multiple(); await Assert.That(quotient).IsEqualTo(new UInt128(0, 33)); await Assert.That(remainder).IsEqualTo(10UL); @@ -249,6 +289,8 @@ public async Task DivRemByUInt64_ZeroDividend() ulong right = 12345; var (quotient, remainder) = Calculator.DivRemByUInt64(left, right); + + using var _ = Assert.Multiple(); await Assert.That(quotient).IsEqualTo(UInt128.Zero); await Assert.That(remainder).IsEqualTo(0UL); @@ -260,6 +302,8 @@ public async Task DivRemByUInt64_DivideByOne() ulong right = 1; var (quotient, remainder) = Calculator.DivRemByUInt64(left, right); + + using var _ = Assert.Multiple(); await Assert.That(quotient).IsEqualTo(new UInt128(123456789, 9876543210)); await Assert.That(remainder).IsEqualTo(0UL); @@ -271,6 +315,8 @@ public async Task DivRemByUInt64_ExactDivision() ulong right = 1000; var (quotient, remainder) = Calculator.DivRemByUInt64(left, right); + + using var _ = Assert.Multiple(); await Assert.That(quotient).IsEqualTo(new UInt128(0, 1)); await Assert.That(remainder).IsEqualTo(0UL); @@ -282,6 +328,8 @@ public async Task DivRemByUInt64_UpperBitsUsed() ulong right = 2; var (quotient, remainder) = Calculator.DivRemByUInt64(left, right); + + using var _ = Assert.Multiple(); await Assert.That(quotient).IsEqualTo(new UInt128(0, 1UL << 63)); await Assert.That(remainder).IsEqualTo(0UL); @@ -293,6 +341,8 @@ public async Task DivRemByUInt64_MaxValues() ulong right = ulong.MaxValue; var (quotient, remainder) = Calculator.DivRemByUInt64(left, right); + + using var _ = Assert.Multiple(); await Assert.That(quotient).IsEqualTo(UInt128.MaxValue / ulong.MaxValue); await Assert.That(remainder).IsEqualTo((ulong)(UInt128.MaxValue % ulong.MaxValue)); diff --git a/src/MissingValues.Tests/Data/Int256DataSources.cs b/src/MissingValues.Tests/Data/Int256DataSources.cs index 191aaff..bf43eaf 100644 --- a/src/MissingValues.Tests/Data/Int256DataSources.cs +++ b/src/MissingValues.Tests/Data/Int256DataSources.cs @@ -314,7 +314,7 @@ public class Int256DataSources throw new NotImplementedException(); } - public static IEnumerable> SignTestData() + public static IEnumerable> SignTestData() { throw new NotImplementedException(); } diff --git a/src/MissingValues.Tests/Data/Int512DataSources.cs b/src/MissingValues.Tests/Data/Int512DataSources.cs index 42a2f34..f1cba94 100644 --- a/src/MissingValues.Tests/Data/Int512DataSources.cs +++ b/src/MissingValues.Tests/Data/Int512DataSources.cs @@ -314,7 +314,7 @@ public class Int512DataSources throw new NotImplementedException(); } - public static IEnumerable> SignTestData() + public static IEnumerable> SignTestData() { throw new NotImplementedException(); } diff --git a/src/MissingValues.Tests/Data/OctoDataSources.cs b/src/MissingValues.Tests/Data/OctoDataSources.cs index d78702f..b2565ad 100644 --- a/src/MissingValues.Tests/Data/OctoDataSources.cs +++ b/src/MissingValues.Tests/Data/OctoDataSources.cs @@ -299,7 +299,7 @@ public class OctoDataSources throw new NotImplementedException(); } - public static IEnumerable> SignTestData() + public static IEnumerable> SignTestData() { throw new NotImplementedException(); } diff --git a/src/MissingValues.Tests/Data/QuadDataSources.cs b/src/MissingValues.Tests/Data/QuadDataSources.cs index c2cea24..8e1f735 100644 --- a/src/MissingValues.Tests/Data/QuadDataSources.cs +++ b/src/MissingValues.Tests/Data/QuadDataSources.cs @@ -299,7 +299,7 @@ public class QuadDataSources throw new NotImplementedException(); } - public static IEnumerable> SignTestData() + public static IEnumerable> SignTestData() { throw new NotImplementedException(); } diff --git a/src/MissingValues.Tests/Data/Sources/INumberDataSource.cs b/src/MissingValues.Tests/Data/Sources/INumberDataSource.cs index 4ffe8eb..f06a3e5 100644 --- a/src/MissingValues.Tests/Data/Sources/INumberDataSource.cs +++ b/src/MissingValues.Tests/Data/Sources/INumberDataSource.cs @@ -11,5 +11,5 @@ public interface INumberDataSource static abstract IEnumerable> MaxNumberTestData(); static abstract IEnumerable> MinTestData(); static abstract IEnumerable> MinNumberTestData(); - static abstract IEnumerable> SignTestData(); + static abstract IEnumerable> SignTestData(); } \ No newline at end of file diff --git a/src/MissingValues.Tests/Data/UInt256DataSources.cs b/src/MissingValues.Tests/Data/UInt256DataSources.cs index f7e71e2..7c44b7b 100644 --- a/src/MissingValues.Tests/Data/UInt256DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt256DataSources.cs @@ -1,4 +1,5 @@ using System.Globalization; +using System.Runtime.CompilerServices; using MissingValues.Tests.Data.Sources; namespace MissingValues.Tests.Data; @@ -276,7 +277,7 @@ public class UInt256DataSources yield return () => (UInt256.Zero, true); yield return () => (UInt256.One, false); yield return () => (new UInt256(0, 0, 0, 2), true); - yield return () => (new UInt256(0, 0, 0, 3), true); + yield return () => (new UInt256(0, 0, 0, 3), false); yield return () => (new UInt256(0, 0, 0, 0x8000_0000_0000_0000), true); yield return () => (new UInt256(0x8000_0000_0000_0000, 0, 0, 0), true); yield return () => (new UInt256(0x8000_0000_0000_0000, 0, 0, 1), false); @@ -333,7 +334,7 @@ public class UInt256DataSources yield return () => (UInt256.Zero, false); yield return () => (UInt256.One, true); yield return () => (new UInt256(0, 0, 0, 2), false); - yield return () => (new UInt256(0, 0, 0, 3), false); + yield return () => (new UInt256(0, 0, 0, 3), true); yield return () => (new UInt256(0, 0, 0, 0x8000_0000_0000_0000), false); yield return () => (new UInt256(0x8000_0000_0000_0000, 0, 0, 0), false); yield return () => (new UInt256(0x8000_0000_0000_0000, 0, 0, 1), true); @@ -392,7 +393,11 @@ public class UInt256DataSources public static IEnumerable> MultiplyAddEstimateTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.Zero, UInt256.Zero, UInt256.Zero, UInt256.Zero); + yield return () => (UInt256.Zero, UInt256.Zero, UInt256.One, UInt256.One); + yield return () => (UInt256.One, UInt256.One, UInt256.One, new UInt256(0, 0, 0, 2)); + yield return () => (new UInt256(0, 0, 0, ulong.MaxValue), new UInt256(0, 0, 0, ulong.MaxValue), UInt256.One, new UInt256(0, 0, ulong.MaxValue - 1, 2)); + yield return () => (new UInt256(0, 0, 0, ulong.MaxValue), new UInt256(0, 0, 0, ulong.MaxValue), new UInt256(0, 0, 0, ulong.MaxValue - 1), new UInt256(0, 0, ulong.MaxValue - 1, ulong.MaxValue)); } public static IEnumerable> ParseTestData() @@ -400,10 +405,46 @@ public class UInt256DataSources yield return () => ("0", NumberStyles.Integer, CultureInfo.InvariantCulture, UInt256.Zero); yield return () => ("1", NumberStyles.Integer, CultureInfo.InvariantCulture, UInt256.One); yield return () => ("4294967296", NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 4294967296)); - yield return () => ("18446744073709551616", NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(0, 0, 1, ulong.MaxValue)); - yield return () => ("340282366920938463463374607431768211456", NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(0, 1, ulong.MaxValue, ulong.MaxValue)); - yield return () => ("6277101735386680763835789423207666416102355444464034512896", NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(1, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); + yield return () => ("18446744073709551616", NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(0, 0, 1, 0)); + yield return () => ("340282366920938463463374607431768211456", NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(0, 1, 0, 0)); + yield return () => ("6277101735386680763835789423207666416102355444464034512896", NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(1, 0, 0, 0)); yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639935", NumberStyles.Integer, CultureInfo.InvariantCulture, UInt256.MaxValue); + + yield return () => ("123456789ABCDEF0", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0x123456789ABCDEF0)); + yield return () => ("FF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0xFF)); + yield return () => ("FFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0xFFFF)); + yield return () => ("FFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0xFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt256(0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt256(0xFFFFFFFFFFFFFFFF, 0x0000000000000000, 0x0000000000000000, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt256(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + + yield return () => ("1010101010101010", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0b1010101010101010)); + yield return () => ("11111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0b11111111)); + yield return () => ("1111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0b1111111111111111)); + yield return () => ("11111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0b11111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt256(0b1111111111111111111111111111111111111111111111111111111111111111, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt256(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); } public static IEnumerable> ParseSpanTestData() @@ -411,10 +452,45 @@ public class UInt256DataSources yield return () => ("0".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, UInt256.Zero); yield return () => ("1".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, UInt256.One); yield return () => ("4294967296".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 4294967296)); - yield return () => ("18446744073709551616".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(0, 0, 1, ulong.MaxValue)); - yield return () => ("340282366920938463463374607431768211456".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(0, 1, ulong.MaxValue, ulong.MaxValue)); - yield return () => ("6277101735386680763835789423207666416102355444464034512896".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(1, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); + yield return () => ("18446744073709551616".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(0, 0, 1, 0)); + yield return () => ("340282366920938463463374607431768211456".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(0, 1, 0, 0)); + yield return () => ("6277101735386680763835789423207666416102355444464034512896".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(1, 0, 0, 0)); yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639935".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, UInt256.MaxValue); + + yield return () => ("123456789ABCDEF0".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0x123456789ABCDEF0)); + yield return () => ("FF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0xFF)); + yield return () => ("FFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0xFFFF)); + yield return () => ("FFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0xFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt256(0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt256(0xFFFFFFFFFFFFFFFF, 0x0000000000000000, 0x0000000000000000, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".ToCharArray(), NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt256(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + + yield return () => ("1010101010101010".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0b1010101010101010)); + yield return () => ("11111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0b11111111)); + yield return () => ("1111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0b1111111111111111)); + yield return () => ("11111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0b11111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt256(0b1111111111111111111111111111111111111111111111111111111111111111, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt256(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); } public static IEnumerable> ParseUtf8TestData() @@ -422,10 +498,46 @@ public class UInt256DataSources yield return () => ("0"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, UInt256.Zero); yield return () => ("1"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, UInt256.One); yield return () => ("4294967296"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 4294967296)); - yield return () => ("18446744073709551616"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(0, 0, 1, ulong.MaxValue)); - yield return () => ("340282366920938463463374607431768211456"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(0, 1, ulong.MaxValue, ulong.MaxValue)); - yield return () => ("6277101735386680763835789423207666416102355444464034512896"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(1, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); + yield return () => ("18446744073709551616"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(0, 0, 1, 0)); + yield return () => ("340282366920938463463374607431768211456"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(0, 1, 0, 0)); + yield return () => ("6277101735386680763835789423207666416102355444464034512896"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt256(1, 0, 0, 0)); yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639935"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, UInt256.MaxValue); + + yield return () => ("123456789ABCDEF0"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0x123456789ABCDEF0)); + yield return () => ("FF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0xFF)); + yield return () => ("FFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0xFFFF)); + yield return () => ("FFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0xFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt256(0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt256(0xFFFFFFFFFFFFFFFF, 0x0000000000000000, 0x0000000000000000, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt256(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + + yield return () => ("1010101010101010"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0b1010101010101010)); + yield return () => ("11111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0b11111111)); + yield return () => ("1111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0b1111111111111111)); + yield return () => ("11111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0b11111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt256(0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt256(0b1111111111111111111111111111111111111111111111111111111111111111, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt256(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); } public static IEnumerable> TryParseTestData() @@ -433,9 +545,9 @@ public class UInt256DataSources yield return () => ("0", NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt256.Zero); yield return () => ("1", NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt256.One); yield return () => ("4294967296", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(0, 0, 0, 4294967296)); - yield return () => ("18446744073709551616", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(0, 0, 1, ulong.MaxValue)); - yield return () => ("340282366920938463463374607431768211456", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(0, 1, ulong.MaxValue, ulong.MaxValue)); - yield return () => ("6277101735386680763835789423207666416102355444464034512896", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(1, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); + yield return () => ("18446744073709551616", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(0, 0, 1, 0)); + yield return () => ("340282366920938463463374607431768211456", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(0, 1, 0, 0)); + yield return () => ("6277101735386680763835789423207666416102355444464034512896", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(1, 0, 0, 0)); yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639935", NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt256.MaxValue); yield return () => ("-1", NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); yield return () => ("2.25", NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); @@ -448,9 +560,9 @@ public class UInt256DataSources yield return () => ("0".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt256.Zero); yield return () => ("1".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt256.One); yield return () => ("4294967296".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(0, 0, 0, 4294967296)); - yield return () => ("18446744073709551616".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(0, 0, 1, ulong.MaxValue)); - yield return () => ("340282366920938463463374607431768211456".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(0, 1, ulong.MaxValue, ulong.MaxValue)); - yield return () => ("6277101735386680763835789423207666416102355444464034512896".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(1, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); + yield return () => ("18446744073709551616".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(0, 0, 1, 0)); + yield return () => ("340282366920938463463374607431768211456".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(0, 1, 0, 0)); + yield return () => ("6277101735386680763835789423207666416102355444464034512896".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(1, 0, 0, 0)); yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639935".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt256.MaxValue); yield return () => ("-1".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); yield return () => ("2.25".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); @@ -463,9 +575,9 @@ public class UInt256DataSources yield return () => ("0"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt256.Zero); yield return () => ("1"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt256.One); yield return () => ("4294967296"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(0, 0, 0, 4294967296)); - yield return () => ("18446744073709551616"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(0, 0, 1, ulong.MaxValue)); - yield return () => ("340282366920938463463374607431768211456"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(0, 1, ulong.MaxValue, ulong.MaxValue)); - yield return () => ("6277101735386680763835789423207666416102355444464034512896"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(1, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); + yield return () => ("18446744073709551616"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(0, 0, 1, 0)); + yield return () => ("340282366920938463463374607431768211456"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(0, 1, 0, 0)); + yield return () => ("6277101735386680763835789423207666416102355444464034512896"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt256(1, 0, 0, 0)); yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639935"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt256.MaxValue); yield return () => ("-1"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); yield return () => ("2.25"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); @@ -475,17 +587,28 @@ public class UInt256DataSources public static IEnumerable> ClampTestData() { - throw new NotImplementedException(); + yield return () => (new UInt256(0, 0, 0, 15), new UInt256(0, 0, 0, 10), new UInt256(0, 0, 0, 20), new UInt256(0, 0, 0, 15)); + yield return () => (new UInt256(0, 0, 0, 10), new UInt256(0, 0, 0, 10), new UInt256(0, 0, 0, 20), new UInt256(0, 0, 0, 10)); + yield return () => (new UInt256(0, 0, 0, 20), new UInt256(0, 0, 0, 10), new UInt256(0, 0, 0, 20), new UInt256(0, 0, 0, 20)); + yield return () => (new UInt256(0, 0, 0, 5), new UInt256(0, 0, 0, 10), new UInt256(0, 0, 0, 20), new UInt256(0, 0, 0, 10)); + yield return () => (new UInt256(0, 0, 0, 25), new UInt256(0, 0, 0, 10), new UInt256(0, 0, 0, 20), new UInt256(0, 0, 0, 20)); + yield return () => (new UInt256(0, 0, 0, 25), new UInt256(0, 0, 0, 30), new UInt256(0, 0, 0, 20), default); } public static IEnumerable> CopySignTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.MaxValue, UInt256.MaxValue, UInt256.MaxValue); } public static IEnumerable> MaxTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, UInt256.One, UInt256.One); + yield return () => (UInt256.MinValue, UInt256.MaxValue, UInt256.MaxValue); + yield return () => (new UInt256(0, 0, 0, ulong.MaxValue), UInt256.MaxValue, UInt256.MaxValue); + yield return () => (new UInt256(0, 0, ulong.MaxValue, ulong.MaxValue), new UInt256(0, 0, 0, ulong.MaxValue), new UInt256(0, 0, ulong.MaxValue, ulong.MaxValue)); + yield return () => (new UInt256(0, 1, ulong.MaxValue, ulong.MaxValue), new UInt256(0, 0, ulong.MaxValue, ulong.MaxValue), new UInt256(0, 1, ulong.MaxValue, ulong.MaxValue)); + yield return () => (new UInt256(0, ulong.MaxValue, ulong.MaxValue, 0), new UInt256(0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new UInt256(0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); + yield return () => (new UInt256(1, 0, 0, 0), new UInt256(0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new UInt256(1, 0, 0, 0)); } public static IEnumerable> MaxNumberTestData() @@ -495,7 +618,11 @@ public class UInt256DataSources public static IEnumerable> MinTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, UInt256.One, UInt256.One); + yield return () => (UInt256.MinValue, UInt256.MaxValue, UInt256.MinValue); + yield return () => (new UInt256(0, 0, 0, ulong.MaxValue), new UInt256(0, 0, 0, ulong.MaxValue - 1), new UInt256(0, 0, 0, ulong.MaxValue - 1)); + yield return () => (new UInt256(0, 0, 0, ulong.MaxValue), new UInt256(0, 0, ulong.MaxValue, ulong.MaxValue), new UInt256(0, 0, 0, ulong.MaxValue)); + yield return () => (new UInt256(1, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new UInt256(2, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new UInt256(1, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); } public static IEnumerable> MinNumberTestData() @@ -503,79 +630,215 @@ public class UInt256DataSources return MinTestData(); } - public static IEnumerable> SignTestData() + public static IEnumerable> SignTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.MaxValue, 1); + yield return () => (UInt256.Zero, 0); } public static IEnumerable> IsPow2TestData() { - throw new NotImplementedException(); + yield return () => (new UInt256(0, 0, 0, 1), true); + yield return () => (new UInt256(0, 0, 0, 2), true); + yield return () => (new UInt256(0, 0, 0, 4), true); + yield return () => (new UInt256(0, 0, 0, 8), true); + yield return () => (new UInt256(0, 0, 0, 16), true); + yield return () => (new UInt256(0, 0, 0, 1UL << 63), true); + yield return () => (new UInt256(1UL << 63, 0, 0, 0), true); + yield return () => (UInt256.Zero, false); + yield return () => (new UInt256(0, 0, 0, 3), false); + yield return () => (UInt256.MaxValue, false); } public static IEnumerable> Log2TestData() { - throw new NotImplementedException(); + yield return () => (new UInt256(0, 0, 0, 1), new UInt256(0, 0, 0, 0)); + yield return () => (new UInt256(0, 0, 0, 2), new UInt256(0, 0, 0, 1)); + yield return () => (new UInt256(0, 0, 0, 4), new UInt256(0, 0, 0, 2)); + yield return () => (new UInt256(0, 0, 0, 8), new UInt256(0, 0, 0, 3)); + yield return () => (new UInt256(0, 0, 0, 1UL << 63), new UInt256(0, 0, 0, 63)); + yield return () => (new UInt256(0, 0, 1UL << 5, 0), new UInt256(0, 0, 0, 69)); + yield return () => (new UInt256(0, 1UL << 42, 0, 0), new UInt256(0, 0, 0, 170)); + yield return () => (new UInt256(1UL << 13, 0, 0, 0), new UInt256(0, 0, 0, 205)); + yield return () => (new UInt256(1UL << 63, 0, 0, 0), new UInt256(0, 0, 0, 255)); + yield return () => (new UInt256(0, 0, 0, 0), new UInt256(0, 0, 0, 0)); } public static IEnumerable> DivRemTestData() { - throw new NotImplementedException(); + yield return () => (new UInt256(1, 2, 3, 4), UInt256.One, (new UInt256(1, 2, 3, 4), new UInt256(0, 0, 0, 0))); + yield return () => (new UInt256(1, 2, 3, 4), new UInt256(1, 2, 3, 4), (new UInt256(0, 0, 0, 1), new UInt256(0, 0, 0, 0))); + yield return () => (new UInt256(0, 0, 0, 5), new UInt256(0, 0, 0, 10), (new UInt256(0, 0, 0, 0), new UInt256(0, 0, 0, 5))); + yield return () => (new UInt256(0, 0, 0, 100), new UInt256(0, 0, 0, 30), (new UInt256(0, 0, 0, 3), new UInt256(0, 0, 0, 10))); + yield return () => (new UInt256(0, 1, 0, 0), new UInt256(0, 0, 1, 0), (new UInt256(0, 0, 1, 0), new UInt256(0, 0, 0, 0))); } public static IEnumerable> LeadingZeroCountTestData() { - throw new NotImplementedException(); + yield return () => (new UInt256(0, 0, 0, 0), new UInt256(0, 0, 0, 256)); + yield return () => (new UInt256(0, 0, 0, 1), new UInt256(0, 0, 0, 255)); + yield return () => (new UInt256(0, 0, 1, 0), new UInt256(0, 0, 0, 191)); + yield return () => (new UInt256(0, 1, 0, 0), new UInt256(0, 0, 0, 127)); + yield return () => (new UInt256(1, 0, 0, 0), new UInt256(0, 0, 0, 63)); + yield return () => (new UInt256(1, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new UInt256(0, 0, 0, 63)); + yield return () => (new UInt256(0, 0, 0, 1UL << 63), new UInt256(0, 0, 0, 192)); + yield return () => (new UInt256(0, 0, 1UL << 63, 0), new UInt256(0, 0, 0, 128)); + yield return () => (new UInt256(0, 1UL << 63, 0, 0), new UInt256(0, 0, 0, 64)); + yield return () => (new UInt256(1UL << 63, 0, 0, 0), new UInt256(0, 0, 0, 0)); + yield return () => (new UInt256(1UL << 62, 0, 0, 0), new UInt256(0, 0, 0, 1)); } public static IEnumerable> PopCountTestData() { - throw new NotImplementedException(); + yield return () => (new UInt256(0, 0, 0, 0), new UInt256(0, 0, 0, 0)); + yield return () => (new UInt256(0, 0, 0, 1), new UInt256(0, 0, 0, 1)); + yield return () => (UInt256.MaxValue, new UInt256(0, 0, 0, 256)); + yield return () => (new UInt256(ulong.MaxValue, 0, 0, 0), new UInt256(0, 0, 0, 64)); + yield return () => (new UInt256(0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA), new UInt256(0, 0, 0, 128)); + yield return () => (new UInt256(1UL << 63, 1UL << 62, 1UL << 61, 1UL << 60), new UInt256(0, 0, 0, 4)); } public static IEnumerable> ReadBigEndianTestData() { - throw new NotImplementedException(); + yield return () => ([], true, UInt256.Zero); + yield return () => ([0x01], true, UInt256.One); + yield return () => + { + byte[] array = new byte[32]; + Array.Fill(array, byte.MaxValue); + return (array, true, UInt256.MaxValue); + }; + yield return () => + { + byte[] array = new byte[35]; + for (int i = 3; i < 35; i++) + array[i] = byte.MaxValue; + return (array, true, UInt256.MaxValue); + }; + yield return () => ([0x12, 0x34], true, new UInt256(0, 0, 0, 0x1234)); + yield return () => + { + byte[] array = new byte[32]; + array[0] = 0x80; + return (array, true, new UInt256(1UL << 63, 0, 0, 0)); + }; } public static IEnumerable> ReadLittleEndianTestData() { - throw new NotImplementedException(); + yield return () => ([], true, UInt256.Zero); + yield return () => ([0x01], true, UInt256.One); + yield return () => + { + byte[] array = new byte[32]; + Array.Fill(array, byte.MaxValue); + return (array, true, UInt256.MaxValue); + }; + yield return () => + { + byte[] array = new byte[35]; + for (int i = 0; i < 32; i++) + array[i] = byte.MaxValue; + return (array, true, UInt256.MaxValue); + }; + yield return () => ([0x34, 0x12], true, new UInt256(0, 0, 0, 0x1234)); + yield return () => + { + byte[] array = new byte[32]; + array[31] = 0x80; + return (array, true, new UInt256(1UL << 63, 0, 0, 0)); + }; } public static IEnumerable> RotateLeftTestData() { - throw new NotImplementedException(); + yield return () => (new UInt256(1, 2, 3, 4), 0, new UInt256(1, 2, 3, 4)); + yield return () => (new UInt256(1, 2, 3, 4), 256, new UInt256(1, 2, 3, 4)); + yield return () => (new UInt256(0, 0, 0x8000_0000_0000_0000, 0), 64, new UInt256(0, 0x8000_0000_0000_0000, 0, 0)); + yield return () => (new UInt256(0x8000_0000_0000_0000, 0, 0, 0), 64, new UInt256(0, 0, 0, 0x8000_0000_0000_0000)); + yield return () => (new UInt256(0, 0, 0x8000_0000_0000_0000, 0), 128, new UInt256(0x8000_0000_0000_0000, 0, 0, 0)); + yield return () => (new UInt256(0x8000_0000_0000_0000, 0, 0, 0), 128, new UInt256(0, 0, 0x8000_0000_0000_0000, 0)); } public static IEnumerable> RotateRightTestData() { - throw new NotImplementedException(); + yield return () => (new UInt256(1, 2, 3, 4), 0, new UInt256(1, 2, 3, 4)); + yield return () => (new UInt256(1, 2, 3, 4), 256, new UInt256(1, 2, 3, 4)); + yield return () => (new UInt256(0, 0, 0x8000_0000_0000_0000, 0), 64, new UInt256(0, 0, 0, 0x8000_0000_0000_0000)); + yield return () => (new UInt256(0, 0, 0, 0x8000_0000_0000_0000), 64, new UInt256(0x8000_0000_0000_0000, 0, 0, 0)); + yield return () => (new UInt256(0, 0, 0x8000_0000_0000_0000, 0), 128, new UInt256(0x8000_0000_0000_0000, 0, 0, 0)); + yield return () => (new UInt256(0x8000_0000_0000_0000, 0, 0, 0), 128, new UInt256(0, 0, 0x8000_0000_0000_0000, 0)); } public static IEnumerable> TrailingZeroCountTestData() { - throw new NotImplementedException(); + yield return () => (new UInt256(0, 0, 0, 0), new UInt256(0, 0, 0, 256)); + yield return () => (new UInt256(0, 0, 0, 1), new UInt256(0, 0, 0, 0)); + yield return () => (new UInt256(0, 0, 8, 0), new UInt256(0, 0, 0, 67)); + yield return () => (new UInt256(0, 0x10, 0, 0), new UInt256(0, 0, 0, 132)); + yield return () => (new UInt256(0x200, 0, 0, 0), new UInt256(0, 0, 0, 201)); } public static IEnumerable> GetByteCountTestData() { - throw new NotImplementedException(); + yield return () => (new UInt256(0, 0, 0, 0), Unsafe.SizeOf()); } public static IEnumerable> GetShortestBitLengthTestData() { - throw new NotImplementedException(); + yield return () => (new UInt256(0, 0, 0, 0), 0); + yield return () => (new UInt256(0, 0, 0, 1), 1); + yield return () => (new UInt256(1, 0, 0, 0), 193); + yield return () => (UInt256.MaxValue, 256); } public static IEnumerable> WriteBigEndianTestData() { - throw new NotImplementedException(); + yield return () => (new UInt256(0, 0, 0, 0), new byte[32], Unsafe.SizeOf()); + yield return () => + { + var buffer = new byte[32]; + + for (int i = 0; i < 31; i++) + buffer[i] = 0; + + buffer[31] = 1; + + return (new UInt256(0, 0, 0, 1), buffer, Unsafe.SizeOf()); + }; + yield return () => + { + var buffer = new byte[32]; + + for (int i = 0; i < 32; i++) + buffer[i] = 0xFF; + + return (UInt256.MaxValue, buffer, Unsafe.SizeOf()); + }; } public static IEnumerable> WriteLittleEndianTestData() { - throw new NotImplementedException(); + yield return () => (new UInt256(0, 0, 0, 0), new byte[32], Unsafe.SizeOf()); + yield return () => + { + var buffer = new byte[32]; + + buffer[0] = 1; + for (int i = 1; i < 32; i++) + buffer[i] = 0; + + return (new UInt256(0, 0, 0, 1), buffer, Unsafe.SizeOf()); + }; + yield return () => + { + var buffer = new byte[32]; + + for (int i = 0; i < 32; i++) + buffer[i] = 0xFF; + + return (UInt256.MaxValue, buffer, Unsafe.SizeOf()); + }; } public static IEnumerable> ConvertToCheckedByteTestData() diff --git a/src/MissingValues.Tests/Data/UInt512DataSources.cs b/src/MissingValues.Tests/Data/UInt512DataSources.cs index b82bbab..72c2c46 100644 --- a/src/MissingValues.Tests/Data/UInt512DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt512DataSources.cs @@ -319,7 +319,7 @@ public class UInt512DataSources throw new NotImplementedException(); } - public static IEnumerable> SignTestData() + public static IEnumerable> SignTestData() { throw new NotImplementedException(); } diff --git a/src/MissingValues.Tests/Helper.cs b/src/MissingValues.Tests/Helper.cs new file mode 100644 index 0000000..ec16f9d --- /dev/null +++ b/src/MissingValues.Tests/Helper.cs @@ -0,0 +1,258 @@ +using System.Globalization; +using System.Numerics; + +namespace MissingValues.Tests; + +public static class Helper +{ + public static TSelf Abs(TSelf value) + where TSelf : INumberBase + { + return TSelf.Abs(value); + } + public static bool IsCanonical(TSelf value) + where TSelf : INumberBase + { + return TSelf.IsCanonical(value); + } + public static bool IsComplexNumber(TSelf value) + where TSelf : INumberBase + { + return TSelf.IsComplexNumber(value); + } + public static bool IsEvenInteger(TSelf value) + where TSelf : INumberBase + { + return TSelf.IsEvenInteger(value); + } + public static bool IsFinite(TSelf value) + where TSelf : INumberBase + { + return TSelf.IsFinite(value); + } + public static bool IsImaginaryNumber(TSelf value) + where TSelf : INumberBase + { + return TSelf.IsImaginaryNumber(value); + } + public static bool IsInfinity(TSelf value) + where TSelf : INumberBase + { + return TSelf.IsInfinity(value); + } + public static bool IsInteger(TSelf value) + where TSelf : INumberBase + { + return TSelf.IsInteger(value); + } + public static bool IsNaN(TSelf value) + where TSelf : INumberBase + { + return TSelf.IsNaN(value); + } + public static bool IsNegative(TSelf value) + where TSelf : INumberBase + { + return TSelf.IsNegative(value); + } + public static bool IsNegativeInfinity(TSelf value) + where TSelf : INumberBase + { + return TSelf.IsNegativeInfinity(value); + } + public static bool IsNormal(TSelf value) + where TSelf : INumberBase + { + return TSelf.IsNormal(value); + } + public static bool IsOddInteger(TSelf value) + where TSelf : INumberBase + { + return TSelf.IsOddInteger(value); + } + public static bool IsPositive(TSelf value) + where TSelf : INumberBase + { + return TSelf.IsPositive(value); + } + public static bool IsPositiveInfinity(TSelf value) + where TSelf : INumberBase + { + return TSelf.IsPositiveInfinity(value); + } + public static bool IsRealNumber(TSelf value) + where TSelf : INumberBase + { + return TSelf.IsRealNumber(value); + } + public static bool IsSubnormal(TSelf value) + where TSelf : INumberBase + { + return TSelf.IsSubnormal(value); + } + public static bool IsZero(TSelf value) + where TSelf : INumberBase + { + return TSelf.IsZero(value); + } + public static TSelf MaxMagnitude(TSelf x, TSelf y) + where TSelf : INumberBase + { + return TSelf.MaxMagnitude(x, y); + } + public static TSelf MaxMagnitudeNumber(TSelf x, TSelf y) + where TSelf : INumberBase + { + return TSelf.MaxMagnitudeNumber(x, y); + } + public static TSelf MinMagnitude(TSelf x, TSelf y) + where TSelf : INumberBase + { + return TSelf.MinMagnitude(x, y); + } + public static TSelf MinMagnitudeNumber(TSelf x, TSelf y) + where TSelf : INumberBase + { + return TSelf.MinMagnitudeNumber(x, y); + } + public static TSelf MultiplyAddEstimate(TSelf left, TSelf right, TSelf addend) + where TSelf : INumberBase + { + return TSelf.MultiplyAddEstimate(left, right, addend); + } + public static TSelf Parse(string s, NumberStyles style, IFormatProvider? provider) + where TSelf : INumberBase + { + return TSelf.Parse(s, style, provider); + } + public static TSelf Parse(ReadOnlySpan s, NumberStyles style, IFormatProvider? provider) + where TSelf : INumberBase + { + return TSelf.Parse(s, style, provider); + } + public static TSelf Parse(ReadOnlySpan utf8Text, NumberStyles style, IFormatProvider? provider) + where TSelf : INumberBase + { + return TSelf.Parse(utf8Text, style, provider); + } + public static bool TryParse(string s, NumberStyles style, IFormatProvider? provider, out TSelf result) + where TSelf : INumberBase + { + return TSelf.TryParse(s, style, provider, out result); + } + public static bool TryParse(ReadOnlySpan s, NumberStyles style, IFormatProvider? provider, out TSelf result) + where TSelf : INumberBase + { + return TSelf.TryParse(s, style, provider, out result); + } + public static bool TryParse(ReadOnlySpan utf8Text, NumberStyles style, IFormatProvider? provider, out TSelf result) + where TSelf : INumberBase + { + return TSelf.TryParse(utf8Text, style, provider, out result); + } + public static TSelf Clamp(TSelf value, TSelf min, TSelf max) + where TSelf : INumber + { + return TSelf.Clamp(value, min, max); + } + public static TSelf CopySign(TSelf value, TSelf sign) + where TSelf : INumber + { + return TSelf.CopySign(value, sign); + } + public static TSelf Max(TSelf x, TSelf y) + where TSelf : INumber + { + return TSelf.Max(x, y); + } + public static TSelf MaxNumber(TSelf x, TSelf y) + where TSelf : INumber + { + return TSelf.MaxNumber(x, y); + } + public static TSelf Min(TSelf x, TSelf y) + where TSelf : INumber + { + return TSelf.Min(x, y); + } + public static TSelf MinNumber(TSelf x, TSelf y) + where TSelf : INumber + { + return TSelf.MinNumber(x, y); + } + public static int Sign(TSelf value) + where TSelf : INumber + { + return TSelf.Sign(value); + } + public static bool IsPow2(TSelf value) + where TSelf : IBinaryNumber + { + return TSelf.IsPow2(value); + } + public static TSelf Log2(TSelf value) + where TSelf : IBinaryNumber + { + return TSelf.Log2(value); + } + public static (TSelf Quotient, TSelf Remainder) DivRem(TSelf left, TSelf right) + where TSelf : IBinaryInteger + { + return TSelf.DivRem(left, right); + } + public static TSelf LeadingZeroCount(TSelf value) + where TSelf : IBinaryInteger + { + return TSelf.LeadingZeroCount(value); + } + public static TSelf PopCount(TSelf value) + where TSelf : IBinaryInteger + { + return TSelf.PopCount(value); + } + public static TSelf ReadBigEndian(ReadOnlySpan source, bool isUnsigned) + where TSelf : IBinaryInteger + { + return TSelf.ReadBigEndian(source, isUnsigned); + } + public static TSelf ReadLittleEndian(ReadOnlySpan source, bool isUnsigned) + where TSelf : IBinaryInteger + { + return TSelf.ReadLittleEndian(source, isUnsigned); + } + public static TSelf RotateLeft(TSelf value, int rotateAmount) + where TSelf : IBinaryInteger + { + return TSelf.RotateLeft(value, rotateAmount); + } + public static TSelf RotateRight(TSelf value, int rotateAmount) + where TSelf : IBinaryInteger + { + return TSelf.RotateLeft(value, rotateAmount); + } + public static TSelf TrailingZeroCount(TSelf value) + where TSelf : IBinaryInteger + { + return TSelf.TrailingZeroCount(value); + } + public static int GetByteCount(TSelf value) + where TSelf : IBinaryInteger + { + return value.GetByteCount(); + } + public static int GetShortestBitLength(TSelf value) + where TSelf : IBinaryInteger + { + return value.GetShortestBitLength(); + } + public static int WriteBigEndian(TSelf value, Span destination) + where TSelf : IBinaryInteger + { + return value.WriteBigEndian(destination); + } + public static int WriteLittleEndian(TSelf value, Span destination) + where TSelf : IBinaryInteger + { + return value.WriteLittleEndian(destination); + } +} \ No newline at end of file diff --git a/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs b/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs index 4d7e087..bcb54fb 100644 --- a/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs @@ -1,6 +1,7 @@ using MissingValues.Tests.Data; using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -256,4 +257,398 @@ public async Task op_GreaterThanOrEqualTest(UInt256 left, UInt256 right, bool ex await Assert.That(result).IsEqualTo(expected); } #endregion + + #region INumberBase + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.AbsTestData))] + public async Task AbsTest(UInt256 value, UInt256 expected) + { + UInt256 result = Helper.Abs(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsCanonicalTestData))] + public async Task IsCanonicalTest(UInt256 value, bool expected) + { + bool result = Helper.IsCanonical(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsComplexNumberTestData))] + public async Task IsComplexNumberTest(UInt256 value, bool expected) + { + bool result = Helper.IsComplexNumber(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsEvenIntegerTestData))] + public async Task IsEvenIntegerTest(UInt256 value, bool expected) + { + bool result = Helper.IsEvenInteger(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsFiniteTestData))] + public async Task IsFiniteTest(UInt256 value, bool expected) + { + bool result = Helper.IsFinite(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsImaginaryNumberTestData))] + public async Task IsImaginaryNumberTest(UInt256 value, bool expected) + { + bool result = Helper.IsImaginaryNumber(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsInfinityTestData))] + public async Task IsInfinityTest(UInt256 value, bool expected) + { + bool result = Helper.IsInfinity(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsIntegerTestData))] + public async Task IsIntegerTest(UInt256 value, bool expected) + { + bool result = Helper.IsInteger(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsNaNTestData))] + public async Task IsNaNTest(UInt256 value, bool expected) + { + bool result = Helper.IsNaN(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsNegativeTestData))] + public async Task IsNegativeTest(UInt256 value, bool expected) + { + bool result = Helper.IsNegative(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsNegativeInfinityTestData))] + public async Task IsNegativeInfinityTest(UInt256 value, bool expected) + { + bool result = Helper.IsNegativeInfinity(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsNormalTestData))] + public async Task IsNormalTest(UInt256 value, bool expected) + { + bool result = Helper.IsNormal(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsOddIntegerTestData))] + public async Task IsOddIntegerTest(UInt256 value, bool expected) + { + bool result = Helper.IsOddInteger(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsPositiveTestData))] + public async Task IsPositiveTest(UInt256 value, bool expected) + { + bool result = Helper.IsPositive(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsPositiveInfinityTestData))] + public async Task IsPositiveInfinityTest(UInt256 value, bool expected) + { + bool result = Helper.IsPositiveInfinity(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsRealNumberTestData))] + public async Task IsRealNumberTest(UInt256 value, bool expected) + { + bool result = Helper.IsRealNumber(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsSubnormalTestData))] + public async Task IsSubnormalTest(UInt256 value, bool expected) + { + bool result = Helper.IsSubnormal(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsZeroTestData))] + public async Task IsZeroTest(UInt256 value, bool expected) + { + bool result = Helper.IsZero(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.MaxMagnitudeTestData))] + public async Task MaxMagnitudeTest(UInt256 x, UInt256 y, UInt256 expected) + { + var result = Helper.MaxMagnitude(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.MaxMagnitudeNumberTestData))] + public async Task MaxMagnitudeNumberTest(UInt256 x, UInt256 y, UInt256 expected) + { + var result = Helper.MaxMagnitudeNumber(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.MinMagnitudeTestData))] + public async Task MinMagnitudeTest(UInt256 x, UInt256 y, UInt256 expected) + { + var result = Helper.MinMagnitude(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.MinMagnitudeNumberTestData))] + public async Task MinMagnitudeNumberTest(UInt256 x, UInt256 y, UInt256 expected) + { + var result = Helper.MinMagnitudeNumber(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.MultiplyAddEstimateTestData))] + public async Task MultiplyAddEstimateTest(UInt256 left, UInt256 right, UInt256 addend, UInt256 expected) + { + var result = Helper.MultiplyAddEstimate(left, right, addend); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.ParseTestData))] + public async Task ParseTest(string s, NumberStyles style, IFormatProvider? provider, UInt256 expected) + { + var result = Helper.Parse(s, style, provider); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.ParseSpanTestData))] + public async Task ParseTest(char[] s, NumberStyles style, IFormatProvider? provider, UInt256 expected) + { + var result = Helper.Parse(s, style, provider); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.ParseUtf8TestData))] + public async Task ParseTest(byte[] utf8Text, NumberStyles style, IFormatProvider? provider, UInt256 expected) + { + var result = Helper.Parse(utf8Text, style, provider); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.TryParseTestData))] + public async Task TryParseTest(string s, NumberStyles style, IFormatProvider? provider, bool expected, UInt256 expectedValue) + { + var success = Helper.TryParse(s, style, provider, out var result); + using (Assert.Multiple()) + { + await Assert.That(success).IsEqualTo(expected); + await Assert.That(result).IsEqualTo(expectedValue); + } + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.TryParseSpanTestData))] + public async Task TryParseTest(char[] s, NumberStyles style, IFormatProvider? provider, bool expected, UInt256 expectedValue) + { + var success = Helper.TryParse(s, style, provider, out var result); + using (Assert.Multiple()) + { + await Assert.That(success).IsEqualTo(expected); + await Assert.That(result).IsEqualTo(expectedValue); + } + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.TryParseUtf8TestData))] + public async Task TryParseTest(byte[] utf8Text, NumberStyles style, IFormatProvider? provider, bool expected, UInt256 expectedValue) + { + var success = Helper.TryParse(utf8Text, style, provider, out var result); + using (Assert.Multiple()) + { + await Assert.That(success).IsEqualTo(expected); + await Assert.That(result).IsEqualTo(expectedValue); + } + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.ClampTestData))] + public async Task ClampTest(UInt256 value, UInt256 min, UInt256 max, UInt256 expected) + { + if (min > max) + { + await Assert.That(() => Helper.Clamp(value, min, max)).Throws(); + } + else + { + var result = Helper.Clamp(value, min, max); + await Assert.That(result).IsEqualTo(expected); + } + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.CopySignTestData))] + public async Task CopySignTest(UInt256 value, UInt256 sign, UInt256 expected) + { + var result = Helper.CopySign(value, sign); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.MaxTestData))] + public async Task MaxTest(UInt256 x, UInt256 y, UInt256 expected) + { + var result = Helper.Max(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.MaxNumberTestData))] + public async Task MaxNumberTest(UInt256 x, UInt256 y, UInt256 expected) + { + var result = Helper.MaxNumber(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.MinTestData))] + public async Task MinTest(UInt256 x, UInt256 y, UInt256 expected) + { + var result = Helper.Min(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.MinNumberTestData))] + public async Task MinNumberTest(UInt256 x, UInt256 y, UInt256 expected) + { + var result = Helper.MinNumber(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.SignTestData))] + public async Task SignTest(UInt256 value, int expected) + { + var result = Helper.Sign(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsPow2TestData))] + public async Task IsPow2Test(UInt256 value, bool expected) + { + var result = Helper.IsPow2(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.Log2TestData))] + public async Task Log2Test(UInt256 value, UInt256 expected) + { + var result = Helper.Log2(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.DivRemTestData))] + public async Task DivRemTest(UInt256 left, UInt256 right, (UInt256, UInt256) expected) + { + var result = Helper.DivRem(left, right); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.LeadingZeroCountTestData))] + public async Task LeadingZeroCountTest(UInt256 value, UInt256 expected) + { + var result = Helper.LeadingZeroCount(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.PopCountTestData))] + public async Task PopCountTest(UInt256 value, UInt256 expected) + { + var result = Helper.PopCount(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.ReadBigEndianTestData))] + public async Task ReadBigEndianTest(byte[] source, bool isUnsigned, UInt256 expected) + { + var result = Helper.ReadBigEndian(source, isUnsigned); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.ReadLittleEndianTestData))] + public async Task ReadLittleEndianTest(byte[] source, bool isUnsigned, UInt256 expected) + { + var result = Helper.ReadLittleEndian(source, isUnsigned); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.RotateLeftTestData))] + public async Task RotateLeftTest(UInt256 value, int shiftAmount, UInt256 expected) + { + var result = Helper.RotateLeft(value, shiftAmount); + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.RotateRightTestData))] + public async Task RotateRightTest(UInt256 value, int shiftAmount, UInt256 expected) + { + var result = Helper.RotateRight(value, shiftAmount); + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.TrailingZeroCountTestData))] + public async Task TrailingZeroCountTest(UInt256 value, UInt256 expected) + { + var result = Helper.TrailingZeroCount(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.GetByteCountTestData))] + public async Task GetByteCountTest(UInt256 value, int expected) + { + var result = Helper.GetByteCount(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.GetShortestBitLengthTestData))] + public async Task GetShortestBitLengthTest(UInt256 value, int expected) + { + var result = Helper.GetShortestBitLength(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.WriteBigEndianTestData))] + public async Task WriteBigEndianTest(UInt256 value, byte[] expectedDestination, int expected) + { + byte[] buffer = new byte[UInt256.Size]; + var result = Helper.WriteBigEndian(value, buffer); + + using (Assert.Multiple()) + { + await Assert.That(result).IsEqualTo(expected); + await Assert.That(buffer.Length).IsEqualTo(expectedDestination.Length); + for (int i = 0; i < buffer.Length; i++) + { + await Assert.That(buffer[i]).IsEqualTo(expectedDestination[i]); + } + } + } + [Test] + [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.WriteLittleEndianTestData))] + public async Task WriteLittleEndianTest(UInt256 value, byte[] expectedDestination, int expected) + { + byte[] buffer = new byte[UInt256.Size]; + var result = Helper.WriteLittleEndian(value, buffer); + + using (Assert.Multiple()) + { + await Assert.That(result).IsEqualTo(expected); + await Assert.That(buffer.Length).IsEqualTo(expectedDestination.Length); + for (int i = 0; i < buffer.Length; i++) + { + await Assert.That(buffer[i]).IsEqualTo(expectedDestination[i]); + } + } + } + #endregion } From e7e8b7e83edb6b71dffae1d0229ab061c13bede3 Mon Sep 17 00:00:00 2001 From: crookseta Date: Thu, 29 May 2025 11:10:27 -0500 Subject: [PATCH 06/74] - Fixed typo on method call. --- src/MissingValues.Tests/Helper.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MissingValues.Tests/Helper.cs b/src/MissingValues.Tests/Helper.cs index ec16f9d..d7315ae 100644 --- a/src/MissingValues.Tests/Helper.cs +++ b/src/MissingValues.Tests/Helper.cs @@ -228,7 +228,7 @@ public static TSelf RotateLeft(TSelf value, int rotateAmount) public static TSelf RotateRight(TSelf value, int rotateAmount) where TSelf : IBinaryInteger { - return TSelf.RotateLeft(value, rotateAmount); + return TSelf.RotateRight(value, rotateAmount); } public static TSelf TrailingZeroCount(TSelf value) where TSelf : IBinaryInteger From cc8ccd232e03c088bf946814cf5b27fe76e41143 Mon Sep 17 00:00:00 2001 From: crookseta Date: Fri, 30 May 2025 15:33:15 -0500 Subject: [PATCH 07/74] - Populated test classes. --- .../Numerics/Int256GenericMathTests.cs | 665 +++++++++++++++++- .../Numerics/Int512GenericMathTests.cs | 663 ++++++++++++++++- .../Numerics/OctoGenericMathTests.cs | 13 +- .../Numerics/QuadGenericMathTests.cs | 13 +- .../Numerics/UInt256GenericMathTests.cs | 163 +++-- .../Numerics/UInt512GenericMathTests.cs | 663 ++++++++++++++++- 6 files changed, 2080 insertions(+), 100 deletions(-) diff --git a/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs b/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs index c6db1c6..99aba6d 100644 --- a/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs @@ -1,12 +1,667 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; +using MissingValues.Tests.Data; +using TUnit.Assertions.AssertConditions.Throws; -namespace MissingValues.Tests.Numerics +using static MissingValues.Tests.Data.Int256DataSources; + +using DataSources = MissingValues.Tests.Data.Int256DataSources; + +namespace MissingValues.Tests.Numerics; + +public class Int256GenericMathTests { - class Int256GenericMathTests - { - } -} + #region Operators + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_AdditionTestData))] + public async Task op_AdditionTest(Int256 left, Int256 right, Int256 expected) + { + var result = left + right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_CheckedAdditionTestData))] + public async Task op_CheckedAdditionTest(Int256 left, Int256 right, Int256 expected, bool overflows) + { + if (overflows) + { + await Assert.That(() => checked(left + right)).Throws(); + } + else + { + var result = checked(left + right); + await Assert.That(result).IsEqualTo(expected); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_IncrementTestData))] + public async Task op_IncrementTest(Int256 value, Int256 expected) + { + var result = ++value; + + await Assert.That(result).IsEqualTo(expected).And.IsEqualTo(value); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_CheckedIncrementTestData))] + public async Task op_CheckedIncrementTest(Int256 value, Int256 expected, bool overflows) + { + if (overflows) + { + await Assert.That(() => checked(++value)).Throws(); + } + else + { + var result = checked(++value); + await Assert.That(result).IsEqualTo(expected).And.IsEqualTo(value); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_SubtractionTestData))] + public async Task op_SubtractionTest(Int256 left, Int256 right, Int256 expected) + { + var result = left - right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_CheckedSubtractionTestData))] + public async Task op_CheckedSubtractionTest(Int256 left, Int256 right, Int256 expected, bool overflows) + { + if (overflows) + { + await Assert.That(() => checked(left - right)).Throws(); + } + else + { + var result = checked(left - right); + await Assert.That(result).IsEqualTo(expected); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_DecrementTestData))] + public async Task op_DecrementTest(Int256 value, Int256 expected) + { + var result = --value; + + await Assert.That(result).IsEqualTo(expected).And.IsEqualTo(value); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_CheckedDecrementTestData))] + public async Task op_CheckedDecrementTest(Int256 value, Int256 expected, bool overflows) + { + if (overflows) + { + await Assert.That(() => checked(--value)).Throws(); + } + else + { + var result = checked(--value); + await Assert.That(result).IsEqualTo(expected).And.IsEqualTo(value); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_MultiplyTestData))] + public async Task op_MultiplyTest(Int256 left, Int256 right, Int256 expected) + { + var result = left * right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_CheckedMultiplyTestData))] + public async Task op_CheckedMultiplyTest(Int256 left, Int256 right, Int256 expected, bool overflows) + { + if (overflows) + { + await Assert.That(() => checked(left * right)).Throws(); + } + else + { + var result = checked(left * right); + await Assert.That(result).IsEqualTo(expected); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_DivisionTestData))] + public async Task op_DivisionTest(Int256 left, Int256 right, Int256 expected) + { + if (right == Int256.Zero) + { + await Assert.That(() => left / right).Throws(); + } + else + { + var result = left / right; + + await Assert.That(result).IsEqualTo(expected); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_ModulusTestData))] + public async Task op_ModulusTest(Int256 left, Int256 right, Int256 expected) + { + if (right == Int256.Zero) + { + await Assert.That(() => left % right).Throws(); + } + else + { + var result = left % right; + + await Assert.That(result).IsEqualTo(expected); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_OnesComplementTestData))] + public async Task op_OnesComplementTest(Int256 value, Int256 expected) + { + var result = ~value; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_BitwiseAndTestData))] + public async Task op_BitwiseAndTest(Int256 left, Int256 right, Int256 expected) + { + var result = left & right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_BitwiseOrTestData))] + public async Task op_BitwiseOrTest(Int256 left, Int256 right, Int256 expected) + { + var result = left | right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_BitwiseXorTestData))] + public async Task op_BitwiseXorTest(Int256 left, Int256 right, Int256 expected) + { + var result = left ^ right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_ShiftLeftTestData))] + public async Task op_ShiftLeftTest(Int256 value, int shiftAmount, Int256 expected) + { + var result = value << shiftAmount; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_ShiftRightTestData))] + public async Task op_ShiftRightTest(Int256 value, int shiftAmount, Int256 expected) + { + var result = value >> shiftAmount; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_UnsignedShiftRightTestData))] + public async Task op_UnsignedShiftRightTest(Int256 value, int shiftAmount, Int256 expected) + { + var result = value >>> shiftAmount; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_EqualityTestData))] + public async Task op_EqualityTest(Int256 left, Int256 right, bool expected) + { + var result = left == right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_InequalityTestData))] + public async Task op_InequalityTest(Int256 left, Int256 right, bool expected) + { + var result = left != right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_LessThanTestData))] + public async Task op_LessThanTest(Int256 left, Int256 right, bool expected) + { + var result = left < right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_LessThanOrEqualTestData))] + public async Task op_LessThanOrEqualTest(Int256 left, Int256 right, bool expected) + { + var result = left <= right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_GreaterThanTestData))] + public async Task op_GreaterThanTest(Int256 left, Int256 right, bool expected) + { + var result = left > right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_GreaterThanOrEqualTestData))] + public async Task op_GreaterThanOrEqualTest(Int256 left, Int256 right, bool expected) + { + var result = left >= right; + + await Assert.That(result).IsEqualTo(expected); + } + #endregion + + #region INumberBase + [Test] + [MethodDataSource(typeof(DataSources), nameof(AbsTestData))] + public async Task AbsTest(Int256 value, Int256 expected) + { + Int256 result = Helper.Abs(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsCanonicalTestData))] + public async Task IsCanonicalTest(Int256 value, bool expected) + { + bool result = Helper.IsCanonical(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsComplexNumberTestData))] + public async Task IsComplexNumberTest(Int256 value, bool expected) + { + bool result = Helper.IsComplexNumber(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsEvenIntegerTestData))] + public async Task IsEvenIntegerTest(Int256 value, bool expected) + { + bool result = Helper.IsEvenInteger(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsFiniteTestData))] + public async Task IsFiniteTest(Int256 value, bool expected) + { + bool result = Helper.IsFinite(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsImaginaryNumberTestData))] + public async Task IsImaginaryNumberTest(Int256 value, bool expected) + { + bool result = Helper.IsImaginaryNumber(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsInfinityTestData))] + public async Task IsInfinityTest(Int256 value, bool expected) + { + bool result = Helper.IsInfinity(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsIntegerTestData))] + public async Task IsIntegerTest(Int256 value, bool expected) + { + bool result = Helper.IsInteger(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsNaNTestData))] + public async Task IsNaNTest(Int256 value, bool expected) + { + bool result = Helper.IsNaN(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsNegativeTestData))] + public async Task IsNegativeTest(Int256 value, bool expected) + { + bool result = Helper.IsNegative(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsNegativeInfinityTestData))] + public async Task IsNegativeInfinityTest(Int256 value, bool expected) + { + bool result = Helper.IsNegativeInfinity(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsNormalTestData))] + public async Task IsNormalTest(Int256 value, bool expected) + { + bool result = Helper.IsNormal(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsOddIntegerTestData))] + public async Task IsOddIntegerTest(Int256 value, bool expected) + { + bool result = Helper.IsOddInteger(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsPositiveTestData))] + public async Task IsPositiveTest(Int256 value, bool expected) + { + bool result = Helper.IsPositive(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsPositiveInfinityTestData))] + public async Task IsPositiveInfinityTest(Int256 value, bool expected) + { + bool result = Helper.IsPositiveInfinity(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsRealNumberTestData))] + public async Task IsRealNumberTest(Int256 value, bool expected) + { + bool result = Helper.IsRealNumber(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsSubnormalTestData))] + public async Task IsSubnormalTest(Int256 value, bool expected) + { + bool result = Helper.IsSubnormal(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsZeroTestData))] + public async Task IsZeroTest(Int256 value, bool expected) + { + bool result = Helper.IsZero(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(MaxMagnitudeTestData))] + public async Task MaxMagnitudeTest(Int256 x, Int256 y, Int256 expected) + { + var result = Helper.MaxMagnitude(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(MaxMagnitudeNumberTestData))] + public async Task MaxMagnitudeNumberTest(Int256 x, Int256 y, Int256 expected) + { + var result = Helper.MaxMagnitudeNumber(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(MinMagnitudeTestData))] + public async Task MinMagnitudeTest(Int256 x, Int256 y, Int256 expected) + { + var result = Helper.MinMagnitude(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(MinMagnitudeNumberTestData))] + public async Task MinMagnitudeNumberTest(Int256 x, Int256 y, Int256 expected) + { + var result = Helper.MinMagnitudeNumber(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(MultiplyAddEstimateTestData))] + public async Task MultiplyAddEstimateTest(Int256 left, Int256 right, Int256 addend, Int256 expected) + { + var result = Helper.MultiplyAddEstimate(left, right, addend); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(ParseTestData))] + public async Task ParseTest(string s, NumberStyles style, IFormatProvider? provider, Int256 expected) + { + var result = Helper.Parse(s, style, provider); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(ParseSpanTestData))] + public async Task ParseTest(char[] s, NumberStyles style, IFormatProvider? provider, Int256 expected) + { + var result = Helper.Parse(s, style, provider); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(ParseUtf8TestData))] + public async Task ParseTest(byte[] utf8Text, NumberStyles style, IFormatProvider? provider, Int256 expected) + { + var result = Helper.Parse(utf8Text, style, provider); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(TryParseTestData))] + public async Task TryParseTest(string s, NumberStyles style, IFormatProvider? provider, bool expected, Int256 expectedValue) + { + var success = Helper.TryParse(s, style, provider, out var result); + using (Assert.Multiple()) + { + await Assert.That(success).IsEqualTo(expected); + await Assert.That(result).IsEqualTo(expectedValue); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(TryParseSpanTestData))] + public async Task TryParseTest(char[] s, NumberStyles style, IFormatProvider? provider, bool expected, Int256 expectedValue) + { + var success = Helper.TryParse(s, style, provider, out var result); + using (Assert.Multiple()) + { + await Assert.That(success).IsEqualTo(expected); + await Assert.That(result).IsEqualTo(expectedValue); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(TryParseUtf8TestData))] + public async Task TryParseTest(byte[] utf8Text, NumberStyles style, IFormatProvider? provider, bool expected, Int256 expectedValue) + { + var success = Helper.TryParse(utf8Text, style, provider, out var result); + using (Assert.Multiple()) + { + await Assert.That(success).IsEqualTo(expected); + await Assert.That(result).IsEqualTo(expectedValue); + } + } + #endregion + + #region INumber + [Test] + [MethodDataSource(typeof(DataSources), nameof(ClampTestData))] + public async Task ClampTest(Int256 value, Int256 min, Int256 max, Int256 expected) + { + if (min > max) + { + await Assert.That(() => Helper.Clamp(value, min, max)).Throws(); + } + else + { + var result = Helper.Clamp(value, min, max); + await Assert.That(result).IsEqualTo(expected); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(CopySignTestData))] + public async Task CopySignTest(Int256 value, Int256 sign, Int256 expected) + { + var result = Helper.CopySign(value, sign); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(MaxTestData))] + public async Task MaxTest(Int256 x, Int256 y, Int256 expected) + { + var result = Helper.Max(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(MaxNumberTestData))] + public async Task MaxNumberTest(Int256 x, Int256 y, Int256 expected) + { + var result = Helper.MaxNumber(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(MinTestData))] + public async Task MinTest(Int256 x, Int256 y, Int256 expected) + { + var result = Helper.Min(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(MinNumberTestData))] + public async Task MinNumberTest(Int256 x, Int256 y, Int256 expected) + { + var result = Helper.MinNumber(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(SignTestData))] + public async Task SignTest(Int256 value, int expected) + { + var result = Helper.Sign(value); + await Assert.That(result).IsEqualTo(expected); + } + #endregion + + #region IBinaryNumber + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsPow2TestData))] + public async Task IsPow2Test(Int256 value, bool expected) + { + var result = Helper.IsPow2(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(Log2TestData))] + public async Task Log2Test(Int256 value, Int256 expected) + { + var result = Helper.Log2(value); + await Assert.That(result).IsEqualTo(expected); + } + #endregion + + #region IBinaryInteger + [Test] + [MethodDataSource(typeof(DataSources), nameof(DivRemTestData))] + public async Task DivRemTest(Int256 left, Int256 right, (Int256, Int256) expected) + { + var result = Helper.DivRem(left, right); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(LeadingZeroCountTestData))] + public async Task LeadingZeroCountTest(Int256 value, Int256 expected) + { + var result = Helper.LeadingZeroCount(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(PopCountTestData))] + public async Task PopCountTest(Int256 value, Int256 expected) + { + var result = Helper.PopCount(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(ReadBigEndianTestData))] + public async Task ReadBigEndianTest(byte[] source, bool isUnsigned, Int256 expected) + { + var result = Helper.ReadBigEndian(source, isUnsigned); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(ReadLittleEndianTestData))] + public async Task ReadLittleEndianTest(byte[] source, bool isUnsigned, Int256 expected) + { + var result = Helper.ReadLittleEndian(source, isUnsigned); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(RotateLeftTestData))] + public async Task RotateLeftTest(Int256 value, int shiftAmount, Int256 expected) + { + var result = Helper.RotateLeft(value, shiftAmount); + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(RotateRightTestData))] + public async Task RotateRightTest(Int256 value, int shiftAmount, Int256 expected) + { + var result = Helper.RotateRight(value, shiftAmount); + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(TrailingZeroCountTestData))] + public async Task TrailingZeroCountTest(Int256 value, Int256 expected) + { + var result = Helper.TrailingZeroCount(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(GetByteCountTestData))] + public async Task GetByteCountTest(Int256 value, int expected) + { + var result = Helper.GetByteCount(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(GetShortestBitLengthTestData))] + public async Task GetShortestBitLengthTest(Int256 value, int expected) + { + var result = Helper.GetShortestBitLength(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(WriteBigEndianTestData))] + public async Task WriteBigEndianTest(Int256 value, byte[] expectedDestination, int expected) + { + byte[] buffer = new byte[Int256.Size]; + var result = Helper.WriteBigEndian(value, buffer); + + using (Assert.Multiple()) + { + await Assert.That(result).IsEqualTo(expected); + await Assert.That(buffer.Length).IsEqualTo(expectedDestination.Length); + for (int i = 0; i < buffer.Length; i++) + { + await Assert.That(buffer[i]).IsEqualTo(expectedDestination[i]); + } + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(WriteLittleEndianTestData))] + public async Task WriteLittleEndianTest(Int256 value, byte[] expectedDestination, int expected) + { + byte[] buffer = new byte[Int256.Size]; + var result = Helper.WriteLittleEndian(value, buffer); + + using (Assert.Multiple()) + { + await Assert.That(result).IsEqualTo(expected); + await Assert.That(buffer.Length).IsEqualTo(expectedDestination.Length); + for (int i = 0; i < buffer.Length; i++) + { + await Assert.That(buffer[i]).IsEqualTo(expectedDestination[i]); + } + } + } + #endregion +} \ No newline at end of file diff --git a/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs b/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs index 6096124..7f98f1d 100644 --- a/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs @@ -1,12 +1,665 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; +using TUnit.Assertions.AssertConditions.Throws; +using static MissingValues.Tests.Data.Int512DataSources; -namespace MissingValues.Tests.Numerics +using DataSources = MissingValues.Tests.Data.Int512DataSources; + +namespace MissingValues.Tests.Numerics; + +public class Int512GenericMathTests { - class Int512GenericMathTests - { - } -} + #region Operators + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_AdditionTestData))] + public async Task op_AdditionTest(Int512 left, Int512 right, Int512 expected) + { + var result = left + right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_CheckedAdditionTestData))] + public async Task op_CheckedAdditionTest(Int512 left, Int512 right, Int512 expected, bool overflows) + { + if (overflows) + { + await Assert.That(() => checked(left + right)).Throws(); + } + else + { + var result = checked(left + right); + await Assert.That(result).IsEqualTo(expected); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_IncrementTestData))] + public async Task op_IncrementTest(Int512 value, Int512 expected) + { + var result = ++value; + + await Assert.That(result).IsEqualTo(expected).And.IsEqualTo(value); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_CheckedIncrementTestData))] + public async Task op_CheckedIncrementTest(Int512 value, Int512 expected, bool overflows) + { + if (overflows) + { + await Assert.That(() => checked(++value)).Throws(); + } + else + { + var result = checked(++value); + await Assert.That(result).IsEqualTo(expected).And.IsEqualTo(value); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_SubtractionTestData))] + public async Task op_SubtractionTest(Int512 left, Int512 right, Int512 expected) + { + var result = left - right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_CheckedSubtractionTestData))] + public async Task op_CheckedSubtractionTest(Int512 left, Int512 right, Int512 expected, bool overflows) + { + if (overflows) + { + await Assert.That(() => checked(left - right)).Throws(); + } + else + { + var result = checked(left - right); + await Assert.That(result).IsEqualTo(expected); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_DecrementTestData))] + public async Task op_DecrementTest(Int512 value, Int512 expected) + { + var result = --value; + + await Assert.That(result).IsEqualTo(expected).And.IsEqualTo(value); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_CheckedDecrementTestData))] + public async Task op_CheckedDecrementTest(Int512 value, Int512 expected, bool overflows) + { + if (overflows) + { + await Assert.That(() => checked(--value)).Throws(); + } + else + { + var result = checked(--value); + await Assert.That(result).IsEqualTo(expected).And.IsEqualTo(value); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_MultiplyTestData))] + public async Task op_MultiplyTest(Int512 left, Int512 right, Int512 expected) + { + var result = left * right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_CheckedMultiplyTestData))] + public async Task op_CheckedMultiplyTest(Int512 left, Int512 right, Int512 expected, bool overflows) + { + if (overflows) + { + await Assert.That(() => checked(left * right)).Throws(); + } + else + { + var result = checked(left * right); + await Assert.That(result).IsEqualTo(expected); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_DivisionTestData))] + public async Task op_DivisionTest(Int512 left, Int512 right, Int512 expected) + { + if (right == Int512.Zero) + { + await Assert.That(() => left / right).Throws(); + } + else + { + var result = left / right; + + await Assert.That(result).IsEqualTo(expected); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_ModulusTestData))] + public async Task op_ModulusTest(Int512 left, Int512 right, Int512 expected) + { + if (right == Int512.Zero) + { + await Assert.That(() => left % right).Throws(); + } + else + { + var result = left % right; + + await Assert.That(result).IsEqualTo(expected); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_OnesComplementTestData))] + public async Task op_OnesComplementTest(Int512 value, Int512 expected) + { + var result = ~value; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_BitwiseAndTestData))] + public async Task op_BitwiseAndTest(Int512 left, Int512 right, Int512 expected) + { + var result = left & right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_BitwiseOrTestData))] + public async Task op_BitwiseOrTest(Int512 left, Int512 right, Int512 expected) + { + var result = left | right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_BitwiseXorTestData))] + public async Task op_BitwiseXorTest(Int512 left, Int512 right, Int512 expected) + { + var result = left ^ right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_ShiftLeftTestData))] + public async Task op_ShiftLeftTest(Int512 value, int shiftAmount, Int512 expected) + { + var result = value << shiftAmount; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_ShiftRightTestData))] + public async Task op_ShiftRightTest(Int512 value, int shiftAmount, Int512 expected) + { + var result = value >> shiftAmount; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_UnsignedShiftRightTestData))] + public async Task op_UnsignedShiftRightTest(Int512 value, int shiftAmount, Int512 expected) + { + var result = value >>> shiftAmount; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_EqualityTestData))] + public async Task op_EqualityTest(Int512 left, Int512 right, bool expected) + { + var result = left == right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_InequalityTestData))] + public async Task op_InequalityTest(Int512 left, Int512 right, bool expected) + { + var result = left != right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_LessThanTestData))] + public async Task op_LessThanTest(Int512 left, Int512 right, bool expected) + { + var result = left < right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_LessThanOrEqualTestData))] + public async Task op_LessThanOrEqualTest(Int512 left, Int512 right, bool expected) + { + var result = left <= right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_GreaterThanTestData))] + public async Task op_GreaterThanTest(Int512 left, Int512 right, bool expected) + { + var result = left > right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_GreaterThanOrEqualTestData))] + public async Task op_GreaterThanOrEqualTest(Int512 left, Int512 right, bool expected) + { + var result = left >= right; + + await Assert.That(result).IsEqualTo(expected); + } + #endregion + + #region INumberBase + [Test] + [MethodDataSource(typeof(DataSources), nameof(AbsTestData))] + public async Task AbsTest(Int512 value, Int512 expected) + { + Int512 result = Helper.Abs(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsCanonicalTestData))] + public async Task IsCanonicalTest(Int512 value, bool expected) + { + bool result = Helper.IsCanonical(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsComplexNumberTestData))] + public async Task IsComplexNumberTest(Int512 value, bool expected) + { + bool result = Helper.IsComplexNumber(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsEvenIntegerTestData))] + public async Task IsEvenIntegerTest(Int512 value, bool expected) + { + bool result = Helper.IsEvenInteger(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsFiniteTestData))] + public async Task IsFiniteTest(Int512 value, bool expected) + { + bool result = Helper.IsFinite(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsImaginaryNumberTestData))] + public async Task IsImaginaryNumberTest(Int512 value, bool expected) + { + bool result = Helper.IsImaginaryNumber(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsInfinityTestData))] + public async Task IsInfinityTest(Int512 value, bool expected) + { + bool result = Helper.IsInfinity(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsIntegerTestData))] + public async Task IsIntegerTest(Int512 value, bool expected) + { + bool result = Helper.IsInteger(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsNaNTestData))] + public async Task IsNaNTest(Int512 value, bool expected) + { + bool result = Helper.IsNaN(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsNegativeTestData))] + public async Task IsNegativeTest(Int512 value, bool expected) + { + bool result = Helper.IsNegative(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsNegativeInfinityTestData))] + public async Task IsNegativeInfinityTest(Int512 value, bool expected) + { + bool result = Helper.IsNegativeInfinity(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsNormalTestData))] + public async Task IsNormalTest(Int512 value, bool expected) + { + bool result = Helper.IsNormal(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsOddIntegerTestData))] + public async Task IsOddIntegerTest(Int512 value, bool expected) + { + bool result = Helper.IsOddInteger(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsPositiveTestData))] + public async Task IsPositiveTest(Int512 value, bool expected) + { + bool result = Helper.IsPositive(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsPositiveInfinityTestData))] + public async Task IsPositiveInfinityTest(Int512 value, bool expected) + { + bool result = Helper.IsPositiveInfinity(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsRealNumberTestData))] + public async Task IsRealNumberTest(Int512 value, bool expected) + { + bool result = Helper.IsRealNumber(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsSubnormalTestData))] + public async Task IsSubnormalTest(Int512 value, bool expected) + { + bool result = Helper.IsSubnormal(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsZeroTestData))] + public async Task IsZeroTest(Int512 value, bool expected) + { + bool result = Helper.IsZero(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(MaxMagnitudeTestData))] + public async Task MaxMagnitudeTest(Int512 x, Int512 y, Int512 expected) + { + var result = Helper.MaxMagnitude(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(MaxMagnitudeNumberTestData))] + public async Task MaxMagnitudeNumberTest(Int512 x, Int512 y, Int512 expected) + { + var result = Helper.MaxMagnitudeNumber(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(MinMagnitudeTestData))] + public async Task MinMagnitudeTest(Int512 x, Int512 y, Int512 expected) + { + var result = Helper.MinMagnitude(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(MinMagnitudeNumberTestData))] + public async Task MinMagnitudeNumberTest(Int512 x, Int512 y, Int512 expected) + { + var result = Helper.MinMagnitudeNumber(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(MultiplyAddEstimateTestData))] + public async Task MultiplyAddEstimateTest(Int512 left, Int512 right, Int512 addend, Int512 expected) + { + var result = Helper.MultiplyAddEstimate(left, right, addend); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(ParseTestData))] + public async Task ParseTest(string s, NumberStyles style, IFormatProvider? provider, Int512 expected) + { + var result = Helper.Parse(s, style, provider); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(ParseSpanTestData))] + public async Task ParseTest(char[] s, NumberStyles style, IFormatProvider? provider, Int512 expected) + { + var result = Helper.Parse(s, style, provider); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(ParseUtf8TestData))] + public async Task ParseTest(byte[] utf8Text, NumberStyles style, IFormatProvider? provider, Int512 expected) + { + var result = Helper.Parse(utf8Text, style, provider); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(TryParseTestData))] + public async Task TryParseTest(string s, NumberStyles style, IFormatProvider? provider, bool expected, Int512 expectedValue) + { + var success = Helper.TryParse(s, style, provider, out var result); + using (Assert.Multiple()) + { + await Assert.That(success).IsEqualTo(expected); + await Assert.That(result).IsEqualTo(expectedValue); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(TryParseSpanTestData))] + public async Task TryParseTest(char[] s, NumberStyles style, IFormatProvider? provider, bool expected, Int512 expectedValue) + { + var success = Helper.TryParse(s, style, provider, out var result); + using (Assert.Multiple()) + { + await Assert.That(success).IsEqualTo(expected); + await Assert.That(result).IsEqualTo(expectedValue); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(TryParseUtf8TestData))] + public async Task TryParseTest(byte[] utf8Text, NumberStyles style, IFormatProvider? provider, bool expected, Int512 expectedValue) + { + var success = Helper.TryParse(utf8Text, style, provider, out var result); + using (Assert.Multiple()) + { + await Assert.That(success).IsEqualTo(expected); + await Assert.That(result).IsEqualTo(expectedValue); + } + } + #endregion + + #region INumber + [Test] + [MethodDataSource(typeof(DataSources), nameof(ClampTestData))] + public async Task ClampTest(Int512 value, Int512 min, Int512 max, Int512 expected) + { + if (min > max) + { + await Assert.That(() => Helper.Clamp(value, min, max)).Throws(); + } + else + { + var result = Helper.Clamp(value, min, max); + await Assert.That(result).IsEqualTo(expected); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(CopySignTestData))] + public async Task CopySignTest(Int512 value, Int512 sign, Int512 expected) + { + var result = Helper.CopySign(value, sign); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(MaxTestData))] + public async Task MaxTest(Int512 x, Int512 y, Int512 expected) + { + var result = Helper.Max(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(MaxNumberTestData))] + public async Task MaxNumberTest(Int512 x, Int512 y, Int512 expected) + { + var result = Helper.MaxNumber(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(MinTestData))] + public async Task MinTest(Int512 x, Int512 y, Int512 expected) + { + var result = Helper.Min(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(MinNumberTestData))] + public async Task MinNumberTest(Int512 x, Int512 y, Int512 expected) + { + var result = Helper.MinNumber(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(SignTestData))] + public async Task SignTest(Int512 value, int expected) + { + var result = Helper.Sign(value); + await Assert.That(result).IsEqualTo(expected); + } + #endregion + + #region IBinaryNumber + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsPow2TestData))] + public async Task IsPow2Test(Int512 value, bool expected) + { + var result = Helper.IsPow2(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(Log2TestData))] + public async Task Log2Test(Int512 value, Int512 expected) + { + var result = Helper.Log2(value); + await Assert.That(result).IsEqualTo(expected); + } + #endregion + + #region IBinaryInteger + [Test] + [MethodDataSource(typeof(DataSources), nameof(DivRemTestData))] + public async Task DivRemTest(Int512 left, Int512 right, (Int512, Int512) expected) + { + var result = Helper.DivRem(left, right); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(LeadingZeroCountTestData))] + public async Task LeadingZeroCountTest(Int512 value, Int512 expected) + { + var result = Helper.LeadingZeroCount(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(PopCountTestData))] + public async Task PopCountTest(Int512 value, Int512 expected) + { + var result = Helper.PopCount(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(ReadBigEndianTestData))] + public async Task ReadBigEndianTest(byte[] source, bool isUnsigned, Int512 expected) + { + var result = Helper.ReadBigEndian(source, isUnsigned); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(ReadLittleEndianTestData))] + public async Task ReadLittleEndianTest(byte[] source, bool isUnsigned, Int512 expected) + { + var result = Helper.ReadLittleEndian(source, isUnsigned); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(RotateLeftTestData))] + public async Task RotateLeftTest(Int512 value, int shiftAmount, Int512 expected) + { + var result = Helper.RotateLeft(value, shiftAmount); + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(RotateRightTestData))] + public async Task RotateRightTest(Int512 value, int shiftAmount, Int512 expected) + { + var result = Helper.RotateRight(value, shiftAmount); + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(TrailingZeroCountTestData))] + public async Task TrailingZeroCountTest(Int512 value, Int512 expected) + { + var result = Helper.TrailingZeroCount(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(GetByteCountTestData))] + public async Task GetByteCountTest(Int512 value, int expected) + { + var result = Helper.GetByteCount(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(GetShortestBitLengthTestData))] + public async Task GetShortestBitLengthTest(Int512 value, int expected) + { + var result = Helper.GetShortestBitLength(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(WriteBigEndianTestData))] + public async Task WriteBigEndianTest(Int512 value, byte[] expectedDestination, int expected) + { + byte[] buffer = new byte[Int512.Size]; + var result = Helper.WriteBigEndian(value, buffer); + + using (Assert.Multiple()) + { + await Assert.That(result).IsEqualTo(expected); + await Assert.That(buffer.Length).IsEqualTo(expectedDestination.Length); + for (int i = 0; i < buffer.Length; i++) + { + await Assert.That(buffer[i]).IsEqualTo(expectedDestination[i]); + } + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(WriteLittleEndianTestData))] + public async Task WriteLittleEndianTest(Int512 value, byte[] expectedDestination, int expected) + { + byte[] buffer = new byte[Int512.Size]; + var result = Helper.WriteLittleEndian(value, buffer); + + using (Assert.Multiple()) + { + await Assert.That(result).IsEqualTo(expected); + await Assert.That(buffer.Length).IsEqualTo(expectedDestination.Length); + for (int i = 0; i < buffer.Length; i++) + { + await Assert.That(buffer[i]).IsEqualTo(expectedDestination[i]); + } + } + } + #endregion +} \ No newline at end of file diff --git a/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs b/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs index 9a25a37..4895b42 100644 --- a/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs @@ -4,9 +4,12 @@ using System.Text; using System.Threading.Tasks; -namespace MissingValues.Tests.Numerics +using static MissingValues.Tests.Data.OctoDataSources; + +using DataSources = MissingValues.Tests.Data.OctoDataSources; + +namespace MissingValues.Tests.Numerics; + +public class OctoGenericMathTests { - class OctoGenericMathTests - { - } -} +} \ No newline at end of file diff --git a/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs b/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs index 0860134..c8146e1 100644 --- a/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs @@ -4,9 +4,12 @@ using System.Text; using System.Threading.Tasks; -namespace MissingValues.Tests.Numerics +using static MissingValues.Tests.Data.QuadDataSources; + +using DataSources = MissingValues.Tests.Data.QuadDataSources; + +namespace MissingValues.Tests.Numerics; + +public class QuadGenericMathTests { - class QuadGenericMathTests - { - } -} +} \ No newline at end of file diff --git a/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs b/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs index bcb54fb..d818a56 100644 --- a/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs @@ -7,13 +7,17 @@ using System.Threading.Tasks; using TUnit.Assertions.AssertConditions.Throws; +using static MissingValues.Tests.Data.UInt256DataSources; + +using DataSources = MissingValues.Tests.Data.UInt256DataSources; + namespace MissingValues.Tests.Numerics; public class UInt256GenericMathTests { #region Operators [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_AdditionTestData))] + [MethodDataSource(typeof(DataSources), nameof(op_AdditionTestData))] public async Task op_AdditionTest(UInt256 left, UInt256 right, UInt256 expected) { var result = left + right; @@ -21,7 +25,7 @@ public async Task op_AdditionTest(UInt256 left, UInt256 right, UInt256 expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_CheckedAdditionTestData))] + [MethodDataSource(typeof(DataSources), nameof(op_CheckedAdditionTestData))] public async Task op_CheckedAdditionTest(UInt256 left, UInt256 right, UInt256 expected, bool overflows) { if (overflows) @@ -35,7 +39,7 @@ public async Task op_CheckedAdditionTest(UInt256 left, UInt256 right, UInt256 ex } } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_IncrementTestData))] + [MethodDataSource(typeof(DataSources), nameof(op_IncrementTestData))] public async Task op_IncrementTest(UInt256 value, UInt256 expected) { var result = ++value; @@ -43,7 +47,7 @@ public async Task op_IncrementTest(UInt256 value, UInt256 expected) await Assert.That(result).IsEqualTo(expected).And.IsEqualTo(value); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_CheckedIncrementTestData))] + [MethodDataSource(typeof(DataSources), nameof(op_CheckedIncrementTestData))] public async Task op_CheckedIncrementTest(UInt256 value, UInt256 expected, bool overflows) { if (overflows) @@ -57,7 +61,7 @@ public async Task op_CheckedIncrementTest(UInt256 value, UInt256 expected, bool } } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_SubtractionTestData))] + [MethodDataSource(typeof(DataSources), nameof(op_SubtractionTestData))] public async Task op_SubtractionTest(UInt256 left, UInt256 right, UInt256 expected) { var result = left - right; @@ -65,7 +69,7 @@ public async Task op_SubtractionTest(UInt256 left, UInt256 right, UInt256 expect await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_CheckedSubtractionTestData))] + [MethodDataSource(typeof(DataSources), nameof(op_CheckedSubtractionTestData))] public async Task op_CheckedSubtractionTest(UInt256 left, UInt256 right, UInt256 expected, bool overflows) { if (overflows) @@ -79,7 +83,7 @@ public async Task op_CheckedSubtractionTest(UInt256 left, UInt256 right, UInt256 } } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_DecrementTestData))] + [MethodDataSource(typeof(DataSources), nameof(op_DecrementTestData))] public async Task op_DecrementTest(UInt256 value, UInt256 expected) { var result = --value; @@ -87,7 +91,7 @@ public async Task op_DecrementTest(UInt256 value, UInt256 expected) await Assert.That(result).IsEqualTo(expected).And.IsEqualTo(value); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_CheckedDecrementTestData))] + [MethodDataSource(typeof(DataSources), nameof(op_CheckedDecrementTestData))] public async Task op_CheckedDecrementTest(UInt256 value, UInt256 expected, bool overflows) { if (overflows) @@ -101,7 +105,7 @@ public async Task op_CheckedDecrementTest(UInt256 value, UInt256 expected, bool } } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_MultiplyTestData))] + [MethodDataSource(typeof(DataSources), nameof(op_MultiplyTestData))] public async Task op_MultiplyTest(UInt256 left, UInt256 right, UInt256 expected) { var result = left * right; @@ -109,7 +113,7 @@ public async Task op_MultiplyTest(UInt256 left, UInt256 right, UInt256 expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_CheckedMultiplyTestData))] + [MethodDataSource(typeof(DataSources), nameof(op_CheckedMultiplyTestData))] public async Task op_CheckedMultiplyTest(UInt256 left, UInt256 right, UInt256 expected, bool overflows) { if (overflows) @@ -123,7 +127,7 @@ public async Task op_CheckedMultiplyTest(UInt256 left, UInt256 right, UInt256 ex } } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_DivisionTestData))] + [MethodDataSource(typeof(DataSources), nameof(op_DivisionTestData))] public async Task op_DivisionTest(UInt256 left, UInt256 right, UInt256 expected) { if (right == UInt256.Zero) @@ -138,7 +142,7 @@ public async Task op_DivisionTest(UInt256 left, UInt256 right, UInt256 expected) } } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_ModulusTestData))] + [MethodDataSource(typeof(DataSources), nameof(op_ModulusTestData))] public async Task op_ModulusTest(UInt256 left, UInt256 right, UInt256 expected) { if (right == UInt256.Zero) @@ -153,7 +157,7 @@ public async Task op_ModulusTest(UInt256 left, UInt256 right, UInt256 expected) } } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_OnesComplementTestData))] + [MethodDataSource(typeof(DataSources), nameof(op_OnesComplementTestData))] public async Task op_OnesComplementTest(UInt256 value, UInt256 expected) { var result = ~value; @@ -161,7 +165,7 @@ public async Task op_OnesComplementTest(UInt256 value, UInt256 expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_BitwiseAndTestData))] + [MethodDataSource(typeof(DataSources), nameof(op_BitwiseAndTestData))] public async Task op_BitwiseAndTest(UInt256 left, UInt256 right, UInt256 expected) { var result = left & right; @@ -169,7 +173,7 @@ public async Task op_BitwiseAndTest(UInt256 left, UInt256 right, UInt256 expecte await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_BitwiseOrTestData))] + [MethodDataSource(typeof(DataSources), nameof(op_BitwiseOrTestData))] public async Task op_BitwiseOrTest(UInt256 left, UInt256 right, UInt256 expected) { var result = left | right; @@ -177,7 +181,7 @@ public async Task op_BitwiseOrTest(UInt256 left, UInt256 right, UInt256 expected await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_BitwiseXorTestData))] + [MethodDataSource(typeof(DataSources), nameof(op_BitwiseXorTestData))] public async Task op_BitwiseXorTest(UInt256 left, UInt256 right, UInt256 expected) { var result = left ^ right; @@ -185,7 +189,7 @@ public async Task op_BitwiseXorTest(UInt256 left, UInt256 right, UInt256 expecte await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_ShiftLeftTestData))] + [MethodDataSource(typeof(DataSources), nameof(op_ShiftLeftTestData))] public async Task op_ShiftLeftTest(UInt256 value, int shiftAmount, UInt256 expected) { var result = value << shiftAmount; @@ -193,7 +197,7 @@ public async Task op_ShiftLeftTest(UInt256 value, int shiftAmount, UInt256 expec await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_ShiftRightTestData))] + [MethodDataSource(typeof(DataSources), nameof(op_ShiftRightTestData))] public async Task op_ShiftRightTest(UInt256 value, int shiftAmount, UInt256 expected) { var result = value >> shiftAmount; @@ -201,7 +205,7 @@ public async Task op_ShiftRightTest(UInt256 value, int shiftAmount, UInt256 expe await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_UnsignedShiftRightTestData))] + [MethodDataSource(typeof(DataSources), nameof(op_UnsignedShiftRightTestData))] public async Task op_UnsignedShiftRightTest(UInt256 value, int shiftAmount, UInt256 expected) { var result = value >>> shiftAmount; @@ -209,7 +213,7 @@ public async Task op_UnsignedShiftRightTest(UInt256 value, int shiftAmount, UInt await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_EqualityTestData))] + [MethodDataSource(typeof(DataSources), nameof(op_EqualityTestData))] public async Task op_EqualityTest(UInt256 left, UInt256 right, bool expected) { var result = left == right; @@ -217,7 +221,7 @@ public async Task op_EqualityTest(UInt256 left, UInt256 right, bool expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_InequalityTestData))] + [MethodDataSource(typeof(DataSources), nameof(op_InequalityTestData))] public async Task op_InequalityTest(UInt256 left, UInt256 right, bool expected) { var result = left != right; @@ -225,7 +229,7 @@ public async Task op_InequalityTest(UInt256 left, UInt256 right, bool expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_LessThanTestData))] + [MethodDataSource(typeof(DataSources), nameof(op_LessThanTestData))] public async Task op_LessThanTest(UInt256 left, UInt256 right, bool expected) { var result = left < right; @@ -233,7 +237,7 @@ public async Task op_LessThanTest(UInt256 left, UInt256 right, bool expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_LessThanOrEqualTestData))] + [MethodDataSource(typeof(DataSources), nameof(op_LessThanOrEqualTestData))] public async Task op_LessThanOrEqualTest(UInt256 left, UInt256 right, bool expected) { var result = left <= right; @@ -241,7 +245,7 @@ public async Task op_LessThanOrEqualTest(UInt256 left, UInt256 right, bool expec await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_GreaterThanTestData))] + [MethodDataSource(typeof(DataSources), nameof(op_GreaterThanTestData))] public async Task op_GreaterThanTest(UInt256 left, UInt256 right, bool expected) { var result = left > right; @@ -249,7 +253,7 @@ public async Task op_GreaterThanTest(UInt256 left, UInt256 right, bool expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.op_GreaterThanOrEqualTestData))] + [MethodDataSource(typeof(DataSources), nameof(op_GreaterThanOrEqualTestData))] public async Task op_GreaterThanOrEqualTest(UInt256 left, UInt256 right, bool expected) { var result = left >= right; @@ -260,189 +264,189 @@ public async Task op_GreaterThanOrEqualTest(UInt256 left, UInt256 right, bool ex #region INumberBase [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.AbsTestData))] + [MethodDataSource(typeof(DataSources), nameof(AbsTestData))] public async Task AbsTest(UInt256 value, UInt256 expected) { UInt256 result = Helper.Abs(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsCanonicalTestData))] + [MethodDataSource(typeof(DataSources), nameof(IsCanonicalTestData))] public async Task IsCanonicalTest(UInt256 value, bool expected) { bool result = Helper.IsCanonical(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsComplexNumberTestData))] + [MethodDataSource(typeof(DataSources), nameof(IsComplexNumberTestData))] public async Task IsComplexNumberTest(UInt256 value, bool expected) { bool result = Helper.IsComplexNumber(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsEvenIntegerTestData))] + [MethodDataSource(typeof(DataSources), nameof(IsEvenIntegerTestData))] public async Task IsEvenIntegerTest(UInt256 value, bool expected) { bool result = Helper.IsEvenInteger(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsFiniteTestData))] + [MethodDataSource(typeof(DataSources), nameof(IsFiniteTestData))] public async Task IsFiniteTest(UInt256 value, bool expected) { bool result = Helper.IsFinite(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsImaginaryNumberTestData))] + [MethodDataSource(typeof(DataSources), nameof(IsImaginaryNumberTestData))] public async Task IsImaginaryNumberTest(UInt256 value, bool expected) { bool result = Helper.IsImaginaryNumber(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsInfinityTestData))] + [MethodDataSource(typeof(DataSources), nameof(IsInfinityTestData))] public async Task IsInfinityTest(UInt256 value, bool expected) { bool result = Helper.IsInfinity(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsIntegerTestData))] + [MethodDataSource(typeof(DataSources), nameof(IsIntegerTestData))] public async Task IsIntegerTest(UInt256 value, bool expected) { bool result = Helper.IsInteger(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsNaNTestData))] + [MethodDataSource(typeof(DataSources), nameof(IsNaNTestData))] public async Task IsNaNTest(UInt256 value, bool expected) { bool result = Helper.IsNaN(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsNegativeTestData))] + [MethodDataSource(typeof(DataSources), nameof(IsNegativeTestData))] public async Task IsNegativeTest(UInt256 value, bool expected) { bool result = Helper.IsNegative(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsNegativeInfinityTestData))] + [MethodDataSource(typeof(DataSources), nameof(IsNegativeInfinityTestData))] public async Task IsNegativeInfinityTest(UInt256 value, bool expected) { bool result = Helper.IsNegativeInfinity(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsNormalTestData))] + [MethodDataSource(typeof(DataSources), nameof(IsNormalTestData))] public async Task IsNormalTest(UInt256 value, bool expected) { bool result = Helper.IsNormal(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsOddIntegerTestData))] + [MethodDataSource(typeof(DataSources), nameof(IsOddIntegerTestData))] public async Task IsOddIntegerTest(UInt256 value, bool expected) { bool result = Helper.IsOddInteger(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsPositiveTestData))] + [MethodDataSource(typeof(DataSources), nameof(IsPositiveTestData))] public async Task IsPositiveTest(UInt256 value, bool expected) { bool result = Helper.IsPositive(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsPositiveInfinityTestData))] + [MethodDataSource(typeof(DataSources), nameof(IsPositiveInfinityTestData))] public async Task IsPositiveInfinityTest(UInt256 value, bool expected) { bool result = Helper.IsPositiveInfinity(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsRealNumberTestData))] + [MethodDataSource(typeof(DataSources), nameof(IsRealNumberTestData))] public async Task IsRealNumberTest(UInt256 value, bool expected) { bool result = Helper.IsRealNumber(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsSubnormalTestData))] + [MethodDataSource(typeof(DataSources), nameof(IsSubnormalTestData))] public async Task IsSubnormalTest(UInt256 value, bool expected) { bool result = Helper.IsSubnormal(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsZeroTestData))] + [MethodDataSource(typeof(DataSources), nameof(IsZeroTestData))] public async Task IsZeroTest(UInt256 value, bool expected) { bool result = Helper.IsZero(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.MaxMagnitudeTestData))] + [MethodDataSource(typeof(DataSources), nameof(MaxMagnitudeTestData))] public async Task MaxMagnitudeTest(UInt256 x, UInt256 y, UInt256 expected) { var result = Helper.MaxMagnitude(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.MaxMagnitudeNumberTestData))] + [MethodDataSource(typeof(DataSources), nameof(MaxMagnitudeNumberTestData))] public async Task MaxMagnitudeNumberTest(UInt256 x, UInt256 y, UInt256 expected) { var result = Helper.MaxMagnitudeNumber(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.MinMagnitudeTestData))] + [MethodDataSource(typeof(DataSources), nameof(MinMagnitudeTestData))] public async Task MinMagnitudeTest(UInt256 x, UInt256 y, UInt256 expected) { var result = Helper.MinMagnitude(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.MinMagnitudeNumberTestData))] + [MethodDataSource(typeof(DataSources), nameof(MinMagnitudeNumberTestData))] public async Task MinMagnitudeNumberTest(UInt256 x, UInt256 y, UInt256 expected) { var result = Helper.MinMagnitudeNumber(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.MultiplyAddEstimateTestData))] + [MethodDataSource(typeof(DataSources), nameof(MultiplyAddEstimateTestData))] public async Task MultiplyAddEstimateTest(UInt256 left, UInt256 right, UInt256 addend, UInt256 expected) { var result = Helper.MultiplyAddEstimate(left, right, addend); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.ParseTestData))] + [MethodDataSource(typeof(DataSources), nameof(ParseTestData))] public async Task ParseTest(string s, NumberStyles style, IFormatProvider? provider, UInt256 expected) { var result = Helper.Parse(s, style, provider); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.ParseSpanTestData))] + [MethodDataSource(typeof(DataSources), nameof(ParseSpanTestData))] public async Task ParseTest(char[] s, NumberStyles style, IFormatProvider? provider, UInt256 expected) { var result = Helper.Parse(s, style, provider); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.ParseUtf8TestData))] + [MethodDataSource(typeof(DataSources), nameof(ParseUtf8TestData))] public async Task ParseTest(byte[] utf8Text, NumberStyles style, IFormatProvider? provider, UInt256 expected) { var result = Helper.Parse(utf8Text, style, provider); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.TryParseTestData))] + [MethodDataSource(typeof(DataSources), nameof(TryParseTestData))] public async Task TryParseTest(string s, NumberStyles style, IFormatProvider? provider, bool expected, UInt256 expectedValue) { var success = Helper.TryParse(s, style, provider, out var result); @@ -453,7 +457,7 @@ public async Task TryParseTest(string s, NumberStyles style, IFormatProvider? pr } } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.TryParseSpanTestData))] + [MethodDataSource(typeof(DataSources), nameof(TryParseSpanTestData))] public async Task TryParseTest(char[] s, NumberStyles style, IFormatProvider? provider, bool expected, UInt256 expectedValue) { var success = Helper.TryParse(s, style, provider, out var result); @@ -464,7 +468,7 @@ public async Task TryParseTest(char[] s, NumberStyles style, IFormatProvider? pr } } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.TryParseUtf8TestData))] + [MethodDataSource(typeof(DataSources), nameof(TryParseUtf8TestData))] public async Task TryParseTest(byte[] utf8Text, NumberStyles style, IFormatProvider? provider, bool expected, UInt256 expectedValue) { var success = Helper.TryParse(utf8Text, style, provider, out var result); @@ -474,8 +478,11 @@ public async Task TryParseTest(byte[] utf8Text, NumberStyles style, IFormatProvi await Assert.That(result).IsEqualTo(expectedValue); } } + #endregion + + #region INumber [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.ClampTestData))] + [MethodDataSource(typeof(DataSources), nameof(ClampTestData))] public async Task ClampTest(UInt256 value, UInt256 min, UInt256 max, UInt256 expected) { if (min > max) @@ -489,98 +496,104 @@ public async Task ClampTest(UInt256 value, UInt256 min, UInt256 max, UInt256 exp } } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.CopySignTestData))] + [MethodDataSource(typeof(DataSources), nameof(CopySignTestData))] public async Task CopySignTest(UInt256 value, UInt256 sign, UInt256 expected) { var result = Helper.CopySign(value, sign); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.MaxTestData))] + [MethodDataSource(typeof(DataSources), nameof(MaxTestData))] public async Task MaxTest(UInt256 x, UInt256 y, UInt256 expected) { var result = Helper.Max(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.MaxNumberTestData))] + [MethodDataSource(typeof(DataSources), nameof(MaxNumberTestData))] public async Task MaxNumberTest(UInt256 x, UInt256 y, UInt256 expected) { var result = Helper.MaxNumber(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.MinTestData))] + [MethodDataSource(typeof(DataSources), nameof(MinTestData))] public async Task MinTest(UInt256 x, UInt256 y, UInt256 expected) { var result = Helper.Min(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.MinNumberTestData))] + [MethodDataSource(typeof(DataSources), nameof(MinNumberTestData))] public async Task MinNumberTest(UInt256 x, UInt256 y, UInt256 expected) { var result = Helper.MinNumber(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.SignTestData))] + [MethodDataSource(typeof(DataSources), nameof(SignTestData))] public async Task SignTest(UInt256 value, int expected) { var result = Helper.Sign(value); await Assert.That(result).IsEqualTo(expected); } + #endregion + + #region IBinaryNumber [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.IsPow2TestData))] + [MethodDataSource(typeof(DataSources), nameof(IsPow2TestData))] public async Task IsPow2Test(UInt256 value, bool expected) { var result = Helper.IsPow2(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.Log2TestData))] + [MethodDataSource(typeof(DataSources), nameof(Log2TestData))] public async Task Log2Test(UInt256 value, UInt256 expected) { var result = Helper.Log2(value); await Assert.That(result).IsEqualTo(expected); } + #endregion + + #region IBinaryInteger [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.DivRemTestData))] + [MethodDataSource(typeof(DataSources), nameof(DivRemTestData))] public async Task DivRemTest(UInt256 left, UInt256 right, (UInt256, UInt256) expected) { var result = Helper.DivRem(left, right); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.LeadingZeroCountTestData))] + [MethodDataSource(typeof(DataSources), nameof(LeadingZeroCountTestData))] public async Task LeadingZeroCountTest(UInt256 value, UInt256 expected) { var result = Helper.LeadingZeroCount(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.PopCountTestData))] + [MethodDataSource(typeof(DataSources), nameof(PopCountTestData))] public async Task PopCountTest(UInt256 value, UInt256 expected) { var result = Helper.PopCount(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.ReadBigEndianTestData))] + [MethodDataSource(typeof(DataSources), nameof(ReadBigEndianTestData))] public async Task ReadBigEndianTest(byte[] source, bool isUnsigned, UInt256 expected) { var result = Helper.ReadBigEndian(source, isUnsigned); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.ReadLittleEndianTestData))] + [MethodDataSource(typeof(DataSources), nameof(ReadLittleEndianTestData))] public async Task ReadLittleEndianTest(byte[] source, bool isUnsigned, UInt256 expected) { var result = Helper.ReadLittleEndian(source, isUnsigned); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.RotateLeftTestData))] + [MethodDataSource(typeof(DataSources), nameof(RotateLeftTestData))] public async Task RotateLeftTest(UInt256 value, int shiftAmount, UInt256 expected) { var result = Helper.RotateLeft(value, shiftAmount); @@ -588,7 +601,7 @@ public async Task RotateLeftTest(UInt256 value, int shiftAmount, UInt256 expecte await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.RotateRightTestData))] + [MethodDataSource(typeof(DataSources), nameof(RotateRightTestData))] public async Task RotateRightTest(UInt256 value, int shiftAmount, UInt256 expected) { var result = Helper.RotateRight(value, shiftAmount); @@ -596,28 +609,28 @@ public async Task RotateRightTest(UInt256 value, int shiftAmount, UInt256 expect await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.TrailingZeroCountTestData))] + [MethodDataSource(typeof(DataSources), nameof(TrailingZeroCountTestData))] public async Task TrailingZeroCountTest(UInt256 value, UInt256 expected) { var result = Helper.TrailingZeroCount(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.GetByteCountTestData))] + [MethodDataSource(typeof(DataSources), nameof(GetByteCountTestData))] public async Task GetByteCountTest(UInt256 value, int expected) { var result = Helper.GetByteCount(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.GetShortestBitLengthTestData))] + [MethodDataSource(typeof(DataSources), nameof(GetShortestBitLengthTestData))] public async Task GetShortestBitLengthTest(UInt256 value, int expected) { var result = Helper.GetShortestBitLength(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.WriteBigEndianTestData))] + [MethodDataSource(typeof(DataSources), nameof(WriteBigEndianTestData))] public async Task WriteBigEndianTest(UInt256 value, byte[] expectedDestination, int expected) { byte[] buffer = new byte[UInt256.Size]; @@ -634,7 +647,7 @@ public async Task WriteBigEndianTest(UInt256 value, byte[] expectedDestination, } } [Test] - [MethodDataSource(typeof(UInt256DataSources), nameof(UInt256DataSources.WriteLittleEndianTestData))] + [MethodDataSource(typeof(DataSources), nameof(WriteLittleEndianTestData))] public async Task WriteLittleEndianTest(UInt256 value, byte[] expectedDestination, int expected) { byte[] buffer = new byte[UInt256.Size]; diff --git a/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs b/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs index 5da703b..7b75462 100644 --- a/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs @@ -1,12 +1,665 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; +using TUnit.Assertions.AssertConditions.Throws; +using static MissingValues.Tests.Data.UInt512DataSources; -namespace MissingValues.Tests.Numerics +using DataSources = MissingValues.Tests.Data.UInt512DataSources; + +namespace MissingValues.Tests.Numerics; + +public class UInt512GenericMathTests { - class UInt512GenericMathTests - { - } -} + #region Operators + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_AdditionTestData))] + public async Task op_AdditionTest(UInt512 left, UInt512 right, UInt512 expected) + { + var result = left + right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_CheckedAdditionTestData))] + public async Task op_CheckedAdditionTest(UInt512 left, UInt512 right, UInt512 expected, bool overflows) + { + if (overflows) + { + await Assert.That(() => checked(left + right)).Throws(); + } + else + { + var result = checked(left + right); + await Assert.That(result).IsEqualTo(expected); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_IncrementTestData))] + public async Task op_IncrementTest(UInt512 value, UInt512 expected) + { + var result = ++value; + + await Assert.That(result).IsEqualTo(expected).And.IsEqualTo(value); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_CheckedIncrementTestData))] + public async Task op_CheckedIncrementTest(UInt512 value, UInt512 expected, bool overflows) + { + if (overflows) + { + await Assert.That(() => checked(++value)).Throws(); + } + else + { + var result = checked(++value); + await Assert.That(result).IsEqualTo(expected).And.IsEqualTo(value); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_SubtractionTestData))] + public async Task op_SubtractionTest(UInt512 left, UInt512 right, UInt512 expected) + { + var result = left - right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_CheckedSubtractionTestData))] + public async Task op_CheckedSubtractionTest(UInt512 left, UInt512 right, UInt512 expected, bool overflows) + { + if (overflows) + { + await Assert.That(() => checked(left - right)).Throws(); + } + else + { + var result = checked(left - right); + await Assert.That(result).IsEqualTo(expected); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_DecrementTestData))] + public async Task op_DecrementTest(UInt512 value, UInt512 expected) + { + var result = --value; + + await Assert.That(result).IsEqualTo(expected).And.IsEqualTo(value); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_CheckedDecrementTestData))] + public async Task op_CheckedDecrementTest(UInt512 value, UInt512 expected, bool overflows) + { + if (overflows) + { + await Assert.That(() => checked(--value)).Throws(); + } + else + { + var result = checked(--value); + await Assert.That(result).IsEqualTo(expected).And.IsEqualTo(value); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_MultiplyTestData))] + public async Task op_MultiplyTest(UInt512 left, UInt512 right, UInt512 expected) + { + var result = left * right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_CheckedMultiplyTestData))] + public async Task op_CheckedMultiplyTest(UInt512 left, UInt512 right, UInt512 expected, bool overflows) + { + if (overflows) + { + await Assert.That(() => checked(left * right)).Throws(); + } + else + { + var result = checked(left * right); + await Assert.That(result).IsEqualTo(expected); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_DivisionTestData))] + public async Task op_DivisionTest(UInt512 left, UInt512 right, UInt512 expected) + { + if (right == UInt512.Zero) + { + await Assert.That(() => left / right).Throws(); + } + else + { + var result = left / right; + + await Assert.That(result).IsEqualTo(expected); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_ModulusTestData))] + public async Task op_ModulusTest(UInt512 left, UInt512 right, UInt512 expected) + { + if (right == UInt512.Zero) + { + await Assert.That(() => left % right).Throws(); + } + else + { + var result = left % right; + + await Assert.That(result).IsEqualTo(expected); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_OnesComplementTestData))] + public async Task op_OnesComplementTest(UInt512 value, UInt512 expected) + { + var result = ~value; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_BitwiseAndTestData))] + public async Task op_BitwiseAndTest(UInt512 left, UInt512 right, UInt512 expected) + { + var result = left & right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_BitwiseOrTestData))] + public async Task op_BitwiseOrTest(UInt512 left, UInt512 right, UInt512 expected) + { + var result = left | right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_BitwiseXorTestData))] + public async Task op_BitwiseXorTest(UInt512 left, UInt512 right, UInt512 expected) + { + var result = left ^ right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_ShiftLeftTestData))] + public async Task op_ShiftLeftTest(UInt512 value, int shiftAmount, UInt512 expected) + { + var result = value << shiftAmount; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_ShiftRightTestData))] + public async Task op_ShiftRightTest(UInt512 value, int shiftAmount, UInt512 expected) + { + var result = value >> shiftAmount; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_UnsignedShiftRightTestData))] + public async Task op_UnsignedShiftRightTest(UInt512 value, int shiftAmount, UInt512 expected) + { + var result = value >>> shiftAmount; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_EqualityTestData))] + public async Task op_EqualityTest(UInt512 left, UInt512 right, bool expected) + { + var result = left == right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_InequalityTestData))] + public async Task op_InequalityTest(UInt512 left, UInt512 right, bool expected) + { + var result = left != right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_LessThanTestData))] + public async Task op_LessThanTest(UInt512 left, UInt512 right, bool expected) + { + var result = left < right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_LessThanOrEqualTestData))] + public async Task op_LessThanOrEqualTest(UInt512 left, UInt512 right, bool expected) + { + var result = left <= right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_GreaterThanTestData))] + public async Task op_GreaterThanTest(UInt512 left, UInt512 right, bool expected) + { + var result = left > right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(op_GreaterThanOrEqualTestData))] + public async Task op_GreaterThanOrEqualTest(UInt512 left, UInt512 right, bool expected) + { + var result = left >= right; + + await Assert.That(result).IsEqualTo(expected); + } + #endregion + + #region INumberBase + [Test] + [MethodDataSource(typeof(DataSources), nameof(AbsTestData))] + public async Task AbsTest(UInt512 value, UInt512 expected) + { + UInt512 result = Helper.Abs(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsCanonicalTestData))] + public async Task IsCanonicalTest(UInt512 value, bool expected) + { + bool result = Helper.IsCanonical(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsComplexNumberTestData))] + public async Task IsComplexNumberTest(UInt512 value, bool expected) + { + bool result = Helper.IsComplexNumber(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsEvenIntegerTestData))] + public async Task IsEvenIntegerTest(UInt512 value, bool expected) + { + bool result = Helper.IsEvenInteger(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsFiniteTestData))] + public async Task IsFiniteTest(UInt512 value, bool expected) + { + bool result = Helper.IsFinite(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsImaginaryNumberTestData))] + public async Task IsImaginaryNumberTest(UInt512 value, bool expected) + { + bool result = Helper.IsImaginaryNumber(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsInfinityTestData))] + public async Task IsInfinityTest(UInt512 value, bool expected) + { + bool result = Helper.IsInfinity(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsIntegerTestData))] + public async Task IsIntegerTest(UInt512 value, bool expected) + { + bool result = Helper.IsInteger(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsNaNTestData))] + public async Task IsNaNTest(UInt512 value, bool expected) + { + bool result = Helper.IsNaN(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsNegativeTestData))] + public async Task IsNegativeTest(UInt512 value, bool expected) + { + bool result = Helper.IsNegative(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsNegativeInfinityTestData))] + public async Task IsNegativeInfinityTest(UInt512 value, bool expected) + { + bool result = Helper.IsNegativeInfinity(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsNormalTestData))] + public async Task IsNormalTest(UInt512 value, bool expected) + { + bool result = Helper.IsNormal(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsOddIntegerTestData))] + public async Task IsOddIntegerTest(UInt512 value, bool expected) + { + bool result = Helper.IsOddInteger(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsPositiveTestData))] + public async Task IsPositiveTest(UInt512 value, bool expected) + { + bool result = Helper.IsPositive(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsPositiveInfinityTestData))] + public async Task IsPositiveInfinityTest(UInt512 value, bool expected) + { + bool result = Helper.IsPositiveInfinity(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsRealNumberTestData))] + public async Task IsRealNumberTest(UInt512 value, bool expected) + { + bool result = Helper.IsRealNumber(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsSubnormalTestData))] + public async Task IsSubnormalTest(UInt512 value, bool expected) + { + bool result = Helper.IsSubnormal(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsZeroTestData))] + public async Task IsZeroTest(UInt512 value, bool expected) + { + bool result = Helper.IsZero(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(MaxMagnitudeTestData))] + public async Task MaxMagnitudeTest(UInt512 x, UInt512 y, UInt512 expected) + { + var result = Helper.MaxMagnitude(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(MaxMagnitudeNumberTestData))] + public async Task MaxMagnitudeNumberTest(UInt512 x, UInt512 y, UInt512 expected) + { + var result = Helper.MaxMagnitudeNumber(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(MinMagnitudeTestData))] + public async Task MinMagnitudeTest(UInt512 x, UInt512 y, UInt512 expected) + { + var result = Helper.MinMagnitude(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(MinMagnitudeNumberTestData))] + public async Task MinMagnitudeNumberTest(UInt512 x, UInt512 y, UInt512 expected) + { + var result = Helper.MinMagnitudeNumber(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(MultiplyAddEstimateTestData))] + public async Task MultiplyAddEstimateTest(UInt512 left, UInt512 right, UInt512 addend, UInt512 expected) + { + var result = Helper.MultiplyAddEstimate(left, right, addend); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(ParseTestData))] + public async Task ParseTest(string s, NumberStyles style, IFormatProvider? provider, UInt512 expected) + { + var result = Helper.Parse(s, style, provider); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(ParseSpanTestData))] + public async Task ParseTest(char[] s, NumberStyles style, IFormatProvider? provider, UInt512 expected) + { + var result = Helper.Parse(s, style, provider); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(ParseUtf8TestData))] + public async Task ParseTest(byte[] utf8Text, NumberStyles style, IFormatProvider? provider, UInt512 expected) + { + var result = Helper.Parse(utf8Text, style, provider); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(TryParseTestData))] + public async Task TryParseTest(string s, NumberStyles style, IFormatProvider? provider, bool expected, UInt512 expectedValue) + { + var success = Helper.TryParse(s, style, provider, out var result); + using (Assert.Multiple()) + { + await Assert.That(success).IsEqualTo(expected); + await Assert.That(result).IsEqualTo(expectedValue); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(TryParseSpanTestData))] + public async Task TryParseTest(char[] s, NumberStyles style, IFormatProvider? provider, bool expected, UInt512 expectedValue) + { + var success = Helper.TryParse(s, style, provider, out var result); + using (Assert.Multiple()) + { + await Assert.That(success).IsEqualTo(expected); + await Assert.That(result).IsEqualTo(expectedValue); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(TryParseUtf8TestData))] + public async Task TryParseTest(byte[] utf8Text, NumberStyles style, IFormatProvider? provider, bool expected, UInt512 expectedValue) + { + var success = Helper.TryParse(utf8Text, style, provider, out var result); + using (Assert.Multiple()) + { + await Assert.That(success).IsEqualTo(expected); + await Assert.That(result).IsEqualTo(expectedValue); + } + } + #endregion + + #region INumber + [Test] + [MethodDataSource(typeof(DataSources), nameof(ClampTestData))] + public async Task ClampTest(UInt512 value, UInt512 min, UInt512 max, UInt512 expected) + { + if (min > max) + { + await Assert.That(() => Helper.Clamp(value, min, max)).Throws(); + } + else + { + var result = Helper.Clamp(value, min, max); + await Assert.That(result).IsEqualTo(expected); + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(CopySignTestData))] + public async Task CopySignTest(UInt512 value, UInt512 sign, UInt512 expected) + { + var result = Helper.CopySign(value, sign); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(MaxTestData))] + public async Task MaxTest(UInt512 x, UInt512 y, UInt512 expected) + { + var result = Helper.Max(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(MaxNumberTestData))] + public async Task MaxNumberTest(UInt512 x, UInt512 y, UInt512 expected) + { + var result = Helper.MaxNumber(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(MinTestData))] + public async Task MinTest(UInt512 x, UInt512 y, UInt512 expected) + { + var result = Helper.Min(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(MinNumberTestData))] + public async Task MinNumberTest(UInt512 x, UInt512 y, UInt512 expected) + { + var result = Helper.MinNumber(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(SignTestData))] + public async Task SignTest(UInt512 value, int expected) + { + var result = Helper.Sign(value); + await Assert.That(result).IsEqualTo(expected); + } + #endregion + + #region IBinaryNumber + [Test] + [MethodDataSource(typeof(DataSources), nameof(IsPow2TestData))] + public async Task IsPow2Test(UInt512 value, bool expected) + { + var result = Helper.IsPow2(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(Log2TestData))] + public async Task Log2Test(UInt512 value, UInt512 expected) + { + var result = Helper.Log2(value); + await Assert.That(result).IsEqualTo(expected); + } + #endregion + + #region IBinaryInteger + [Test] + [MethodDataSource(typeof(DataSources), nameof(DivRemTestData))] + public async Task DivRemTest(UInt512 left, UInt512 right, (UInt512, UInt512) expected) + { + var result = Helper.DivRem(left, right); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(LeadingZeroCountTestData))] + public async Task LeadingZeroCountTest(UInt512 value, UInt512 expected) + { + var result = Helper.LeadingZeroCount(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(PopCountTestData))] + public async Task PopCountTest(UInt512 value, UInt512 expected) + { + var result = Helper.PopCount(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(ReadBigEndianTestData))] + public async Task ReadBigEndianTest(byte[] source, bool isUnsigned, UInt512 expected) + { + var result = Helper.ReadBigEndian(source, isUnsigned); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(ReadLittleEndianTestData))] + public async Task ReadLittleEndianTest(byte[] source, bool isUnsigned, UInt512 expected) + { + var result = Helper.ReadLittleEndian(source, isUnsigned); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(RotateLeftTestData))] + public async Task RotateLeftTest(UInt512 value, int shiftAmount, UInt512 expected) + { + var result = Helper.RotateLeft(value, shiftAmount); + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(RotateRightTestData))] + public async Task RotateRightTest(UInt512 value, int shiftAmount, UInt512 expected) + { + var result = Helper.RotateRight(value, shiftAmount); + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(TrailingZeroCountTestData))] + public async Task TrailingZeroCountTest(UInt512 value, UInt512 expected) + { + var result = Helper.TrailingZeroCount(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(GetByteCountTestData))] + public async Task GetByteCountTest(UInt512 value, int expected) + { + var result = Helper.GetByteCount(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(GetShortestBitLengthTestData))] + public async Task GetShortestBitLengthTest(UInt512 value, int expected) + { + var result = Helper.GetShortestBitLength(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(WriteBigEndianTestData))] + public async Task WriteBigEndianTest(UInt512 value, byte[] expectedDestination, int expected) + { + byte[] buffer = new byte[UInt512.Size]; + var result = Helper.WriteBigEndian(value, buffer); + + using (Assert.Multiple()) + { + await Assert.That(result).IsEqualTo(expected); + await Assert.That(buffer.Length).IsEqualTo(expectedDestination.Length); + for (int i = 0; i < buffer.Length; i++) + { + await Assert.That(buffer[i]).IsEqualTo(expectedDestination[i]); + } + } + } + [Test] + [MethodDataSource(typeof(DataSources), nameof(WriteLittleEndianTestData))] + public async Task WriteLittleEndianTest(UInt512 value, byte[] expectedDestination, int expected) + { + byte[] buffer = new byte[UInt512.Size]; + var result = Helper.WriteLittleEndian(value, buffer); + + using (Assert.Multiple()) + { + await Assert.That(result).IsEqualTo(expected); + await Assert.That(buffer.Length).IsEqualTo(expectedDestination.Length); + for (int i = 0; i < buffer.Length; i++) + { + await Assert.That(buffer[i]).IsEqualTo(expectedDestination[i]); + } + } + } + #endregion +} \ No newline at end of file From ca06d9a4510fab67443aaef2d6e3ca003e661794 Mon Sep 17 00:00:00 2001 From: crookseta Date: Fri, 30 May 2025 16:19:22 -0500 Subject: [PATCH 08/74] - Added signed 256-bit addition tests. --- .../Data/Int256DataSources.cs | 28 +++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int256DataSources.cs b/src/MissingValues.Tests/Data/Int256DataSources.cs index bf43eaf..1b323cf 100644 --- a/src/MissingValues.Tests/Data/Int256DataSources.cs +++ b/src/MissingValues.Tests/Data/Int256DataSources.cs @@ -16,12 +16,27 @@ public class Int256DataSources { public static IEnumerable> op_AdditionTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, Int256.Zero, Int256.Zero); + yield return () => (Int256.One, Int256.Zero, Int256.One); + yield return () => (Int256.One, Int256.One, new Int256(0, 0, 0, 2)); + yield return () => (new Int256(0, 0, 1, ulong.MaxValue), new Int256(0, 0, 1, 1), new Int256(0, 0, 3, 0)); + yield return () => (new Int256(0, 1, ulong.MaxValue, ulong.MaxValue), new Int256(0, 1, 1, 1), new Int256(0, 3, 1, 0)); + yield return () => (new Int256(1, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new Int256(1, 1, 1, 1), new Int256(3, 1, 1, 0)); + yield return () => (Int256.MaxValue, Int256.One, Int256.MinValue); + yield return () => (Int256.NegativeOne, Int256.One, Int256.Zero); } public static IEnumerable> op_CheckedAdditionTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, Int256.Zero, Int256.Zero, false); + yield return () => (Int256.One, Int256.Zero, Int256.One, false); + yield return () => (Int256.One, Int256.One, new Int256(0, 0, 0, 2), false); + yield return () => (new Int256(0, 0, 1, ulong.MaxValue), new Int256(0, 0, 1, 1), new Int256(0, 0, 3, 0), false); + yield return () => (new Int256(0, 1, ulong.MaxValue, ulong.MaxValue), new Int256(0, 1, 1, 1), new Int256(0, 3, 1, 0), false); + yield return () => (new Int256(1, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new Int256(1, 1, 1, 1), new Int256(3, 1, 1, 0), false); + yield return () => (Int256.MaxValue, Int256.One, Int256.MinValue, true); + yield return () => (Int256.NegativeOne, Int256.One, Int256.Zero, false); + yield return () => (Int256.MinValue, Int256.NegativeOne, Int256.MaxValue, true); } public static IEnumerable> op_CheckedDecrementTestData() @@ -141,17 +156,20 @@ public class Int256DataSources public static IEnumerable> AbsTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, Int256.Zero); + yield return () => (Int256.One, Int256.One); + yield return () => (Int256.NegativeOne, Int256.One); + yield return () => (Int256.MaxValue, Int256.MinValue + Int256.One); } public static IEnumerable> IsCanonicalTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, true); } public static IEnumerable> IsComplexNumberTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, true); } public static IEnumerable> IsEvenIntegerTestData() From 7e184e33dbdd29497afee6723c08f4b40f82772a Mon Sep 17 00:00:00 2001 From: crookseta Date: Fri, 13 Jun 2025 20:16:17 -0500 Subject: [PATCH 09/74] Added tests for Int256 methods: op_CheckedDecrement, op_CheckedIncrement, op_CheckedMultiply, op_CheckedSubtraction, op_Decrement, op_Division, op_Increment, op_Modulus, op_Multiply and op_Subtraction --- .../Data/Int256DataSources.cs | 106 ++++++++++++++++-- .../Numerics/Int256GenericMathTests.cs | 2 +- 2 files changed, 96 insertions(+), 12 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int256DataSources.cs b/src/MissingValues.Tests/Data/Int256DataSources.cs index 1b323cf..c5a3dfe 100644 --- a/src/MissingValues.Tests/Data/Int256DataSources.cs +++ b/src/MissingValues.Tests/Data/Int256DataSources.cs @@ -41,52 +41,136 @@ public class Int256DataSources public static IEnumerable> op_CheckedDecrementTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, Int256.NegativeOne, false); + yield return () => (Int256.One, Int256.Zero, false); + yield return () => (new Int256(0, 0, 0, 2), new Int256(0, 0, 0, 1), false); + yield return () => (new Int256(0, 0, 1, 0), new Int256(0, 0, 0, ulong.MaxValue), false); + yield return () => (new Int256(0, 1, 0, 0), new Int256(0, 0, ulong.MaxValue, ulong.MaxValue), false); + yield return () => (new Int256(1, 0, 0, 0), new Int256(0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), false); + yield return () => (Int256.MinValue, Int256.MaxValue, true); } public static IEnumerable> op_CheckedIncrementTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, Int256.One, false); + yield return () => (Int256.One, new Int256(0, 0, 0, 2), false); + yield return () => (Int256.MaxValue, Int256.Zero, true); + yield return () => (Int256.NegativeOne, Int256.Zero, false); + yield return () => (new Int256(0, 0, 0, ulong.MaxValue), new Int256(0, 0, 1, 0), false); + yield return () => (new Int256(0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new Int256(1, 0, 0, 0), false); + yield return () => (new Int256(unchecked((ulong)-123456789), 987654321, 555555555, 999999999), new Int256(unchecked((ulong)-123456789), 987654321, 555555555, 1000000000), false); } public static IEnumerable> op_CheckedMultiplyTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, Int256.Zero, Int256.Zero, false); + yield return () => (Int256.One, Int256.One, Int256.One, false); + yield return () => (Int256.One, Int256.NegativeOne, Int256.NegativeOne, false); + yield return () => (Int256.NegativeOne, Int256.NegativeOne, Int256.One, false); + yield return () => (new Int256(0, 0, 0, 2), new Int256(0, 0, 0, 3), new Int256(0, 0, 0, 6), false); + yield return () => (Int256.MaxValue, Int256.One, Int256.MaxValue, false); + yield return () => (Int256.MaxValue, new Int256(0, 0, 0, 2), default, true); + yield return () => (Int256.MinValue, Int256.NegativeOne, default, true); + yield return () => (new Int256(0, 0, 0, ulong.MaxValue), new Int256(0, 0, 0, ulong.MaxValue), default, true); + yield return () => (new Int256(ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new Int256(2, 0, 0, 0), default, true); } public static IEnumerable> op_CheckedSubtractionTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, Int256.Zero, Int256.Zero, false); + yield return () => (Int256.One, Int256.Zero, Int256.One, false); + yield return () => (Int256.One, Int256.One, Int256.Zero, false); + yield return () => (new Int256(0, 0, 0, 2), Int256.One, Int256.One, false); + yield return () => (new Int256(0, 0, 1, 0), new Int256(0, 0, 0, 1), new Int256(0, 0, 0, ulong.MaxValue), false); + yield return () => (new Int256(0, 1, 0, 0), new Int256(0, 0, ulong.MaxValue, ulong.MaxValue), new Int256(0, 0, 0, 1), false); + yield return () => (Int256.MinValue, Int256.One, Int256.MaxValue, true); + yield return () => (Int256.MaxValue, Int256.NegativeOne, Int256.MinValue, true); } public static IEnumerable> op_DecrementTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, Int256.NegativeOne); + yield return () => (Int256.One, Int256.Zero); + yield return () => (new Int256(0, 0, 0, 2), new Int256(0, 0, 0, 1)); + yield return () => (new Int256(0, 0, 1, 0), new Int256(0, 0, 0, ulong.MaxValue)); + yield return () => (new Int256(0, 1, 0, 0), new Int256(0, 0, ulong.MaxValue, ulong.MaxValue)); + yield return () => (new Int256(1, 0, 0, 0), new Int256(0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); + yield return () => (Int256.MinValue, Int256.MaxValue); } public static IEnumerable> op_DivisionTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, Int256.One, Int256.Zero); + yield return () => (Int256.One, Int256.One, Int256.One); + yield return () => (Int256.One, Int256.NegativeOne, Int256.NegativeOne); + yield return () => (Int256.NegativeOne, Int256.One, Int256.NegativeOne); + yield return () => (new Int256(0, 0, 0, 4), new Int256(0, 0, 0, 2), new Int256(0, 0, 0, 2)); + yield return () => (Int256.MaxValue, Int256.One, Int256.MaxValue); + yield return () => (Int256.MinValue, Int256.One, Int256.MinValue); + yield return () => (Int256.Zero, Int256.MaxValue, Int256.Zero); + yield return () => (Int256.MaxValue, Int256.MaxValue, Int256.One); + yield return () => (Int256.MinValue, Int256.MinValue, Int256.One); + yield return () => (new Int256(0, 0, 1, 0), new Int256(0, 1, 0, 0), Int256.Zero); + yield return () => (Int256.Parse("340282366920938463463374607431768211456"), Int256.Parse("18446744073709551616"), Int256.Parse("18446744073709551616")); + yield return () => (Int256.Parse("340282366920938463463374607431768211456"), Int256.Parse("-18446744073709551616"), Int256.Parse("-18446744073709551616")); + yield return () => (Int256.Parse("-340282366920938463463374607431768211456"), Int256.Parse("18446744073709551616"), Int256.Parse("-18446744073709551616")); + yield return () => (Int256.Parse("-340282366920938463463374607431768211456"), Int256.Parse("-18446744073709551616"), Int256.Parse("18446744073709551616")); + yield return () => (Int256.Parse("-340282366920938463463374607431768211456"), Int256.Parse("-18446744073709551616"), Int256.Parse("18446744073709551616")); + yield return () => (Int256.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968"), new Int256(0, 0, 0, 10), Int256.Parse("5789604461865809771178549250434395392663499233282028201972879200395656481996")); + yield return () => (Int256.Parse("170141183460469231731687303715884105728"), new Int256(0, 0, 0, 10), Int256.Parse("17014118346046923173168730371588410572")); + yield return () => (Int256.Parse("-170141183460469231731687303715884105728"), new Int256(0, 0, 0, 10), Int256.Parse("-17014118346046923173168730371588410572")); } public static IEnumerable> op_IncrementTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, Int256.One); + yield return () => (Int256.One, new Int256(0, 0, 0, 2)); + yield return () => (Int256.MaxValue, Int256.MinValue); + yield return () => (Int256.NegativeOne, Int256.Zero); + yield return () => (new Int256(0, 0, 0, ulong.MaxValue), new Int256(0, 0, 1, 0)); + yield return () => (new Int256(0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new Int256(1, 0, 0, 0)); + yield return () => (new Int256(123456789, 987654321, 555555555, 999999999), new Int256(123456789, 987654321, 555555555, 1000000000)); + yield return () => (new Int256(0x8000000000000000, 0, 0, 0),new Int256(0x8000000000000000, 0, 0, 1)); } public static IEnumerable> op_ModulusTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, Int256.One, Int256.Zero); + yield return () => (Int256.One, Int256.One, Int256.Zero); + yield return () => (new Int256(0, 0, 0, 123456789), Int256.One, Int256.Zero); + yield return () => (Int256.MaxValue, Int256.MaxValue, Int256.Zero); + yield return () => (new Int256(0, 0, 1, 0), new Int256(0, 1, 0, 0), new Int256(0, 0, 1, 0)); + yield return () => (new Int256(0, 0, 0, 10), new Int256(0, 0, 0, 3), new Int256(0, 0, 0, 1)); + yield return () => (new Int256(0, 0, 0, 15), new Int256(0, 0, 0, 5), Int256.Zero); + yield return () => (Int256.NegativeOne, new Int256(0, 0, 0, 2), Int256.NegativeOne); + yield return () => (new Int256(0, 0, 0, 7), Int256.NegativeOne, Int256.Zero); + yield return () => (Int256.MaxValue, new Int256(0, 0, 0, 123456789), new Int256(0, 0, 0, 77645365)); + yield return () => (Int256.Parse("401734511064747568885490523085290650630550748445698208825344"), Int256.Parse("100000000000000000000000000000000000000000000000000000000000"), Int256.Parse("1734511064747568885490523085290650630550748445698208825344")); } public static IEnumerable> op_MultiplyTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, Int256.Zero, Int256.Zero); + yield return () => (Int256.Zero, Int256.One, Int256.Zero); + yield return () => (Int256.One, Int256.One, Int256.One); + yield return () => (Int256.One, Int256.NegativeOne, Int256.NegativeOne); + yield return () => (Int256.NegativeOne, Int256.NegativeOne, Int256.One); + yield return () => (new Int256(0, 0, 0, 2), new Int256(0, 0, 0, 3), new Int256(0, 0, 0, 6)); + yield return () => (new Int256(0, 0, 0, ulong.MaxValue), new Int256(0, 0, 0, 2), new Int256(0, 0, 1, ulong.MaxValue - 1)); + yield return () => (new Int256(0, 0, 0, ulong.MaxValue), new Int256(0, 0, 0, ulong.MaxValue), new Int256(ulong.MaxValue - 1, ulong.MaxValue, 0, 1)); } public static IEnumerable> op_SubtractionTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, Int256.Zero, Int256.Zero); + yield return () => (Int256.One, Int256.Zero, Int256.One); + yield return () => (Int256.One, Int256.One, Int256.Zero); + yield return () => (Int256.Zero, Int256.One, Int256.NegativeOne); + yield return () => (Int256.MaxValue,Int256.One, Int256.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819966")); + yield return () => (Int256.MinValue,Int256.One,Int256.MaxValue); + yield return () => (Int256.MinValue,Int256.NegativeOne, Int256.Parse("-57896044618658097711785492504343953926634992332820282019728792003956564819967")); + yield return () => (new Int256(1, 2, 3, 4),new Int256(0, 1, 2, 3),new Int256(1, 1, 1, 1)); + yield return () => (new Int256(0, 0, 0, 0),new Int256(0, 0, 0, 1),new Int256(unchecked((ulong)-1), ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); } public static IEnumerable> op_ShiftLeftTestData() @@ -159,7 +243,7 @@ public class Int256DataSources yield return () => (Int256.Zero, Int256.Zero); yield return () => (Int256.One, Int256.One); yield return () => (Int256.NegativeOne, Int256.One); - yield return () => (Int256.MaxValue, Int256.MinValue + Int256.One); + yield return () => (Int256.MinValue + Int256.One, Int256.MaxValue); } public static IEnumerable> IsCanonicalTestData() diff --git a/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs b/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs index 99aba6d..02e65e0 100644 --- a/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs @@ -43,7 +43,7 @@ public async Task op_CheckedAdditionTest(Int256 left, Int256 right, Int256 expec public async Task op_IncrementTest(Int256 value, Int256 expected) { var result = ++value; - + await Assert.That(result).IsEqualTo(expected).And.IsEqualTo(value); } [Test] From 2b4875a27b5c66639406c9c59be0bc2306b77f40 Mon Sep 17 00:00:00 2001 From: crookseta Date: Mon, 16 Jun 2025 20:04:15 -0500 Subject: [PATCH 10/74] Added tests for Int256 methods: op_ShiftLeft, op_ShiftRight, op_UnsignedShiftRight, op_BitwiseAnd, op_BitwiseOr, op_BitwiseXor, op_OnesComplement, op_Equality, op_Inequality, op_GreaterThanOrEqual, op_GreaterThan, op_LessThanOrEqual, op_LessThan --- .../Data/Int256DataSources.cs | 104 +++++++++++++++--- 1 file changed, 89 insertions(+), 15 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int256DataSources.cs b/src/MissingValues.Tests/Data/Int256DataSources.cs index c5a3dfe..915b3d4 100644 --- a/src/MissingValues.Tests/Data/Int256DataSources.cs +++ b/src/MissingValues.Tests/Data/Int256DataSources.cs @@ -71,7 +71,7 @@ public class Int256DataSources yield return () => (Int256.MaxValue, Int256.One, Int256.MaxValue, false); yield return () => (Int256.MaxValue, new Int256(0, 0, 0, 2), default, true); yield return () => (Int256.MinValue, Int256.NegativeOne, default, true); - yield return () => (new Int256(0, 0, 0, ulong.MaxValue), new Int256(0, 0, 0, ulong.MaxValue), default, true); + yield return () => (new Int256(0, 0, 0, ulong.MaxValue), new Int256(0, 0, 0, ulong.MaxValue), Int256.Parse("340282366920938463426481119284349108225"), false); yield return () => (new Int256(ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new Int256(2, 0, 0, 0), default, true); } @@ -175,67 +175,141 @@ public class Int256DataSources public static IEnumerable> op_ShiftLeftTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, 100, Int256.Zero); + yield return () => (Int256.One, 0, Int256.One); + yield return () => (Int256.One, 1, new Int256(0, 0, 0, 2)); + yield return () => (Int256.One, 2, new Int256(0, 0, 0, 4)); + yield return () => (Int256.One, 64, new Int256(0, 0, 1, 0)); + yield return () => (Int256.One, 128, new Int256(0, 1, 0, 0)); + yield return () => (Int256.One, 192, new Int256(1, 0, 0, 0)); + yield return () => (new Int256(0, 0, 0, 0xFFFF_FFFF_FFFF_FFFF), 32, new Int256(0, 0, 0xFFFF_FFFF, 0xFFFF_FFFF_0000_0000)); + yield return () => (new Int256(0, 0, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), 96, new Int256(0xFFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_0000_0000, 0)); + yield return () => (Int256.One, 256, Int256.One); } public static IEnumerable> op_ShiftRightTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, 100, Int256.Zero); + yield return () => (Int256.One, 0, Int256.One); + yield return () => (new Int256(1, 0, 0, 0), 64, new Int256(0, 1, 0, 0)); + yield return () => (new Int256(1, 0, 0, 0), 128, new Int256(0, 0, 1, 0)); + yield return () => (new Int256(1, 0, 0, 0), 192, new Int256(0, 0, 0, 1)); + yield return () => (new Int256(0b1000000000000000000000000000000000000000000000000000000000000000, 0, 0, 0), 031, new Int256(0b1111111111111111111111111111111100000000000000000000000000000000, 0, 0, 0)); + yield return () => (new Int256(0b1000000000000000000000000000000000000000000000000000000000000000, 0, 0, 0), 127, new Int256(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0, 0)); + yield return () => (new Int256(0b1000000000000000000000000000000000000000000000000000000000000000, 0, 0, 0), 255, new Int256(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => (Int256.One, 256, Int256.One); } public static IEnumerable> op_UnsignedShiftRightTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, 100, Int256.Zero); + yield return () => (Int256.One, 0, Int256.One); + yield return () => (new Int256(1, 0, 0, 0), 64, new Int256(0, 1, 0, 0)); + yield return () => (new Int256(1, 0, 0, 0), 128, new Int256(0, 0, 1, 0)); + yield return () => (new Int256(1, 0, 0, 0), 192, new Int256(0, 0, 0, 1)); + yield return () => (new Int256(0xFFFF_FFFF_FFFF_FFFF, 0, 0, 0), 64, new Int256(0, 0xFFFF_FFFF_FFFF_FFFF, 0, 0)); + yield return () => (new Int256(0xFFFF_FFFF_FFFF_FFFF, 0, 0, 0), 128, new Int256(0, 0, 0xFFFF_FFFF_FFFF_FFFF, 0)); + yield return () => (new Int256(0xFFFF_FFFF_FFFF_FFFF, 0, 0, 0), 192, new Int256(0, 0, 0, 0xFFFF_FFFF_FFFF_FFFF)); + yield return () => (Int256.One, 256, Int256.One); } public static IEnumerable> op_BitwiseAndTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, Int256.Zero, Int256.Zero); + yield return () => (Int256.Zero, Int256.MaxValue, Int256.Zero); + yield return () => (new Int256(1, 2, 3, 4), new Int256(1, 2, 3, 4), new Int256(1, 2, 3, 4)); + yield return () => (new Int256(1, 2, 3, 4), Int256.MaxValue, new Int256(1, 2, 3, 4)); + yield return () => (new Int256(0xFFFFFFFF00000000, 0xAAAAAAAA55555555, 0x123456789ABCDEF0, 0x0F0F0F0F0F0F0F0F), new Int256(0x00000000FFFFFFFF, 0x55555555AAAAAAAA, 0x0F0F0F0F0F0F0F0F, 0xF0F0F0F0F0F0F0F0), new Int256(0x0000000000000000, 0x0000000000000000, 0x020406080A0C0E00, 0x0000000000000000)); } public static IEnumerable> op_BitwiseOrTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, Int256.Zero, Int256.Zero); + yield return () => (Int256.Zero, Int256.MaxValue, Int256.MaxValue); + yield return () => (new Int256(1, 2, 3, 4), new Int256(1, 2, 3, 4), new Int256(1, 2, 3, 4)); + yield return () => (new Int256(1, 2, 3, 4), Int256.MaxValue, Int256.MaxValue); + yield return () => (new Int256(0x00000000FFFFFFFF, 0xAAAAAAAA00000000, 0x00000000AAAAAAAA, 0x1234567890ABCDEF), new Int256(0xFFFFFFFF00000000, 0x0000000055555555, 0x5555555500000000, 0xFEDCBA9876543210), new Int256(0xFFFFFFFFFFFFFFFF, 0xAAAAAAAA55555555, 0x55555555AAAAAAAA, 0xFEFCFEF8F6FFFFFF)); } public static IEnumerable> op_BitwiseXorTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, Int256.Zero, Int256.Zero); + yield return () => (Int256.Zero, Int256.MaxValue, Int256.MaxValue); + yield return () => (new Int256(1, 2, 3, 4), new Int256(1, 2, 3, 4), Int256.Zero); + yield return () => (new Int256(0x0000000000000000, 0xFFFFFFFFFFFFFFFF, 0x1234567890ABCDEF, 0xFEDCBA9876543210), Int256.MaxValue, new Int256(ulong.MaxValue, 0x0, 0xEDCBA9876F543210, 0x0123456789ABCDEF)); + yield return () => (new Int256(0x1234567890ABCDEF, 0xAAAAAAAA00000000, 0x00000000AAAAAAAA, 0xFFFFFFFFFFFFFFFF), new Int256(0xFFFFFFFFFFFFFFFF, 0x00000000AAAAAAAA, 0xAAAAAAAA00000000, 0x0000000000000000), new Int256(0xEDCBA9876F543210, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xFFFFFFFFFFFFFFFF)); } public static IEnumerable> op_OnesComplementTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, Int256.MaxValue); + yield return () => (Int256.MaxValue, Int256.Zero); + yield return () => (new Int256(0xAAAAAAAAAAAAAAAA, 0x5555555555555555, 0xAAAAAAAAAAAAAAAA, 0x5555555555555555), new Int256(0x5555555555555555, 0xAAAAAAAAAAAAAAAA, 0x5555555555555555, 0xAAAAAAAAAAAAAAAA)); + yield return () => (new Int256(0x0123456789ABCDEF, 0xFEDCBA9876543210, 0x0F0F0F0F0F0F0F0F, 0xF0F0F0F0F0F0F0F0), new Int256(~0x0123456789ABCDEFU, ~0xFEDCBA9876543210U, ~0x0F0F0F0F0F0F0F0FU, ~0xF0F0F0F0F0F0F0F0U)); } public static IEnumerable> op_EqualityTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, Int256.Zero, true); + yield return () => (new Int256(1, 2, 3, 4), new Int256(1, 2, 3, 4), true); + yield return () => (new Int256(1, 2, 3, 4), new Int256(1, 2, 3, 5), false); + yield return () => (new Int256(1, 2, 3, 4), new Int256(1, 2, 4, 4), false); + yield return () => (new Int256(1, 2, 3, 4), new Int256(1, 3, 3, 4), false); + yield return () => (new Int256(1, 2, 3, 4), new Int256(2, 2, 3, 4), false); } public static IEnumerable> op_InequalityTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, Int256.Zero, false); + yield return () => (new Int256(1, 2, 3, 4), new Int256(1, 2, 3, 4), false); + yield return () => (new Int256(1, 2, 3, 4), new Int256(1, 2, 3, 5), true); + yield return () => (new Int256(1, 2, 3, 4), new Int256(1, 2, 4, 4), true); + yield return () => (new Int256(1, 2, 3, 4), new Int256(1, 3, 3, 4), true); + yield return () => (new Int256(1, 2, 3, 4), new Int256(2, 2, 3, 4), true); } public static IEnumerable> op_GreaterThanOrEqualTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, Int256.Zero, true); + yield return () => (Int256.NegativeOne, Int256.One, false); + yield return () => (Int256.One, Int256.NegativeOne, true); + yield return () => (Int256.Zero, Int256.MinValue, true); + yield return () => (Int256.Zero, Int256.NegativeOne, true); + yield return () => (Int256.Zero, Int256.One, false); + yield return () => (Int256.Zero, Int256.MaxValue, false); } public static IEnumerable> op_GreaterThanTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, Int256.Zero, false); + yield return () => (Int256.NegativeOne, Int256.One, false); + yield return () => (Int256.One, Int256.NegativeOne, true); + yield return () => (Int256.Zero, Int256.MinValue, true); + yield return () => (Int256.Zero, Int256.NegativeOne, true); + yield return () => (Int256.Zero, Int256.One, false); + yield return () => (Int256.Zero, Int256.MaxValue, false); } public static IEnumerable> op_LessThanOrEqualTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, Int256.Zero, true); + yield return () => (Int256.NegativeOne, Int256.One, true); + yield return () => (Int256.One, Int256.NegativeOne, false); + yield return () => (Int256.Zero, Int256.MinValue, false); + yield return () => (Int256.Zero, Int256.NegativeOne, false); + yield return () => (Int256.Zero, Int256.One, true); + yield return () => (Int256.Zero, Int256.MaxValue, true); } public static IEnumerable> op_LessThanTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, Int256.Zero, false); + yield return () => (Int256.NegativeOne, Int256.One, true); + yield return () => (Int256.One, Int256.NegativeOne, false); + yield return () => (Int256.Zero, Int256.MinValue, false); + yield return () => (Int256.Zero, Int256.NegativeOne, false); + yield return () => (Int256.Zero, Int256.One, true); + yield return () => (Int256.Zero, Int256.MaxValue, true); } public static IEnumerable> AbsTestData() @@ -253,7 +327,7 @@ public class Int256DataSources public static IEnumerable> IsComplexNumberTestData() { - yield return () => (Int256.Zero, true); + yield return () => (Int256.Zero, false); } public static IEnumerable> IsEvenIntegerTestData() From cc5fe58776c03637a5848f1eef389613253a3edd Mon Sep 17 00:00:00 2001 From: crookseta Date: Mon, 30 Jun 2025 18:03:36 -0500 Subject: [PATCH 11/74] - Added signed 256-bit Is* method tests. --- .../Data/Int256DataSources.cs | 89 +++++++++++++++---- 1 file changed, 73 insertions(+), 16 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int256DataSources.cs b/src/MissingValues.Tests/Data/Int256DataSources.cs index 915b3d4..6e87c4d 100644 --- a/src/MissingValues.Tests/Data/Int256DataSources.cs +++ b/src/MissingValues.Tests/Data/Int256DataSources.cs @@ -332,77 +332,123 @@ public class Int256DataSources public static IEnumerable> IsEvenIntegerTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, true); + yield return () => (Int256.One, false); + yield return () => (Int256.NegativeOne, false); + yield return () => (new Int256(0, 0, 0, 2), true); + yield return () => (new Int256(0, 0, 0, 3), false); + yield return () => (new Int256(0, 0, 0, 4), true); + yield return () => (new Int256(0, 0, 0, 6), true); + yield return () => (new Int256(0, 0, 0, 8), true); + yield return () => (new Int256(0, 0, 0, 16), true); + yield return () => (-new Int256(0, 0, 0, 2), true); + yield return () => (-new Int256(0, 0, 0, 3), false); + yield return () => (-new Int256(0, 0, 0, 4), true); + yield return () => (-new Int256(0, 0, 0, 6), true); + yield return () => (-new Int256(0, 0, 0, 8), true); + yield return () => (-new Int256(0, 0, 0, 16), true); } public static IEnumerable> IsFiniteTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, true); } public static IEnumerable> IsImaginaryNumberTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, false); } public static IEnumerable> IsInfinityTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, false); } public static IEnumerable> IsIntegerTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, true); } public static IEnumerable> IsNaNTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, false); } public static IEnumerable> IsNegativeTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, false); + yield return () => (Int256.One, false); + yield return () => (Int256.MaxValue, false); + yield return () => (Int256.NegativeOne, true); + yield return () => (-Int256.One, true); + yield return () => (-Int256.MaxValue, true); + yield return () => (Int256.MinValue, true); } public static IEnumerable> IsNegativeInfinityTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, false); } public static IEnumerable> IsNormalTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, false); + yield return () => (Int256.One, true); + yield return () => (Int256.NegativeOne, true); } public static IEnumerable> IsOddIntegerTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, false); + yield return () => (Int256.One, true); + yield return () => (Int256.NegativeOne, true); + yield return () => (new Int256(0, 0, 0, 2), false); + yield return () => (new Int256(0, 0, 0, 3), true); + yield return () => (new Int256(0, 0, 0, 4), false); + yield return () => (new Int256(0, 0, 0, 6), false); + yield return () => (new Int256(0, 0, 0, 8), false); + yield return () => (new Int256(0, 0, 0, 16), false); + yield return () => (-new Int256(0, 0, 0, 2), false); + yield return () => (-new Int256(0, 0, 0, 3), true); + yield return () => (-new Int256(0, 0, 0, 4), false); + yield return () => (-new Int256(0, 0, 0, 6), false); + yield return () => (-new Int256(0, 0, 0, 8), false); + yield return () => (-new Int256(0, 0, 0, 16), false); } public static IEnumerable> IsPositiveTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, true); + yield return () => (Int256.One, true); + yield return () => (Int256.MaxValue, true); + yield return () => (Int256.NegativeOne, false); + yield return () => (-Int256.One, false); + yield return () => (-Int256.MaxValue, false); + yield return () => (Int256.MinValue, false); } public static IEnumerable> IsPositiveInfinityTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, false); } public static IEnumerable> IsRealNumberTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, true); } public static IEnumerable> IsSubnormalTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, false); } public static IEnumerable> IsZeroTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, true); + yield return () => (Int256.One, false); + yield return () => (Int256.NegativeOne, false); + yield return () => (Int256.MaxValue, false); + yield return () => (Int256.MinValue, false); } public static IEnumerable> MaxMagnitudeTestData() @@ -497,7 +543,18 @@ public class Int256DataSources public static IEnumerable> IsPow2TestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, false); + yield return () => (Int256.One, true); + yield return () => (new Int256(0, 0, 0, 3), false); + yield return () => (new Int256(0, 0, 0, 4), true); + yield return () => (new Int256(0, 0, 0, 6), false); + yield return () => (new Int256(0, 0, 0, 8), true); + yield return () => (new Int256(1UL << 62, 0, 0, 0), true); + yield return () => (Int256.NegativeOne, false); + yield return () => (-new Int256(0, 0, 0, 3), false); + yield return () => (-new Int256(0, 0, 0, 4), false); + yield return () => (-new Int256(0, 0, 0, 6), false); + yield return () => (-new Int256(0, 0, 0, 8), false); } public static IEnumerable> Log2TestData() From 574ab2d8ddc86a1f2c5ed64b065ff327b620a6a9 Mon Sep 17 00:00:00 2001 From: crookseta Date: Thu, 31 Jul 2025 20:24:50 -0500 Subject: [PATCH 12/74] MaxMagnitude, MaxMagnitudeNumber, MinMagnitude, MinMagnitudeNumber, MultiplyAddEstimate and Parse tests for Int256. --- .../Data/Int256DataSources.cs | 176 +++++++++++++++++- 1 file changed, 168 insertions(+), 8 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int256DataSources.cs b/src/MissingValues.Tests/Data/Int256DataSources.cs index 6e87c4d..726faf6 100644 --- a/src/MissingValues.Tests/Data/Int256DataSources.cs +++ b/src/MissingValues.Tests/Data/Int256DataSources.cs @@ -453,42 +453,202 @@ public class Int256DataSources public static IEnumerable> MaxMagnitudeTestData() { - throw new NotImplementedException(); + yield return () => (Int256.MaxValue, 5, Int256.MaxValue); + yield return () => (Int256.One, 5, 5); + yield return () => (Int256.One, Int256.NegativeOne, Int256.One); + yield return () => (Int256.One, -2, -2); + yield return () => (Int256.NegativeOne, Int256.MaxValue, Int256.MaxValue); + yield return () => (Int256.MinValue, -2, Int256.MinValue); + yield return () => (Int256.MaxValue, Int256.MinValue, Int256.MinValue); } public static IEnumerable> MaxMagnitudeNumberTestData() { - throw new NotImplementedException(); + yield return () => (Int256.MaxValue, 5, Int256.MaxValue); + yield return () => (Int256.One, 5, 5); + yield return () => (Int256.One, Int256.NegativeOne, Int256.One); + yield return () => (Int256.One, -2, -2); + yield return () => (Int256.NegativeOne, Int256.MaxValue, Int256.MaxValue); + yield return () => (Int256.MinValue, -2, Int256.MinValue); + yield return () => (Int256.MaxValue, Int256.MinValue, Int256.MinValue); } public static IEnumerable> MinMagnitudeTestData() { - throw new NotImplementedException(); + yield return () => (Int256.MaxValue, 5, 5); + yield return () => (Int256.One, 5, Int256.One); + yield return () => (Int256.One, Int256.NegativeOne, Int256.NegativeOne); + yield return () => (Int256.One, -2, Int256.One); + yield return () => (Int256.NegativeOne, Int256.MaxValue, Int256.NegativeOne); + yield return () => (Int256.MinValue, -2, -2); + yield return () => (Int256.MaxValue, Int256.MinValue, Int256.MaxValue); } public static IEnumerable> MinMagnitudeNumberTestData() { - throw new NotImplementedException(); + yield return () => (Int256.MaxValue, 5, 5); + yield return () => (Int256.One, 5, Int256.One); + yield return () => (Int256.One, Int256.NegativeOne, Int256.NegativeOne); + yield return () => (Int256.One, -2, Int256.One); + yield return () => (Int256.NegativeOne, Int256.MaxValue, Int256.NegativeOne); + yield return () => (Int256.MinValue, -2, -2); + yield return () => (Int256.MaxValue, Int256.MinValue, Int256.MaxValue); } public static IEnumerable> MultiplyAddEstimateTestData() { - throw new NotImplementedException(); + yield return () => (Int256.One, Int256.One, Int256.One, 2); + yield return () => (Int256.One, Int256.Zero, Int256.One, Int256.One); + yield return () => (Int256.MaxValue, Int256.NegativeOne, Int256.NegativeOne, Int256.MinValue); + yield return () => (200, 100, 500, 20500); + yield return () => (new Int256(0, 0, ulong.MaxValue, ulong.MaxValue), new Int256(0, 0, ulong.MaxValue, ulong.MaxValue), new Int256(0, 0, ulong.MaxValue, ulong.MaxValue), Int256.Parse("115792089237316195423570985008687907852929702298719625575994209400481361428480")); } public static IEnumerable> ParseTestData() { - throw new NotImplementedException(); + yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968", NumberStyles.Integer, CultureInfo.InvariantCulture, Int256.MinValue); + yield return () => ("-170141183460469231731687303715884105728", NumberStyles.Integer, CultureInfo.InvariantCulture, Int128.MinValue); + yield return () => ("-9223372036854775808", NumberStyles.Integer, CultureInfo.InvariantCulture, long.MinValue); + yield return () => ("-1", NumberStyles.Integer, CultureInfo.InvariantCulture, Int256.NegativeOne); + yield return () => ("0", NumberStyles.Integer, CultureInfo.InvariantCulture, Int256.Zero); + yield return () => ("1", NumberStyles.Integer, CultureInfo.InvariantCulture, Int256.One); + yield return () => ("9223372036854775808", NumberStyles.Integer, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0x8000_0000_0000_0000)); + yield return () => ("170141183460469231731687303715884105728", NumberStyles.Integer, CultureInfo.InvariantCulture, new Int256(0, 0, 0x8000_0000_0000_0000, 0)); + yield return () => ("57896044618658097711785492504343953926634992332820282019728792003956564819967", NumberStyles.Integer, CultureInfo.InvariantCulture, Int256.MaxValue); + + yield return () => ("123456789ABCDEF0", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0x123456789ABCDEF0)); + yield return () => ("FF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0xFF)); + yield return () => ("FFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0xFFFF)); + yield return () => ("FFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0xFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int256(0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int256(0xFFFFFFFFFFFFFFFF, 0x0000000000000000, 0x0000000000000000, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int256(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + + yield return () => ("1010101010101010", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0b1010101010101010)); + yield return () => ("11111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0b11111111)); + yield return () => ("1111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0b1111111111111111)); + yield return () => ("11111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0b11111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0b1111111111111111111111111111111111111111111111111111111111111111, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); } public static IEnumerable> ParseSpanTestData() { - throw new NotImplementedException(); + yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int256.MinValue); + yield return () => ("-170141183460469231731687303715884105728".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int128.MinValue); + yield return () => ("-9223372036854775808".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, long.MinValue); + yield return () => ("-1".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int256.NegativeOne); + yield return () => ("0".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int256.Zero); + yield return () => ("1".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int256.One); + yield return () => ("9223372036854775808".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0x8000_0000_0000_0000)); + yield return () => ("170141183460469231731687303715884105728".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new Int256(0, 0, 0x8000_0000_0000_0000, 0)); + yield return () => ("57896044618658097711785492504343953926634992332820282019728792003956564819967".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int256.MaxValue); + + yield return () => ("123456789ABCDEF0".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0x123456789ABCDEF0)); + yield return () => ("FF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0xFF)); + yield return () => ("FFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0xFFFF)); + yield return () => ("FFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0xFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int256(0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int256(0xFFFFFFFFFFFFFFFF, 0x0000000000000000, 0x0000000000000000, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int256(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + + yield return () => ("1010101010101010".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0b1010101010101010)); + yield return () => ("11111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0b11111111)); + yield return () => ("1111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0b1111111111111111)); + yield return () => ("11111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0b11111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0b1111111111111111111111111111111111111111111111111111111111111111, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); } public static IEnumerable> ParseUtf8TestData() { - throw new NotImplementedException(); + yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int256.MinValue); + yield return () => ("-170141183460469231731687303715884105728"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int128.MinValue); + yield return () => ("-9223372036854775808"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, long.MinValue); + yield return () => ("-1"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int256.NegativeOne); + yield return () => ("0"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int256.Zero); + yield return () => ("1"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int256.One); + yield return () => ("9223372036854775808"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0x8000_0000_0000_0000)); + yield return () => ("170141183460469231731687303715884105728"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new Int256(0, 0, 0x8000_0000_0000_0000, 0)); + yield return () => ("57896044618658097711785492504343953926634992332820282019728792003956564819967"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int256.MaxValue); + + yield return () => ("123456789ABCDEF0"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0x123456789ABCDEF0)); + yield return () => ("FF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0xFF)); + yield return () => ("FFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0xFFFF)); + yield return () => ("FFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0xFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int256(0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int256(0xFFFFFFFFFFFFFFFF, 0x0000000000000000, 0x0000000000000000, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int256(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + + yield return () => ("1010101010101010"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0b1010101010101010)); + yield return () => ("11111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0b11111111)); + yield return () => ("1111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0b1111111111111111)); + yield return () => ("11111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0b11111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0b1111111111111111111111111111111111111111111111111111111111111111, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); } public static IEnumerable> TryParseTestData() From 85294d325d28e8706d3acf5d9567e4c50a6fccd5 Mon Sep 17 00:00:00 2001 From: crookseta Date: Mon, 18 Aug 2025 19:56:23 -0500 Subject: [PATCH 13/74] Int256 TryParse Tests --- .../Data/Int256DataSources.cs | 156 +++++++++++++++++- 1 file changed, 153 insertions(+), 3 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int256DataSources.cs b/src/MissingValues.Tests/Data/Int256DataSources.cs index 726faf6..91a304c 100644 --- a/src/MissingValues.Tests/Data/Int256DataSources.cs +++ b/src/MissingValues.Tests/Data/Int256DataSources.cs @@ -653,17 +653,167 @@ public class Int256DataSources public static IEnumerable> TryParseTestData() { - throw new NotImplementedException(); + yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819969", NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968", NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int256.MinValue); + yield return () => ("-170141183460469231731687303715884105728", NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int128.MinValue); + yield return () => ("-9223372036854775808", NumberStyles.Integer, CultureInfo.InvariantCulture, true, long.MinValue); + yield return () => ("-1", NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int256.NegativeOne); + yield return () => ("0", NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int256.Zero); + yield return () => ("1", NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int256.One); + yield return () => ("9223372036854775808", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0x8000_0000_0000_0000)); + yield return () => ("170141183460469231731687303715884105728", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0x8000_0000_0000_0000, 0)); + yield return () => ("57896044618658097711785492504343953926634992332820282019728792003956564819967", NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int256.MaxValue); + yield return () => ("57896044618658097711785492504343953926634992332820282019728792003956564819968", NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + + yield return () => ("123456789ABCDEF0", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0x123456789ABCDEF0)); + yield return () => ("FF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0xFF)); + yield return () => ("FFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0xFFFF)); + yield return () => ("FFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0xFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int256(0xFFFFFFFFFFFFFFFF, 0x0000000000000000, 0x0000000000000000, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int256(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, false, default); + + yield return () => ("1010101010101010", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0b1010101010101010)); + yield return () => ("11111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0b11111111)); + yield return () => ("1111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0b1111111111111111)); + yield return () => ("11111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0b11111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int256(0b1111111111111111111111111111111111111111111111111111111111111111, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int256(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, false, default); } public static IEnumerable> TryParseSpanTestData() { - throw new NotImplementedException(); + yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819969".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int256.MinValue); + yield return () => ("-170141183460469231731687303715884105728".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int128.MinValue); + yield return () => ("-9223372036854775808".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, long.MinValue); + yield return () => ("-1".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int256.NegativeOne); + yield return () => ("0".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int256.Zero); + yield return () => ("1".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int256.One); + yield return () => ("9223372036854775808".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0x8000_0000_0000_0000)); + yield return () => ("170141183460469231731687303715884105728".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0x8000_0000_0000_0000, 0)); + yield return () => ("57896044618658097711785492504343953926634992332820282019728792003956564819967".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int256.MaxValue); + yield return () => ("57896044618658097711785492504343953926634992332820282019728792003956564819968".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + + yield return () => ("123456789ABCDEF0".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0x123456789ABCDEF0)); + yield return () => ("FF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0xFF)); + yield return () => ("FFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0xFFFF)); + yield return () => ("FFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0xFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int256(0xFFFFFFFFFFFFFFFF, 0x0000000000000000, 0x0000000000000000, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int256(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, false, default); + + yield return () => ("1010101010101010".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0b1010101010101010)); + yield return () => ("11111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0b11111111)); + yield return () => ("1111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0b1111111111111111)); + yield return () => ("11111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0b11111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int256(0b1111111111111111111111111111111111111111111111111111111111111111, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int256(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, false, default); } public static IEnumerable> TryParseUtf8TestData() { - throw new NotImplementedException(); + yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819969"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int256.MinValue); + yield return () => ("-170141183460469231731687303715884105728"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int128.MinValue); + yield return () => ("-9223372036854775808"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, long.MinValue); + yield return () => ("-1"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int256.NegativeOne); + yield return () => ("0"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int256.Zero); + yield return () => ("1"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int256.One); + yield return () => ("9223372036854775808"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0x8000_0000_0000_0000)); + yield return () => ("170141183460469231731687303715884105728"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0x8000_0000_0000_0000, 0)); + yield return () => ("57896044618658097711785492504343953926634992332820282019728792003956564819967"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int256.MaxValue); + yield return () => ("57896044618658097711785492504343953926634992332820282019728792003956564819968"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + + yield return () => ("123456789ABCDEF0"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0x123456789ABCDEF0)); + yield return () => ("FF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0xFF)); + yield return () => ("FFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0xFFFF)); + yield return () => ("FFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0xFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int256(0xFFFFFFFFFFFFFFFF, 0x0000000000000000, 0x0000000000000000, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int256(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, false, default); + + yield return () => ("1010101010101010"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0b1010101010101010)); + yield return () => ("11111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0b11111111)); + yield return () => ("1111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0b1111111111111111)); + yield return () => ("11111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0b11111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int256(0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int256(0b1111111111111111111111111111111111111111111111111111111111111111, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int256(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, false, default); } public static IEnumerable> ClampTestData() From d3371f22dc027aaa56d913917c20c62a0958651d Mon Sep 17 00:00:00 2001 From: crookseta Date: Wed, 10 Sep 2025 20:28:27 -0500 Subject: [PATCH 14/74] MaxNumber, MinNumber, Log2, DivRem, LeadingZeroCount, PopCount, ReadBigEndian, ReadLittleEndian, RotateLeft, RotateRight, TrailingZeroCount, GetByteCount and GetShortestBitLength Tests for Int256 --- .../Data/Int256DataSources.cs | 116 ++++++++++++++++-- 1 file changed, 103 insertions(+), 13 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int256DataSources.cs b/src/MissingValues.Tests/Data/Int256DataSources.cs index 91a304c..b0719ae 100644 --- a/src/MissingValues.Tests/Data/Int256DataSources.cs +++ b/src/MissingValues.Tests/Data/Int256DataSources.cs @@ -1,4 +1,5 @@ using System.Globalization; +using System.Runtime.CompilerServices; using MissingValues.Tests.Data.Sources; namespace MissingValues.Tests.Data; @@ -833,7 +834,7 @@ public class Int256DataSources public static IEnumerable> MaxNumberTestData() { - throw new NotImplementedException(); + return MaxTestData(); } public static IEnumerable> MinTestData() @@ -843,7 +844,7 @@ public class Int256DataSources public static IEnumerable> MinNumberTestData() { - throw new NotImplementedException(); + return MinTestData(); } public static IEnumerable> SignTestData() @@ -869,57 +870,146 @@ public class Int256DataSources public static IEnumerable> Log2TestData() { - throw new NotImplementedException(); + yield return () => (new Int256(0, 0, 0, 1), new Int256(0, 0, 0, 0)); + yield return () => (new Int256(0, 0, 0, 2), new Int256(0, 0, 0, 1)); + yield return () => (new Int256(0, 0, 0, 4), new Int256(0, 0, 0, 2)); + yield return () => (new Int256(0, 0, 0, 8), new Int256(0, 0, 0, 3)); + yield return () => (new Int256(0, 0, 0, 1UL << 63), new Int256(0, 0, 0, 63)); + yield return () => (new Int256(0, 0, 1UL << 5, 0), new Int256(0, 0, 0, 69)); + yield return () => (new Int256(0, 1UL << 42, 0, 0), new Int256(0, 0, 0, 170)); + yield return () => (new Int256(1UL << 13, 0, 0, 0), new Int256(0, 0, 0, 205)); + yield return () => (new Int256(1UL << 63, 0, 0, 0), new Int256(0, 0, 0, 255)); + yield return () => (new Int256(0, 0, 0, 0), new Int256(0, 0, 0, 0)); } public static IEnumerable> DivRemTestData() { - throw new NotImplementedException(); + yield return () => (new Int256(0, 0, 0, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0, 0, 0, 10), (new Int256(0, 0, 0, 0xFFFF_FFFF_FFFF_FFFF / 10), new Int256(0, 0, 0, 0xFFFF_FFFF_FFFF_FFFF % 10))); + yield return () => (new Int256(0, 0, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0, 0, 0, 10), (new Int256(0, new UInt128(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF) / 10), new Int256(0, new UInt128(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF) % 10))); + yield return () => (new Int256(0, 0, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0, 0, 1, 0), (new Int256(0, new UInt128(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF) / new UInt128(1, 0)), new Int256(0, new UInt128(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF) % new UInt128(1, 0)))); + yield return () => (new Int256(0, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0, 0, 0, 10), (Int256.Parse("627710173538668076383578942320766641610235544446403451289"), new Int256(0, 0, 0, 10))); + yield return () => (new Int256(0, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0, 0, 1, 0), (Int256.Parse("21267647932558653966460912964485513215"), Int256.Parse("295147905179352825855"))); + yield return () => (new Int256(0, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0, 1, 0, 0), (Int256.Parse("18446744073709551615"), Int256.Parse("340282366920938463463374607431768211455"))); } public static IEnumerable> LeadingZeroCountTestData() { - throw new NotImplementedException(); + yield return () => (new Int256(0, 0, 0, 0), new Int256(0, 0, 0, 256)); + yield return () => (new Int256(0, 0, 0, 1), new Int256(0, 0, 0, 255)); + yield return () => (new Int256(0, 0, 1, 0), new Int256(0, 0, 0, 191)); + yield return () => (new Int256(0, 1, 0, 0), new Int256(0, 0, 0, 127)); + yield return () => (new Int256(1, 0, 0, 0), new Int256(0, 0, 0, 63)); + yield return () => (new Int256(1, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new Int256(0, 0, 0, 63)); + yield return () => (new Int256(0, 0, 0, 1UL << 63), new Int256(0, 0, 0, 192)); + yield return () => (new Int256(0, 0, 1UL << 63, 0), new Int256(0, 0, 0, 128)); + yield return () => (new Int256(0, 1UL << 63, 0, 0), new Int256(0, 0, 0, 64)); + yield return () => (new Int256(1UL << 63, 0, 0, 0), new Int256(0, 0, 0, 0)); + yield return () => (new Int256(1UL << 62, 0, 0, 0), new Int256(0, 0, 0, 1)); } public static IEnumerable> PopCountTestData() { - throw new NotImplementedException(); + yield return () => (new Int256(0, 0, 0, 0), new Int256(0, 0, 0, 0)); + yield return () => (new Int256(0, 0, 0, 1), new Int256(0, 0, 0, 1)); + yield return () => (Int256.MaxValue, new Int256(0, 0, 0, 256)); + yield return () => (new Int256(ulong.MaxValue, 0, 0, 0), new Int256(0, 0, 0, 64)); + yield return () => (new Int256(0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA), new Int256(0, 0, 0, 128)); + yield return () => (new Int256(1UL << 63, 1UL << 62, 1UL << 61, 1UL << 60), new Int256(0, 0, 0, 4)); } public static IEnumerable> ReadBigEndianTestData() { - throw new NotImplementedException(); + yield return () => ([], true, Int256.Zero); + yield return () => ([0x01], true, Int256.One); + yield return () => + { + byte[] array = new byte[32]; + Array.Fill(array, byte.MaxValue); + return (array, true, new Int256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); + }; + yield return () => + { + byte[] array = new byte[35]; + for (int i = 3; i < 35; i++) + array[i] = byte.MaxValue; + return (array, true, new Int256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); + }; + yield return () => ([0x12, 0x34], true, new Int256(0, 0, 0, 0x1234)); + yield return () => + { + byte[] array = new byte[32]; + array[0] = 0x80; + return (array, true, new Int256(1UL << 63, 0, 0, 0)); + }; } public static IEnumerable> ReadLittleEndianTestData() { - throw new NotImplementedException(); + yield return () => ([], true, Int256.Zero); + yield return () => ([0x01], true, Int256.One); + yield return () => + { + byte[] array = new byte[32]; + Array.Fill(array, byte.MaxValue); + return (array, true, new Int256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); + }; + yield return () => + { + byte[] array = new byte[35]; + for (int i = 0; i < 32; i++) + array[i] = byte.MaxValue; + return (array, true, new Int256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); + }; + yield return () => ([0x34, 0x12], true, new Int256(0, 0, 0, 0x1234)); + yield return () => + { + byte[] array = new byte[32]; + array[31] = 0x80; + return (array, true, new Int256(1UL << 63, 0, 0, 0)); + }; } public static IEnumerable> RotateLeftTestData() { - throw new NotImplementedException(); + yield return () => (new Int256(1, 2, 3, 4), 0, new Int256(1, 2, 3, 4)); + yield return () => (new Int256(1, 2, 3, 4), 256, new Int256(1, 2, 3, 4)); + yield return () => (new Int256(0, 0, 0x8000_0000_0000_0000, 0), 64, new Int256(0, 0x8000_0000_0000_0000, 0, 0)); + yield return () => (new Int256(0x8000_0000_0000_0000, 0, 0, 0), 64, new Int256(0, 0, 0, 0x8000_0000_0000_0000)); + yield return () => (new Int256(0, 0, 0x8000_0000_0000_0000, 0), 128, new Int256(0x8000_0000_0000_0000, 0, 0, 0)); + yield return () => (new Int256(0x8000_0000_0000_0000, 0, 0, 0), 128, new Int256(0, 0, 0x8000_0000_0000_0000, 0)); } public static IEnumerable> RotateRightTestData() { - throw new NotImplementedException(); + yield return () => (new Int256(1, 2, 3, 4), 0, new Int256(1, 2, 3, 4)); + yield return () => (new Int256(1, 2, 3, 4), 256, new Int256(1, 2, 3, 4)); + yield return () => (new Int256(0, 0, 0x8000_0000_0000_0000, 0), 64, new Int256(0, 0, 0, 0x8000_0000_0000_0000)); + yield return () => (new Int256(0, 0, 0, 0x8000_0000_0000_0000), 64, new Int256(0x8000_0000_0000_0000, 0, 0, 0)); + yield return () => (new Int256(0, 0, 0x8000_0000_0000_0000, 0), 128, new Int256(0x8000_0000_0000_0000, 0, 0, 0)); + yield return () => (new Int256(0x8000_0000_0000_0000, 0, 0, 0), 128, new Int256(0, 0, 0x8000_0000_0000_0000, 0)); } public static IEnumerable> TrailingZeroCountTestData() { - throw new NotImplementedException(); + yield return () => (new Int256(0, 0, 0, 0), new Int256(0, 0, 0, 256)); + yield return () => (new Int256(0, 0, 0, 1), new Int256(0, 0, 0, 0)); + yield return () => (new Int256(0, 0, 8, 0), new Int256(0, 0, 0, 67)); + yield return () => (new Int256(0, 0x10, 0, 0), new Int256(0, 0, 0, 132)); + yield return () => (new Int256(0x200, 0, 0, 0), new Int256(0, 0, 0, 201)); } public static IEnumerable> GetByteCountTestData() { - throw new NotImplementedException(); + yield return () => (new Int256(0, 0, 0, 0), Unsafe.SizeOf()); } public static IEnumerable> GetShortestBitLengthTestData() { - throw new NotImplementedException(); + yield return () => (new Int256(0, 0, 0, 0), 0); + yield return () => (new Int256(0, 0, 0, 1), 1); + yield return () => (new Int256(1, 0, 0, 0), 193); + yield return () => (Int256.MaxValue, 255); + yield return () => (Int256.MinValue, 256); } public static IEnumerable> WriteBigEndianTestData() From de0cbf03ec401cada40e5b95aac770647cb4e9b4 Mon Sep 17 00:00:00 2001 From: crookseta Date: Fri, 19 Sep 2025 18:32:17 -0500 Subject: [PATCH 15/74] Updated unit test project to .net 10 --- src/MissingValues.Tests/MissingValues.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MissingValues.Tests/MissingValues.Tests.csproj b/src/MissingValues.Tests/MissingValues.Tests.csproj index 3427af0..6c9dcb4 100644 --- a/src/MissingValues.Tests/MissingValues.Tests.csproj +++ b/src/MissingValues.Tests/MissingValues.Tests.csproj @@ -4,7 +4,7 @@ enable enable Exe - net9.0 + net10.0 From 736439a9b151edd8ac9f20aa3407fafd7f9b1e08 Mon Sep 17 00:00:00 2001 From: crookseta Date: Fri, 19 Sep 2025 21:12:02 -0500 Subject: [PATCH 16/74] WriteBigEndian, WriteLittleEndian, Max, Min, Sign, CopySign and Clamp tests for Int256. --- .../Data/Int256DataSources.cs | 125 ++++++++++++++---- 1 file changed, 98 insertions(+), 27 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int256DataSources.cs b/src/MissingValues.Tests/Data/Int256DataSources.cs index b0719ae..74b4b62 100644 --- a/src/MissingValues.Tests/Data/Int256DataSources.cs +++ b/src/MissingValues.Tests/Data/Int256DataSources.cs @@ -73,7 +73,8 @@ public class Int256DataSources yield return () => (Int256.MaxValue, new Int256(0, 0, 0, 2), default, true); yield return () => (Int256.MinValue, Int256.NegativeOne, default, true); yield return () => (new Int256(0, 0, 0, ulong.MaxValue), new Int256(0, 0, 0, ulong.MaxValue), Int256.Parse("340282366920938463426481119284349108225"), false); - yield return () => (new Int256(ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new Int256(2, 0, 0, 0), default, true); + yield return () => (new Int256(ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new Int256(2, 0, 0, 0), Int256.Parse("-12554203470773361527671578846415332832204710888928069025792"), false); + yield return () => (new Int256(long.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new Int256(2, 0, 0, 0), default, true); } public static IEnumerable> op_CheckedSubtractionTestData() @@ -158,7 +159,7 @@ public class Int256DataSources yield return () => (Int256.NegativeOne, Int256.NegativeOne, Int256.One); yield return () => (new Int256(0, 0, 0, 2), new Int256(0, 0, 0, 3), new Int256(0, 0, 0, 6)); yield return () => (new Int256(0, 0, 0, ulong.MaxValue), new Int256(0, 0, 0, 2), new Int256(0, 0, 1, ulong.MaxValue - 1)); - yield return () => (new Int256(0, 0, 0, ulong.MaxValue), new Int256(0, 0, 0, ulong.MaxValue), new Int256(ulong.MaxValue - 1, ulong.MaxValue, 0, 1)); + yield return () => (new Int256(0, 0, 0, ulong.MaxValue), new Int256(0, 0, 0, ulong.MaxValue), Int256.Parse("340282366920938463426481119284349108225")); } public static IEnumerable> op_SubtractionTestData() @@ -228,8 +229,8 @@ public class Int256DataSources yield return () => (Int256.Zero, Int256.Zero, Int256.Zero); yield return () => (Int256.Zero, Int256.MaxValue, Int256.MaxValue); yield return () => (new Int256(1, 2, 3, 4), new Int256(1, 2, 3, 4), new Int256(1, 2, 3, 4)); - yield return () => (new Int256(1, 2, 3, 4), Int256.MaxValue, Int256.MaxValue); - yield return () => (new Int256(0x00000000FFFFFFFF, 0xAAAAAAAA00000000, 0x00000000AAAAAAAA, 0x1234567890ABCDEF), new Int256(0xFFFFFFFF00000000, 0x0000000055555555, 0x5555555500000000, 0xFEDCBA9876543210), new Int256(0xFFFFFFFFFFFFFFFF, 0xAAAAAAAA55555555, 0x55555555AAAAAAAA, 0xFEFCFEF8F6FFFFFF)); + yield return () => (new Int256(1, 2, 3, 4), Int256.MaxValue, new Int256(long.MaxValue | 1, ulong.MaxValue | 2, ulong.MaxValue | 3, ulong.MaxValue | 4)); + yield return () => (new Int256(0x00000000FFFFFFFF, 0xAAAAAAAA00000000, 0x00000000AAAAAAAA, 0x1234567890ABCDEF), new Int256(0xFFFFFFFF00000000, 0x0000000055555555, 0x5555555500000000, 0xFEDCBA9876543210), new Int256(0xFFFFFFFFFFFFFFFF, 0xAAAAAAAA55555555, 0x55555555AAAAAAAA, 0x1234567890ABCDEF | 0xFEDCBA9876543210)); } public static IEnumerable> op_BitwiseXorTestData() @@ -237,16 +238,16 @@ public class Int256DataSources yield return () => (Int256.Zero, Int256.Zero, Int256.Zero); yield return () => (Int256.Zero, Int256.MaxValue, Int256.MaxValue); yield return () => (new Int256(1, 2, 3, 4), new Int256(1, 2, 3, 4), Int256.Zero); - yield return () => (new Int256(0x0000000000000000, 0xFFFFFFFFFFFFFFFF, 0x1234567890ABCDEF, 0xFEDCBA9876543210), Int256.MaxValue, new Int256(ulong.MaxValue, 0x0, 0xEDCBA9876F543210, 0x0123456789ABCDEF)); + yield return () => (new Int256(0x0000000000000000, 0xFFFFFFFFFFFFFFFF, 0x1234567890ABCDEF, 0xFEDCBA9876543210), new Int256(ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new Int256(ulong.MaxValue, 0x0, 0xEDCBA9876F543210, 0x0123456789ABCDEF)); yield return () => (new Int256(0x1234567890ABCDEF, 0xAAAAAAAA00000000, 0x00000000AAAAAAAA, 0xFFFFFFFFFFFFFFFF), new Int256(0xFFFFFFFFFFFFFFFF, 0x00000000AAAAAAAA, 0xAAAAAAAA00000000, 0x0000000000000000), new Int256(0xEDCBA9876F543210, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xFFFFFFFFFFFFFFFF)); } public static IEnumerable> op_OnesComplementTestData() { - yield return () => (Int256.Zero, Int256.MaxValue); - yield return () => (Int256.MaxValue, Int256.Zero); + yield return () => (Int256.Zero, new Int256(ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); + yield return () => (new Int256(ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), Int256.Zero); yield return () => (new Int256(0xAAAAAAAAAAAAAAAA, 0x5555555555555555, 0xAAAAAAAAAAAAAAAA, 0x5555555555555555), new Int256(0x5555555555555555, 0xAAAAAAAAAAAAAAAA, 0x5555555555555555, 0xAAAAAAAAAAAAAAAA)); - yield return () => (new Int256(0x0123456789ABCDEF, 0xFEDCBA9876543210, 0x0F0F0F0F0F0F0F0F, 0xF0F0F0F0F0F0F0F0), new Int256(~0x0123456789ABCDEFU, ~0xFEDCBA9876543210U, ~0x0F0F0F0F0F0F0F0FU, ~0xF0F0F0F0F0F0F0F0U)); + yield return () => (new Int256(0x0123456789ABCDEF, 0xFEDCBA9876543210, 0x0F0F0F0F0F0F0F0F, 0xF0F0F0F0F0F0F0F0), new Int256(~(ulong)0x0123456789ABCDEF, ~0xFEDCBA9876543210, ~(ulong)0x0F0F0F0F0F0F0F0F, ~0xF0F0F0F0F0F0F0F0)); } public static IEnumerable> op_EqualityTestData() @@ -819,17 +820,41 @@ public class Int256DataSources public static IEnumerable> ClampTestData() { - throw new NotImplementedException(); + yield return () => ( + new Int256(0, 0, 0, 1), + new Int256(0, 0, 0, 2), + new Int256(0, 0, 0, 4), + new Int256(0, 0, 0, 2) + ); + yield return () => ( + new Int256(0, 0, 0, 1), + new Int256(0, 0, 0, 1), + new Int256(0, 0, 0, 4), + new Int256(0, 0, 0, 1) + ); + yield return () => ( + new Int256(0, 1, 0, 0), + new Int256(0, 0, 0, 1), + new Int256(1, 0, 0, 0), + new Int256(0, 1, 0, 0) + ); } public static IEnumerable> CopySignTestData() { - throw new NotImplementedException(); + yield return () => (Int256.One, Int256.One, Int256.One); + yield return () => (Int256.One, Int256.NegativeOne, Int256.NegativeOne); + yield return () => (Int256.NegativeOne, Int256.NegativeOne, Int256.NegativeOne); + yield return () => (Int256.NegativeOne, Int256.One, Int256.One); } public static IEnumerable> MaxTestData() { - throw new NotImplementedException(); + yield return () => (Int256.One, Int256.One, Int256.One); + yield return () => (Int256.One, Int256.NegativeOne, Int256.One); + yield return () => (Int256.MinValue, Int256.NegativeOne, Int256.NegativeOne); + yield return () => (Int256.Zero, Int256.One, Int256.One); + yield return () => (Int256.One, Int256.MaxValue, Int256.MaxValue); } public static IEnumerable> MaxNumberTestData() @@ -839,7 +864,11 @@ public class Int256DataSources public static IEnumerable> MinTestData() { - throw new NotImplementedException(); + yield return () => (Int256.One, Int256.One, Int256.One); + yield return () => (Int256.One, Int256.NegativeOne, Int256.NegativeOne); + yield return () => (Int256.MinValue, Int256.NegativeOne, Int256.MinValue); + yield return () => (Int256.Zero, Int256.One, Int256.Zero); + yield return () => (Int256.One, Int256.MaxValue, Int256.One); } public static IEnumerable> MinNumberTestData() @@ -849,7 +878,11 @@ public class Int256DataSources public static IEnumerable> SignTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Zero, 0); + yield return () => (Int256.MaxValue, 1); + yield return () => (Int256.One, 1); + yield return () => (Int256.MinValue, -1); + yield return () => (Int256.NegativeOne, -1); } public static IEnumerable> IsPow2TestData() @@ -878,7 +911,6 @@ public class Int256DataSources yield return () => (new Int256(0, 0, 1UL << 5, 0), new Int256(0, 0, 0, 69)); yield return () => (new Int256(0, 1UL << 42, 0, 0), new Int256(0, 0, 0, 170)); yield return () => (new Int256(1UL << 13, 0, 0, 0), new Int256(0, 0, 0, 205)); - yield return () => (new Int256(1UL << 63, 0, 0, 0), new Int256(0, 0, 0, 255)); yield return () => (new Int256(0, 0, 0, 0), new Int256(0, 0, 0, 0)); } @@ -887,8 +919,8 @@ public class Int256DataSources yield return () => (new Int256(0, 0, 0, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0, 0, 0, 10), (new Int256(0, 0, 0, 0xFFFF_FFFF_FFFF_FFFF / 10), new Int256(0, 0, 0, 0xFFFF_FFFF_FFFF_FFFF % 10))); yield return () => (new Int256(0, 0, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0, 0, 0, 10), (new Int256(0, new UInt128(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF) / 10), new Int256(0, new UInt128(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF) % 10))); yield return () => (new Int256(0, 0, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0, 0, 1, 0), (new Int256(0, new UInt128(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF) / new UInt128(1, 0)), new Int256(0, new UInt128(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF) % new UInt128(1, 0)))); - yield return () => (new Int256(0, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0, 0, 0, 10), (Int256.Parse("627710173538668076383578942320766641610235544446403451289"), new Int256(0, 0, 0, 10))); - yield return () => (new Int256(0, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0, 0, 1, 0), (Int256.Parse("21267647932558653966460912964485513215"), Int256.Parse("295147905179352825855"))); + yield return () => (new Int256(0, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0, 0, 0, 10), (Int256.Parse("627710173538668076383578942320766641610235544446403451289"), new Int256(0, 0, 0, 5))); + yield return () => (new Int256(0, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0, 0, 1, 0), (Int256.Parse("340282366920938463463374607431768211455"), Int256.Parse("18446744073709551615"))); yield return () => (new Int256(0, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0, 1, 0, 0), (Int256.Parse("18446744073709551615"), Int256.Parse("340282366920938463463374607431768211455"))); } @@ -911,7 +943,7 @@ public class Int256DataSources { yield return () => (new Int256(0, 0, 0, 0), new Int256(0, 0, 0, 0)); yield return () => (new Int256(0, 0, 0, 1), new Int256(0, 0, 0, 1)); - yield return () => (Int256.MaxValue, new Int256(0, 0, 0, 256)); + yield return () => (Int256.MaxValue, new Int256(0, 0, 0, 255)); yield return () => (new Int256(ulong.MaxValue, 0, 0, 0), new Int256(0, 0, 0, 64)); yield return () => (new Int256(0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA), new Int256(0, 0, 0, 128)); yield return () => (new Int256(1UL << 63, 1UL << 62, 1UL << 61, 1UL << 60), new Int256(0, 0, 0, 4)); @@ -925,21 +957,21 @@ public class Int256DataSources { byte[] array = new byte[32]; Array.Fill(array, byte.MaxValue); - return (array, true, new Int256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); + return (array, false, new Int256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); }; yield return () => { byte[] array = new byte[35]; - for (int i = 3; i < 35; i++) + for (int i = 0; i < 35; i++) array[i] = byte.MaxValue; - return (array, true, new Int256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); + return (array, false, new Int256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); }; yield return () => ([0x12, 0x34], true, new Int256(0, 0, 0, 0x1234)); yield return () => { byte[] array = new byte[32]; array[0] = 0x80; - return (array, true, new Int256(1UL << 63, 0, 0, 0)); + return (array, false, new Int256(1UL << 63, 0, 0, 0)); }; } @@ -951,21 +983,21 @@ public class Int256DataSources { byte[] array = new byte[32]; Array.Fill(array, byte.MaxValue); - return (array, true, new Int256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); + return (array, false, new Int256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); }; yield return () => { byte[] array = new byte[35]; - for (int i = 0; i < 32; i++) + for (int i = 0; i < 35; i++) array[i] = byte.MaxValue; - return (array, true, new Int256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); + return (array, false, new Int256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); }; yield return () => ([0x34, 0x12], true, new Int256(0, 0, 0, 0x1234)); yield return () => { byte[] array = new byte[32]; array[31] = 0x80; - return (array, true, new Int256(1UL << 63, 0, 0, 0)); + return (array, false, new Int256(1UL << 63, 0, 0, 0)); }; } @@ -1014,12 +1046,51 @@ public class Int256DataSources public static IEnumerable> WriteBigEndianTestData() { - throw new NotImplementedException(); + yield return () => (new Int256(0, 0, 0, 0), new byte[32], Unsafe.SizeOf()); + yield return () => + { + var buffer = new byte[32]; + + for (int i = 0; i < 31; i++) + buffer[i] = 0; + + buffer[31] = 1; + + return (new Int256(0, 0, 0, 1), buffer, Unsafe.SizeOf()); + }; + yield return () => + { + var buffer = new byte[32]; + + for (int i = 0; i < 32; i++) + buffer[i] = 0xFF; + + return (new Int256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), buffer, Unsafe.SizeOf()); + }; } public static IEnumerable> WriteLittleEndianTestData() { - throw new NotImplementedException(); + yield return () => (new Int256(0, 0, 0, 0), new byte[32], Unsafe.SizeOf()); + yield return () => + { + var buffer = new byte[32]; + + buffer[0] = 1; + for (int i = 1; i < 32; i++) + buffer[i] = 0; + + return (new Int256(0, 0, 0, 1), buffer, Unsafe.SizeOf()); + }; + yield return () => + { + var buffer = new byte[32]; + + for (int i = 0; i < 32; i++) + buffer[i] = 0xFF; + + return (new Int256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), buffer, Unsafe.SizeOf()); + }; } public static IEnumerable> ConvertToCheckedByteTestData() From 83e61092e133cb69999c9d6c6b7d5407469bccf7 Mon Sep 17 00:00:00 2001 From: crookseta Date: Sun, 21 Sep 2025 21:25:40 -0500 Subject: [PATCH 17/74] -Added Log10 Tests. -Added op_Addition, op_CheckedAddition, op_Subtraction, op_CheckedSubtraction, op_Multiply, op_CheckedMultiply, op_Division, op_Modulus UInt512 tests --- .../Core/CalculatorTests.cs | 14 + .../Data/CalculatorDataSources.cs | 165 ++++++++ .../Data/UInt512DataSources.cs | 351 +++++++++++++++++- 3 files changed, 512 insertions(+), 18 deletions(-) create mode 100644 src/MissingValues.Tests/Data/CalculatorDataSources.cs diff --git a/src/MissingValues.Tests/Core/CalculatorTests.cs b/src/MissingValues.Tests/Core/CalculatorTests.cs index 10e39e4..5d0760d 100644 --- a/src/MissingValues.Tests/Core/CalculatorTests.cs +++ b/src/MissingValues.Tests/Core/CalculatorTests.cs @@ -1,5 +1,7 @@ using MissingValues.Internals; +using MissingValues.Tests.Data; using TUnit.Assertions.AssertConditions.Throws; +using static MissingValues.Tests.Data.CalculatorDataSources; namespace MissingValues.Tests.Core; @@ -355,4 +357,16 @@ public async Task DivRemByUInt64_DivideByZero_Throws() await Assert.That(() => Calculator.DivRemByUInt64(left, right)).Throws(); } + + [Test] + [MethodDataSource(typeof(CalculatorDataSources), nameof(Log10TestData))] + public async Task Log10_DataDriven(UInt512 value, int expected) + { + await Assert.That(BitHelper.Log10(in value)).IsEqualTo(expected); + } + [Test] + public async Task Log10_NegativeInput_Throws() + { + await Assert.That(() => BitHelper.Log10(in Int512.NegativeOne)).Throws(); + } } diff --git a/src/MissingValues.Tests/Data/CalculatorDataSources.cs b/src/MissingValues.Tests/Data/CalculatorDataSources.cs new file mode 100644 index 0000000..9bf656b --- /dev/null +++ b/src/MissingValues.Tests/Data/CalculatorDataSources.cs @@ -0,0 +1,165 @@ +using MissingValues.Internals; + +namespace MissingValues.Tests.Data; + +public class CalculatorDataSources +{ + public static IEnumerable> Log10TestData() + { + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000001), 0); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000000000A), 1); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000064), 2); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000000003E8), 3); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000002710), 4); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000000186A0), 5); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000000F4240), 6); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000989680), 7); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000005F5E100), 8); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000003B9ACA00), 9); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000002540BE400), 10); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000174876E800), 11); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000E8D4A51000), 12); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000009184E72A000), 13); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00005AF3107A4000), 14); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00038D7EA4C68000), 15); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x002386F26FC10000), 16); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x016345785D8A0000), 17); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0DE0B6B3A7640000), 18); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x8AC7230489E80000), 19); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000005, 0x6BC75E2D63100000), 20); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000036, 0x35C9ADC5DEA00000), 21); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000000021E, 0x19E0C9BAB2400000), 22); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000000152D, 0x02C7E14AF6800000), 23); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000000D3C2, 0x1BCECCEDA1000000), 24); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000084595, 0x161401484A000000), 25); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000052B7D2, 0xDCC80CD2E4000000), 26); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000033B2E3C, 0x9FD0803CE8000000), 27); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000204FCE5E, 0x3E25026110000000), 28); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000001431E0FAE, 0x6D7217CAA0000000), 29); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000C9F2C9CD0, 0x4674EDEA40000000), 30); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000007E37BE2022, 0xC0914B2680000000), 31); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000004EE2D6D415B, 0x85ACEF8100000000), 32); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000314DC6448D93, 0x38C15B0A00000000), 34); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0001ED09BEAD87C0, 0x378D8E6400000000), 35); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0013426172C74D82, 0x2B878FE800000000), 36); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00C097CE7BC90715, 0xB34B9F1000000000), 37); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0785EE10D5DA46D9, 0x00F436A000000000), 38); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x4B3B4CA85A86C47A, 0x098A224000000000), 39); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000002, 0xF050FE938943ACC4, 0x5F65568000000000), 40); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000000001D, 0x6329F1C35CA4BFAB, 0xB9F5610000000000), 41); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000125, 0xDFA371A19E6F7CB5, 0x4395CA0000000000), 42); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000B7A, 0xBC627050305ADF14, 0xA3D9E40000000000), 43); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000000072CB, 0x5BD86321E38CB6CE, 0x6682E80000000000), 44); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000047BF1, 0x9673DF52E37F2410, 0x011D100000000000), 45); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000002CD76F, 0xE086B93CE2F768A0, 0x0B22A00000000000), 46); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000001C06A5E, 0xC5433C60DDAA1640, 0x6F5A400000000000), 47); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000118427B3, 0xB4A05BC8A8A4DE84, 0x5986800000000000), 48); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000AF298D05, 0x0E4395D69670B12B, 0x7F41000000000000), 49); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000006D79F8232, 0x8EA3DA61E066EBB2, 0xF88A000000000000), 50); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000446C3B15F9, 0x926687D2C40534FD, 0xB564000000000000), 51); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000002AC3A4EDBBF, 0xB8014E3BA83411E9, 0x15E8000000000000), 52); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00001ABA4714957D, 0x300D0E549208B31A, 0xDB10000000000000), 53); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00010B46C6CDD6E3, 0xE0828F4DB456FF0C, 0x8EA0000000000000), 54); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000A70C3C40A64E6, 0xC51999090B65F67D, 0x9240000000000000), 55); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x006867A5A867F103, 0xB2FFFA5A71FBA0E7, 0xB680000000000000), 56); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x04140C78940F6A24, 0xFDFFC78873D4490D, 0x2100000000000000), 57); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x28C87CB5C89A2571, 0xEBFDCB54864ADA83, 0x4A00000000000000), 58); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000001, 0x97D4DF19D6057673, 0x37E9F14D3EEC8920, 0xE400000000000000), 59); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000000000F, 0xEE50B7025C36A080, 0x2F236D04753D5B48, 0xE800000000000000), 60); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000000009F, 0x4F2726179A224501, 0xD762422C946590D9, 0x1000000000000000), 61); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000639, 0x17877CEC0556B212, 0x69D695BDCBF7A87A, 0xA000000000000000), 62); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000003E3A, 0xEB4AE1383562F4B8, 0x2261D969F7AC94CA, 0x4000000000000000), 63); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000026E4D, 0x30ECCC3215DD8F31, 0x57D27E23ACBDCFE6, 0x8000000000000000), 64); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000184F03, 0xE93FF9F4DAA797ED, 0x6E38ED64BF6A1F01, 0x0000000000000000), 65); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000F31627, 0x1C7FC3908A8BEF46, 0x4E3945EF7A25360A, 0x0000000000000000), 66); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000097EDD87, 0x1CFDA3A5697758BF, 0x0E3CBB5AC5741C64, 0x0000000000000000), 67); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000005EF4A747, 0x21E864761EA97776, 0x8E5F518BB6891BE8, 0x0000000000000000), 68); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000003B58E88C7, 0x5313EC9D329EAAA1, 0x8FB92F75215B1710, 0x0000000000000000), 69); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000025179157C9, 0x3EC73E23FA32AA4F, 0x9D3BDA934D8EE6A0, 0x0000000000000000), 70); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000172EBAD6DDC, 0x73C86D67C5FAA71C, 0x245689C107950240, 0x0000000000000000), 71); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000E7D34C64A9C, 0x85D4460DBBCA8719, 0x6B61618A4BD21680, 0x0000000000000000), 72); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000090E40FBEEA1D, 0x3A4ABC8955E946FE, 0x31CDCF66F634E100, 0x0000000000000000), 73); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0005A8E89D752524, 0x46EB5D5D5B1CC5ED, 0xF20A1A059E10CA00, 0x0000000000000000), 74); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x003899162693736A, 0xC531A5A58F1FBB4B, 0x746504382CA7E400, 0x0000000000000000), 75); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0235FADD81C2822B, 0xB3F07877973D50F2, 0x8BF22A31BE8EE800, 0x0000000000000000), 76); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x161BCCA7119915B5, 0x0764B4ABE8652979, 0x7775A5F171951000, 0x0000000000000000), 77); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0xDD15FE86AFFAD912, 0x49EF0EB713F39EBE, 0xAA987B6E6FD2A000, 0x0000000000000000), 78); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000008, 0xA2DBF142DFCC7AB6, 0xE3569326C7843372, 0xA9F4D2505E3A4000, 0x0000000000000000), 79); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000056, 0x5C976C9CBDFCCB24, 0xE161BF83CB2A027A, 0xA3903723AE468000, 0x0000000000000000), 80); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000000035F, 0x9DEA3E1F6BDFEF70, 0xCDD17B25EFA418CA, 0x63A22764CEC10000, 0x0000000000000000), 81); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000000021BC, 0x2B266D3A36BF5A68, 0x0A2ECF7B5C68F7E7, 0xE45589F0138A0000, 0x0000000000000000), 82); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000015159, 0xAF80444623798810, 0x65D41AD19C19AF0E, 0xEB576360C3640000, 0x0000000000000000), 83); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000000D2D80, 0xDB02AABD62BF50A3, 0xFA490C301900D695, 0x3169E1C7A1E80000, 0x0000000000000000), 84); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000083C708, 0x8E1AAB65DB792667, 0xC6DA79E0FA0861D3, 0xEE22D1CC53100000, 0x0000000000000000), 85); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000525C655, 0x8D0AB1FA92BB800D, 0xC488C2C9C453D247, 0x4D5C31FB3EA00000, 0x0000000000000000), 86); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000003379BF57, 0x826AF3C9BB530089, 0xAD579BE1AB4636C9, 0x0599F3D072400000, 0x0000000000000000), 87); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000202C1796B, 0x182D85E1513E0560, 0xC56C16D0B0BE23DA, 0x3803862476800000, 0x0000000000000000), 88); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000141B8EBE2E, 0xF1C73ACD2C6C35C7, 0xB638E426E76D6686, 0x30233D6CA1000000, 0x0000000000000000), 89); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000C913936DD5, 0x71C84C03BC3A19CD, 0x1E38E9850A46013D, 0xE160663E4A000000, 0x0000000000000000), 90); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000007DAC3C24A56, 0x71D2F8255A450203, 0x2E391F3266BC0C6A, 0xCDC3FE6EE4000000, 0x0000000000000000), 91); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00004E8BA596E760, 0x723DB17586B2141F, 0xCE3B37F803587C2C, 0x09A7F054E8000000, 0x0000000000000000), 92); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0003117477E509C4, 0x7668EE9742F4C93E, 0x0E502FB02174D9B8, 0x608F635110000000, 0x0000000000000000), 93); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x001EAE8CAEF261AC, 0xA01951E89D8FDC6C, 0x8F21DCE14E908133, 0xC599E12AA0000000, 0x0000000000000000), 94); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0132D17ED577D0BE, 0x40FD3316279E9C3D, 0x9752A0CD11A50C05, 0xB802CBAA40000000, 0x0000000000000000), 95); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0BFC2EF456AE276E, 0x89E3FEDD8C321A67, 0xE93A4802B0727839, 0x301BF4A680000000, 0x0000000000000000), 96); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x77D9D58B62CD8A51, 0x62E7F4A779F5080F, 0x1C46D01AE478B23B, 0xE1178E8100000000, 0x0000000000000000), 97); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000004, 0xAE825771DC07672D, 0xDD0F8E8AC3925097, 0x1AC4210CECB6F656, 0xCAEB910A00000000, 0x0000000000000000), 98); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x000000000000002E, 0xD1176A72984A07CA, 0xA29B916BA3B725E7, 0x0BA94A813F259F63, 0xED33AA6400000000, 0x0000000000000000), 99); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x00000000000001D4, 0x2AEA2879F2E44DEA, 0x5A13AE3465277B06, 0x749CE90C777839E7, 0x4404A7E800000000, 0x0000000000000000), 100); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000001249, 0xAD2594C37CEB0B27, 0x84C4CE0BF38ACE40, 0x8E211A7CAAB24308, 0xA82E8F1000000000, 0x0000000000000000), 101); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x000000000000B6E0, 0xC377CFA2E12E6F8B, 0x2FB00C77836C0E85, 0x8D4B08DEAAF69E56, 0x91D196A000000000, 0x0000000000000000), 102); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x00000000000724C7, 0xA2AE1C5CCBD05B6F, 0xDCE07CAB22389137, 0x84EE58B2ADA22F61, 0xB22FE24000000000, 0x0000000000000000), 103); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000476FCC, 0x5ACD1B9FF623925E, 0xA0C4DEAF5635AC2B, 0x314F76FAC855D9D0, 0xF5DED68000000000, 0x0000000000000000), 104); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000002CA5DFB, 0x8C03143F9D63B7B2, 0x47B0B2D95E18B9AF, 0xED1AA5CBD35A8229, 0x9AB4610000000000, 0x0000000000000000), 105); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x000000001BE7ABD3, 0x781ECA7C25E52CF6, 0xCCE6FC7DACF740DF, 0x430A79F6418915A0, 0x0B0BCA0000000000, 0x0000000000000000), 106); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x00000001170CB642, 0xB133E8D97AF3C1A4, 0x0105DCE8C1A888B8, 0x9E68C39E8F5AD840, 0x6E75E40000000000, 0x0000000000000000), 107); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000AE67F1E9A, 0xEC07187ECD859068, 0x0A3AA11790955736, 0x3017A431998C7284, 0x509AE80000000000, 0x0000000000000000), 108); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000006D00F7320D, 0x3846F4F40737A410, 0x664A4AEBA5D5681D, 0xE0EC69EFFF7C792B, 0x260D100000000000, 0x0000000000000000), 109); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000044209A7F484, 0x32C59188482C68A3, 0xFEE6ED347A56112A, 0xC93C235FFADCBBAF, 0x7C82A00000000000, 0x0000000000000000), 110); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x00002A94608F8D29, 0xFBB7AF52D1BC1667, 0xF505440CC75CABAB, 0xDC5961BFCC9F54DA, 0xDD1A400000000000, 0x0000000000000000), 111); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0001A9CBC59B83A3, 0xD52CD93C3158E00F, 0x9234A87FC99EB4B6, 0x9B7DD17DFE39508C, 0xA306800000000000, 0x0000000000000000), 112); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0010A1F5B8132466, 0x53C07C59ED78C09B, 0xB60E94FDE0330F22, 0x12EA2EEBEE3D257E, 0x5E41000000000000, 0x0000000000000000), 113); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x00A6539930BF6BFF, 0x4584DB8346B78615, 0x1C91D1EAC1FE9754, 0xBD25D5374E6376EF, 0xAE8A000000000000, 0x0000000000000000), 114); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x067F43FBE77A37F8, 0xB7309320C32B3CD3, 0x1DB2332B93F1E94F, 0x637A54290FE2A55C, 0xD164000000000000, 0x0000000000000000), 115); + yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x40F8A7D70AC62FB7, 0x27E5BF479FB0603F, 0x28F5FFB3C7731D19, 0xE2C7499A9EDA75A0, 0x2DE8000000000000, 0x0000000000000000), 116); + yield return () => (new(0x0000000000000000, 0x0000000000000002, 0x89B68E666BBDDD27, 0x8EF978CC3CE3C277, 0x999BFD05CA7F2302, 0xDBC8E00A34889841, 0xCB10000000000000, 0x0000000000000000), 117); + yield return () => (new(0x0000000000000000, 0x0000000000000019, 0x61219000356AA38B, 0x95BEB7FA60E598AC, 0x0017E239E8F75E1C, 0x95D8C0660D55F291, 0xEEA0000000000000, 0x0000000000000000), 118); + yield return () => (new(0x0000000000000000, 0x00000000000000FD, 0xCB4FA002162A6373, 0xD9732FC7C8F7F6B8, 0x00EED64319A9AD1D, 0xDA7783FC855B79B3, 0x5240000000000000, 0x0000000000000000), 119); + yield return () => (new(0x0000000000000000, 0x00000000000009E9, 0xF11C4014DDA7E286, 0x7E7FDDCDD9AFA330, 0x09545E9F00A0C32A, 0x88AB27DD3592C101, 0x3680000000000000, 0x0000000000000000), 120); + yield return () => (new(0x0000000000000000, 0x0000000000006323, 0x6B1A80D0A88ED940, 0xF0FEAA0A80DC5FE0, 0x5D4BB23606479FA9, 0x56AF8EA417BB8A0C, 0x2100000000000000, 0x0000000000000000), 121); + yield return () => (new(0x0000000000000000, 0x000000000003DF62, 0x2F09082695947C89, 0x69F2A469089BBEC3, 0xA4F4F61C3ECC3C9D, 0x62DB9268ED536479, 0x4A00000000000000, 0x0000000000000000), 122); + yield return () => (new(0x0000000000000000, 0x000000000026B9D5, 0xD65A5181D7CCDD5E, 0x237A6C1A561573A4, 0x71919D1A73FA5E25, 0xDC93B8194541ECBC, 0xE400000000000000, 0x0000000000000000), 123); + yield return () => (new(0x0000000000000000, 0x000000000183425A, 0x5F872F126E00A5AD, 0x62C839075CD6846C, 0x6FB0230887C7AD7A, 0x9DC530FCB4933F60, 0xE800000000000000, 0x0000000000000000), 124); + yield return () => (new(0x0000000000000000, 0x000000000F209787, 0xBB47D6B84C0678C5, 0xDBD23A49A0612C3C, 0x5CE15E554DCCC6CA, 0x29B3E9DF0DC079C9, 0x1000000000000000, 0x0000000000000000), 125); + yield return () => (new(0x0000000000000000, 0x000000009745EB4D, 0x50CE6332F840B7BA, 0x963646E043CBBA5B, 0xA0CDAF5509FFC3E5, 0xA10722B68984C1DA, 0xA000000000000000, 0x0000000000000000), 126); + yield return () => (new(0x0000000000000000, 0x00000005E8BB3105, 0x280FDFFDB2872D49, 0xDE1EC4C2A5F54794, 0x4808D95263FDA6F8, 0x4A475B215F2F928A, 0x4000000000000000, 0x0000000000000000), 127); + yield return () => (new(0x0000000000000000, 0x0000003B174FEA33, 0x909EBFE8F947C4E2, 0xAD33AF9A7B94CBCA, 0xD0587D37E7E885B2, 0xE6C98F4DB7DBB966, 0x8000000000000000, 0x0000000000000000), 128); + yield return () => (new(0x0000000000000000, 0x0000024EE91F2603, 0xA6337F19BCCDB0DA, 0xC404DC08D3CFF5EC, 0x2374E42F0F1538FD, 0x03DF99092E953E01, 0x0000000000000000, 0x0000000000000000), 129); + yield return () => (new(0x0000000000000000, 0x000017151B377C24, 0x7E02F7016008E88B, 0xA8309858461F9B39, 0x6290E9D696D439E2, 0x26BBFA5BD1D46C0A, 0x0000000000000000, 0x0000000000000000), 130); + yield return () => (new(0x0000000000000000, 0x0000E6D3102AD96C, 0xEC1DA60DC0591574, 0x91E5F372BD3C103D, 0xD9A92261E44A42D5, 0x8357C796324C3864, 0x0000000000000000, 0x0000000000000000), 131); + yield return () => (new(0x0000000000000000, 0x0009043EA1AC7E41, 0x39287C89837AD68D, 0xB2FB827B6458A26A, 0x809B57D2EAE69C57, 0x216DCBDDF6FA33E8, 0x0000000000000000, 0x0000000000000000), 132); + yield return () => (new(0x0000000000000000, 0x005A2A7250BCEE8C, 0x3B94DD5F22CC6188, 0xFDD318D1EB765829, 0x06116E3D2D021B67, 0x4E49F6ABA5C60710, 0x0000000000000000, 0x0000000000000000), 133); + yield return () => (new(0x0000000000000000, 0x0385A8772761517A, 0x53D0A5B75BFBCF59, 0xEA3EF833329F719A, 0x3CAE4E63C2151209, 0x0EE3A2B479BC46A0, 0x0000000000000000, 0x0000000000000000), 134); + yield return () => (new(0x0000000000000000, 0x233894A789CD2EC7, 0x4626792997D61983, 0x2675B1FFFA3A7006, 0x5ECF0FE594D2B45A, 0x94E45B0CC15AC240, 0x0000000000000000, 0x0000000000000000), 135); + yield return () => (new(0x0000000000000001, 0x6035CE8B6203D3C8, 0xBD80BB9FEE5CFF1F, 0x8098F3FFC648603F, 0xB4169EF7D03B0B89, 0xD0EB8E7F8D8B9680, 0x0000000000000000, 0x0000000000000000), 136); + yield return () => (new(0x000000000000000D, 0xC21A1171D42645D7, 0x6707543F4FA1F73B, 0x05F987FDBED3C27D, 0x08E235AE224E7362, 0x293390FB8773E100, 0x0000000000000000, 0x0000000000000000), 137); + yield return () => (new(0x0000000000000089, 0x9504AE72497EBA6A, 0x06494A791C53A84E, 0x3BBF4FE9744598E2, 0x58D618CD571081D5, 0x9C03A9D34A86CA00, 0x0000000000000000, 0x0000000000000000), 138); + yield return () => (new(0x000000000000055F, 0xD22ED076DEF34824, 0x3EDCE8BB1B44930E, 0x55791F1E8AB7F8D7, 0x785CF80566A51258, 0x1824A240E943E400, 0x0000000000000000, 0x0000000000000000), 139); + yield return () => (new(0x00000000000035BE, 0x35D424A4B580D16A, 0x74A1174F10ADBE8F, 0x56BB37316B2FB86A, 0xB3A1B0360272B770, 0xF16E56891CA6E800, 0x0000000000000000, 0x0000000000000000), 140); + yield return () => (new(0x000000000002196E, 0x1A496E6F17082E28, 0x8E4AE916A6C97199, 0x635027EE2FDD342B, 0x0450E21C187B2A69, 0x6E4F615B1E851000, 0x0000000000000000, 0x0000000000000000), 141); + yield return () => (new(0x000000000014FE4D, 0x06DE5056E651CD95, 0x8EED1AE283DE6FFD, 0xE1218F4DDEA409AE, 0x2B28D518F4CFA81E, 0x4F19CD8F3132A000, 0x0000000000000000, 0x0000000000000000), 142); + yield return () => (new(0x0000000000D1EF02, 0x44AF2364FF3207D7, 0x95430CD926B05FEA, 0xCB4F990AB26860CD, 0xAF9852F9901C912F, 0x17020797EBFA4000, 0x0000000000000000, 0x0000000000000000), 143); + yield return () => (new(0x0000000008335616, 0xAED761F1F7F44E6B, 0xD49E807B82E3BF2B, 0xF11BFA6AF813C808, 0xDBF33DBFA11DABD6, 0xE6144BEF37C68000, 0x0000000000000000, 0x0000000000000000), 144); + yield return () => (new(0x0000000052015CE2, 0xD469D373AF8B1036, 0x4E3104D31CE577B7, 0x6B17C82DB0C5D058, 0x9780697C4B28B664, 0xFCCAF7582DC10000, 0x0000000000000000, 0x0000000000000000), 145); + yield return () => (new(0x00000003340DA0DC, 0x4C224284DB6EA21F, 0x0DEA303F20F6AD2A, 0x2EEDD1C8E7BA2375, 0xEB041EDAEF971FF1, 0xDFEDA971C98A0000, 0x0000000000000000, 0x0000000000000000), 146); + yield return () => (new(0x000000200888489A, 0xF956993092525536, 0x8B25E27749A2C3A5, 0xD54A31D90D45629B, 0x2E29348D5BE73F72, 0xBF489E71DF640000, 0x0000000000000000, 0x0000000000000000), 147); + yield return () => (new(0x000001405552D60D, 0xBD61FBE5B7375421, 0x6F7AD8A8E05BA47A, 0x54E5F27A84B5DA0F, 0xCD9C0D8597087A7B, 0x78D63072B9E80000, 0x0000000000000000, 0x0000000000000000), 148); + yield return () => (new(0x00000C83553C5C89, 0x65D3D6F92829494E, 0x5ACC7698C3946CC7, 0x50FB78C92F1A849E, 0x08188737E654C8D2, 0xB85DE47B43100000, 0x0000000000000000, 0x0000000000000000), 149); + yield return () => (new(0x00007D21545B9D5D, 0xFA4665BB919CDD0F, 0x8BFCA1F7A3CC3FC9, 0x29D2B7DBD7092E2C, 0x50F5482EFF4FD83B, 0x33AAECD09EA00000, 0x0000000000000000, 0x0000000000000000), 150); + yield return () => (new(0x0004E34D4B9425AB, 0xC6BFF953B020A29B, 0x77DE53AC65FA7DDB, 0xA23B2E96665BCDBB, 0x2994D1D5F91E7250, 0x04AD402632400000, 0x0000000000000000, 0x0000000000000000), 151); + yield return () => (new(0x0030E104F3C978B5, 0xC37FBD44E1465A12, 0xAEAF44BBFBC8EA94, 0x564FD1DFFF96094F, 0x9FD0325BBB307720, 0x2EC4817DF6800000, 0x0000000000000000, 0x0000000000000000), 152); + yield return () => (new(0x01E8CA3185DEB719, 0xA2FD64B0CCBF84BA, 0xD2D8AF57D5D929CB, 0x5F1E32BFFBDC5D1C, 0x3E21F7954FE4A741, 0xD3AD0EEBA1000000, 0x0000000000000000, 0x0000000000000000), 153); + yield return () => (new(0x1317E5EF3AB32700, 0x5DE5EEE7FF7B2F4C, 0x3C76D96E5A7BA1F1, 0xB72DFB7FD69BA31A, 0x6D53ABD51EEE8892, 0x44C295344A000000, 0x0000000000000000, 0x0000000000000000), 154); + yield return () => (new(0xBEEEFB584AFF8603, 0xAAFB550FFACFD8FA, 0x5CA47E4F88D45371, 0x27CBD2FE62145F08, 0x4544B653355155B6, 0xAF99D40AE4000000, 0x0000000000000000, 0x0000000000000000), 155); + yield return () => (new(0x7555D172EDFB3C24, 0xADD1529FCC1E79C7, 0x9E6CEF1B584B426B, 0x8DF63DEFD4CBB652, 0xB4AF1F40152D5922, 0xDC02486CE8000000, 0x0000000000000000, 0x0000000000000000), 156); + } diff --git a/src/MissingValues.Tests/Data/UInt512DataSources.cs b/src/MissingValues.Tests/Data/UInt512DataSources.cs index 72c2c46..84e24a0 100644 --- a/src/MissingValues.Tests/Data/UInt512DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt512DataSources.cs @@ -21,62 +21,188 @@ public class UInt512DataSources { public static IEnumerable> op_AdditionTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, UInt512.Zero, UInt512.Zero); + yield return () => (UInt512.One, UInt512.Zero, UInt512.One); + yield return () => (UInt512.One, UInt512.One, new UInt512(0, 0, 0, 0, 0, 0, 0, 2)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue), UInt512.One, new UInt512(0, 0, 0, 0, 0, 0, 1, 0)); + yield return () => (new UInt512(0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), UInt512.One, new UInt512(1, 0, 0, 0, 0, 0, 0, 0)); + yield return () => (UInt512.One, UInt512.MaxValue, UInt512.Zero); } public static IEnumerable> op_CheckedAdditionTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, UInt512.Zero, UInt512.Zero, false); + yield return () => (UInt512.One, UInt512.Zero, UInt512.One, false); + yield return () => (UInt512.One, UInt512.One, new UInt512(0, 0, 0, 0, 0, 0, 0, 2), false); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue), UInt512.One, new UInt512(0, 0, 0, 0, 0, 0, 1, 0), false); + yield return () => (new UInt512(0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), UInt512.One, new UInt512(1, 0, 0, 0, 0, 0, 0, 0), false); + yield return () => (UInt512.One, UInt512.MaxValue, UInt512.Zero, true); } public static IEnumerable> op_CheckedDecrementTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, UInt512.MaxValue, true); + yield return () => (UInt512.One, UInt512.Zero, false); + yield return () => (UInt512.MaxValue, UInt512.MaxValue - UInt512.One, false); } public static IEnumerable> op_CheckedIncrementTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, UInt512.One, false); + yield return () => (UInt512.One, new UInt512(0, 0, 0, 0, 0, 0, 0, 2), false); + yield return () => (UInt512.MaxValue, UInt512.Zero, true); } public static IEnumerable> op_CheckedMultiplyTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, UInt512.Zero, UInt512.Zero, false); + yield return () => (UInt512.One, UInt512.One, UInt512.One, false); + yield return () => ( + new UInt512(0, 0, 0, 0, 0, 0, 0, 2), + new UInt512(0, 0, 0, 0, 0, 0, 0, 3), + new UInt512(0, 0, 0, 0, 0, 0, 0, 6), + false + ); + yield return () => ( + new UInt512(0, 0, 0, 0, 0, 0, 1, 0), + new UInt512(0, 0, 0, 0, 0, 0, 1, 0), + new UInt512(0, 0, 0, 0, 0, 1, 0, 0), + false + ); + yield return () => ( + new UInt512(0, 0, 0, 1, 0, 0, 0, 0), + new UInt512(0, 0, 0, 0, 1, 0, 0, 0), + new UInt512(1, 0, 0, 0, 0, 0, 0, 0), + false + ); + yield return () => ( + UInt512.MaxValue, + UInt512.One, + UInt512.MaxValue, + false + ); + yield return () => ( + UInt512.MaxValue, + new UInt512(0, 0, 0, 0, 0, 0, 0, 2), + default, + true + ); } public static IEnumerable> op_CheckedSubtractionTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, UInt512.Zero, UInt512.Zero, false); + yield return () => (UInt512.One, UInt512.Zero, UInt512.One, false); + yield return () => (UInt512.One, UInt512.One, UInt512.Zero, false); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 2), UInt512.One, UInt512.One, false); + yield return () => ( + new UInt512(0, 0, 0, 0, 0, 0, 1, 0), + UInt512.One, + new UInt512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue), + false + ); + yield return () => (UInt512.Zero, UInt512.One, UInt512.MaxValue, true); } public static IEnumerable> op_DecrementTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, UInt512.MaxValue); + yield return () => (UInt512.One, UInt512.Zero); + yield return () => (UInt512.MaxValue, UInt512.MaxValue - UInt512.One); } public static IEnumerable> op_DivisionTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, UInt512.One, UInt512.Zero); + yield return () => (UInt512.One, UInt512.One, UInt512.One); + yield return () => ( + new UInt512(0, 0, 0, 0, 0, 0, 0, 6), + new UInt512(0, 0, 0, 0, 0, 0, 0, 2), + new UInt512(0, 0, 0, 0, 0, 0, 0, 3) + ); + yield return () => (UInt512.MaxValue, UInt512.One, UInt512.MaxValue); + yield return () => (UInt512.MaxValue, new UInt512(0, 0, 0, 0, 0, 1, 0, 0), UInt512.Parse("39402006196394479212279040100143613805079739270465446667948293404245721771497210611414266254884915640806627990306815")); + yield return () => ( + new UInt512(0, 0, 0, 0, 0, 0, 1, ulong.MaxValue - 1), + new UInt512(0, 0, 0, 0, 0, 0, 0, 2), + new UInt512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue) + ); } public static IEnumerable> op_IncrementTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, UInt512.One); + yield return () => (UInt512.One, new UInt512(0, 0, 0, 0, 0, 0, 0, 2)); + yield return () => (UInt512.MaxValue, UInt512.Zero); } public static IEnumerable> op_ModulusTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, UInt512.One, UInt512.Zero); + yield return () => (UInt512.One, UInt512.One, UInt512.Zero); + yield return () => ( + new UInt512(0, 0, 0, 0, 0, 0, 0, 5), + new UInt512(0, 0, 0, 0, 0, 0, 0, 2), + UInt512.One + ); + yield return () => ( + new UInt512(0, 0, 0, 0, 0, 0, 0, 7), + new UInt512(0, 0, 0, 0, 0, 0, 0, 3), + UInt512.One + ); + yield return () => (UInt512.MaxValue, UInt512.One, UInt512.Zero); + yield return () => ( + new UInt512(0, 0, 0, 0, 0, 0, 1, 0), + new UInt512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue), + UInt512.One + ); } public static IEnumerable> op_MultiplyTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, UInt512.Zero, UInt512.Zero); + yield return () => (UInt512.One, UInt512.Zero, UInt512.Zero); + yield return () => (UInt512.One, UInt512.One, UInt512.One); + yield return () => ( + new UInt512(0, 0, 0, 0, 0, 0, 0, 2), + new UInt512(0, 0, 0, 0, 0, 0, 0, 3), + new UInt512(0, 0, 0, 0, 0, 0, 0, 6) + ); + yield return () => ( + new UInt512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue), + new UInt512(0, 0, 0, 0, 0, 0, 0, 2), + new UInt512(0, 0, 0, 0, 0, 0, 1, ulong.MaxValue - 1) + ); + yield return () => ( + new UInt512(0, 0, 0, 0, 0, 0, 1, 0), + new UInt512(0, 0, 0, 0, 0, 0, 1, 0), + new UInt512(0, 0, 0, 0, 0, 1, 0, 0) + ); + yield return () => ( + new UInt512(0, 0, 0, 1, 0, 0, 0, 0), + new UInt512(0, 0, 0, 0, 1, 0, 0, 0), + new UInt512(1, 0, 0, 0, 0, 0, 0, 0) + ); + yield return () => (UInt512.MaxValue, UInt512.One, UInt512.MaxValue); } public static IEnumerable> op_SubtractionTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, UInt512.Zero, UInt512.Zero); + yield return () => (UInt512.One, UInt512.Zero, UInt512.One); + yield return () => (UInt512.One, UInt512.One, UInt512.Zero); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 2), UInt512.One, UInt512.One); + yield return () => ( + new UInt512(0, 0, 0, 0, 0, 0, 1, 0), + UInt512.One, + new UInt512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue) + ); + yield return () => ( + UInt512.MaxValue, + UInt512.One, + new UInt512(ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, + ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue - 1) + ); } public static IEnumerable> op_ShiftLeftTestData() @@ -261,32 +387,221 @@ public class UInt512DataSources public static IEnumerable> ParseTestData() { - throw new NotImplementedException(); + yield return () => ("0", NumberStyles.Integer, CultureInfo.InvariantCulture, UInt512.Zero); + yield return () => ("1", NumberStyles.Integer, CultureInfo.InvariantCulture, UInt512.One); + yield return () => ("4294967296", NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 4294967296)); + yield return () => ("18446744073709551616", NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 1, 0)); + yield return () => ("340282366920938463463374607431768211456", NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 1, 0, 0)); + yield return () => ("6277101735386680763835789423207666416102355444464034512896", NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 1, 0, 0, 0)); + yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639936", NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 1, 0, 0, 0, 0)); + yield return () => ("2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086936576", NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt512(0, 0, 1, 0, 0, 0, 0, 0)); + yield return () => ("39402006196394479212279040100143613805079739270465446667948293404245721771497210611414266254884915640806627990306816", NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt512(0, 1, 0, 0, 0, 0, 0, 0)); + yield return () => ("726838724295606890549323807888004534353641360687318060281490199180639288113397923326191050713763565560762521606266177933534601628614656", NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt512(1, 0, 0, 0, 0, 0, 0, 0)); + yield return () => ("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095", NumberStyles.Integer, CultureInfo.InvariantCulture, UInt512.MaxValue); + + yield return () => ("123456789ABCDEF0", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0x123456789ABCDEF0)); + yield return () => ("FF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0xFF)); + yield return () => ("FFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0xFFFF)); + yield return () => ("FFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0xFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0x0000000000000000, 0x0000000000000000, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0xFFFFFFFFFFFFFFFF, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0xFFFFFFFFFFFFFFFF)); + + yield return () => ("1010101010101010", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0b1010101010101010)); + yield return () => ("11111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0b11111111)); + yield return () => ("1111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0b1111111111111111)); + yield return () => ("11111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0b11111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt512(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); } public static IEnumerable> ParseSpanTestData() { - throw new NotImplementedException(); + yield return () => ("0".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, UInt512.Zero); + yield return () => ("1".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, UInt512.One); + yield return () => ("4294967296".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 4294967296)); + yield return () => ("18446744073709551616".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 1, 0)); + yield return () => ("340282366920938463463374607431768211456".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 1, 0, 0)); + yield return () => ("6277101735386680763835789423207666416102355444464034512896".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 1, 0, 0, 0)); + yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639936".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 1, 0, 0, 0, 0)); + yield return () => ("2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086936576".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt512(0, 0, 1, 0, 0, 0, 0, 0)); + yield return () => ("39402006196394479212279040100143613805079739270465446667948293404245721771497210611414266254884915640806627990306816".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt512(0, 1, 0, 0, 0, 0, 0, 0)); + yield return () => ("726838724295606890549323807888004534353641360687318060281490199180639288113397923326191050713763565560762521606266177933534601628614656".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt512(1, 0, 0, 0, 0, 0, 0, 0)); + yield return () => ("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, UInt512.MaxValue); + + yield return () => ("123456789ABCDEF0".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0x123456789ABCDEF0)); + yield return () => ("FF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0xFF)); + yield return () => ("FFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0xFFFF)); + yield return () => ("FFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0xFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0x0000000000000000, 0x0000000000000000, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0xFFFFFFFFFFFFFFFF, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0xFFFFFFFFFFFFFFFF)); + + yield return () => ("1010101010101010".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0b1010101010101010)); + yield return () => ("11111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0b11111111)); + yield return () => ("1111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0b1111111111111111)); + yield return () => ("11111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0b11111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt512(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); } public static IEnumerable> ParseUtf8TestData() { - throw new NotImplementedException(); + yield return () => ("0"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, UInt512.Zero); + yield return () => ("1"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, UInt512.One); + yield return () => ("4294967296"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 4294967296)); + yield return () => ("18446744073709551616"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 1, 0)); + yield return () => ("340282366920938463463374607431768211456"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 1, 0, 0)); + yield return () => ("6277101735386680763835789423207666416102355444464034512896"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 1, 0, 0, 0)); + yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639936"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 1, 0, 0, 0, 0)); + yield return () => ("2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086936576"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt512(0, 0, 1, 0, 0, 0, 0, 0)); + yield return () => ("39402006196394479212279040100143613805079739270465446667948293404245721771497210611414266254884915640806627990306816"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt512(0, 1, 0, 0, 0, 0, 0, 0)); + yield return () => ("726838724295606890549323807888004534353641360687318060281490199180639288113397923326191050713763565560762521606266177933534601628614656"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new UInt512(1, 0, 0, 0, 0, 0, 0, 0)); + yield return () => ("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, UInt512.MaxValue); + + yield return () => ("123456789ABCDEF0"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0x123456789ABCDEF0)); + yield return () => ("FF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0xFF)); + yield return () => ("FFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0xFFFF)); + yield return () => ("FFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0xFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0x0000000000000000, 0x0000000000000000, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new UInt512(0xFFFFFFFFFFFFFFFF, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0xFFFFFFFFFFFFFFFF)); + + yield return () => ("1010101010101010"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0b1010101010101010)); + yield return () => ("11111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0b11111111)); + yield return () => ("1111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0b1111111111111111)); + yield return () => ("11111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0b11111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt512(0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new UInt512(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); } public static IEnumerable> TryParseTestData() { - throw new NotImplementedException(); + yield return () => ("0", NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt512.Zero); + yield return () => ("1", NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt512.One); + yield return () => ("4294967296", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 0, 0, 4294967296)); + yield return () => ("18446744073709551616", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 0, 1, 0)); + yield return () => ("340282366920938463463374607431768211456", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 1, 0, 0)); + yield return () => ("6277101735386680763835789423207666416102355444464034512896", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(1, 0, 0, 0)); + yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639936", NumberStyles.Integer, CultureInfo.InvariantCulture, false, new UInt512(0, 0, 0, 1, 0, 0, 0, 0)); + yield return () => ("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095", NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt512.MaxValue); + yield return () => ("-1", NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + yield return () => ("2.25", NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + yield return () => ("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096", NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + yield return () => ("20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); } public static IEnumerable> TryParseSpanTestData() { - throw new NotImplementedException(); + yield return () => ("0".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt512.Zero); + yield return () => ("1".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt512.One); + yield return () => ("4294967296".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 0, 0, 4294967296)); + yield return () => ("18446744073709551616".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 0, 1, 0)); + yield return () => ("340282366920938463463374607431768211456".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 1, 0, 0)); + yield return () => ("6277101735386680763835789423207666416102355444464034512896".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(1, 0, 0, 0)); + yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639936".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, new UInt512(0, 0, 0, 1, 0, 0, 0, 0)); + yield return () => ("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt512.MaxValue); + yield return () => ("-1".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + yield return () => ("2.25".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + yield return () => ("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + yield return () => ("20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); } public static IEnumerable> TryParseUtf8TestData() { - throw new NotImplementedException(); + yield return () => ("0"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt512.Zero); + yield return () => ("1"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt512.One); + yield return () => ("4294967296"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 0, 0, 4294967296)); + yield return () => ("18446744073709551616"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 0, 1, 0)); + yield return () => ("340282366920938463463374607431768211456"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 1, 0, 0)); + yield return () => ("6277101735386680763835789423207666416102355444464034512896"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(1, 0, 0, 0)); + yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639936"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, new UInt512(0, 0, 0, 1, 0, 0, 0, 0)); + yield return () => ("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt512.MaxValue); + yield return () => ("-1"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + yield return () => ("2.25"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + yield return () => ("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + yield return () => ("20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); } public static IEnumerable> ClampTestData() From 11a449162ddce833cf8ffe12f4db35c96716046b Mon Sep 17 00:00:00 2001 From: crookseta Date: Sun, 21 Sep 2025 21:26:18 -0500 Subject: [PATCH 18/74] Fixed typo --- .../Data/CalculatorDataSources.cs | 625 +++++++++++++----- 1 file changed, 469 insertions(+), 156 deletions(-) diff --git a/src/MissingValues.Tests/Data/CalculatorDataSources.cs b/src/MissingValues.Tests/Data/CalculatorDataSources.cs index 9bf656b..60ba5ff 100644 --- a/src/MissingValues.Tests/Data/CalculatorDataSources.cs +++ b/src/MissingValues.Tests/Data/CalculatorDataSources.cs @@ -6,160 +6,473 @@ public class CalculatorDataSources { public static IEnumerable> Log10TestData() { - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000001), 0); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000000000A), 1); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000064), 2); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000000003E8), 3); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000002710), 4); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000000186A0), 5); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000000F4240), 6); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000989680), 7); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000005F5E100), 8); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000003B9ACA00), 9); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000002540BE400), 10); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000174876E800), 11); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000E8D4A51000), 12); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000009184E72A000), 13); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00005AF3107A4000), 14); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00038D7EA4C68000), 15); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x002386F26FC10000), 16); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x016345785D8A0000), 17); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0DE0B6B3A7640000), 18); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x8AC7230489E80000), 19); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000005, 0x6BC75E2D63100000), 20); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000036, 0x35C9ADC5DEA00000), 21); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000000021E, 0x19E0C9BAB2400000), 22); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000000152D, 0x02C7E14AF6800000), 23); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000000D3C2, 0x1BCECCEDA1000000), 24); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000084595, 0x161401484A000000), 25); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000052B7D2, 0xDCC80CD2E4000000), 26); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000033B2E3C, 0x9FD0803CE8000000), 27); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000204FCE5E, 0x3E25026110000000), 28); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000001431E0FAE, 0x6D7217CAA0000000), 29); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000C9F2C9CD0, 0x4674EDEA40000000), 30); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000007E37BE2022, 0xC0914B2680000000), 31); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000004EE2D6D415B, 0x85ACEF8100000000), 32); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000314DC6448D93, 0x38C15B0A00000000), 34); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0001ED09BEAD87C0, 0x378D8E6400000000), 35); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0013426172C74D82, 0x2B878FE800000000), 36); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00C097CE7BC90715, 0xB34B9F1000000000), 37); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0785EE10D5DA46D9, 0x00F436A000000000), 38); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x4B3B4CA85A86C47A, 0x098A224000000000), 39); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000002, 0xF050FE938943ACC4, 0x5F65568000000000), 40); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000000001D, 0x6329F1C35CA4BFAB, 0xB9F5610000000000), 41); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000125, 0xDFA371A19E6F7CB5, 0x4395CA0000000000), 42); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000B7A, 0xBC627050305ADF14, 0xA3D9E40000000000), 43); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000000072CB, 0x5BD86321E38CB6CE, 0x6682E80000000000), 44); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000047BF1, 0x9673DF52E37F2410, 0x011D100000000000), 45); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000002CD76F, 0xE086B93CE2F768A0, 0x0B22A00000000000), 46); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000001C06A5E, 0xC5433C60DDAA1640, 0x6F5A400000000000), 47); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000118427B3, 0xB4A05BC8A8A4DE84, 0x5986800000000000), 48); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000AF298D05, 0x0E4395D69670B12B, 0x7F41000000000000), 49); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000006D79F8232, 0x8EA3DA61E066EBB2, 0xF88A000000000000), 50); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000446C3B15F9, 0x926687D2C40534FD, 0xB564000000000000), 51); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000002AC3A4EDBBF, 0xB8014E3BA83411E9, 0x15E8000000000000), 52); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00001ABA4714957D, 0x300D0E549208B31A, 0xDB10000000000000), 53); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00010B46C6CDD6E3, 0xE0828F4DB456FF0C, 0x8EA0000000000000), 54); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000A70C3C40A64E6, 0xC51999090B65F67D, 0x9240000000000000), 55); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x006867A5A867F103, 0xB2FFFA5A71FBA0E7, 0xB680000000000000), 56); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x04140C78940F6A24, 0xFDFFC78873D4490D, 0x2100000000000000), 57); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x28C87CB5C89A2571, 0xEBFDCB54864ADA83, 0x4A00000000000000), 58); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000001, 0x97D4DF19D6057673, 0x37E9F14D3EEC8920, 0xE400000000000000), 59); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000000000F, 0xEE50B7025C36A080, 0x2F236D04753D5B48, 0xE800000000000000), 60); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000000009F, 0x4F2726179A224501, 0xD762422C946590D9, 0x1000000000000000), 61); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000639, 0x17877CEC0556B212, 0x69D695BDCBF7A87A, 0xA000000000000000), 62); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000003E3A, 0xEB4AE1383562F4B8, 0x2261D969F7AC94CA, 0x4000000000000000), 63); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000026E4D, 0x30ECCC3215DD8F31, 0x57D27E23ACBDCFE6, 0x8000000000000000), 64); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000184F03, 0xE93FF9F4DAA797ED, 0x6E38ED64BF6A1F01, 0x0000000000000000), 65); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000F31627, 0x1C7FC3908A8BEF46, 0x4E3945EF7A25360A, 0x0000000000000000), 66); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000097EDD87, 0x1CFDA3A5697758BF, 0x0E3CBB5AC5741C64, 0x0000000000000000), 67); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000005EF4A747, 0x21E864761EA97776, 0x8E5F518BB6891BE8, 0x0000000000000000), 68); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000003B58E88C7, 0x5313EC9D329EAAA1, 0x8FB92F75215B1710, 0x0000000000000000), 69); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000025179157C9, 0x3EC73E23FA32AA4F, 0x9D3BDA934D8EE6A0, 0x0000000000000000), 70); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000172EBAD6DDC, 0x73C86D67C5FAA71C, 0x245689C107950240, 0x0000000000000000), 71); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000E7D34C64A9C, 0x85D4460DBBCA8719, 0x6B61618A4BD21680, 0x0000000000000000), 72); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000090E40FBEEA1D, 0x3A4ABC8955E946FE, 0x31CDCF66F634E100, 0x0000000000000000), 73); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0005A8E89D752524, 0x46EB5D5D5B1CC5ED, 0xF20A1A059E10CA00, 0x0000000000000000), 74); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x003899162693736A, 0xC531A5A58F1FBB4B, 0x746504382CA7E400, 0x0000000000000000), 75); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0235FADD81C2822B, 0xB3F07877973D50F2, 0x8BF22A31BE8EE800, 0x0000000000000000), 76); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x161BCCA7119915B5, 0x0764B4ABE8652979, 0x7775A5F171951000, 0x0000000000000000), 77); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0xDD15FE86AFFAD912, 0x49EF0EB713F39EBE, 0xAA987B6E6FD2A000, 0x0000000000000000), 78); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000008, 0xA2DBF142DFCC7AB6, 0xE3569326C7843372, 0xA9F4D2505E3A4000, 0x0000000000000000), 79); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000056, 0x5C976C9CBDFCCB24, 0xE161BF83CB2A027A, 0xA3903723AE468000, 0x0000000000000000), 80); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000000035F, 0x9DEA3E1F6BDFEF70, 0xCDD17B25EFA418CA, 0x63A22764CEC10000, 0x0000000000000000), 81); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000000021BC, 0x2B266D3A36BF5A68, 0x0A2ECF7B5C68F7E7, 0xE45589F0138A0000, 0x0000000000000000), 82); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000015159, 0xAF80444623798810, 0x65D41AD19C19AF0E, 0xEB576360C3640000, 0x0000000000000000), 83); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000000D2D80, 0xDB02AABD62BF50A3, 0xFA490C301900D695, 0x3169E1C7A1E80000, 0x0000000000000000), 84); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000083C708, 0x8E1AAB65DB792667, 0xC6DA79E0FA0861D3, 0xEE22D1CC53100000, 0x0000000000000000), 85); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000525C655, 0x8D0AB1FA92BB800D, 0xC488C2C9C453D247, 0x4D5C31FB3EA00000, 0x0000000000000000), 86); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000003379BF57, 0x826AF3C9BB530089, 0xAD579BE1AB4636C9, 0x0599F3D072400000, 0x0000000000000000), 87); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000202C1796B, 0x182D85E1513E0560, 0xC56C16D0B0BE23DA, 0x3803862476800000, 0x0000000000000000), 88); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000141B8EBE2E, 0xF1C73ACD2C6C35C7, 0xB638E426E76D6686, 0x30233D6CA1000000, 0x0000000000000000), 89); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000C913936DD5, 0x71C84C03BC3A19CD, 0x1E38E9850A46013D, 0xE160663E4A000000, 0x0000000000000000), 90); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000007DAC3C24A56, 0x71D2F8255A450203, 0x2E391F3266BC0C6A, 0xCDC3FE6EE4000000, 0x0000000000000000), 91); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00004E8BA596E760, 0x723DB17586B2141F, 0xCE3B37F803587C2C, 0x09A7F054E8000000, 0x0000000000000000), 92); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0003117477E509C4, 0x7668EE9742F4C93E, 0x0E502FB02174D9B8, 0x608F635110000000, 0x0000000000000000), 93); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x001EAE8CAEF261AC, 0xA01951E89D8FDC6C, 0x8F21DCE14E908133, 0xC599E12AA0000000, 0x0000000000000000), 94); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0132D17ED577D0BE, 0x40FD3316279E9C3D, 0x9752A0CD11A50C05, 0xB802CBAA40000000, 0x0000000000000000), 95); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0BFC2EF456AE276E, 0x89E3FEDD8C321A67, 0xE93A4802B0727839, 0x301BF4A680000000, 0x0000000000000000), 96); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x77D9D58B62CD8A51, 0x62E7F4A779F5080F, 0x1C46D01AE478B23B, 0xE1178E8100000000, 0x0000000000000000), 97); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000000004, 0xAE825771DC07672D, 0xDD0F8E8AC3925097, 0x1AC4210CECB6F656, 0xCAEB910A00000000, 0x0000000000000000), 98); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x000000000000002E, 0xD1176A72984A07CA, 0xA29B916BA3B725E7, 0x0BA94A813F259F63, 0xED33AA6400000000, 0x0000000000000000), 99); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x00000000000001D4, 0x2AEA2879F2E44DEA, 0x5A13AE3465277B06, 0x749CE90C777839E7, 0x4404A7E800000000, 0x0000000000000000), 100); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000001249, 0xAD2594C37CEB0B27, 0x84C4CE0BF38ACE40, 0x8E211A7CAAB24308, 0xA82E8F1000000000, 0x0000000000000000), 101); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x000000000000B6E0, 0xC377CFA2E12E6F8B, 0x2FB00C77836C0E85, 0x8D4B08DEAAF69E56, 0x91D196A000000000, 0x0000000000000000), 102); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x00000000000724C7, 0xA2AE1C5CCBD05B6F, 0xDCE07CAB22389137, 0x84EE58B2ADA22F61, 0xB22FE24000000000, 0x0000000000000000), 103); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000000476FCC, 0x5ACD1B9FF623925E, 0xA0C4DEAF5635AC2B, 0x314F76FAC855D9D0, 0xF5DED68000000000, 0x0000000000000000), 104); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000002CA5DFB, 0x8C03143F9D63B7B2, 0x47B0B2D95E18B9AF, 0xED1AA5CBD35A8229, 0x9AB4610000000000, 0x0000000000000000), 105); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x000000001BE7ABD3, 0x781ECA7C25E52CF6, 0xCCE6FC7DACF740DF, 0x430A79F6418915A0, 0x0B0BCA0000000000, 0x0000000000000000), 106); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x00000001170CB642, 0xB133E8D97AF3C1A4, 0x0105DCE8C1A888B8, 0x9E68C39E8F5AD840, 0x6E75E40000000000, 0x0000000000000000), 107); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000000AE67F1E9A, 0xEC07187ECD859068, 0x0A3AA11790955736, 0x3017A431998C7284, 0x509AE80000000000, 0x0000000000000000), 108); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000006D00F7320D, 0x3846F4F40737A410, 0x664A4AEBA5D5681D, 0xE0EC69EFFF7C792B, 0x260D100000000000, 0x0000000000000000), 109); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0000044209A7F484, 0x32C59188482C68A3, 0xFEE6ED347A56112A, 0xC93C235FFADCBBAF, 0x7C82A00000000000, 0x0000000000000000), 110); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x00002A94608F8D29, 0xFBB7AF52D1BC1667, 0xF505440CC75CABAB, 0xDC5961BFCC9F54DA, 0xDD1A400000000000, 0x0000000000000000), 111); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0001A9CBC59B83A3, 0xD52CD93C3158E00F, 0x9234A87FC99EB4B6, 0x9B7DD17DFE39508C, 0xA306800000000000, 0x0000000000000000), 112); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x0010A1F5B8132466, 0x53C07C59ED78C09B, 0xB60E94FDE0330F22, 0x12EA2EEBEE3D257E, 0x5E41000000000000, 0x0000000000000000), 113); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x00A6539930BF6BFF, 0x4584DB8346B78615, 0x1C91D1EAC1FE9754, 0xBD25D5374E6376EF, 0xAE8A000000000000, 0x0000000000000000), 114); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x067F43FBE77A37F8, 0xB7309320C32B3CD3, 0x1DB2332B93F1E94F, 0x637A54290FE2A55C, 0xD164000000000000, 0x0000000000000000), 115); - yield return () => (new(0x0000000000000000, 0x0000000000000000, 0x40F8A7D70AC62FB7, 0x27E5BF479FB0603F, 0x28F5FFB3C7731D19, 0xE2C7499A9EDA75A0, 0x2DE8000000000000, 0x0000000000000000), 116); - yield return () => (new(0x0000000000000000, 0x0000000000000002, 0x89B68E666BBDDD27, 0x8EF978CC3CE3C277, 0x999BFD05CA7F2302, 0xDBC8E00A34889841, 0xCB10000000000000, 0x0000000000000000), 117); - yield return () => (new(0x0000000000000000, 0x0000000000000019, 0x61219000356AA38B, 0x95BEB7FA60E598AC, 0x0017E239E8F75E1C, 0x95D8C0660D55F291, 0xEEA0000000000000, 0x0000000000000000), 118); - yield return () => (new(0x0000000000000000, 0x00000000000000FD, 0xCB4FA002162A6373, 0xD9732FC7C8F7F6B8, 0x00EED64319A9AD1D, 0xDA7783FC855B79B3, 0x5240000000000000, 0x0000000000000000), 119); - yield return () => (new(0x0000000000000000, 0x00000000000009E9, 0xF11C4014DDA7E286, 0x7E7FDDCDD9AFA330, 0x09545E9F00A0C32A, 0x88AB27DD3592C101, 0x3680000000000000, 0x0000000000000000), 120); - yield return () => (new(0x0000000000000000, 0x0000000000006323, 0x6B1A80D0A88ED940, 0xF0FEAA0A80DC5FE0, 0x5D4BB23606479FA9, 0x56AF8EA417BB8A0C, 0x2100000000000000, 0x0000000000000000), 121); - yield return () => (new(0x0000000000000000, 0x000000000003DF62, 0x2F09082695947C89, 0x69F2A469089BBEC3, 0xA4F4F61C3ECC3C9D, 0x62DB9268ED536479, 0x4A00000000000000, 0x0000000000000000), 122); - yield return () => (new(0x0000000000000000, 0x000000000026B9D5, 0xD65A5181D7CCDD5E, 0x237A6C1A561573A4, 0x71919D1A73FA5E25, 0xDC93B8194541ECBC, 0xE400000000000000, 0x0000000000000000), 123); - yield return () => (new(0x0000000000000000, 0x000000000183425A, 0x5F872F126E00A5AD, 0x62C839075CD6846C, 0x6FB0230887C7AD7A, 0x9DC530FCB4933F60, 0xE800000000000000, 0x0000000000000000), 124); - yield return () => (new(0x0000000000000000, 0x000000000F209787, 0xBB47D6B84C0678C5, 0xDBD23A49A0612C3C, 0x5CE15E554DCCC6CA, 0x29B3E9DF0DC079C9, 0x1000000000000000, 0x0000000000000000), 125); - yield return () => (new(0x0000000000000000, 0x000000009745EB4D, 0x50CE6332F840B7BA, 0x963646E043CBBA5B, 0xA0CDAF5509FFC3E5, 0xA10722B68984C1DA, 0xA000000000000000, 0x0000000000000000), 126); - yield return () => (new(0x0000000000000000, 0x00000005E8BB3105, 0x280FDFFDB2872D49, 0xDE1EC4C2A5F54794, 0x4808D95263FDA6F8, 0x4A475B215F2F928A, 0x4000000000000000, 0x0000000000000000), 127); - yield return () => (new(0x0000000000000000, 0x0000003B174FEA33, 0x909EBFE8F947C4E2, 0xAD33AF9A7B94CBCA, 0xD0587D37E7E885B2, 0xE6C98F4DB7DBB966, 0x8000000000000000, 0x0000000000000000), 128); - yield return () => (new(0x0000000000000000, 0x0000024EE91F2603, 0xA6337F19BCCDB0DA, 0xC404DC08D3CFF5EC, 0x2374E42F0F1538FD, 0x03DF99092E953E01, 0x0000000000000000, 0x0000000000000000), 129); - yield return () => (new(0x0000000000000000, 0x000017151B377C24, 0x7E02F7016008E88B, 0xA8309858461F9B39, 0x6290E9D696D439E2, 0x26BBFA5BD1D46C0A, 0x0000000000000000, 0x0000000000000000), 130); - yield return () => (new(0x0000000000000000, 0x0000E6D3102AD96C, 0xEC1DA60DC0591574, 0x91E5F372BD3C103D, 0xD9A92261E44A42D5, 0x8357C796324C3864, 0x0000000000000000, 0x0000000000000000), 131); - yield return () => (new(0x0000000000000000, 0x0009043EA1AC7E41, 0x39287C89837AD68D, 0xB2FB827B6458A26A, 0x809B57D2EAE69C57, 0x216DCBDDF6FA33E8, 0x0000000000000000, 0x0000000000000000), 132); - yield return () => (new(0x0000000000000000, 0x005A2A7250BCEE8C, 0x3B94DD5F22CC6188, 0xFDD318D1EB765829, 0x06116E3D2D021B67, 0x4E49F6ABA5C60710, 0x0000000000000000, 0x0000000000000000), 133); - yield return () => (new(0x0000000000000000, 0x0385A8772761517A, 0x53D0A5B75BFBCF59, 0xEA3EF833329F719A, 0x3CAE4E63C2151209, 0x0EE3A2B479BC46A0, 0x0000000000000000, 0x0000000000000000), 134); - yield return () => (new(0x0000000000000000, 0x233894A789CD2EC7, 0x4626792997D61983, 0x2675B1FFFA3A7006, 0x5ECF0FE594D2B45A, 0x94E45B0CC15AC240, 0x0000000000000000, 0x0000000000000000), 135); - yield return () => (new(0x0000000000000001, 0x6035CE8B6203D3C8, 0xBD80BB9FEE5CFF1F, 0x8098F3FFC648603F, 0xB4169EF7D03B0B89, 0xD0EB8E7F8D8B9680, 0x0000000000000000, 0x0000000000000000), 136); - yield return () => (new(0x000000000000000D, 0xC21A1171D42645D7, 0x6707543F4FA1F73B, 0x05F987FDBED3C27D, 0x08E235AE224E7362, 0x293390FB8773E100, 0x0000000000000000, 0x0000000000000000), 137); - yield return () => (new(0x0000000000000089, 0x9504AE72497EBA6A, 0x06494A791C53A84E, 0x3BBF4FE9744598E2, 0x58D618CD571081D5, 0x9C03A9D34A86CA00, 0x0000000000000000, 0x0000000000000000), 138); - yield return () => (new(0x000000000000055F, 0xD22ED076DEF34824, 0x3EDCE8BB1B44930E, 0x55791F1E8AB7F8D7, 0x785CF80566A51258, 0x1824A240E943E400, 0x0000000000000000, 0x0000000000000000), 139); - yield return () => (new(0x00000000000035BE, 0x35D424A4B580D16A, 0x74A1174F10ADBE8F, 0x56BB37316B2FB86A, 0xB3A1B0360272B770, 0xF16E56891CA6E800, 0x0000000000000000, 0x0000000000000000), 140); - yield return () => (new(0x000000000002196E, 0x1A496E6F17082E28, 0x8E4AE916A6C97199, 0x635027EE2FDD342B, 0x0450E21C187B2A69, 0x6E4F615B1E851000, 0x0000000000000000, 0x0000000000000000), 141); - yield return () => (new(0x000000000014FE4D, 0x06DE5056E651CD95, 0x8EED1AE283DE6FFD, 0xE1218F4DDEA409AE, 0x2B28D518F4CFA81E, 0x4F19CD8F3132A000, 0x0000000000000000, 0x0000000000000000), 142); - yield return () => (new(0x0000000000D1EF02, 0x44AF2364FF3207D7, 0x95430CD926B05FEA, 0xCB4F990AB26860CD, 0xAF9852F9901C912F, 0x17020797EBFA4000, 0x0000000000000000, 0x0000000000000000), 143); - yield return () => (new(0x0000000008335616, 0xAED761F1F7F44E6B, 0xD49E807B82E3BF2B, 0xF11BFA6AF813C808, 0xDBF33DBFA11DABD6, 0xE6144BEF37C68000, 0x0000000000000000, 0x0000000000000000), 144); - yield return () => (new(0x0000000052015CE2, 0xD469D373AF8B1036, 0x4E3104D31CE577B7, 0x6B17C82DB0C5D058, 0x9780697C4B28B664, 0xFCCAF7582DC10000, 0x0000000000000000, 0x0000000000000000), 145); - yield return () => (new(0x00000003340DA0DC, 0x4C224284DB6EA21F, 0x0DEA303F20F6AD2A, 0x2EEDD1C8E7BA2375, 0xEB041EDAEF971FF1, 0xDFEDA971C98A0000, 0x0000000000000000, 0x0000000000000000), 146); - yield return () => (new(0x000000200888489A, 0xF956993092525536, 0x8B25E27749A2C3A5, 0xD54A31D90D45629B, 0x2E29348D5BE73F72, 0xBF489E71DF640000, 0x0000000000000000, 0x0000000000000000), 147); - yield return () => (new(0x000001405552D60D, 0xBD61FBE5B7375421, 0x6F7AD8A8E05BA47A, 0x54E5F27A84B5DA0F, 0xCD9C0D8597087A7B, 0x78D63072B9E80000, 0x0000000000000000, 0x0000000000000000), 148); - yield return () => (new(0x00000C83553C5C89, 0x65D3D6F92829494E, 0x5ACC7698C3946CC7, 0x50FB78C92F1A849E, 0x08188737E654C8D2, 0xB85DE47B43100000, 0x0000000000000000, 0x0000000000000000), 149); - yield return () => (new(0x00007D21545B9D5D, 0xFA4665BB919CDD0F, 0x8BFCA1F7A3CC3FC9, 0x29D2B7DBD7092E2C, 0x50F5482EFF4FD83B, 0x33AAECD09EA00000, 0x0000000000000000, 0x0000000000000000), 150); - yield return () => (new(0x0004E34D4B9425AB, 0xC6BFF953B020A29B, 0x77DE53AC65FA7DDB, 0xA23B2E96665BCDBB, 0x2994D1D5F91E7250, 0x04AD402632400000, 0x0000000000000000, 0x0000000000000000), 151); - yield return () => (new(0x0030E104F3C978B5, 0xC37FBD44E1465A12, 0xAEAF44BBFBC8EA94, 0x564FD1DFFF96094F, 0x9FD0325BBB307720, 0x2EC4817DF6800000, 0x0000000000000000, 0x0000000000000000), 152); - yield return () => (new(0x01E8CA3185DEB719, 0xA2FD64B0CCBF84BA, 0xD2D8AF57D5D929CB, 0x5F1E32BFFBDC5D1C, 0x3E21F7954FE4A741, 0xD3AD0EEBA1000000, 0x0000000000000000, 0x0000000000000000), 153); - yield return () => (new(0x1317E5EF3AB32700, 0x5DE5EEE7FF7B2F4C, 0x3C76D96E5A7BA1F1, 0xB72DFB7FD69BA31A, 0x6D53ABD51EEE8892, 0x44C295344A000000, 0x0000000000000000, 0x0000000000000000), 154); - yield return () => (new(0xBEEEFB584AFF8603, 0xAAFB550FFACFD8FA, 0x5CA47E4F88D45371, 0x27CBD2FE62145F08, 0x4544B653355155B6, 0xAF99D40AE4000000, 0x0000000000000000, 0x0000000000000000), 155); - yield return () => (new(0x7555D172EDFB3C24, 0xADD1529FCC1E79C7, 0x9E6CEF1B584B426B, 0x8DF63DEFD4CBB652, 0xB4AF1F40152D5922, 0xDC02486CE8000000, 0x0000000000000000, 0x0000000000000000), 156); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000000000000, 0x0000000000000001), 0); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000000000000, 0x000000000000000A), 1); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000000000000, 0x0000000000000064), 2); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000000000000, 0x00000000000003E8), 3); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000000000000, 0x0000000000002710), 4); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000000000000, 0x00000000000186A0), 5); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000000000000, 0x00000000000F4240), 6); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000000000000, 0x0000000000989680), 7); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000000000000, 0x0000000005F5E100), 8); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000000000000, 0x000000003B9ACA00), 9); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000000000000, 0x00000002540BE400), 10); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000000000000, 0x000000174876E800), 11); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000000000000, 0x000000E8D4A51000), 12); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000000000000, 0x000009184E72A000), 13); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000000000000, 0x00005AF3107A4000), 14); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000000000000, 0x00038D7EA4C68000), 15); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000000000000, 0x002386F26FC10000), 16); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000000000000, 0x016345785D8A0000), 17); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000000000000, 0x0DE0B6B3A7640000), 18); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000000000000, 0x8AC7230489E80000), 19); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000000000005, 0x6BC75E2D63100000), 20); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000000000036, 0x35C9ADC5DEA00000), 21); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x000000000000021E, 0x19E0C9BAB2400000), 22); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x000000000000152D, 0x02C7E14AF6800000), 23); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x000000000000D3C2, 0x1BCECCEDA1000000), 24); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000000084595, 0x161401484A000000), 25); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x000000000052B7D2, 0xDCC80CD2E4000000), 26); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x00000000033B2E3C, 0x9FD0803CE8000000), 27); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x00000000204FCE5E, 0x3E25026110000000), 28); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x00000001431E0FAE, 0x6D7217CAA0000000), 29); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000C9F2C9CD0, 0x4674EDEA40000000), 30); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000007E37BE2022, 0xC0914B2680000000), 31); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x000004EE2D6D415B, 0x85ACEF8100000000), 32); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000314DC6448D93, 0x38C15B0A00000000), 34); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0001ED09BEAD87C0, 0x378D8E6400000000), 35); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0013426172C74D82, 0x2B878FE800000000), 36); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x00C097CE7BC90715, 0xB34B9F1000000000), 37); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0785EE10D5DA46D9, 0x00F436A000000000), 38); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x4B3B4CA85A86C47A, 0x098A224000000000), 39); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000002, 0xF050FE938943ACC4, 0x5F65568000000000), 40); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x000000000000001D, 0x6329F1C35CA4BFAB, 0xB9F5610000000000), 41); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000125, 0xDFA371A19E6F7CB5, 0x4395CA0000000000), 42); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000B7A, 0xBC627050305ADF14, 0xA3D9E40000000000), 43); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x00000000000072CB, 0x5BD86321E38CB6CE, 0x6682E80000000000), 44); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000047BF1, 0x9673DF52E37F2410, 0x011D100000000000), 45); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x00000000002CD76F, 0xE086B93CE2F768A0, 0x0B22A00000000000), 46); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000001C06A5E, 0xC5433C60DDAA1640, 0x6F5A400000000000), 47); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x00000000118427B3, 0xB4A05BC8A8A4DE84, 0x5986800000000000), 48); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x00000000AF298D05, 0x0E4395D69670B12B, 0x7F41000000000000), 49); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x00000006D79F8232, 0x8EA3DA61E066EBB2, 0xF88A000000000000), 50); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x000000446C3B15F9, 0x926687D2C40534FD, 0xB564000000000000), 51); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x000002AC3A4EDBBF, 0xB8014E3BA83411E9, 0x15E8000000000000), 52); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x00001ABA4714957D, 0x300D0E549208B31A, 0xDB10000000000000), 53); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x00010B46C6CDD6E3, 0xE0828F4DB456FF0C, 0x8EA0000000000000), 54); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x000A70C3C40A64E6, 0xC51999090B65F67D, 0x9240000000000000), 55); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x006867A5A867F103, 0xB2FFFA5A71FBA0E7, 0xB680000000000000), 56); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x04140C78940F6A24, 0xFDFFC78873D4490D, 0x2100000000000000), 57); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x28C87CB5C89A2571, 0xEBFDCB54864ADA83, 0x4A00000000000000), 58); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000001, + 0x97D4DF19D6057673, 0x37E9F14D3EEC8920, 0xE400000000000000), 59); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000000000F, + 0xEE50B7025C36A080, 0x2F236D04753D5B48, 0xE800000000000000), 60); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000000009F, + 0x4F2726179A224501, 0xD762422C946590D9, 0x1000000000000000), 61); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000639, + 0x17877CEC0556B212, 0x69D695BDCBF7A87A, 0xA000000000000000), 62); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000003E3A, + 0xEB4AE1383562F4B8, 0x2261D969F7AC94CA, 0x4000000000000000), 63); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000026E4D, + 0x30ECCC3215DD8F31, 0x57D27E23ACBDCFE6, 0x8000000000000000), 64); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000184F03, + 0xE93FF9F4DAA797ED, 0x6E38ED64BF6A1F01, 0x0000000000000000), 65); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000F31627, + 0x1C7FC3908A8BEF46, 0x4E3945EF7A25360A, 0x0000000000000000), 66); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000097EDD87, + 0x1CFDA3A5697758BF, 0x0E3CBB5AC5741C64, 0x0000000000000000), 67); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000005EF4A747, + 0x21E864761EA97776, 0x8E5F518BB6891BE8, 0x0000000000000000), 68); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000003B58E88C7, + 0x5313EC9D329EAAA1, 0x8FB92F75215B1710, 0x0000000000000000), 69); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000025179157C9, + 0x3EC73E23FA32AA4F, 0x9D3BDA934D8EE6A0, 0x0000000000000000), 70); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000172EBAD6DDC, + 0x73C86D67C5FAA71C, 0x245689C107950240, 0x0000000000000000), 71); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000E7D34C64A9C, + 0x85D4460DBBCA8719, 0x6B61618A4BD21680, 0x0000000000000000), 72); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000090E40FBEEA1D, + 0x3A4ABC8955E946FE, 0x31CDCF66F634E100, 0x0000000000000000), 73); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0005A8E89D752524, + 0x46EB5D5D5B1CC5ED, 0xF20A1A059E10CA00, 0x0000000000000000), 74); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x003899162693736A, + 0xC531A5A58F1FBB4B, 0x746504382CA7E400, 0x0000000000000000), 75); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0235FADD81C2822B, + 0xB3F07877973D50F2, 0x8BF22A31BE8EE800, 0x0000000000000000), 76); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x161BCCA7119915B5, + 0x0764B4ABE8652979, 0x7775A5F171951000, 0x0000000000000000), 77); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0xDD15FE86AFFAD912, + 0x49EF0EB713F39EBE, 0xAA987B6E6FD2A000, 0x0000000000000000), 78); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000008, 0xA2DBF142DFCC7AB6, + 0xE3569326C7843372, 0xA9F4D2505E3A4000, 0x0000000000000000), 79); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000056, 0x5C976C9CBDFCCB24, + 0xE161BF83CB2A027A, 0xA3903723AE468000, 0x0000000000000000), 80); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000000035F, 0x9DEA3E1F6BDFEF70, + 0xCDD17B25EFA418CA, 0x63A22764CEC10000, 0x0000000000000000), 81); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000000021BC, 0x2B266D3A36BF5A68, + 0x0A2ECF7B5C68F7E7, 0xE45589F0138A0000, 0x0000000000000000), 82); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000015159, 0xAF80444623798810, + 0x65D41AD19C19AF0E, 0xEB576360C3640000, 0x0000000000000000), 83); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000000D2D80, 0xDB02AABD62BF50A3, + 0xFA490C301900D695, 0x3169E1C7A1E80000, 0x0000000000000000), 84); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000083C708, 0x8E1AAB65DB792667, + 0xC6DA79E0FA0861D3, 0xEE22D1CC53100000, 0x0000000000000000), 85); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000525C655, 0x8D0AB1FA92BB800D, + 0xC488C2C9C453D247, 0x4D5C31FB3EA00000, 0x0000000000000000), 86); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000003379BF57, 0x826AF3C9BB530089, + 0xAD579BE1AB4636C9, 0x0599F3D072400000, 0x0000000000000000), 87); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000202C1796B, 0x182D85E1513E0560, + 0xC56C16D0B0BE23DA, 0x3803862476800000, 0x0000000000000000), 88); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000141B8EBE2E, 0xF1C73ACD2C6C35C7, + 0xB638E426E76D6686, 0x30233D6CA1000000, 0x0000000000000000), 89); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000C913936DD5, 0x71C84C03BC3A19CD, + 0x1E38E9850A46013D, 0xE160663E4A000000, 0x0000000000000000), 90); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000007DAC3C24A56, 0x71D2F8255A450203, + 0x2E391F3266BC0C6A, 0xCDC3FE6EE4000000, 0x0000000000000000), 91); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00004E8BA596E760, 0x723DB17586B2141F, + 0xCE3B37F803587C2C, 0x09A7F054E8000000, 0x0000000000000000), 92); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0003117477E509C4, 0x7668EE9742F4C93E, + 0x0E502FB02174D9B8, 0x608F635110000000, 0x0000000000000000), 93); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x001EAE8CAEF261AC, 0xA01951E89D8FDC6C, + 0x8F21DCE14E908133, 0xC599E12AA0000000, 0x0000000000000000), 94); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0132D17ED577D0BE, 0x40FD3316279E9C3D, + 0x9752A0CD11A50C05, 0xB802CBAA40000000, 0x0000000000000000), 95); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0BFC2EF456AE276E, 0x89E3FEDD8C321A67, + 0xE93A4802B0727839, 0x301BF4A680000000, 0x0000000000000000), 96); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x77D9D58B62CD8A51, 0x62E7F4A779F5080F, + 0x1C46D01AE478B23B, 0xE1178E8100000000, 0x0000000000000000), 97); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000000004, 0xAE825771DC07672D, 0xDD0F8E8AC3925097, + 0x1AC4210CECB6F656, 0xCAEB910A00000000, 0x0000000000000000), 98); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x000000000000002E, 0xD1176A72984A07CA, 0xA29B916BA3B725E7, + 0x0BA94A813F259F63, 0xED33AA6400000000, 0x0000000000000000), 99); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x00000000000001D4, 0x2AEA2879F2E44DEA, 0x5A13AE3465277B06, + 0x749CE90C777839E7, 0x4404A7E800000000, 0x0000000000000000), 100); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000001249, 0xAD2594C37CEB0B27, 0x84C4CE0BF38ACE40, + 0x8E211A7CAAB24308, 0xA82E8F1000000000, 0x0000000000000000), 101); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x000000000000B6E0, 0xC377CFA2E12E6F8B, 0x2FB00C77836C0E85, + 0x8D4B08DEAAF69E56, 0x91D196A000000000, 0x0000000000000000), 102); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x00000000000724C7, 0xA2AE1C5CCBD05B6F, 0xDCE07CAB22389137, + 0x84EE58B2ADA22F61, 0xB22FE24000000000, 0x0000000000000000), 103); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000000476FCC, 0x5ACD1B9FF623925E, 0xA0C4DEAF5635AC2B, + 0x314F76FAC855D9D0, 0xF5DED68000000000, 0x0000000000000000), 104); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000002CA5DFB, 0x8C03143F9D63B7B2, 0x47B0B2D95E18B9AF, + 0xED1AA5CBD35A8229, 0x9AB4610000000000, 0x0000000000000000), 105); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x000000001BE7ABD3, 0x781ECA7C25E52CF6, 0xCCE6FC7DACF740DF, + 0x430A79F6418915A0, 0x0B0BCA0000000000, 0x0000000000000000), 106); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x00000001170CB642, 0xB133E8D97AF3C1A4, 0x0105DCE8C1A888B8, + 0x9E68C39E8F5AD840, 0x6E75E40000000000, 0x0000000000000000), 107); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000000AE67F1E9A, 0xEC07187ECD859068, 0x0A3AA11790955736, + 0x3017A431998C7284, 0x509AE80000000000, 0x0000000000000000), 108); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000006D00F7320D, 0x3846F4F40737A410, 0x664A4AEBA5D5681D, + 0xE0EC69EFFF7C792B, 0x260D100000000000, 0x0000000000000000), 109); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0000044209A7F484, 0x32C59188482C68A3, 0xFEE6ED347A56112A, + 0xC93C235FFADCBBAF, 0x7C82A00000000000, 0x0000000000000000), 110); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x00002A94608F8D29, 0xFBB7AF52D1BC1667, 0xF505440CC75CABAB, + 0xDC5961BFCC9F54DA, 0xDD1A400000000000, 0x0000000000000000), 111); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0001A9CBC59B83A3, 0xD52CD93C3158E00F, 0x9234A87FC99EB4B6, + 0x9B7DD17DFE39508C, 0xA306800000000000, 0x0000000000000000), 112); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x0010A1F5B8132466, 0x53C07C59ED78C09B, 0xB60E94FDE0330F22, + 0x12EA2EEBEE3D257E, 0x5E41000000000000, 0x0000000000000000), 113); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x00A6539930BF6BFF, 0x4584DB8346B78615, 0x1C91D1EAC1FE9754, + 0xBD25D5374E6376EF, 0xAE8A000000000000, 0x0000000000000000), 114); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x067F43FBE77A37F8, 0xB7309320C32B3CD3, 0x1DB2332B93F1E94F, + 0x637A54290FE2A55C, 0xD164000000000000, 0x0000000000000000), 115); + yield return () => ( + new(0x0000000000000000, 0x0000000000000000, 0x40F8A7D70AC62FB7, 0x27E5BF479FB0603F, 0x28F5FFB3C7731D19, + 0xE2C7499A9EDA75A0, 0x2DE8000000000000, 0x0000000000000000), 116); + yield return () => ( + new(0x0000000000000000, 0x0000000000000002, 0x89B68E666BBDDD27, 0x8EF978CC3CE3C277, 0x999BFD05CA7F2302, + 0xDBC8E00A34889841, 0xCB10000000000000, 0x0000000000000000), 117); + yield return () => ( + new(0x0000000000000000, 0x0000000000000019, 0x61219000356AA38B, 0x95BEB7FA60E598AC, 0x0017E239E8F75E1C, + 0x95D8C0660D55F291, 0xEEA0000000000000, 0x0000000000000000), 118); + yield return () => ( + new(0x0000000000000000, 0x00000000000000FD, 0xCB4FA002162A6373, 0xD9732FC7C8F7F6B8, 0x00EED64319A9AD1D, + 0xDA7783FC855B79B3, 0x5240000000000000, 0x0000000000000000), 119); + yield return () => ( + new(0x0000000000000000, 0x00000000000009E9, 0xF11C4014DDA7E286, 0x7E7FDDCDD9AFA330, 0x09545E9F00A0C32A, + 0x88AB27DD3592C101, 0x3680000000000000, 0x0000000000000000), 120); + yield return () => ( + new(0x0000000000000000, 0x0000000000006323, 0x6B1A80D0A88ED940, 0xF0FEAA0A80DC5FE0, 0x5D4BB23606479FA9, + 0x56AF8EA417BB8A0C, 0x2100000000000000, 0x0000000000000000), 121); + yield return () => ( + new(0x0000000000000000, 0x000000000003DF62, 0x2F09082695947C89, 0x69F2A469089BBEC3, 0xA4F4F61C3ECC3C9D, + 0x62DB9268ED536479, 0x4A00000000000000, 0x0000000000000000), 122); + yield return () => ( + new(0x0000000000000000, 0x000000000026B9D5, 0xD65A5181D7CCDD5E, 0x237A6C1A561573A4, 0x71919D1A73FA5E25, + 0xDC93B8194541ECBC, 0xE400000000000000, 0x0000000000000000), 123); + yield return () => ( + new(0x0000000000000000, 0x000000000183425A, 0x5F872F126E00A5AD, 0x62C839075CD6846C, 0x6FB0230887C7AD7A, + 0x9DC530FCB4933F60, 0xE800000000000000, 0x0000000000000000), 124); + yield return () => ( + new(0x0000000000000000, 0x000000000F209787, 0xBB47D6B84C0678C5, 0xDBD23A49A0612C3C, 0x5CE15E554DCCC6CA, + 0x29B3E9DF0DC079C9, 0x1000000000000000, 0x0000000000000000), 125); + yield return () => ( + new(0x0000000000000000, 0x000000009745EB4D, 0x50CE6332F840B7BA, 0x963646E043CBBA5B, 0xA0CDAF5509FFC3E5, + 0xA10722B68984C1DA, 0xA000000000000000, 0x0000000000000000), 126); + yield return () => ( + new(0x0000000000000000, 0x00000005E8BB3105, 0x280FDFFDB2872D49, 0xDE1EC4C2A5F54794, 0x4808D95263FDA6F8, + 0x4A475B215F2F928A, 0x4000000000000000, 0x0000000000000000), 127); + yield return () => ( + new(0x0000000000000000, 0x0000003B174FEA33, 0x909EBFE8F947C4E2, 0xAD33AF9A7B94CBCA, 0xD0587D37E7E885B2, + 0xE6C98F4DB7DBB966, 0x8000000000000000, 0x0000000000000000), 128); + yield return () => ( + new(0x0000000000000000, 0x0000024EE91F2603, 0xA6337F19BCCDB0DA, 0xC404DC08D3CFF5EC, 0x2374E42F0F1538FD, + 0x03DF99092E953E01, 0x0000000000000000, 0x0000000000000000), 129); + yield return () => ( + new(0x0000000000000000, 0x000017151B377C24, 0x7E02F7016008E88B, 0xA8309858461F9B39, 0x6290E9D696D439E2, + 0x26BBFA5BD1D46C0A, 0x0000000000000000, 0x0000000000000000), 130); + yield return () => ( + new(0x0000000000000000, 0x0000E6D3102AD96C, 0xEC1DA60DC0591574, 0x91E5F372BD3C103D, 0xD9A92261E44A42D5, + 0x8357C796324C3864, 0x0000000000000000, 0x0000000000000000), 131); + yield return () => ( + new(0x0000000000000000, 0x0009043EA1AC7E41, 0x39287C89837AD68D, 0xB2FB827B6458A26A, 0x809B57D2EAE69C57, + 0x216DCBDDF6FA33E8, 0x0000000000000000, 0x0000000000000000), 132); + yield return () => ( + new(0x0000000000000000, 0x005A2A7250BCEE8C, 0x3B94DD5F22CC6188, 0xFDD318D1EB765829, 0x06116E3D2D021B67, + 0x4E49F6ABA5C60710, 0x0000000000000000, 0x0000000000000000), 133); + yield return () => ( + new(0x0000000000000000, 0x0385A8772761517A, 0x53D0A5B75BFBCF59, 0xEA3EF833329F719A, 0x3CAE4E63C2151209, + 0x0EE3A2B479BC46A0, 0x0000000000000000, 0x0000000000000000), 134); + yield return () => ( + new(0x0000000000000000, 0x233894A789CD2EC7, 0x4626792997D61983, 0x2675B1FFFA3A7006, 0x5ECF0FE594D2B45A, + 0x94E45B0CC15AC240, 0x0000000000000000, 0x0000000000000000), 135); + yield return () => ( + new(0x0000000000000001, 0x6035CE8B6203D3C8, 0xBD80BB9FEE5CFF1F, 0x8098F3FFC648603F, 0xB4169EF7D03B0B89, + 0xD0EB8E7F8D8B9680, 0x0000000000000000, 0x0000000000000000), 136); + yield return () => ( + new(0x000000000000000D, 0xC21A1171D42645D7, 0x6707543F4FA1F73B, 0x05F987FDBED3C27D, 0x08E235AE224E7362, + 0x293390FB8773E100, 0x0000000000000000, 0x0000000000000000), 137); + yield return () => ( + new(0x0000000000000089, 0x9504AE72497EBA6A, 0x06494A791C53A84E, 0x3BBF4FE9744598E2, 0x58D618CD571081D5, + 0x9C03A9D34A86CA00, 0x0000000000000000, 0x0000000000000000), 138); + yield return () => ( + new(0x000000000000055F, 0xD22ED076DEF34824, 0x3EDCE8BB1B44930E, 0x55791F1E8AB7F8D7, 0x785CF80566A51258, + 0x1824A240E943E400, 0x0000000000000000, 0x0000000000000000), 139); + yield return () => ( + new(0x00000000000035BE, 0x35D424A4B580D16A, 0x74A1174F10ADBE8F, 0x56BB37316B2FB86A, 0xB3A1B0360272B770, + 0xF16E56891CA6E800, 0x0000000000000000, 0x0000000000000000), 140); + yield return () => ( + new(0x000000000002196E, 0x1A496E6F17082E28, 0x8E4AE916A6C97199, 0x635027EE2FDD342B, 0x0450E21C187B2A69, + 0x6E4F615B1E851000, 0x0000000000000000, 0x0000000000000000), 141); + yield return () => ( + new(0x000000000014FE4D, 0x06DE5056E651CD95, 0x8EED1AE283DE6FFD, 0xE1218F4DDEA409AE, 0x2B28D518F4CFA81E, + 0x4F19CD8F3132A000, 0x0000000000000000, 0x0000000000000000), 142); + yield return () => ( + new(0x0000000000D1EF02, 0x44AF2364FF3207D7, 0x95430CD926B05FEA, 0xCB4F990AB26860CD, 0xAF9852F9901C912F, + 0x17020797EBFA4000, 0x0000000000000000, 0x0000000000000000), 143); + yield return () => ( + new(0x0000000008335616, 0xAED761F1F7F44E6B, 0xD49E807B82E3BF2B, 0xF11BFA6AF813C808, 0xDBF33DBFA11DABD6, + 0xE6144BEF37C68000, 0x0000000000000000, 0x0000000000000000), 144); + yield return () => ( + new(0x0000000052015CE2, 0xD469D373AF8B1036, 0x4E3104D31CE577B7, 0x6B17C82DB0C5D058, 0x9780697C4B28B664, + 0xFCCAF7582DC10000, 0x0000000000000000, 0x0000000000000000), 145); + yield return () => ( + new(0x00000003340DA0DC, 0x4C224284DB6EA21F, 0x0DEA303F20F6AD2A, 0x2EEDD1C8E7BA2375, 0xEB041EDAEF971FF1, + 0xDFEDA971C98A0000, 0x0000000000000000, 0x0000000000000000), 146); + yield return () => ( + new(0x000000200888489A, 0xF956993092525536, 0x8B25E27749A2C3A5, 0xD54A31D90D45629B, 0x2E29348D5BE73F72, + 0xBF489E71DF640000, 0x0000000000000000, 0x0000000000000000), 147); + yield return () => ( + new(0x000001405552D60D, 0xBD61FBE5B7375421, 0x6F7AD8A8E05BA47A, 0x54E5F27A84B5DA0F, 0xCD9C0D8597087A7B, + 0x78D63072B9E80000, 0x0000000000000000, 0x0000000000000000), 148); + yield return () => ( + new(0x00000C83553C5C89, 0x65D3D6F92829494E, 0x5ACC7698C3946CC7, 0x50FB78C92F1A849E, 0x08188737E654C8D2, + 0xB85DE47B43100000, 0x0000000000000000, 0x0000000000000000), 149); + yield return () => ( + new(0x00007D21545B9D5D, 0xFA4665BB919CDD0F, 0x8BFCA1F7A3CC3FC9, 0x29D2B7DBD7092E2C, 0x50F5482EFF4FD83B, + 0x33AAECD09EA00000, 0x0000000000000000, 0x0000000000000000), 150); + yield return () => ( + new(0x0004E34D4B9425AB, 0xC6BFF953B020A29B, 0x77DE53AC65FA7DDB, 0xA23B2E96665BCDBB, 0x2994D1D5F91E7250, + 0x04AD402632400000, 0x0000000000000000, 0x0000000000000000), 151); + yield return () => ( + new(0x0030E104F3C978B5, 0xC37FBD44E1465A12, 0xAEAF44BBFBC8EA94, 0x564FD1DFFF96094F, 0x9FD0325BBB307720, + 0x2EC4817DF6800000, 0x0000000000000000, 0x0000000000000000), 152); + yield return () => ( + new(0x01E8CA3185DEB719, 0xA2FD64B0CCBF84BA, 0xD2D8AF57D5D929CB, 0x5F1E32BFFBDC5D1C, 0x3E21F7954FE4A741, + 0xD3AD0EEBA1000000, 0x0000000000000000, 0x0000000000000000), 153); + yield return () => ( + new(0x1317E5EF3AB32700, 0x5DE5EEE7FF7B2F4C, 0x3C76D96E5A7BA1F1, 0xB72DFB7FD69BA31A, 0x6D53ABD51EEE8892, + 0x44C295344A000000, 0x0000000000000000, 0x0000000000000000), 154); + yield return () => ( + new(0xBEEEFB584AFF8603, 0xAAFB550FFACFD8FA, 0x5CA47E4F88D45371, 0x27CBD2FE62145F08, 0x4544B653355155B6, + 0xAF99D40AE4000000, 0x0000000000000000, 0x0000000000000000), 155); + yield return () => ( + new(0x7555D172EDFB3C24, 0xADD1529FCC1E79C7, 0x9E6CEF1B584B426B, 0x8DF63DEFD4CBB652, 0xB4AF1F40152D5922, + 0xDC02486CE8000000, 0x0000000000000000, 0x0000000000000000), 156); } +} From a39e497499efb4a3f7776194d75aec3745e1fbd9 Mon Sep 17 00:00:00 2001 From: crookseta Date: Tue, 23 Sep 2025 19:48:37 -0500 Subject: [PATCH 19/74] Added op_ShiftLeft, op_ShiftRight and op_UnsignedShiftRight tests. --- .../Data/CalculatorDataSources.cs | 247 +++++++++--------- .../Data/UInt512DataSources.cs | 30 ++- 2 files changed, 149 insertions(+), 128 deletions(-) diff --git a/src/MissingValues.Tests/Data/CalculatorDataSources.cs b/src/MissingValues.Tests/Data/CalculatorDataSources.cs index 60ba5ff..895e89a 100644 --- a/src/MissingValues.Tests/Data/CalculatorDataSources.cs +++ b/src/MissingValues.Tests/Data/CalculatorDataSources.cs @@ -107,372 +107,369 @@ public class CalculatorDataSources 0x0000000000000000, 0x000004EE2D6D415B, 0x85ACEF8100000000), 32); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, - 0x0000000000000000, 0x0000314DC6448D93, 0x38C15B0A00000000), 34); + 0x0000000000000000, 0x0000314DC6448D93, 0x38C15B0A00000000), 33); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, - 0x0000000000000000, 0x0001ED09BEAD87C0, 0x378D8E6400000000), 35); + 0x0000000000000000, 0x0001ED09BEAD87C0, 0x378D8E6400000000), 34); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, - 0x0000000000000000, 0x0013426172C74D82, 0x2B878FE800000000), 36); + 0x0000000000000000, 0x0013426172C74D82, 0x2B878FE800000000), 35); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, - 0x0000000000000000, 0x00C097CE7BC90715, 0xB34B9F1000000000), 37); + 0x0000000000000000, 0x00C097CE7BC90715, 0xB34B9F1000000000), 36); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, - 0x0000000000000000, 0x0785EE10D5DA46D9, 0x00F436A000000000), 38); + 0x0000000000000000, 0x0785EE10D5DA46D9, 0x00F436A000000000), 37); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, - 0x0000000000000000, 0x4B3B4CA85A86C47A, 0x098A224000000000), 39); + 0x0000000000000000, 0x4B3B4CA85A86C47A, 0x098A224000000000), 38); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, - 0x0000000000000002, 0xF050FE938943ACC4, 0x5F65568000000000), 40); + 0x0000000000000002, 0xF050FE938943ACC4, 0x5F65568000000000), 39); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, - 0x000000000000001D, 0x6329F1C35CA4BFAB, 0xB9F5610000000000), 41); + 0x000000000000001D, 0x6329F1C35CA4BFAB, 0xB9F5610000000000), 40); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, - 0x0000000000000125, 0xDFA371A19E6F7CB5, 0x4395CA0000000000), 42); + 0x0000000000000125, 0xDFA371A19E6F7CB5, 0x4395CA0000000000), 41); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, - 0x0000000000000B7A, 0xBC627050305ADF14, 0xA3D9E40000000000), 43); + 0x0000000000000B7A, 0xBC627050305ADF14, 0xA3D9E40000000000), 42); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, - 0x00000000000072CB, 0x5BD86321E38CB6CE, 0x6682E80000000000), 44); + 0x00000000000072CB, 0x5BD86321E38CB6CE, 0x6682E80000000000), 43); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, - 0x0000000000047BF1, 0x9673DF52E37F2410, 0x011D100000000000), 45); + 0x0000000000047BF1, 0x9673DF52E37F2410, 0x011D100000000000), 44); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, - 0x00000000002CD76F, 0xE086B93CE2F768A0, 0x0B22A00000000000), 46); + 0x00000000002CD76F, 0xE086B93CE2F768A0, 0x0B22A00000000000), 45); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, - 0x0000000001C06A5E, 0xC5433C60DDAA1640, 0x6F5A400000000000), 47); + 0x0000000001C06A5E, 0xC5433C60DDAA1640, 0x6F5A400000000000), 46); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, - 0x00000000118427B3, 0xB4A05BC8A8A4DE84, 0x5986800000000000), 48); + 0x00000000118427B3, 0xB4A05BC8A8A4DE84, 0x5986800000000000), 47); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, - 0x00000000AF298D05, 0x0E4395D69670B12B, 0x7F41000000000000), 49); + 0x00000000AF298D05, 0x0E4395D69670B12B, 0x7F41000000000000), 48); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, - 0x00000006D79F8232, 0x8EA3DA61E066EBB2, 0xF88A000000000000), 50); + 0x00000006D79F8232, 0x8EA3DA61E066EBB2, 0xF88A000000000000), 49); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, - 0x000000446C3B15F9, 0x926687D2C40534FD, 0xB564000000000000), 51); + 0x000000446C3B15F9, 0x926687D2C40534FD, 0xB564000000000000), 50); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, - 0x000002AC3A4EDBBF, 0xB8014E3BA83411E9, 0x15E8000000000000), 52); + 0x000002AC3A4EDBBF, 0xB8014E3BA83411E9, 0x15E8000000000000), 51); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, - 0x00001ABA4714957D, 0x300D0E549208B31A, 0xDB10000000000000), 53); + 0x00001ABA4714957D, 0x300D0E549208B31A, 0xDB10000000000000), 52); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, - 0x00010B46C6CDD6E3, 0xE0828F4DB456FF0C, 0x8EA0000000000000), 54); + 0x00010B46C6CDD6E3, 0xE0828F4DB456FF0C, 0x8EA0000000000000), 53); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, - 0x000A70C3C40A64E6, 0xC51999090B65F67D, 0x9240000000000000), 55); + 0x000A70C3C40A64E6, 0xC51999090B65F67D, 0x9240000000000000), 54); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, - 0x006867A5A867F103, 0xB2FFFA5A71FBA0E7, 0xB680000000000000), 56); + 0x006867A5A867F103, 0xB2FFFA5A71FBA0E7, 0xB680000000000000), 55); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, - 0x04140C78940F6A24, 0xFDFFC78873D4490D, 0x2100000000000000), 57); + 0x04140C78940F6A24, 0xFDFFC78873D4490D, 0x2100000000000000), 56); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, - 0x28C87CB5C89A2571, 0xEBFDCB54864ADA83, 0x4A00000000000000), 58); + 0x28C87CB5C89A2571, 0xEBFDCB54864ADA83, 0x4A00000000000000), 57); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000001, - 0x97D4DF19D6057673, 0x37E9F14D3EEC8920, 0xE400000000000000), 59); + 0x97D4DF19D6057673, 0x37E9F14D3EEC8920, 0xE400000000000000), 58); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000000000F, - 0xEE50B7025C36A080, 0x2F236D04753D5B48, 0xE800000000000000), 60); + 0xEE50B7025C36A080, 0x2F236D04753D5B48, 0xE800000000000000), 59); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000000009F, - 0x4F2726179A224501, 0xD762422C946590D9, 0x1000000000000000), 61); + 0x4F2726179A224501, 0xD762422C946590D9, 0x1000000000000000), 60); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000639, - 0x17877CEC0556B212, 0x69D695BDCBF7A87A, 0xA000000000000000), 62); + 0x17877CEC0556B212, 0x69D695BDCBF7A87A, 0xA000000000000000), 61); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000003E3A, - 0xEB4AE1383562F4B8, 0x2261D969F7AC94CA, 0x4000000000000000), 63); + 0xEB4AE1383562F4B8, 0x2261D969F7AC94CA, 0x4000000000000000), 62); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000026E4D, - 0x30ECCC3215DD8F31, 0x57D27E23ACBDCFE6, 0x8000000000000000), 64); + 0x30ECCC3215DD8F31, 0x57D27E23ACBDCFE6, 0x8000000000000000), 63); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000184F03, - 0xE93FF9F4DAA797ED, 0x6E38ED64BF6A1F01, 0x0000000000000000), 65); + 0xE93FF9F4DAA797ED, 0x6E38ED64BF6A1F01, 0x0000000000000000), 64); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000F31627, - 0x1C7FC3908A8BEF46, 0x4E3945EF7A25360A, 0x0000000000000000), 66); + 0x1C7FC3908A8BEF46, 0x4E3945EF7A25360A, 0x0000000000000000), 65); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000097EDD87, - 0x1CFDA3A5697758BF, 0x0E3CBB5AC5741C64, 0x0000000000000000), 67); + 0x1CFDA3A5697758BF, 0x0E3CBB5AC5741C64, 0x0000000000000000), 66); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000005EF4A747, - 0x21E864761EA97776, 0x8E5F518BB6891BE8, 0x0000000000000000), 68); + 0x21E864761EA97776, 0x8E5F518BB6891BE8, 0x0000000000000000), 67); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000003B58E88C7, - 0x5313EC9D329EAAA1, 0x8FB92F75215B1710, 0x0000000000000000), 69); + 0x5313EC9D329EAAA1, 0x8FB92F75215B1710, 0x0000000000000000), 68); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000025179157C9, - 0x3EC73E23FA32AA4F, 0x9D3BDA934D8EE6A0, 0x0000000000000000), 70); + 0x3EC73E23FA32AA4F, 0x9D3BDA934D8EE6A0, 0x0000000000000000), 69); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000172EBAD6DDC, - 0x73C86D67C5FAA71C, 0x245689C107950240, 0x0000000000000000), 71); + 0x73C86D67C5FAA71C, 0x245689C107950240, 0x0000000000000000), 70); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000E7D34C64A9C, - 0x85D4460DBBCA8719, 0x6B61618A4BD21680, 0x0000000000000000), 72); + 0x85D4460DBBCA8719, 0x6B61618A4BD21680, 0x0000000000000000), 71); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000090E40FBEEA1D, - 0x3A4ABC8955E946FE, 0x31CDCF66F634E100, 0x0000000000000000), 73); + 0x3A4ABC8955E946FE, 0x31CDCF66F634E100, 0x0000000000000000), 72); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0005A8E89D752524, - 0x46EB5D5D5B1CC5ED, 0xF20A1A059E10CA00, 0x0000000000000000), 74); + 0x46EB5D5D5B1CC5ED, 0xF20A1A059E10CA00, 0x0000000000000000), 73); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x003899162693736A, - 0xC531A5A58F1FBB4B, 0x746504382CA7E400, 0x0000000000000000), 75); + 0xC531A5A58F1FBB4B, 0x746504382CA7E400, 0x0000000000000000), 74); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0235FADD81C2822B, - 0xB3F07877973D50F2, 0x8BF22A31BE8EE800, 0x0000000000000000), 76); + 0xB3F07877973D50F2, 0x8BF22A31BE8EE800, 0x0000000000000000), 75); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x161BCCA7119915B5, - 0x0764B4ABE8652979, 0x7775A5F171951000, 0x0000000000000000), 77); + 0x0764B4ABE8652979, 0x7775A5F171951000, 0x0000000000000000), 76); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0xDD15FE86AFFAD912, - 0x49EF0EB713F39EBE, 0xAA987B6E6FD2A000, 0x0000000000000000), 78); + 0x49EF0EB713F39EBE, 0xAA987B6E6FD2A000, 0x0000000000000000), 77); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000008, 0xA2DBF142DFCC7AB6, - 0xE3569326C7843372, 0xA9F4D2505E3A4000, 0x0000000000000000), 79); + 0xE3569326C7843372, 0xA9F4D2505E3A4000, 0x0000000000000000), 78); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000056, 0x5C976C9CBDFCCB24, - 0xE161BF83CB2A027A, 0xA3903723AE468000, 0x0000000000000000), 80); + 0xE161BF83CB2A027A, 0xA3903723AE468000, 0x0000000000000000), 79); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000000035F, 0x9DEA3E1F6BDFEF70, - 0xCDD17B25EFA418CA, 0x63A22764CEC10000, 0x0000000000000000), 81); + 0xCDD17B25EFA418CA, 0x63A22764CEC10000, 0x0000000000000000), 80); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000000021BC, 0x2B266D3A36BF5A68, - 0x0A2ECF7B5C68F7E7, 0xE45589F0138A0000, 0x0000000000000000), 82); + 0x0A2ECF7B5C68F7E7, 0xE45589F0138A0000, 0x0000000000000000), 81); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000015159, 0xAF80444623798810, - 0x65D41AD19C19AF0E, 0xEB576360C3640000, 0x0000000000000000), 83); + 0x65D41AD19C19AF0E, 0xEB576360C3640000, 0x0000000000000000), 82); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00000000000D2D80, 0xDB02AABD62BF50A3, - 0xFA490C301900D695, 0x3169E1C7A1E80000, 0x0000000000000000), 84); + 0xFA490C301900D695, 0x3169E1C7A1E80000, 0x0000000000000000), 83); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000083C708, 0x8E1AAB65DB792667, - 0xC6DA79E0FA0861D3, 0xEE22D1CC53100000, 0x0000000000000000), 85); + 0xC6DA79E0FA0861D3, 0xEE22D1CC53100000, 0x0000000000000000), 84); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000000525C655, 0x8D0AB1FA92BB800D, - 0xC488C2C9C453D247, 0x4D5C31FB3EA00000, 0x0000000000000000), 86); + 0xC488C2C9C453D247, 0x4D5C31FB3EA00000, 0x0000000000000000), 85); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000003379BF57, 0x826AF3C9BB530089, - 0xAD579BE1AB4636C9, 0x0599F3D072400000, 0x0000000000000000), 87); + 0xAD579BE1AB4636C9, 0x0599F3D072400000, 0x0000000000000000), 86); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000202C1796B, 0x182D85E1513E0560, - 0xC56C16D0B0BE23DA, 0x3803862476800000, 0x0000000000000000), 88); + 0xC56C16D0B0BE23DA, 0x3803862476800000, 0x0000000000000000), 87); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000141B8EBE2E, 0xF1C73ACD2C6C35C7, - 0xB638E426E76D6686, 0x30233D6CA1000000, 0x0000000000000000), 89); + 0xB638E426E76D6686, 0x30233D6CA1000000, 0x0000000000000000), 88); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000000C913936DD5, 0x71C84C03BC3A19CD, - 0x1E38E9850A46013D, 0xE160663E4A000000, 0x0000000000000000), 90); + 0x1E38E9850A46013D, 0xE160663E4A000000, 0x0000000000000000), 89); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000007DAC3C24A56, 0x71D2F8255A450203, - 0x2E391F3266BC0C6A, 0xCDC3FE6EE4000000, 0x0000000000000000), 91); + 0x2E391F3266BC0C6A, 0xCDC3FE6EE4000000, 0x0000000000000000), 90); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00004E8BA596E760, 0x723DB17586B2141F, - 0xCE3B37F803587C2C, 0x09A7F054E8000000, 0x0000000000000000), 92); + 0xCE3B37F803587C2C, 0x09A7F054E8000000, 0x0000000000000000), 91); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0003117477E509C4, 0x7668EE9742F4C93E, - 0x0E502FB02174D9B8, 0x608F635110000000, 0x0000000000000000), 93); + 0x0E502FB02174D9B8, 0x608F635110000000, 0x0000000000000000), 92); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x001EAE8CAEF261AC, 0xA01951E89D8FDC6C, - 0x8F21DCE14E908133, 0xC599E12AA0000000, 0x0000000000000000), 94); + 0x8F21DCE14E908133, 0xC599E12AA0000000, 0x0000000000000000), 93); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0132D17ED577D0BE, 0x40FD3316279E9C3D, - 0x9752A0CD11A50C05, 0xB802CBAA40000000, 0x0000000000000000), 95); + 0x9752A0CD11A50C05, 0xB802CBAA40000000, 0x0000000000000000), 94); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0BFC2EF456AE276E, 0x89E3FEDD8C321A67, - 0xE93A4802B0727839, 0x301BF4A680000000, 0x0000000000000000), 96); + 0xE93A4802B0727839, 0x301BF4A680000000, 0x0000000000000000), 95); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x77D9D58B62CD8A51, 0x62E7F4A779F5080F, - 0x1C46D01AE478B23B, 0xE1178E8100000000, 0x0000000000000000), 97); + 0x1C46D01AE478B23B, 0xE1178E8100000000, 0x0000000000000000), 96); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000000004, 0xAE825771DC07672D, 0xDD0F8E8AC3925097, - 0x1AC4210CECB6F656, 0xCAEB910A00000000, 0x0000000000000000), 98); + 0x1AC4210CECB6F656, 0xCAEB910A00000000, 0x0000000000000000), 97); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x000000000000002E, 0xD1176A72984A07CA, 0xA29B916BA3B725E7, - 0x0BA94A813F259F63, 0xED33AA6400000000, 0x0000000000000000), 99); + 0x0BA94A813F259F63, 0xED33AA6400000000, 0x0000000000000000), 98); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x00000000000001D4, 0x2AEA2879F2E44DEA, 0x5A13AE3465277B06, - 0x749CE90C777839E7, 0x4404A7E800000000, 0x0000000000000000), 100); + 0x749CE90C777839E7, 0x4404A7E800000000, 0x0000000000000000), 99); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000001249, 0xAD2594C37CEB0B27, 0x84C4CE0BF38ACE40, - 0x8E211A7CAAB24308, 0xA82E8F1000000000, 0x0000000000000000), 101); + 0x8E211A7CAAB24308, 0xA82E8F1000000000, 0x0000000000000000), 100); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x000000000000B6E0, 0xC377CFA2E12E6F8B, 0x2FB00C77836C0E85, - 0x8D4B08DEAAF69E56, 0x91D196A000000000, 0x0000000000000000), 102); + 0x8D4B08DEAAF69E56, 0x91D196A000000000, 0x0000000000000000), 101); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x00000000000724C7, 0xA2AE1C5CCBD05B6F, 0xDCE07CAB22389137, - 0x84EE58B2ADA22F61, 0xB22FE24000000000, 0x0000000000000000), 103); + 0x84EE58B2ADA22F61, 0xB22FE24000000000, 0x0000000000000000), 102); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000000476FCC, 0x5ACD1B9FF623925E, 0xA0C4DEAF5635AC2B, - 0x314F76FAC855D9D0, 0xF5DED68000000000, 0x0000000000000000), 104); + 0x314F76FAC855D9D0, 0xF5DED68000000000, 0x0000000000000000), 103); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000002CA5DFB, 0x8C03143F9D63B7B2, 0x47B0B2D95E18B9AF, - 0xED1AA5CBD35A8229, 0x9AB4610000000000, 0x0000000000000000), 105); + 0xED1AA5CBD35A8229, 0x9AB4610000000000, 0x0000000000000000), 104); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x000000001BE7ABD3, 0x781ECA7C25E52CF6, 0xCCE6FC7DACF740DF, - 0x430A79F6418915A0, 0x0B0BCA0000000000, 0x0000000000000000), 106); + 0x430A79F6418915A0, 0x0B0BCA0000000000, 0x0000000000000000), 105); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x00000001170CB642, 0xB133E8D97AF3C1A4, 0x0105DCE8C1A888B8, - 0x9E68C39E8F5AD840, 0x6E75E40000000000, 0x0000000000000000), 107); + 0x9E68C39E8F5AD840, 0x6E75E40000000000, 0x0000000000000000), 106); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000000AE67F1E9A, 0xEC07187ECD859068, 0x0A3AA11790955736, - 0x3017A431998C7284, 0x509AE80000000000, 0x0000000000000000), 108); + 0x3017A431998C7284, 0x509AE80000000000, 0x0000000000000000), 107); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000006D00F7320D, 0x3846F4F40737A410, 0x664A4AEBA5D5681D, - 0xE0EC69EFFF7C792B, 0x260D100000000000, 0x0000000000000000), 109); + 0xE0EC69EFFF7C792B, 0x260D100000000000, 0x0000000000000000), 108); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0000044209A7F484, 0x32C59188482C68A3, 0xFEE6ED347A56112A, - 0xC93C235FFADCBBAF, 0x7C82A00000000000, 0x0000000000000000), 110); + 0xC93C235FFADCBBAF, 0x7C82A00000000000, 0x0000000000000000), 109); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x00002A94608F8D29, 0xFBB7AF52D1BC1667, 0xF505440CC75CABAB, - 0xDC5961BFCC9F54DA, 0xDD1A400000000000, 0x0000000000000000), 111); + 0xDC5961BFCC9F54DA, 0xDD1A400000000000, 0x0000000000000000), 110); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0001A9CBC59B83A3, 0xD52CD93C3158E00F, 0x9234A87FC99EB4B6, - 0x9B7DD17DFE39508C, 0xA306800000000000, 0x0000000000000000), 112); + 0x9B7DD17DFE39508C, 0xA306800000000000, 0x0000000000000000), 111); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x0010A1F5B8132466, 0x53C07C59ED78C09B, 0xB60E94FDE0330F22, - 0x12EA2EEBEE3D257E, 0x5E41000000000000, 0x0000000000000000), 113); + 0x12EA2EEBEE3D257E, 0x5E41000000000000, 0x0000000000000000), 112); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x00A6539930BF6BFF, 0x4584DB8346B78615, 0x1C91D1EAC1FE9754, - 0xBD25D5374E6376EF, 0xAE8A000000000000, 0x0000000000000000), 114); + 0xBD25D5374E6376EF, 0xAE8A000000000000, 0x0000000000000000), 113); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x067F43FBE77A37F8, 0xB7309320C32B3CD3, 0x1DB2332B93F1E94F, - 0x637A54290FE2A55C, 0xD164000000000000, 0x0000000000000000), 115); + 0x637A54290FE2A55C, 0xD164000000000000, 0x0000000000000000), 114); yield return () => ( new(0x0000000000000000, 0x0000000000000000, 0x40F8A7D70AC62FB7, 0x27E5BF479FB0603F, 0x28F5FFB3C7731D19, - 0xE2C7499A9EDA75A0, 0x2DE8000000000000, 0x0000000000000000), 116); + 0xE2C7499A9EDA75A0, 0x2DE8000000000000, 0x0000000000000000), 115); yield return () => ( new(0x0000000000000000, 0x0000000000000002, 0x89B68E666BBDDD27, 0x8EF978CC3CE3C277, 0x999BFD05CA7F2302, - 0xDBC8E00A34889841, 0xCB10000000000000, 0x0000000000000000), 117); + 0xDBC8E00A34889841, 0xCB10000000000000, 0x0000000000000000), 116); yield return () => ( new(0x0000000000000000, 0x0000000000000019, 0x61219000356AA38B, 0x95BEB7FA60E598AC, 0x0017E239E8F75E1C, - 0x95D8C0660D55F291, 0xEEA0000000000000, 0x0000000000000000), 118); + 0x95D8C0660D55F291, 0xEEA0000000000000, 0x0000000000000000), 117); yield return () => ( new(0x0000000000000000, 0x00000000000000FD, 0xCB4FA002162A6373, 0xD9732FC7C8F7F6B8, 0x00EED64319A9AD1D, - 0xDA7783FC855B79B3, 0x5240000000000000, 0x0000000000000000), 119); + 0xDA7783FC855B79B3, 0x5240000000000000, 0x0000000000000000), 118); yield return () => ( new(0x0000000000000000, 0x00000000000009E9, 0xF11C4014DDA7E286, 0x7E7FDDCDD9AFA330, 0x09545E9F00A0C32A, - 0x88AB27DD3592C101, 0x3680000000000000, 0x0000000000000000), 120); + 0x88AB27DD3592C101, 0x3680000000000000, 0x0000000000000000), 119); yield return () => ( new(0x0000000000000000, 0x0000000000006323, 0x6B1A80D0A88ED940, 0xF0FEAA0A80DC5FE0, 0x5D4BB23606479FA9, - 0x56AF8EA417BB8A0C, 0x2100000000000000, 0x0000000000000000), 121); + 0x56AF8EA417BB8A0C, 0x2100000000000000, 0x0000000000000000), 120); yield return () => ( new(0x0000000000000000, 0x000000000003DF62, 0x2F09082695947C89, 0x69F2A469089BBEC3, 0xA4F4F61C3ECC3C9D, - 0x62DB9268ED536479, 0x4A00000000000000, 0x0000000000000000), 122); + 0x62DB9268ED536479, 0x4A00000000000000, 0x0000000000000000), 121); yield return () => ( new(0x0000000000000000, 0x000000000026B9D5, 0xD65A5181D7CCDD5E, 0x237A6C1A561573A4, 0x71919D1A73FA5E25, - 0xDC93B8194541ECBC, 0xE400000000000000, 0x0000000000000000), 123); + 0xDC93B8194541ECBC, 0xE400000000000000, 0x0000000000000000), 122); yield return () => ( new(0x0000000000000000, 0x000000000183425A, 0x5F872F126E00A5AD, 0x62C839075CD6846C, 0x6FB0230887C7AD7A, - 0x9DC530FCB4933F60, 0xE800000000000000, 0x0000000000000000), 124); + 0x9DC530FCB4933F60, 0xE800000000000000, 0x0000000000000000), 123); yield return () => ( new(0x0000000000000000, 0x000000000F209787, 0xBB47D6B84C0678C5, 0xDBD23A49A0612C3C, 0x5CE15E554DCCC6CA, - 0x29B3E9DF0DC079C9, 0x1000000000000000, 0x0000000000000000), 125); + 0x29B3E9DF0DC079C9, 0x1000000000000000, 0x0000000000000000), 124); yield return () => ( new(0x0000000000000000, 0x000000009745EB4D, 0x50CE6332F840B7BA, 0x963646E043CBBA5B, 0xA0CDAF5509FFC3E5, - 0xA10722B68984C1DA, 0xA000000000000000, 0x0000000000000000), 126); + 0xA10722B68984C1DA, 0xA000000000000000, 0x0000000000000000), 125); yield return () => ( new(0x0000000000000000, 0x00000005E8BB3105, 0x280FDFFDB2872D49, 0xDE1EC4C2A5F54794, 0x4808D95263FDA6F8, - 0x4A475B215F2F928A, 0x4000000000000000, 0x0000000000000000), 127); + 0x4A475B215F2F928A, 0x4000000000000000, 0x0000000000000000), 126); yield return () => ( new(0x0000000000000000, 0x0000003B174FEA33, 0x909EBFE8F947C4E2, 0xAD33AF9A7B94CBCA, 0xD0587D37E7E885B2, - 0xE6C98F4DB7DBB966, 0x8000000000000000, 0x0000000000000000), 128); + 0xE6C98F4DB7DBB966, 0x8000000000000000, 0x0000000000000000), 127); yield return () => ( new(0x0000000000000000, 0x0000024EE91F2603, 0xA6337F19BCCDB0DA, 0xC404DC08D3CFF5EC, 0x2374E42F0F1538FD, - 0x03DF99092E953E01, 0x0000000000000000, 0x0000000000000000), 129); + 0x03DF99092E953E01, 0x0000000000000000, 0x0000000000000000), 128); yield return () => ( new(0x0000000000000000, 0x000017151B377C24, 0x7E02F7016008E88B, 0xA8309858461F9B39, 0x6290E9D696D439E2, - 0x26BBFA5BD1D46C0A, 0x0000000000000000, 0x0000000000000000), 130); + 0x26BBFA5BD1D46C0A, 0x0000000000000000, 0x0000000000000000), 129); yield return () => ( new(0x0000000000000000, 0x0000E6D3102AD96C, 0xEC1DA60DC0591574, 0x91E5F372BD3C103D, 0xD9A92261E44A42D5, - 0x8357C796324C3864, 0x0000000000000000, 0x0000000000000000), 131); + 0x8357C796324C3864, 0x0000000000000000, 0x0000000000000000), 130); yield return () => ( new(0x0000000000000000, 0x0009043EA1AC7E41, 0x39287C89837AD68D, 0xB2FB827B6458A26A, 0x809B57D2EAE69C57, - 0x216DCBDDF6FA33E8, 0x0000000000000000, 0x0000000000000000), 132); + 0x216DCBDDF6FA33E8, 0x0000000000000000, 0x0000000000000000), 131); yield return () => ( new(0x0000000000000000, 0x005A2A7250BCEE8C, 0x3B94DD5F22CC6188, 0xFDD318D1EB765829, 0x06116E3D2D021B67, - 0x4E49F6ABA5C60710, 0x0000000000000000, 0x0000000000000000), 133); + 0x4E49F6ABA5C60710, 0x0000000000000000, 0x0000000000000000), 132); yield return () => ( new(0x0000000000000000, 0x0385A8772761517A, 0x53D0A5B75BFBCF59, 0xEA3EF833329F719A, 0x3CAE4E63C2151209, - 0x0EE3A2B479BC46A0, 0x0000000000000000, 0x0000000000000000), 134); + 0x0EE3A2B479BC46A0, 0x0000000000000000, 0x0000000000000000), 133); yield return () => ( new(0x0000000000000000, 0x233894A789CD2EC7, 0x4626792997D61983, 0x2675B1FFFA3A7006, 0x5ECF0FE594D2B45A, - 0x94E45B0CC15AC240, 0x0000000000000000, 0x0000000000000000), 135); + 0x94E45B0CC15AC240, 0x0000000000000000, 0x0000000000000000), 134); yield return () => ( new(0x0000000000000001, 0x6035CE8B6203D3C8, 0xBD80BB9FEE5CFF1F, 0x8098F3FFC648603F, 0xB4169EF7D03B0B89, - 0xD0EB8E7F8D8B9680, 0x0000000000000000, 0x0000000000000000), 136); + 0xD0EB8E7F8D8B9680, 0x0000000000000000, 0x0000000000000000), 135); yield return () => ( new(0x000000000000000D, 0xC21A1171D42645D7, 0x6707543F4FA1F73B, 0x05F987FDBED3C27D, 0x08E235AE224E7362, - 0x293390FB8773E100, 0x0000000000000000, 0x0000000000000000), 137); + 0x293390FB8773E100, 0x0000000000000000, 0x0000000000000000), 136); yield return () => ( new(0x0000000000000089, 0x9504AE72497EBA6A, 0x06494A791C53A84E, 0x3BBF4FE9744598E2, 0x58D618CD571081D5, - 0x9C03A9D34A86CA00, 0x0000000000000000, 0x0000000000000000), 138); + 0x9C03A9D34A86CA00, 0x0000000000000000, 0x0000000000000000), 137); yield return () => ( new(0x000000000000055F, 0xD22ED076DEF34824, 0x3EDCE8BB1B44930E, 0x55791F1E8AB7F8D7, 0x785CF80566A51258, - 0x1824A240E943E400, 0x0000000000000000, 0x0000000000000000), 139); + 0x1824A240E943E400, 0x0000000000000000, 0x0000000000000000), 138); yield return () => ( new(0x00000000000035BE, 0x35D424A4B580D16A, 0x74A1174F10ADBE8F, 0x56BB37316B2FB86A, 0xB3A1B0360272B770, - 0xF16E56891CA6E800, 0x0000000000000000, 0x0000000000000000), 140); + 0xF16E56891CA6E800, 0x0000000000000000, 0x0000000000000000), 139); yield return () => ( new(0x000000000002196E, 0x1A496E6F17082E28, 0x8E4AE916A6C97199, 0x635027EE2FDD342B, 0x0450E21C187B2A69, - 0x6E4F615B1E851000, 0x0000000000000000, 0x0000000000000000), 141); + 0x6E4F615B1E851000, 0x0000000000000000, 0x0000000000000000), 140); yield return () => ( new(0x000000000014FE4D, 0x06DE5056E651CD95, 0x8EED1AE283DE6FFD, 0xE1218F4DDEA409AE, 0x2B28D518F4CFA81E, - 0x4F19CD8F3132A000, 0x0000000000000000, 0x0000000000000000), 142); + 0x4F19CD8F3132A000, 0x0000000000000000, 0x0000000000000000), 141); yield return () => ( new(0x0000000000D1EF02, 0x44AF2364FF3207D7, 0x95430CD926B05FEA, 0xCB4F990AB26860CD, 0xAF9852F9901C912F, - 0x17020797EBFA4000, 0x0000000000000000, 0x0000000000000000), 143); + 0x17020797EBFA4000, 0x0000000000000000, 0x0000000000000000), 142); yield return () => ( new(0x0000000008335616, 0xAED761F1F7F44E6B, 0xD49E807B82E3BF2B, 0xF11BFA6AF813C808, 0xDBF33DBFA11DABD6, - 0xE6144BEF37C68000, 0x0000000000000000, 0x0000000000000000), 144); + 0xE6144BEF37C68000, 0x0000000000000000, 0x0000000000000000), 143); yield return () => ( new(0x0000000052015CE2, 0xD469D373AF8B1036, 0x4E3104D31CE577B7, 0x6B17C82DB0C5D058, 0x9780697C4B28B664, - 0xFCCAF7582DC10000, 0x0000000000000000, 0x0000000000000000), 145); + 0xFCCAF7582DC10000, 0x0000000000000000, 0x0000000000000000), 144); yield return () => ( new(0x00000003340DA0DC, 0x4C224284DB6EA21F, 0x0DEA303F20F6AD2A, 0x2EEDD1C8E7BA2375, 0xEB041EDAEF971FF1, - 0xDFEDA971C98A0000, 0x0000000000000000, 0x0000000000000000), 146); + 0xDFEDA971C98A0000, 0x0000000000000000, 0x0000000000000000), 145); yield return () => ( new(0x000000200888489A, 0xF956993092525536, 0x8B25E27749A2C3A5, 0xD54A31D90D45629B, 0x2E29348D5BE73F72, - 0xBF489E71DF640000, 0x0000000000000000, 0x0000000000000000), 147); + 0xBF489E71DF640000, 0x0000000000000000, 0x0000000000000000), 146); yield return () => ( new(0x000001405552D60D, 0xBD61FBE5B7375421, 0x6F7AD8A8E05BA47A, 0x54E5F27A84B5DA0F, 0xCD9C0D8597087A7B, - 0x78D63072B9E80000, 0x0000000000000000, 0x0000000000000000), 148); + 0x78D63072B9E80000, 0x0000000000000000, 0x0000000000000000), 147); yield return () => ( new(0x00000C83553C5C89, 0x65D3D6F92829494E, 0x5ACC7698C3946CC7, 0x50FB78C92F1A849E, 0x08188737E654C8D2, - 0xB85DE47B43100000, 0x0000000000000000, 0x0000000000000000), 149); + 0xB85DE47B43100000, 0x0000000000000000, 0x0000000000000000), 148); yield return () => ( new(0x00007D21545B9D5D, 0xFA4665BB919CDD0F, 0x8BFCA1F7A3CC3FC9, 0x29D2B7DBD7092E2C, 0x50F5482EFF4FD83B, - 0x33AAECD09EA00000, 0x0000000000000000, 0x0000000000000000), 150); + 0x33AAECD09EA00000, 0x0000000000000000, 0x0000000000000000), 149); yield return () => ( new(0x0004E34D4B9425AB, 0xC6BFF953B020A29B, 0x77DE53AC65FA7DDB, 0xA23B2E96665BCDBB, 0x2994D1D5F91E7250, - 0x04AD402632400000, 0x0000000000000000, 0x0000000000000000), 151); + 0x04AD402632400000, 0x0000000000000000, 0x0000000000000000), 150); yield return () => ( new(0x0030E104F3C978B5, 0xC37FBD44E1465A12, 0xAEAF44BBFBC8EA94, 0x564FD1DFFF96094F, 0x9FD0325BBB307720, - 0x2EC4817DF6800000, 0x0000000000000000, 0x0000000000000000), 152); + 0x2EC4817DF6800000, 0x0000000000000000, 0x0000000000000000), 151); yield return () => ( new(0x01E8CA3185DEB719, 0xA2FD64B0CCBF84BA, 0xD2D8AF57D5D929CB, 0x5F1E32BFFBDC5D1C, 0x3E21F7954FE4A741, - 0xD3AD0EEBA1000000, 0x0000000000000000, 0x0000000000000000), 153); + 0xD3AD0EEBA1000000, 0x0000000000000000, 0x0000000000000000), 152); yield return () => ( new(0x1317E5EF3AB32700, 0x5DE5EEE7FF7B2F4C, 0x3C76D96E5A7BA1F1, 0xB72DFB7FD69BA31A, 0x6D53ABD51EEE8892, - 0x44C295344A000000, 0x0000000000000000, 0x0000000000000000), 154); + 0x44C295344A000000, 0x0000000000000000, 0x0000000000000000), 153); yield return () => ( new(0xBEEEFB584AFF8603, 0xAAFB550FFACFD8FA, 0x5CA47E4F88D45371, 0x27CBD2FE62145F08, 0x4544B653355155B6, - 0xAF99D40AE4000000, 0x0000000000000000, 0x0000000000000000), 155); - yield return () => ( - new(0x7555D172EDFB3C24, 0xADD1529FCC1E79C7, 0x9E6CEF1B584B426B, 0x8DF63DEFD4CBB652, 0xB4AF1F40152D5922, - 0xDC02486CE8000000, 0x0000000000000000, 0x0000000000000000), 156); + 0xAF99D40AE4000000, 0x0000000000000000, 0x0000000000000000), 154); } } diff --git a/src/MissingValues.Tests/Data/UInt512DataSources.cs b/src/MissingValues.Tests/Data/UInt512DataSources.cs index 84e24a0..6e8635d 100644 --- a/src/MissingValues.Tests/Data/UInt512DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt512DataSources.cs @@ -207,17 +207,41 @@ public class UInt512DataSources public static IEnumerable> op_ShiftLeftTestData() { - throw new NotImplementedException(); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), 0, new UInt512(1, 2, 3, 4, 5, 6, 7, 8)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 1), 1, new UInt512(0, 0, 0, 0, 0, 0, 0, 2)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 1), 63, new UInt512(0, 0, 0, 0, 0, 0, 0, 0x8000_0000_0000_0000)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 1), 64, new UInt512(0, 0, 0, 0, 0, 0, 1, 0)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 1), 128, new UInt512(0, 0, 0, 0, 0, 1, 0, 0)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 1), 256, new UInt512(0, 0, 0, 1, 0, 0, 0, 0)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 1), 511, new UInt512(0x8000_0000_0000_0000, 0, 0, 0, 0, 0, 0, 0)); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), 512, new UInt512(1, 2, 3, 4, 5, 6, 7, 8)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 1), 513, new UInt512(0, 0, 0, 0, 0, 0, 0, 2)); } public static IEnumerable> op_ShiftRightTestData() { - throw new NotImplementedException(); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), 0, new UInt512(1, 2, 3, 4, 5, 6, 7, 8)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 2), 1, new UInt512(0, 0, 0, 0, 0, 0, 0, 1)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 0x8000_0000_0000_0000), 63, new UInt512(0, 0, 0, 0, 0, 0, 0, 1)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 1, 0), 64, new UInt512(0, 0, 0, 0, 0, 0, 0, 1)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 1, 0, 0), 128, new UInt512(0, 0, 0, 0, 0, 0, 0, 1)); + yield return () => (new UInt512(0, 0, 0, 1, 0, 0, 0, 0), 256, new UInt512(0, 0, 0, 0, 0, 0, 0, 1)); + yield return () => (new UInt512(0x8000_0000_0000_0000, 0, 0, 0, 0, 0, 0, 0), 511, new UInt512(0, 0, 0, 0, 0, 0, 0, 1)); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), 512, new UInt512(1, 2, 3, 4, 5, 6, 7, 8)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 2), 513, new UInt512(0, 0, 0, 0, 0, 0, 0, 1)); } public static IEnumerable> op_UnsignedShiftRightTestData() { - throw new NotImplementedException(); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), 0, new UInt512(1, 2, 3, 4, 5, 6, 7, 8)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 2), 1, new UInt512(0, 0, 0, 0, 0, 0, 0, 1)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 0x8000_0000_0000_0000), 63, new UInt512(0, 0, 0, 0, 0, 0, 0, 1)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 1, 0), 64, new UInt512(0, 0, 0, 0, 0, 0, 0, 1)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 1, 0, 0), 128, new UInt512(0, 0, 0, 0, 0, 0, 0, 1)); + yield return () => (new UInt512(0, 0, 0, 1, 0, 0, 0, 0), 256, new UInt512(0, 0, 0, 0, 0, 0, 0, 1)); + yield return () => (new UInt512(0x8000_0000_0000_0000, 0, 0, 0, 0, 0, 0, 0), 511, new UInt512(0, 0, 0, 0, 0, 0, 0, 1)); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), 512, new UInt512(1, 2, 3, 4, 5, 6, 7, 8)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 2), 513, new UInt512(0, 0, 0, 0, 0, 0, 0, 1)); } public static IEnumerable> op_BitwiseAndTestData() From 43332d7e57e7a63ae21392f25cf19972ad465369 Mon Sep 17 00:00:00 2001 From: crookseta Date: Wed, 1 Oct 2025 14:02:38 -0500 Subject: [PATCH 20/74] -Added TryParse Quad test. --- .../Data/QuadDataSources.cs | 94 +++++++++++++++++-- src/MissingValues.Tests/Values.cs | 33 +++++++ 2 files changed, 121 insertions(+), 6 deletions(-) create mode 100644 src/MissingValues.Tests/Values.cs diff --git a/src/MissingValues.Tests/Data/QuadDataSources.cs b/src/MissingValues.Tests/Data/QuadDataSources.cs index 8e1f735..21c7736 100644 --- a/src/MissingValues.Tests/Data/QuadDataSources.cs +++ b/src/MissingValues.Tests/Data/QuadDataSources.cs @@ -1,4 +1,5 @@ using System.Globalization; +using System.Text; using MissingValues.Tests.Data.Sources; namespace MissingValues.Tests.Data; @@ -241,32 +242,113 @@ public class QuadDataSources public static IEnumerable> ParseTestData() { - throw new NotImplementedException(); + yield return () => ("2,0", NumberStyles.Float, CultureInfo.CurrentCulture, Quad.Two); + yield return () => ("-2", NumberStyles.Float, CultureInfo.CurrentCulture, -Quad.Two); + yield return () => ("0", NumberStyles.Float, CultureInfo.CurrentCulture, Quad.Zero); + yield return () => (NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol, NumberStyles.Float, CultureInfo.CurrentCulture, Quad.PositiveInfinity); + yield return () => (NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol, NumberStyles.Float, CultureInfo.CurrentCulture, Quad.NegativeInfinity); + yield return () => (NumberFormatInfo.CurrentInfo.NaNSymbol, NumberStyles.Float, CultureInfo.CurrentCulture, Quad.NaN); + yield return () => ("256,4995", NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x4007_007F_DF3B_645A, 0x1CAC_0831_26E9_78D5)); + yield return () => ("471581881", NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x401B_C1BC_4B90_0000, 0x0000_0000_0000_0000)); + yield return () => ("1,93561113", NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x3FFF_EF84_3605_1FA4, 0x8B0F_3D34_BECE_8762)); + yield return () => ("9715574,2", NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x4016_287E_EC66_6666, 0x6666_6666_6666_6666)); + yield return () => ("0,51438427732005011792", NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x3FFE_075D_6041_5519, 0x72D0_0AD3_7DB4_57E9)); + yield return () => ("0,04201133209656899095", NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x3FFA_5828_262D_512C, 0x8840_B3B3_D424_5947)); + yield return () => ("7,7E777", NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x4A17_0F28_5D1D_4C84, 0xA11F_6899_101B_A9A4)); + yield return () => ("-7,7E-777", NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0xB5EC_BFCE_3AF6_4E08, 0x42C8_5750_BEBD_A572)); } public static IEnumerable> ParseSpanTestData() { - throw new NotImplementedException(); + yield return () => ("2,0".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Quad.Two); + yield return () => ("-2".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, -Quad.Two); + yield return () => ("0".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Quad.Zero); + yield return () => (NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol.ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Quad.PositiveInfinity); + yield return () => (NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol.ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Quad.NegativeInfinity); + yield return () => (NumberFormatInfo.CurrentInfo.NaNSymbol.ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Quad.NaN); + yield return () => ("256,4995".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x4007_007F_DF3B_645A, 0x1CAC_0831_26E9_78D5)); + yield return () => ("471581881".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x401B_C1BC_4B90_0000, 0x0000_0000_0000_0000)); + yield return () => ("1,93561113".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x3FFF_EF84_3605_1FA4, 0x8B0F_3D34_BECE_8762)); + yield return () => ("9715574,2".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x4016_287E_EC66_6666, 0x6666_6666_6666_6666)); + yield return () => ("0,51438427732005011792".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x3FFE_075D_6041_5519, 0x72D0_0AD3_7DB4_57E9)); + yield return () => ("0,04201133209656899095".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x3FFA_5828_262D_512C, 0x8840_B3B3_D424_5947)); + yield return () => ("7,7E777".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x4A17_0F28_5D1D_4C84, 0xA11F_6899_101B_A9A4)); + yield return () => ("-7,7E-777".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0xB5EC_BFCE_3AF6_4E08, 0x42C8_5750_BEBD_A572)); } public static IEnumerable> ParseUtf8TestData() { - throw new NotImplementedException(); + yield return () => ("2,0"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Quad.Two); + yield return () => ("-2"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, -Quad.Two); + yield return () => ("0"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Quad.Zero); + yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol), NumberStyles.Float, CultureInfo.CurrentCulture, Quad.PositiveInfinity); + yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol), NumberStyles.Float, CultureInfo.CurrentCulture, Quad.NegativeInfinity); + yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.CurrentInfo.NaNSymbol), NumberStyles.Float, CultureInfo.CurrentCulture, Quad.NaN); + yield return () => ("256,4995"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x4007_007F_DF3B_645A, 0x1CAC_0831_26E9_78D5)); + yield return () => ("471581881"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x401B_C1BC_4B90_0000, 0x0000_0000_0000_0000)); + yield return () => ("1,93561113"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x3FFF_EF84_3605_1FA4, 0x8B0F_3D34_BECE_8762)); + yield return () => ("9715574,2"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x4016_287E_EC66_6666, 0x6666_6666_6666_6666)); + yield return () => ("0,51438427732005011792"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x3FFE_075D_6041_5519, 0x72D0_0AD3_7DB4_57E9)); + yield return () => ("0,04201133209656899095"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x3FFA_5828_262D_512C, 0x8840_B3B3_D424_5947)); + yield return () => ("7,7E777"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x4A17_0F28_5D1D_4C84, 0xA11F_6899_101B_A9A4)); + yield return () => ("-7,7E-777"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0xB5EC_BFCE_3AF6_4E08, 0x42C8_5750_BEBD_A572)); } public static IEnumerable> TryParseTestData() { - throw new NotImplementedException(); + yield return () => ("2,0", NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.Two); + yield return () => ("-2", NumberStyles.Float, CultureInfo.CurrentCulture, true, -Quad.Two); + yield return () => ("0", NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.Zero); + yield return () => (NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol, NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.PositiveInfinity); + yield return () => (NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol, NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.NegativeInfinity); + yield return () => (NumberFormatInfo.CurrentInfo.NaNSymbol, NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.NaN); + yield return () => ("256,4995", NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x4007_007F_DF3B_645A, 0x1CAC_0831_26E9_78D5)); + yield return () => ("471581881", NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x401B_C1BC_4B90_0000, 0x0000_0000_0000_0000)); + yield return () => ("1,93561113", NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x3FFF_EF84_3605_1FA4, 0x8B0F_3D34_BECE_8762)); + yield return () => ("9715574,2", NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x4016_287E_EC66_6666, 0x6666_6666_6666_6666)); + yield return () => ("0,51438427732005011792", NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x3FFE_075D_6041_5519, 0x72D0_0AD3_7DB4_57E9)); + yield return () => ("0,04201133209656899095", NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x3FFA_5828_262D_512C, 0x8840_B3B3_D424_5947)); + yield return () => ("7,7E777", NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x4A17_0F28_5D1D_4C84, 0xA11F_6899_101B_A9A4)); + yield return () => ("-7,7E-777", NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0xB5EC_BFCE_3AF6_4E08, 0x42C8_5750_BEBD_A572)); + yield return () => ("1A", NumberStyles.Float, CultureInfo.CurrentCulture, false, default); } public static IEnumerable> TryParseSpanTestData() { - throw new NotImplementedException(); + yield return () => ("2,0".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.Two); + yield return () => ("-2".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, -Quad.Two); + yield return () => ("0".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.Zero); + yield return () => (NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol.ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.PositiveInfinity); + yield return () => (NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol.ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.NegativeInfinity); + yield return () => (NumberFormatInfo.CurrentInfo.NaNSymbol.ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.NaN); + yield return () => ("256,4995".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x4007_007F_DF3B_645A, 0x1CAC_0831_26E9_78D5)); + yield return () => ("471581881".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x401B_C1BC_4B90_0000, 0x0000_0000_0000_0000)); + yield return () => ("1,93561113".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x3FFF_EF84_3605_1FA4, 0x8B0F_3D34_BECE_8762)); + yield return () => ("9715574,2".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x4016_287E_EC66_6666, 0x6666_6666_6666_6666)); + yield return () => ("0,51438427732005011792".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x3FFE_075D_6041_5519, 0x72D0_0AD3_7DB4_57E9)); + yield return () => ("0,04201133209656899095".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x3FFA_5828_262D_512C, 0x8840_B3B3_D424_5947)); + yield return () => ("7,7E777".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x4A17_0F28_5D1D_4C84, 0xA11F_6899_101B_A9A4)); + yield return () => ("-7,7E-777".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0xB5EC_BFCE_3AF6_4E08, 0x42C8_5750_BEBD_A572)); + yield return () => ("1A".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, false, default); } public static IEnumerable> TryParseUtf8TestData() { - throw new NotImplementedException(); + yield return () => ("2,0"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.Two); + yield return () => ("-2"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, -Quad.Two); + yield return () => ("0"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.Zero); + yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol), NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.PositiveInfinity); + yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol), NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.NegativeInfinity); + yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.CurrentInfo.NaNSymbol), NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.NaN); + yield return () => ("256,4995"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x4007_007F_DF3B_645A, 0x1CAC_0831_26E9_78D5)); + yield return () => ("471581881"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x401B_C1BC_4B90_0000, 0x0000_0000_0000_0000)); + yield return () => ("1,93561113"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x3FFF_EF84_3605_1FA4, 0x8B0F_3D34_BECE_8762)); + yield return () => ("9715574,2"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x4016_287E_EC66_6666, 0x6666_6666_6666_6666)); + yield return () => ("0,51438427732005011792"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x3FFE_075D_6041_5519, 0x72D0_0AD3_7DB4_57E9)); + yield return () => ("0,04201133209656899095"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x3FFA_5828_262D_512C, 0x8840_B3B3_D424_5947)); + yield return () => ("7,7E777"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x4A17_0F28_5D1D_4C84, 0xA11F_6899_101B_A9A4)); + yield return () => ("-7,7E-777"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0xB5EC_BFCE_3AF6_4E08, 0x42C8_5750_BEBD_A572)); + yield return () => ("1A"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, false, default); } public static IEnumerable> ClampTestData() diff --git a/src/MissingValues.Tests/Values.cs b/src/MissingValues.Tests/Values.cs new file mode 100644 index 0000000..956196d --- /dev/null +++ b/src/MissingValues.Tests/Values.cs @@ -0,0 +1,33 @@ +using System.Text; + +namespace MissingValues.Tests; + +public static class Values +{ + public static TFloat CreateFloat(params ReadOnlySpan bits) + { + if (typeof(TFloat) == typeof(Quad) && bits.Length == 2) + { + return (TFloat)(object)Quad.UInt128BitsToQuad(new UInt128(bits[0], bits[1])); + } + if (typeof(TFloat) == typeof(Octo) && bits.Length == 4) + { + return (TFloat)(object)Octo.UInt256BitsToOcto(new UInt256(bits[0], bits[1], bits[2], bits[3])); + } + + throw new InvalidOperationException($"{typeof(TFloat)} does not match the bits({bits.Length}): {StringifyBits(bits)}"); + + static string StringifyBits(ReadOnlySpan bits) + { + StringBuilder sb = new StringBuilder(); + + sb.Append($"0x{bits[0]:X16}"); + for (int i = 1; i < bits.Length; i++) + { + sb.Append($"_{bits[i]:X16}"); + } + + return sb.ToString(); + } + } +} \ No newline at end of file From 0422598732df02b1ae75697f2b2fdd3a5c2d96b7 Mon Sep 17 00:00:00 2001 From: crookseta Date: Mon, 20 Oct 2025 19:27:23 -0500 Subject: [PATCH 21/74] -Fixed deprecated using. --- src/MissingValues.Tests/Core/CalculatorTests.cs | 1 - src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs | 2 -- src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs | 1 - src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs | 2 -- src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs | 1 - 5 files changed, 7 deletions(-) diff --git a/src/MissingValues.Tests/Core/CalculatorTests.cs b/src/MissingValues.Tests/Core/CalculatorTests.cs index 5d0760d..7920197 100644 --- a/src/MissingValues.Tests/Core/CalculatorTests.cs +++ b/src/MissingValues.Tests/Core/CalculatorTests.cs @@ -1,6 +1,5 @@ using MissingValues.Internals; using MissingValues.Tests.Data; -using TUnit.Assertions.AssertConditions.Throws; using static MissingValues.Tests.Data.CalculatorDataSources; namespace MissingValues.Tests.Core; diff --git a/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs b/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs index 02e65e0..f620c5f 100644 --- a/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs @@ -5,8 +5,6 @@ using System.Text; using System.Threading.Tasks; using MissingValues.Tests.Data; -using TUnit.Assertions.AssertConditions.Throws; - using static MissingValues.Tests.Data.Int256DataSources; using DataSources = MissingValues.Tests.Data.Int256DataSources; diff --git a/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs b/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs index 7f98f1d..8d85a28 100644 --- a/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs @@ -4,7 +4,6 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -using TUnit.Assertions.AssertConditions.Throws; using static MissingValues.Tests.Data.Int512DataSources; using DataSources = MissingValues.Tests.Data.Int512DataSources; diff --git a/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs b/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs index d818a56..355e51a 100644 --- a/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs @@ -5,8 +5,6 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -using TUnit.Assertions.AssertConditions.Throws; - using static MissingValues.Tests.Data.UInt256DataSources; using DataSources = MissingValues.Tests.Data.UInt256DataSources; diff --git a/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs b/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs index 7b75462..4223cae 100644 --- a/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs @@ -4,7 +4,6 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -using TUnit.Assertions.AssertConditions.Throws; using static MissingValues.Tests.Data.UInt512DataSources; using DataSources = MissingValues.Tests.Data.UInt512DataSources; From 6cbc0cf43d0cca354629ddc69c3a30f49e512803 Mon Sep 17 00:00:00 2001 From: crookseta Date: Tue, 4 Nov 2025 11:00:35 -0500 Subject: [PATCH 22/74] Added remaining tests for INumberBase methods. --- .../Data/UInt512DataSources.cs | 236 ++++++++++++++---- 1 file changed, 184 insertions(+), 52 deletions(-) diff --git a/src/MissingValues.Tests/Data/UInt512DataSources.cs b/src/MissingValues.Tests/Data/UInt512DataSources.cs index 6e8635d..2743419 100644 --- a/src/MissingValues.Tests/Data/UInt512DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt512DataSources.cs @@ -246,167 +246,294 @@ public class UInt512DataSources public static IEnumerable> op_BitwiseAndTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, UInt512.Zero, UInt512.Zero); + yield return () => (UInt512.Zero, UInt512.MaxValue, UInt512.Zero); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8)); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), UInt512.MaxValue, new UInt512(1, 2, 3, 4, 5, 6, 7, 8)); } public static IEnumerable> op_BitwiseOrTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, UInt512.Zero, UInt512.Zero); + yield return () => (UInt512.Zero, UInt512.MaxValue, UInt512.MaxValue); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8)); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), UInt512.MaxValue, UInt512.MaxValue); } public static IEnumerable> op_BitwiseXorTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, UInt512.Zero, UInt512.Zero); + yield return () => (UInt512.Zero, UInt512.MaxValue, UInt512.MaxValue); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), UInt512.Zero); } public static IEnumerable> op_OnesComplementTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, UInt512.MaxValue); + yield return () => (UInt512.MaxValue, UInt512.Zero); + yield return () => (new UInt512(0xAAAAAAAAAAAAAAAA, 0x5555555555555555, 0xAAAAAAAAAAAAAAAA, 0x5555555555555555, 0xAAAAAAAAAAAAAAAA, 0x5555555555555555, 0xAAAAAAAAAAAAAAAA, 0x5555555555555555), new UInt512(0x5555555555555555, 0xAAAAAAAAAAAAAAAA, 0x5555555555555555, 0xAAAAAAAAAAAAAAAA, 0x5555555555555555, 0xAAAAAAAAAAAAAAAA, 0x5555555555555555, 0xAAAAAAAAAAAAAAAA)); + yield return () => (new UInt512(0x0123456789ABCDEF, 0xFEDCBA9876543210, 0x0F0F0F0F0F0F0F0F, 0xF0F0F0F0F0F0F0F0, 0x0123456789ABCDEF, 0xFEDCBA9876543210, 0x0F0F0F0F0F0F0F0F, 0xF0F0F0F0F0F0F0F0), new UInt512(~0x0123456789ABCDEFU, ~0xFEDCBA9876543210U, ~0x0F0F0F0F0F0F0F0FU, ~0xF0F0F0F0F0F0F0F0U, ~0x0123456789ABCDEFU, ~0xFEDCBA9876543210U, ~0x0F0F0F0F0F0F0F0FU, ~0xF0F0F0F0F0F0F0F0U)); } public static IEnumerable> op_EqualityTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, UInt512.Zero, true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 9), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 5, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 7, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 4, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 5, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 1, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 3, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(0, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 9), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 5, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 7, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 4, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 5, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 1, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 3, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(0, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), false); } public static IEnumerable> op_InequalityTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, UInt512.Zero, false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 9), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 5, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 7, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 4, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 5, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 1, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 3, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(0, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 9), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 5, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 7, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 4, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 5, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 1, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 3, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(0, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), true); } public static IEnumerable> op_GreaterThanOrEqualTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, UInt512.Zero, true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 9), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 5, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 7, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 4, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 5, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 1, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 3, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(0, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 9), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 5, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 7, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 4, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 5, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 1, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 3, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(0, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), false); } public static IEnumerable> op_GreaterThanTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, UInt512.Zero, false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 9), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 5, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 7, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 4, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 5, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 1, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 3, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(0, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 9), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 5, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 7, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 4, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 5, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 1, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 3, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(0, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), false); } public static IEnumerable> op_LessThanOrEqualTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, UInt512.Zero, true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 9), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 5, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 7, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 4, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 5, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 1, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 3, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(0, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 9), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 5, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 7, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 4, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 5, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 1, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 3, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(0, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), true); } public static IEnumerable> op_LessThanTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, UInt512.Zero, false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 9), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 5, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 7, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 4, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 5, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 1, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 3, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(0, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 9), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 5, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 4, 5, 7, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 3, 4, 4, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 2, 3, 5, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(1, 2, 1, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new UInt512(1, 3, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new UInt512(0, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), true); } public static IEnumerable> AbsTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, UInt512.Zero); + yield return () => (UInt512.One, UInt512.One); + yield return () => (UInt512.MaxValue, UInt512.MaxValue); + yield return () => (UInt512.MinValue, UInt512.MinValue); } public static IEnumerable> IsCanonicalTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, true); } public static IEnumerable> IsComplexNumberTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, false); } public static IEnumerable> IsEvenIntegerTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, true); + } public static IEnumerable> IsFiniteTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, true); } public static IEnumerable> IsImaginaryNumberTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, false); } public static IEnumerable> IsInfinityTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, false); } public static IEnumerable> IsIntegerTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, true); } public static IEnumerable> IsNaNTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, false); } public static IEnumerable> IsNegativeTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, false); } public static IEnumerable> IsNegativeInfinityTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, false); } public static IEnumerable> IsNormalTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, false); + yield return () => (UInt512.One, true); + yield return () => (UInt512.MaxValue, true); + yield return () => (UInt512.MinValue, false); } public static IEnumerable> IsOddIntegerTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, false); + yield return () => (UInt512.One, true); + yield return () => (UInt512.MaxValue, true); + yield return () => (UInt512.MinValue, false); } public static IEnumerable> IsPositiveTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, true); } public static IEnumerable> IsPositiveInfinityTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, false); } public static IEnumerable> IsRealNumberTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, true); } public static IEnumerable> IsSubnormalTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, false); } public static IEnumerable> IsZeroTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, true); + yield return () => (UInt512.One, false); + yield return () => (UInt512.MaxValue, false); + yield return () => (UInt512.MinValue, true); } public static IEnumerable> MaxMagnitudeTestData() { - throw new NotImplementedException(); + return MaxTestData(); } public static IEnumerable> MaxMagnitudeNumberTestData() { - throw new NotImplementedException(); + return MaxTestData(); } public static IEnumerable> MinMagnitudeTestData() { - throw new NotImplementedException(); + return MinTestData(); } public static IEnumerable> MinMagnitudeNumberTestData() { - throw new NotImplementedException(); + return MinTestData(); } public static IEnumerable> MultiplyAddEstimateTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Zero, UInt512.Zero, UInt512.Zero, UInt512.Zero); + yield return () => (UInt512.Zero, UInt512.Zero, UInt512.One, UInt512.One); } public static IEnumerable> ParseTestData() @@ -584,11 +711,11 @@ public class UInt512DataSources { yield return () => ("0", NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt512.Zero); yield return () => ("1", NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt512.One); - yield return () => ("4294967296", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 0, 0, 4294967296)); - yield return () => ("18446744073709551616", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 0, 1, 0)); - yield return () => ("340282366920938463463374607431768211456", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 1, 0, 0)); - yield return () => ("6277101735386680763835789423207666416102355444464034512896", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(1, 0, 0, 0)); - yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639936", NumberStyles.Integer, CultureInfo.InvariantCulture, false, new UInt512(0, 0, 0, 1, 0, 0, 0, 0)); + yield return () => ("4294967296", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 0, 0, 0, 0, 0, 0, 4294967296)); + yield return () => ("18446744073709551616", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 0, 0, 0, 0, 0, 1, 0)); + yield return () => ("340282366920938463463374607431768211456", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 0, 0, 0, 0, 1, 0, 0)); + yield return () => ("6277101735386680763835789423207666416102355444464034512896", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 0, 0, 0, 1, 0, 0, 0)); + yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639936", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 0, 0, 1, 0, 0, 0, 0)); yield return () => ("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095", NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt512.MaxValue); yield return () => ("-1", NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); yield return () => ("2.25", NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); @@ -600,11 +727,11 @@ public class UInt512DataSources { yield return () => ("0".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt512.Zero); yield return () => ("1".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt512.One); - yield return () => ("4294967296".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 0, 0, 4294967296)); - yield return () => ("18446744073709551616".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 0, 1, 0)); - yield return () => ("340282366920938463463374607431768211456".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 1, 0, 0)); - yield return () => ("6277101735386680763835789423207666416102355444464034512896".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(1, 0, 0, 0)); - yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639936".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, new UInt512(0, 0, 0, 1, 0, 0, 0, 0)); + yield return () => ("4294967296".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 0, 0, 0, 0, 0, 0, 4294967296)); + yield return () => ("18446744073709551616".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 0, 0, 0, 0, 0, 1, 0)); + yield return () => ("340282366920938463463374607431768211456".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 0, 0, 0, 0, 1, 0, 0)); + yield return () => ("6277101735386680763835789423207666416102355444464034512896".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 0, 0, 0, 1, 0, 0, 0)); + yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639936".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 0, 0, 1, 0, 0, 0, 0)); yield return () => ("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt512.MaxValue); yield return () => ("-1".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); yield return () => ("2.25".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); @@ -616,11 +743,11 @@ public class UInt512DataSources { yield return () => ("0"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt512.Zero); yield return () => ("1"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt512.One); - yield return () => ("4294967296"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 0, 0, 4294967296)); - yield return () => ("18446744073709551616"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 0, 1, 0)); - yield return () => ("340282366920938463463374607431768211456"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 1, 0, 0)); - yield return () => ("6277101735386680763835789423207666416102355444464034512896"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(1, 0, 0, 0)); - yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639936"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, new UInt512(0, 0, 0, 1, 0, 0, 0, 0)); + yield return () => ("4294967296"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 0, 0, 0, 0, 0, 0, 4294967296)); + yield return () => ("18446744073709551616"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 0, 0, 0, 0, 0, 1, 0)); + yield return () => ("340282366920938463463374607431768211456"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 0, 0, 0, 0, 1, 0, 0)); + yield return () => ("6277101735386680763835789423207666416102355444464034512896"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 0, 0, 0, 1, 0, 0, 0)); + yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639936"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new UInt512(0, 0, 0, 1, 0, 0, 0, 0)); yield return () => ("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, UInt512.MaxValue); yield return () => ("-1"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); yield return () => ("2.25"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); @@ -630,12 +757,17 @@ public class UInt512DataSources public static IEnumerable> ClampTestData() { - throw new NotImplementedException(); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 15), new UInt512(0, 0, 0, 0, 0, 0, 0, 10), new UInt512(0, 0, 0, 0, 0, 0, 0, 20), new UInt512(0, 0, 0, 0, 0, 0, 0, 15)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 10), new UInt512(0, 0, 0, 0, 0, 0, 0, 10), new UInt512(0, 0, 0, 0, 0, 0, 0, 20), new UInt512(0, 0, 0, 0, 0, 0, 0, 10)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 20), new UInt512(0, 0, 0, 0, 0, 0, 0, 10), new UInt512(0, 0, 0, 0, 0, 0, 0, 20), new UInt512(0, 0, 0, 0, 0, 0, 0, 20)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 05), new UInt512(0, 0, 0, 0, 0, 0, 0, 10), new UInt512(0, 0, 0, 0, 0, 0, 0, 20), new UInt512(0, 0, 0, 0, 0, 0, 0, 10)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 25), new UInt512(0, 0, 0, 0, 0, 0, 0, 10), new UInt512(0, 0, 0, 0, 0, 0, 0, 20), new UInt512(0, 0, 0, 0, 0, 0, 0, 20)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 25), new UInt512(0, 0, 0, 0, 0, 0, 0, 30), new UInt512(0, 0, 0, 0, 0, 0, 0, 20), default); } public static IEnumerable> CopySignTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.MaxValue, UInt512.MaxValue, UInt512.MaxValue); } public static IEnumerable> MaxTestData() @@ -645,7 +777,7 @@ public class UInt512DataSources public static IEnumerable> MaxNumberTestData() { - throw new NotImplementedException(); + return MaxTestData(); } public static IEnumerable> MinTestData() @@ -655,7 +787,7 @@ public class UInt512DataSources public static IEnumerable> MinNumberTestData() { - throw new NotImplementedException(); + return MinTestData(); } public static IEnumerable> SignTestData() From 58e2faa3a6abd3d0a29d75d5a9a080c52b8c525c Mon Sep 17 00:00:00 2001 From: crookseta Date: Tue, 4 Nov 2025 11:01:22 -0500 Subject: [PATCH 23/74] -Added tests for Json Converter. --- .../Core/JsonConverterTests.cs | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/MissingValues.Tests/Core/JsonConverterTests.cs diff --git a/src/MissingValues.Tests/Core/JsonConverterTests.cs b/src/MissingValues.Tests/Core/JsonConverterTests.cs new file mode 100644 index 0000000..ce0a247 --- /dev/null +++ b/src/MissingValues.Tests/Core/JsonConverterTests.cs @@ -0,0 +1,28 @@ +using System.Globalization; +using System.Text.Json; + +namespace MissingValues.Tests.Core; + +public class JsonConverterTests +{ + [Test] + public async Task JsonWriteTest() + { + await Assert.That(JsonSerializer.Serialize(new object[] { UInt256.MaxValue, UInt256.MinValue })).EqualTo($"[{UInt256.MaxValue},{UInt256.MinValue}]"); + await Assert.That(JsonSerializer.Serialize(new object[] { Int256.MaxValue, Int256.MinValue })).EqualTo($"[{Int256.MaxValue},{Int256.MinValue}]"); + await Assert.That(JsonSerializer.Serialize(new object[] { UInt512.MaxValue, UInt512.MinValue })).EqualTo($"[{UInt512.MaxValue},{UInt512.MinValue}]"); + await Assert.That(JsonSerializer.Serialize(new object[] { Int512.MaxValue, Int512.MinValue })).EqualTo($"[{Int512.MaxValue},{Int512.MinValue}]"); + await Assert.That(JsonSerializer.Serialize(new object[] { Quad.MaxValue, Quad.MinValue })).EqualTo($"[{Quad.MaxValue.ToString("G", CultureInfo.InvariantCulture)},{Quad.MinValue.ToString("G", CultureInfo.InvariantCulture)}]"); + await Assert.That(JsonSerializer.Serialize(new object[] { Octo.MaxValue, Octo.MinValue })).EqualTo($"[{Octo.MaxValue.ToString("G", CultureInfo.InvariantCulture)},{Octo.MinValue.ToString("G", CultureInfo.InvariantCulture)}]"); + } + [Test] + public async Task JsonReadTest() + { + await Assert.That(JsonSerializer.Deserialize(UInt256.MaxValue.ToString())).EqualTo(UInt256.MaxValue); + await Assert.That(JsonSerializer.Deserialize($"[{Int256.MaxValue},{Int256.MinValue}]")).IsEquivalentTo([Int256.MaxValue, Int256.MinValue]); + await Assert.That(JsonSerializer.Deserialize(UInt512.MaxValue.ToString())).EqualTo(UInt512.MaxValue); + await Assert.That(JsonSerializer.Deserialize($"[{Int512.MaxValue},{Int512.MinValue}]")).IsEquivalentTo([Int512.MaxValue, Int512.MinValue]); + await Assert.That(JsonSerializer.Deserialize(Quad.MaxValue.ToString("G", CultureInfo.InvariantCulture))).EqualTo(Quad.MaxValue); + await Assert.That(JsonSerializer.Deserialize(Octo.MaxValue.ToString("G", CultureInfo.InvariantCulture))).EqualTo(Octo.MaxValue); + } +} \ No newline at end of file From e96cff84ec175c02527073c346433949ecd63d4d Mon Sep 17 00:00:00 2001 From: crookseta Date: Tue, 4 Nov 2025 11:02:33 -0500 Subject: [PATCH 24/74] Updated TUnit. --- .../NumberBaseAssertionExtensions.cs | 47 +++++++++++++++++++ .../MissingValues.Tests.csproj | 2 +- 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 src/MissingValues.Tests/Extensions/NumberBaseAssertionExtensions.cs diff --git a/src/MissingValues.Tests/Extensions/NumberBaseAssertionExtensions.cs b/src/MissingValues.Tests/Extensions/NumberBaseAssertionExtensions.cs new file mode 100644 index 0000000..4db9fc3 --- /dev/null +++ b/src/MissingValues.Tests/Extensions/NumberBaseAssertionExtensions.cs @@ -0,0 +1,47 @@ +using System.ComponentModel; +using System.Globalization; +using System.Numerics; +using System.Runtime.CompilerServices; +using TUnit.Assertions.Attributes; +using TUnit.Assertions.Core; + +namespace MissingValues.Tests.Extensions; + +public static class NumberBaseAssertionExtensions +{ + [EditorBrowsable(EditorBrowsableState.Never)] + [GenerateAssertion(ExpectationMessage = "to be bitwise equivalent to {other}")] + public static bool IsBitwiseEquivalentTo(this T1 value, T2 other) + where T1 : struct, IFloatingPointIeee754 + where T2 : struct, IBinaryInteger + { + return Unsafe.SizeOf() == Unsafe.SizeOf() && Unsafe.BitCast(value) == other; + } + [EditorBrowsable(EditorBrowsableState.Never)] + [GenerateAssertion(ExpectationMessage = "to be approximately equal to {precision}")] + public static AssertionResult IsApproximately(this T value, T expected, T precision) + where T : IFloatingPointIeee754 + { + if (T.IsNaN(value)) + { + return AssertionResult.Failed($"Cannot determine approximation of a {typeof(T)} to NaN"); + } + if (T.IsNegative(precision)) + { + return AssertionResult.Failed($"Cannot determine precision of a {typeof(T)} if its negative"); + } + if (T.IsInfinity(value)) + { + return AssertionResult.Failed($"Cannot determine approximation of a {typeof(T)} to Infinity"); + } + + T actualDifference = T.Abs(expected - value); + + if (actualDifference <= precision) + { + return AssertionResult.Failed($"Expected {value} to approximate {expected} +/- {precision}, but {value} differed by {actualDifference}."); + } + + return AssertionResult.Passed; + } +} \ No newline at end of file diff --git a/src/MissingValues.Tests/MissingValues.Tests.csproj b/src/MissingValues.Tests/MissingValues.Tests.csproj index 6c9dcb4..fe3499c 100644 --- a/src/MissingValues.Tests/MissingValues.Tests.csproj +++ b/src/MissingValues.Tests/MissingValues.Tests.csproj @@ -8,7 +8,7 @@ - + From c41442244c733aa72e59e1164b88aaab118faea3 Mon Sep 17 00:00:00 2001 From: crookseta Date: Tue, 11 Nov 2025 19:41:01 -0500 Subject: [PATCH 25/74] Added UInt512 Sign tests. --- src/MissingValues.Tests/Data/UInt512DataSources.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/MissingValues.Tests/Data/UInt512DataSources.cs b/src/MissingValues.Tests/Data/UInt512DataSources.cs index 2743419..9ac2070 100644 --- a/src/MissingValues.Tests/Data/UInt512DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt512DataSources.cs @@ -792,7 +792,8 @@ public class UInt512DataSources public static IEnumerable> SignTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.MaxValue, 1); + yield return () => (UInt512.Zero, 0); } public static IEnumerable> IsPow2TestData() From 860a885ac731240485da263147b145983fc472cc Mon Sep 17 00:00:00 2001 From: crookseta Date: Mon, 24 Nov 2025 20:33:17 -0500 Subject: [PATCH 26/74] Remove old test project. --- .../Core/Int256Test.GenericMath.cs | 1278 -------------- .../Core/Int256Test.cs | 251 --- .../Core/Int512Test.GenericMath.cs | 1191 ------------- .../Core/Int512Test.cs | 294 ---- .../Core/NumberFormatTest.cs | 104 -- .../Core/OctoTest.GenericMath.cs | 921 ----------- .../Core/OctoTest.TheoryData.cs | 780 --------- src/MissingValues.Tests.Old/Core/OctoTest.cs | 355 ---- .../Core/QuadTest.GenericMath.cs | 1466 ----------------- .../Core/QuadTest.TheoryData.cs | 798 --------- src/MissingValues.Tests.Old/Core/QuadTest.cs | 466 ------ .../Core/UInt256Test.GenericMath.cs | 1180 ------------- .../Core/UInt256Test.cs | 236 --- .../Core/UInt512Test.GenericMath.cs | 1172 ------------- .../Core/UInt512Test.cs | 259 --- .../Helpers/BinaryIntegerHelper.cs | 75 - .../Helpers/BinaryNumberHelper.cs | 20 - .../Helpers/FloatingPoint.cs | 52 - .../Helpers/FloatingPointIeee754.cs | 29 - .../Helpers/FluentAssertionsExtensions.cs | 247 --- .../Helpers/GenericFloatingPointFunctions.cs | 51 - .../Helpers/GenericMathOperatorsHelper.cs | 198 --- .../Helpers/MathConstantsHelper.cs | 73 - .../Helpers/NumberBaseHelper.cs | 58 - .../Helpers/NumberHelper.cs | 28 - .../Helpers/TheoryDataTypes.cs | 145 -- src/MissingValues.Tests.Old/Helpers/Values.cs | 42 - .../MissingValues.Tests.Old.csproj | 30 - src/MissingValues.Tests.Old/Usings.cs | 4 - 29 files changed, 11803 deletions(-) delete mode 100644 src/MissingValues.Tests.Old/Core/Int256Test.GenericMath.cs delete mode 100644 src/MissingValues.Tests.Old/Core/Int256Test.cs delete mode 100644 src/MissingValues.Tests.Old/Core/Int512Test.GenericMath.cs delete mode 100644 src/MissingValues.Tests.Old/Core/Int512Test.cs delete mode 100644 src/MissingValues.Tests.Old/Core/NumberFormatTest.cs delete mode 100644 src/MissingValues.Tests.Old/Core/OctoTest.GenericMath.cs delete mode 100644 src/MissingValues.Tests.Old/Core/OctoTest.TheoryData.cs delete mode 100644 src/MissingValues.Tests.Old/Core/OctoTest.cs delete mode 100644 src/MissingValues.Tests.Old/Core/QuadTest.GenericMath.cs delete mode 100644 src/MissingValues.Tests.Old/Core/QuadTest.TheoryData.cs delete mode 100644 src/MissingValues.Tests.Old/Core/QuadTest.cs delete mode 100644 src/MissingValues.Tests.Old/Core/UInt256Test.GenericMath.cs delete mode 100644 src/MissingValues.Tests.Old/Core/UInt256Test.cs delete mode 100644 src/MissingValues.Tests.Old/Core/UInt512Test.GenericMath.cs delete mode 100644 src/MissingValues.Tests.Old/Core/UInt512Test.cs delete mode 100644 src/MissingValues.Tests.Old/Helpers/BinaryIntegerHelper.cs delete mode 100644 src/MissingValues.Tests.Old/Helpers/BinaryNumberHelper.cs delete mode 100644 src/MissingValues.Tests.Old/Helpers/FloatingPoint.cs delete mode 100644 src/MissingValues.Tests.Old/Helpers/FloatingPointIeee754.cs delete mode 100644 src/MissingValues.Tests.Old/Helpers/FluentAssertionsExtensions.cs delete mode 100644 src/MissingValues.Tests.Old/Helpers/GenericFloatingPointFunctions.cs delete mode 100644 src/MissingValues.Tests.Old/Helpers/GenericMathOperatorsHelper.cs delete mode 100644 src/MissingValues.Tests.Old/Helpers/MathConstantsHelper.cs delete mode 100644 src/MissingValues.Tests.Old/Helpers/NumberBaseHelper.cs delete mode 100644 src/MissingValues.Tests.Old/Helpers/NumberHelper.cs delete mode 100644 src/MissingValues.Tests.Old/Helpers/TheoryDataTypes.cs delete mode 100644 src/MissingValues.Tests.Old/Helpers/Values.cs delete mode 100644 src/MissingValues.Tests.Old/MissingValues.Tests.Old.csproj delete mode 100644 src/MissingValues.Tests.Old/Usings.cs diff --git a/src/MissingValues.Tests.Old/Core/Int256Test.GenericMath.cs b/src/MissingValues.Tests.Old/Core/Int256Test.GenericMath.cs deleted file mode 100644 index a9d8505..0000000 --- a/src/MissingValues.Tests.Old/Core/Int256Test.GenericMath.cs +++ /dev/null @@ -1,1278 +0,0 @@ -using FluentAssertions; -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; - -using Int = MissingValues.Int256; - -namespace MissingValues.Tests.Core -{ - public partial class Int256Test - { - #region Readonly Variables - private const double Int256MaxValueAsDouble = 57896044618658097711785492504343953926634992332820282019728792003956564819967.0; - private const double Int256MinValueAsDouble = -57896044618658097711785492504343953926634992332820282019728792003956564819968.0d; - - private static readonly Int SByteMaxValue = new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_007F)); - private static readonly Int SByteMinValue = new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF80)); - - private static readonly Int ByteMaxValue = new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_00FF)); - - private static readonly Int Int16MaxValue = new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_7FFF)); - private static readonly Int Int16MinValue = new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_8000)); - - private static readonly Int UInt16MaxValue = new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_FFFF)); - - private static readonly Int Int32MaxValue = new(new(0x0000_0000_0000_0000, 0x0000_0000_7FFF_FFFF)); - private static readonly Int Int32MinValue = new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_8000_0000)); - - private static readonly Int UInt32MaxValue = new(new(0x0000_0000_0000_0000, 0x0000_0000_FFFF_FFFF)); - - private static readonly Int Int64MaxValue = new(new(0x0000_0000_0000_0000, 0x7FFF_FFFF_FFFF_FFFF)); - private static readonly Int Int64MinValue = new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000)); - - private static readonly Int UInt64MaxValue = new(new(0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF)); - - private static readonly Int Int128MaxValue = new(new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); - private static readonly Int Int128MinValue = new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0x8000_0000_0000_0000, 0x0000_0000_0000_0000)); - - private static readonly Int UInt128MaxValue = new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); - - private static readonly Int NegativeOne = Int.NegativeOne; - private static readonly Int NegativeTwo = new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE)); - private static readonly Int Zero = Int.Zero; - private static readonly Int One = Int.One; - private static readonly Int Two = new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0002)); - private static readonly Int MaxValue = Int.MaxValue; - private static readonly Int MaxValueMinusOne = new(new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE)); - private static readonly Int MinValue = Int.MinValue; - private static readonly Int MinValuePlusOne = new(new(0x8000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0001)); - #endregion - - #region Generic Math Operators - [Fact] - public static void op_AdditionTest() - { - Assert.Equal(One, MathOperatorsHelper.AdditionOperation(Zero, 1)); - Assert.Equal(Two, MathOperatorsHelper.AdditionOperation(One, 1)); - Assert.Equal(MinValue, MathOperatorsHelper.AdditionOperation(MaxValue, 1)); - Assert.Equal(MinValuePlusOne, MathOperatorsHelper.AdditionOperation(MinValue, 1)); - Assert.Equal(Zero, MathOperatorsHelper.AdditionOperation(NegativeOne, 1)); - } - [Fact] - public static void op_CheckedAdditionTest() - { - Assert.Equal(One, MathOperatorsHelper.CheckedAdditionOperation(Zero, 1)); - Assert.Equal(Two, MathOperatorsHelper.CheckedAdditionOperation(Int.One, 1)); - Assert.Equal(MinValuePlusOne, MathOperatorsHelper.CheckedAdditionOperation(MinValue, 1)); - Assert.Equal(Zero, MathOperatorsHelper.CheckedAdditionOperation(NegativeOne, 1)); - - Assert.Throws(() => MathOperatorsHelper.CheckedAdditionOperation(MaxValue, 1)); - } - [Fact] - public static void op_IncrementTest() - { - MathOperatorsHelper.IncrementOperation(Zero).Should().Be(One); - MathOperatorsHelper.IncrementOperation(One).Should().Be(Two); - MathOperatorsHelper.IncrementOperation(MinValue).Should().Be(MinValuePlusOne); - MathOperatorsHelper.IncrementOperation(MaxValueMinusOne).Should().Be(MaxValue); - MathOperatorsHelper.IncrementOperation(MaxValue).Should().Be(MinValue); - } - [Fact] - public static void op_CheckedIncrementTest() - { - MathOperatorsHelper.CheckedIncrementOperation(Zero).Should().Be(One); - MathOperatorsHelper.CheckedIncrementOperation(One).Should().Be(Two); - MathOperatorsHelper.CheckedIncrementOperation(MinValue).Should().Be(MinValuePlusOne); - MathOperatorsHelper.CheckedIncrementOperation(MaxValueMinusOne).Should().Be(MaxValue); - - Assert.Throws(() => MathOperatorsHelper.CheckedIncrementOperation(MaxValue)); - } - [Fact] - public static void op_SubtractionTest() - { - Assert.Equal(NegativeOne, MathOperatorsHelper.SubtractionOperation(Zero, 1)); - Assert.Equal(One, MathOperatorsHelper.SubtractionOperation(Two, 1)); - Assert.Equal(MaxValue, MathOperatorsHelper.SubtractionOperation(MinValue, 1)); - Assert.Equal(MaxValueMinusOne, MathOperatorsHelper.SubtractionOperation(MaxValue, 1)); - Assert.Equal(NegativeTwo, MathOperatorsHelper.SubtractionOperation(NegativeOne, 1)); - } - [Fact] - public static void op_CheckedSubtractionTest() - { - Assert.Equal(NegativeOne, MathOperatorsHelper.CheckedSubtractionOperation(Zero, 1)); - Assert.Equal(One, MathOperatorsHelper.CheckedSubtractionOperation(Two, 1)); - Assert.Equal(MaxValueMinusOne, MathOperatorsHelper.CheckedSubtractionOperation(MaxValue, 1)); - Assert.Equal(NegativeTwo, MathOperatorsHelper.CheckedSubtractionOperation(NegativeOne, 1)); - - Assert.Throws(() => MathOperatorsHelper.CheckedSubtractionOperation(MinValue, 1)); - } - [Fact] - public static void op_DecrementTest() - { - MathOperatorsHelper.DecrementOperation(Two).Should().Be(One); - MathOperatorsHelper.DecrementOperation(One).Should().Be(Zero); - MathOperatorsHelper.DecrementOperation(MinValuePlusOne).Should().Be(MinValue); - MathOperatorsHelper.DecrementOperation(MaxValue).Should().Be(MaxValueMinusOne); - MathOperatorsHelper.DecrementOperation(MinValue).Should().Be(MaxValue); - } - [Fact] - public static void op_CheckedDecrementTest() - { - MathOperatorsHelper.CheckedDecrementOperation(Two).Should().Be(One); - MathOperatorsHelper.CheckedDecrementOperation(One).Should().Be(Zero); - MathOperatorsHelper.CheckedDecrementOperation(MinValuePlusOne).Should().Be(MinValue); - MathOperatorsHelper.CheckedDecrementOperation(MaxValue).Should().Be(MaxValueMinusOne); - - Assert.Throws(() => MathOperatorsHelper.CheckedDecrementOperation(MinValue)); - } - [Fact] - public static void op_MultiplyTest() - { - Assert.Equal(One, MathOperatorsHelper.MultiplicationOperation(One, One)); - Assert.Equal(Two, MathOperatorsHelper.MultiplicationOperation(Two, One)); - Assert.Equal(NegativeTwo, MathOperatorsHelper.MultiplicationOperation(Two, NegativeOne)); - Assert.Equal(MinValuePlusOne, MathOperatorsHelper.MultiplicationOperation(MaxValue, NegativeOne)); - Assert.Equal(MinValue, MathOperatorsHelper.MultiplicationOperation(MinValue, NegativeOne)); - } - [Fact] - public static void op_CheckedMultiplyTest() - { - Assert.Equal(One, MathOperatorsHelper.CheckedMultiplicationOperation(One, One)); - Assert.Equal(Two, MathOperatorsHelper.CheckedMultiplicationOperation(Two, One)); - Assert.Equal(NegativeTwo, MathOperatorsHelper.CheckedMultiplicationOperation(Two, NegativeOne)); - Assert.Equal(MinValuePlusOne, MathOperatorsHelper.CheckedMultiplicationOperation(MaxValue, NegativeOne)); - - Assert.Throws(() => MathOperatorsHelper.CheckedMultiplicationOperation(MinValue, NegativeOne)); - } - [Fact] - public static void op_DivisionTest() - { - Assert.Equal(new Int(new(0x3FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), MathOperatorsHelper.DivisionOperation(MaxValue, Two)); - Assert.Equal(new Int(new(0xC000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0001)), MathOperatorsHelper.DivisionOperation(MaxValueMinusOne, NegativeTwo)); - Assert.Equal(One, MathOperatorsHelper.DivisionOperation(MaxValue, MaxValue)); - Assert.Equal(NegativeOne, MathOperatorsHelper.DivisionOperation(MaxValue, MinValuePlusOne)); - - Assert.Throws(() => MathOperatorsHelper.DivisionOperation(MinValue, NegativeOne)); - } - [Fact] - public static void op_CheckedDivisionTest() - { - Assert.Equal(new Int(new(0x3FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), MathOperatorsHelper.CheckedDivisionOperation(MaxValue, Two)); - Assert.Equal(new Int(new(0xC000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0001)), MathOperatorsHelper.CheckedDivisionOperation(MaxValueMinusOne, NegativeTwo)); - Assert.Equal(One, MathOperatorsHelper.CheckedDivisionOperation(MaxValue, MaxValue)); - Assert.Equal(NegativeOne, MathOperatorsHelper.CheckedDivisionOperation(MaxValue, MinValuePlusOne)); - - Assert.Throws(() => MathOperatorsHelper.CheckedDivisionOperation(MinValue, NegativeOne)); - } - [Fact] - public static void op_ModulusTest() - { - MathOperatorsHelper.ModulusOperation(Two, Two).Should().Be(Zero); - MathOperatorsHelper.ModulusOperation(One, Two).Should().NotBe(Zero); - MathOperatorsHelper.ModulusOperation(MaxValue, new(10U)).Should().Be(7); - MathOperatorsHelper.ModulusOperation(MinValue, new(10U)).Should().Be(-8); - - Assert.Throws(() => MathOperatorsHelper.ModulusOperation(One, Zero)); - } - - [Fact] - public static void op_BitwiseAndTest() - { - BitwiseOperatorsHelper.BitwiseAndOperation(Zero, 1U).Should().Be(Zero); - BitwiseOperatorsHelper.BitwiseAndOperation(One, 1U).Should().Be(One); - BitwiseOperatorsHelper.BitwiseAndOperation(MaxValue, 1U).Should().Be(One); - BitwiseOperatorsHelper.BitwiseAndOperation(MinValue, 1U).Should().Be(Zero); - BitwiseOperatorsHelper.BitwiseAndOperation(NegativeOne, 1U).Should().Be(One); - } - [Fact] - public static void op_BitwiseOrTest() - { - BitwiseOperatorsHelper.BitwiseOrOperation(Zero, 1U) - .Should().Be(One); - BitwiseOperatorsHelper.BitwiseOrOperation(One, 1U) - .Should().Be(One); - BitwiseOperatorsHelper.BitwiseOrOperation(MaxValue, 1U) - .Should().Be(MaxValue); - BitwiseOperatorsHelper.BitwiseOrOperation(MinValue, 1U) - .Should().Be(new(new(0x8000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0001))); - BitwiseOperatorsHelper.BitwiseOrOperation(NegativeOne, 1U) - .Should().Be(new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF))); - } - [Fact] - public static void op_ExclusiveOrTest() - { - BitwiseOperatorsHelper.ExclusiveOrOperation(Zero, 1U) - .Should().Be(One); - BitwiseOperatorsHelper.ExclusiveOrOperation(One, 1U) - .Should().Be(Zero); - BitwiseOperatorsHelper.ExclusiveOrOperation(MaxValue, 1U) - .Should().Be(new(new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE))); - BitwiseOperatorsHelper.ExclusiveOrOperation(MinValue, 1U) - .Should().Be(new(new(0x8000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0001))); - BitwiseOperatorsHelper.ExclusiveOrOperation(NegativeOne, 1U) - .Should().Be(new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE))); - } - [Fact] - public static void op_OnesComplementTest() - { - BitwiseOperatorsHelper.OnesComplementOperation(Zero) - .Should().Be(new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF))); - BitwiseOperatorsHelper.OnesComplementOperation(One) - .Should().Be(new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE))); - BitwiseOperatorsHelper.OnesComplementOperation(MaxValue) - .Should().Be(new(new(0x8000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000))); - BitwiseOperatorsHelper.OnesComplementOperation(MinValue) - .Should().Be(new(new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF))); - BitwiseOperatorsHelper.OnesComplementOperation(NegativeOne) - .Should().Be(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000))); - } - - [Fact] - public static void op_LeftShiftTest() - { - ShiftOperatorsHelper.LeftShiftOperation(One, 1) - .Should().Be(Two); - ShiftOperatorsHelper.LeftShiftOperation(MaxValue, 1) - .Should().Be(NegativeTwo); - ShiftOperatorsHelper.LeftShiftOperation(MinValue, 1) - .Should().Be(Zero); - ShiftOperatorsHelper.LeftShiftOperation(NegativeOne, 1) - .Should().Be(NegativeTwo); - } - [Fact] - public static void op_RightShiftTest() - { - ShiftOperatorsHelper.RightShiftOperation(Zero, 1) - .Should().Be(Zero); - ShiftOperatorsHelper.RightShiftOperation(One, 1) - .Should().Be(Zero); - ShiftOperatorsHelper.RightShiftOperation(MaxValue, 1) - .Should().Be(new(new(0x3FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF))); - ShiftOperatorsHelper.RightShiftOperation(MinValue, 1) - .Should().Be(new(new(0xC000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000))); - ShiftOperatorsHelper.RightShiftOperation(NegativeOne, 1) - .Should().Be(NegativeOne); - - var actual = new Int(0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - - ShiftOperatorsHelper.RightShiftOperation(actual, 64 * 1) - .Should().Be(new(0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); - ShiftOperatorsHelper.RightShiftOperation(actual, 64 * 2) - .Should().Be(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000, 0x0000_0000_0000_0000)); - ShiftOperatorsHelper.RightShiftOperation(actual, 64 * 3) - .Should().Be(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000)); - } - [Fact] - public static void op_UnsignedRightShiftTest() - { - ShiftOperatorsHelper.UnsignedRightShiftOperation(Zero, 1) - .Should().Be(Zero); - ShiftOperatorsHelper.UnsignedRightShiftOperation(One, 1) - .Should().Be(Zero); - ShiftOperatorsHelper.UnsignedRightShiftOperation(MaxValue, 1) - .Should().Be(new(new(0x3FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF))); - ShiftOperatorsHelper.UnsignedRightShiftOperation(MinValue, 1) - .Should().Be(new(new(0x4000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000))); - ShiftOperatorsHelper.UnsignedRightShiftOperation(NegativeOne, 1) - .Should().Be(MaxValue); - } - - [Fact] - public static void op_EqualityTest() - { - EqualityOperatorsHelper.EqualityOperation(Zero, 1U).Should().BeFalse(); - EqualityOperatorsHelper.EqualityOperation(One, 1U).Should().BeTrue(); - EqualityOperatorsHelper.EqualityOperation(MaxValue, 1U).Should().BeFalse(); - EqualityOperatorsHelper.EqualityOperation(MinValue, 1U).Should().BeFalse(); - EqualityOperatorsHelper.EqualityOperation(NegativeOne, 1U).Should().BeFalse(); - } - [Fact] - public static void op_InequalityTest() - { - EqualityOperatorsHelper.InequalityOperation(Zero, 1U).Should().BeTrue(); - EqualityOperatorsHelper.InequalityOperation(One, 1U).Should().BeFalse(); - EqualityOperatorsHelper.InequalityOperation(MaxValue, 1U).Should().BeTrue(); - EqualityOperatorsHelper.InequalityOperation(MinValue, 1U).Should().BeTrue(); - EqualityOperatorsHelper.InequalityOperation(NegativeOne, 1U).Should().BeTrue(); - } - - [Fact] - public static void op_GreaterThanTest() - { - ComparisonOperatorsHelper.GreaterThanOperation(Zero, 1U).Should().BeFalse(); - ComparisonOperatorsHelper.GreaterThanOperation(One, 1U).Should().BeFalse(); - ComparisonOperatorsHelper.GreaterThanOperation(MaxValue, 1U).Should().BeTrue(); - ComparisonOperatorsHelper.GreaterThanOperation(MinValue, 1U).Should().BeFalse(); - ComparisonOperatorsHelper.GreaterThanOperation(NegativeOne, 1U).Should().BeFalse(); - } - [Fact] - public static void op_GreaterThanOrEqualTest() - { - ComparisonOperatorsHelper.GreaterThanOrEqualOperation(Zero, 1U).Should().BeFalse(); - ComparisonOperatorsHelper.GreaterThanOrEqualOperation(One, 1U).Should().BeTrue(); - ComparisonOperatorsHelper.GreaterThanOrEqualOperation(MaxValue, 1U).Should().BeTrue(); - ComparisonOperatorsHelper.GreaterThanOrEqualOperation(MinValue, 1U).Should().BeFalse(); - ComparisonOperatorsHelper.GreaterThanOrEqualOperation(NegativeOne, 1U).Should().BeFalse(); - } - [Fact] - public static void op_LessThanTest() - { - ComparisonOperatorsHelper.LessThanOperation(Zero, 1U).Should().BeTrue(); - ComparisonOperatorsHelper.LessThanOperation(One, 1U).Should().BeFalse(); - ComparisonOperatorsHelper.LessThanOperation(MaxValue, 1U).Should().BeFalse(); - ComparisonOperatorsHelper.LessThanOperation(MinValue, 1U).Should().BeTrue(); - ComparisonOperatorsHelper.LessThanOperation(NegativeOne, 1U).Should().BeTrue(); - } - [Fact] - public static void op_LessThanOrEqualTest() - { - ComparisonOperatorsHelper.LessThanOrEqualOperation(Zero, 1U).Should().BeTrue(); - ComparisonOperatorsHelper.LessThanOrEqualOperation(One, 1U).Should().BeTrue(); - ComparisonOperatorsHelper.LessThanOrEqualOperation(MaxValue, 1U).Should().BeFalse(); - ComparisonOperatorsHelper.LessThanOrEqualOperation(MinValue, 1U).Should().BeTrue(); - ComparisonOperatorsHelper.LessThanOrEqualOperation(NegativeOne, 1U).Should().BeTrue(); - } - #endregion - - #region Identities - [Fact] - public static void AdditiveIdentityTest() - { - Assert.Equal(Zero, MathConstantsHelper.AdditiveIdentityHelper()); - } - - [Fact] - public static void MultiplicativeIdentityTest() - { - Assert.Equal(One, MathConstantsHelper.MultiplicativeIdentityHelper()); - } - #endregion - - #region IBinaryInteger - [Fact] - public static void DivRemTest() - { - Assert.Equal((Zero, Zero), BinaryIntegerHelper.DivRem(Zero, Two)); - Assert.Equal((Zero, One), BinaryIntegerHelper.DivRem(One, Two)); - Assert.Equal((new Int(new(0x3FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), One), BinaryIntegerHelper.DivRem(MaxValue, 2)); - Assert.Equal((new Int(new(0xC000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), Zero), BinaryIntegerHelper.DivRem(MinValue, 2)); - Assert.Equal((Zero, NegativeOne), BinaryIntegerHelper.DivRem(NegativeOne, 2)); - } - - [Fact] - public static void LeadingZeroCountTest() - { - Assert.Equal(256, BinaryIntegerHelper.LeadingZeroCount(Zero)); - Assert.Equal(255, BinaryIntegerHelper.LeadingZeroCount(One)); - Assert.Equal(1, BinaryIntegerHelper.LeadingZeroCount(MaxValue)); - Assert.Equal(0, BinaryIntegerHelper.LeadingZeroCount(MinValue)); - Assert.Equal(0, BinaryIntegerHelper.LeadingZeroCount(NegativeOne)); - } - - [Fact] - public static void PopCountTest() - { - Assert.Equal(0, BinaryIntegerHelper.PopCount(Zero)); - Assert.Equal(1, BinaryIntegerHelper.PopCount(One)); - Assert.Equal(255, BinaryIntegerHelper.PopCount(MaxValue)); - Assert.Equal(1, BinaryIntegerHelper.PopCount(MinValue)); - Assert.Equal(256, BinaryIntegerHelper.PopCount(NegativeOne)); - } - - [Fact] - public static void RotateLeftTest() - { - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), BinaryIntegerHelper.RotateLeft(Zero, 1)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0002)), BinaryIntegerHelper.RotateLeft(One, 1)); - Assert.Equal(new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE)), BinaryIntegerHelper.RotateLeft(MaxValue, 1)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0001)), BinaryIntegerHelper.RotateLeft(MinValue, 1)); - Assert.Equal(new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), BinaryIntegerHelper.RotateLeft(NegativeOne, 1)); - } - - [Fact] - public static void RotateRightTest() - { - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), BinaryIntegerHelper.RotateRight(Zero, 1)); - Assert.Equal(new(new(0x8000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), BinaryIntegerHelper.RotateRight(One, 1)); - Assert.Equal(new(new(0xBFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), BinaryIntegerHelper.RotateRight(MaxValue, 1)); - Assert.Equal(new(new(0x4000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), BinaryIntegerHelper.RotateRight(MinValue, 1)); - Assert.Equal(new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), BinaryIntegerHelper.RotateRight(NegativeOne, 1)); - } - - [Fact] - public static void TrailingZeroCountTest() - { - Assert.Equal(256, BinaryIntegerHelper.TrailingZeroCount(Zero)); - Assert.Equal(0, BinaryIntegerHelper.TrailingZeroCount(One)); - Assert.Equal(0, BinaryIntegerHelper.TrailingZeroCount(MaxValue)); - Assert.Equal(255, BinaryIntegerHelper.TrailingZeroCount(MinValue)); - Assert.Equal(0, BinaryIntegerHelper.TrailingZeroCount(NegativeOne)); - } - - [Fact] - public static void TryReadBigEndianInt128Test() - { - Int result; - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new Int128(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), result); - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, isUnsigned: false, out result)); - Assert.Equal(new Int128(0x0000_0000_0000_0000, 0x0000_0000_0000_0001), result); - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 }, isUnsigned: false, out result)); - Assert.Equal(new Int128(0x0000_0000_0000_0000, 0x0000_0000_0000_0080), result); - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new Int128(0x0100_0000_0000_0000, 0x0000_0000_0000_0000), result); - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: false, out result)); - Assert.Equal(new Int128(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), result); - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new Int128(0x8000_0000_0000_0000, 0x0000_0000_0000_0000), result); - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F }, isUnsigned: false, out result)); - Assert.Equal(new Int128(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF7F), result); - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: false, out result)); - Assert.Equal(new Int128(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), result); - } - - [Fact] - public static void TryReadBigEndianUInt128Test() - { - Int result; - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0001)), result); - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0080)), result); - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0100_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), result); - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x8000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F }, isUnsigned: true, out result)); - Assert.Equal(new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF7F)), result); - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: true, out result)); - Assert.Equal(new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), result); - } - - [Fact] - public static void TryReadLittleEndianInt128Test() - { - Int result; - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0100_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0x8000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0001)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: false, out result)); - Assert.Equal(new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF7F)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0080)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: false, out result)); - Assert.Equal(new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), result); - } - - [Fact] - public static void TryReadLittleEndianInt192Test() - { - Int result; - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0100_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0001)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: false, out result)); - Assert.Equal(new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF7F)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0080)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x7FFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: false, out result)); - Assert.Equal(new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), result); - } - - [Fact] - public static void TryReadLittleEndianInt256Test() - { - Int result; - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0100_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x8000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0001)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: false, out result)); - Assert.Equal(new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF7F)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0080)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: false, out result)); - Assert.Equal(new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), result); - } - - [Fact] - public static void TryReadLittleEndianUInt128Test() - { - Int result; - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0100_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x8000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0001)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: true, out result)); - Assert.Equal(new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF7F)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0080)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: true, out result)); - Assert.Equal(new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), result); - } - - [Fact] - public static void TryReadLittleEndianUInt192Test() - { - Int result; - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(new UInt128(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0100_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x8000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(new UInt128(0x0000_0000_0000_0000, 0x0000_0000_0000_0001)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF7F)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(new UInt128(0x0000_0000_0000_0000, 0x0000_0000_0000_0080)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x7FFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), result); - } - - [Fact] - public static void TryReadLittleEndianUInt256Test() - { - Int result; - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0100_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.False(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0001)), result); - - Assert.False(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0080)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), result); - - Assert.False(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - } - - [Fact] - public static void GetByteCountTest() - { - Assert.Equal(32, BinaryIntegerHelper.GetByteCount(Zero)); - Assert.Equal(32, BinaryIntegerHelper.GetByteCount(One)); - Assert.Equal(32, BinaryIntegerHelper.GetByteCount(MaxValue)); - Assert.Equal(32, BinaryIntegerHelper.GetByteCount(MinValue)); - Assert.Equal(32, BinaryIntegerHelper.GetByteCount(NegativeOne)); - } - - [Fact] - public static void GetShortestBitLengthTest() - { - Assert.Equal(0x00, BinaryIntegerHelper.GetShortestBitLength(Zero)); - Assert.Equal(0x01, BinaryIntegerHelper.GetShortestBitLength(One)); - Assert.Equal(0xFF, BinaryIntegerHelper.GetShortestBitLength(MaxValue)); - Assert.Equal(0x100, BinaryIntegerHelper.GetShortestBitLength(MinValue)); - Assert.Equal(0x01, BinaryIntegerHelper.GetShortestBitLength(NegativeOne)); - } - - [Fact] - public static void TryWriteBigEndianTest() - { - Span destination = stackalloc byte[32]; - int bytesWritten = 0; - - Assert.True(BinaryIntegerHelper.TryWriteBigEndian(Zero, destination, out bytesWritten)); - Assert.Equal(32, bytesWritten); - Assert.Equal(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, destination.ToArray()); - - Assert.True(BinaryIntegerHelper.TryWriteBigEndian(One, destination, out bytesWritten)); - Assert.Equal(32, bytesWritten); - Assert.Equal(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, destination.ToArray()); - - Assert.True(BinaryIntegerHelper.TryWriteBigEndian(MaxValue, destination, out bytesWritten)); - Assert.Equal(32, bytesWritten); - Assert.Equal(new byte[] { 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, destination.ToArray()); - - Assert.True(BinaryIntegerHelper.TryWriteBigEndian(MinValue, destination, out bytesWritten)); - Assert.Equal(32, bytesWritten); - Assert.Equal(new byte[] { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, destination.ToArray()); - - Assert.True(BinaryIntegerHelper.TryWriteBigEndian(NegativeOne, destination, out bytesWritten)); - Assert.Equal(32, bytesWritten); - Assert.Equal(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, destination.ToArray()); - - Assert.False(BinaryIntegerHelper.TryWriteBigEndian(default, Span.Empty, out bytesWritten)); - Assert.Equal(0, bytesWritten); - Assert.Equal(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, destination.ToArray()); - } - - [Fact] - public static void TryWriteLittleEndianTest() - { - Span destination = stackalloc byte[32]; - int bytesWritten = 0; - - Assert.True(BinaryIntegerHelper.TryWriteLittleEndian(Zero, destination, out bytesWritten)); - Assert.Equal(32, bytesWritten); - Assert.Equal(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, destination.ToArray()); - - Assert.True(BinaryIntegerHelper.TryWriteLittleEndian(One, destination, out bytesWritten)); - Assert.Equal(32, bytesWritten); - Assert.Equal(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, destination.ToArray()); - - Assert.True(BinaryIntegerHelper.TryWriteLittleEndian(MaxValue, destination, out bytesWritten)); - Assert.Equal(32, bytesWritten); - Assert.Equal(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F }, destination.ToArray()); - - Assert.True(BinaryIntegerHelper.TryWriteLittleEndian(MinValue, destination, out bytesWritten)); - Assert.Equal(32, bytesWritten); - Assert.Equal(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 }, destination.ToArray()); - - Assert.True(BinaryIntegerHelper.TryWriteLittleEndian(NegativeOne, destination, out bytesWritten)); - Assert.Equal(32, bytesWritten); - Assert.Equal(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, destination.ToArray()); - - Assert.False(BinaryIntegerHelper.TryWriteLittleEndian(default, Span.Empty, out bytesWritten)); - Assert.Equal(0, bytesWritten); - Assert.Equal(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, destination.ToArray()); - } - #endregion - - #region IBinaryNumber - [Fact] - public static void AllBitsSetTest() - { - Assert.Equal(BinaryNumberHelper.AllBitsSet, ~Zero); - } - [Fact] - public static void IsPow2Test() - { - Assert.True(BinaryNumberHelper.IsPow2(new(0x100))); - Assert.True(BinaryNumberHelper.IsPow2(new(0x1_0000))); - Assert.True(BinaryNumberHelper.IsPow2(new(0x1_0000_0000))); - Assert.True(BinaryNumberHelper.IsPow2(new(new(0x1, 0x0000_0000_0000_0000)))); - Assert.True(BinaryNumberHelper.IsPow2(new(0x1, new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)))); - } - [Fact] - public static void Log2Test() - { - Assert.Equal(8, BinaryNumberHelper.Log2(new(0x100))); - Assert.Equal(16, BinaryNumberHelper.Log2(new(0x1_0000))); - Assert.Equal(32, BinaryNumberHelper.Log2(new(0x1_0000_0000))); - Assert.Equal(64, BinaryNumberHelper.Log2(new(new(0x1, 0x0000_0000_0000_0000)))); - Assert.Equal(128, BinaryNumberHelper.Log2(new(0x1, new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)))); - } - #endregion - - #region IMinMaxValue - [Fact] - public static void MaxValueTest() - { - MaxValue.Should().Be(MathConstantsHelper.MaxValue()); - } - - [Fact] - public static void MinValueTest() - { - MinValue.Should().Be(MathConstantsHelper.MinValue()); - } - #endregion - - #region INumber - [Fact] - public static void ClampTest() - { - NumberHelper.Clamp(MaxValueMinusOne, Int128MaxValue, MaxValue).Should().Be(MaxValueMinusOne); - NumberHelper.Clamp(MinValue, 0, MaxValue).Should().Be(0); - NumberHelper.Clamp(MaxValue, MinValue, 0).Should().Be(0); - - Assert.Throws(() => NumberHelper.Clamp(MinValue, MaxValue, 0)); - } - [Fact] - public static void CopySignTest() - { - NumberHelper.CopySign(MaxValue, NegativeOne).Should().Be(MinValuePlusOne); - NumberHelper.CopySign(MaxValue, One).Should().Be(MaxValue); - NumberHelper.CopySign(NegativeTwo, One).Should().Be(Two); - } - [Fact] - public static void MaxTest() - { - NumberHelper.Max(MaxValue, MinValue).Should().Be(MaxValue); - NumberHelper.Max(One, NegativeTwo).Should().Be(One); - NumberHelper.Max(Two, NegativeOne).Should().Be(Two); - NumberHelper.Max(NegativeOne, NegativeTwo).Should().Be(NegativeOne); - } - [Fact] - public static void MaxNumberTest() - { - NumberHelper.MaxNumber(MaxValue, MinValue).Should().Be(MaxValue); - NumberHelper.MaxNumber(One, NegativeTwo).Should().Be(One); - NumberHelper.MaxNumber(Two, NegativeOne).Should().Be(Two); - NumberHelper.MaxNumber(NegativeOne, NegativeTwo).Should().Be(NegativeOne); - } - [Fact] - public static void MinTest() - { - NumberHelper.Min(MaxValue, MinValue).Should().Be(MinValue); - NumberHelper.Min(One, NegativeTwo).Should().Be(NegativeTwo); - NumberHelper.Min(Two, NegativeOne).Should().Be(NegativeOne); - NumberHelper.Min(NegativeOne, NegativeTwo).Should().Be(NegativeTwo); - } - [Fact] - public static void MinNumberTest() - { - NumberHelper.MinNumber(MaxValue, MinValue).Should().Be(MinValue); - NumberHelper.MinNumber(One, NegativeTwo).Should().Be(NegativeTwo); - NumberHelper.MinNumber(Two, NegativeOne).Should().Be(NegativeOne); - NumberHelper.MinNumber(NegativeOne, NegativeTwo).Should().Be(NegativeTwo); - } - [Fact] - public static void SignTest() - { - NumberHelper.Sign(MinValue).Should().Be(-1); - NumberHelper.Sign(MaxValue).Should().Be(1); - NumberHelper.Sign(Int.Zero).Should().Be(0); - } - #endregion - - #region INumberBase - [Fact] - public static void AbsTest() - { - NumberBaseHelper.Abs(MinValuePlusOne).Should().Be(MaxValue); - NumberBaseHelper.Abs(NegativeTwo).Should().Be(Two); - NumberBaseHelper.Abs(NegativeOne).Should().Be(One); - NumberBaseHelper.Abs(One).Should().Be(One); - - Assert.Throws(() => NumberBaseHelper.Abs(MinValue)); - } - [Fact] - public static void CreateCheckedToInt256Test() - { - NumberBaseHelper.CreateChecked(byte.MaxValue).Should().Be(ByteMaxValue); - NumberBaseHelper.CreateChecked(short.MaxValue).Should().Be(Int16MaxValue); - NumberBaseHelper.CreateChecked(int.MaxValue).Should().Be(Int32MaxValue); - NumberBaseHelper.CreateChecked(long.MaxValue).Should().Be(Int64MaxValue); - NumberBaseHelper.CreateChecked(Int128.MaxValue).Should().Be(Int128MaxValue); - NumberBaseHelper - .CreateChecked(BigInteger.Parse( - "57896044618658097711785492504343953926634992332820282019728792003956564819967")) - .Should().Be(MaxValue); - NumberBaseHelper.CreateChecked(Int256MaxValueAsDouble).Should().Be(MaxValue); - - NumberBaseHelper.CreateChecked(byte.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateChecked(short.MinValue).Should().Be(Int16MinValue); - NumberBaseHelper.CreateChecked(int.MinValue).Should().Be(Int32MinValue); - NumberBaseHelper.CreateChecked(long.MinValue).Should().Be(Int64MinValue); - NumberBaseHelper.CreateChecked(Int128.MinValue).Should().Be(Int128MinValue); - NumberBaseHelper - .CreateChecked(BigInteger.Parse( - "-57896044618658097711785492504343953926634992332820282019728792003956564819968")) - .Should().Be(MinValue); - NumberBaseHelper.CreateChecked(Int256MinValueAsDouble).Should().Be(MinValue); - } - [Fact] - public static void CreateSaturatingToInt256Test() - { - NumberBaseHelper.CreateSaturating(byte.MaxValue).Should().Be(ByteMaxValue); - NumberBaseHelper.CreateSaturating(short.MaxValue).Should().Be(Int16MaxValue); - NumberBaseHelper.CreateSaturating(int.MaxValue).Should().Be(Int32MaxValue); - NumberBaseHelper.CreateSaturating(long.MaxValue).Should().Be(Int64MaxValue); - NumberBaseHelper.CreateSaturating(Int128.MaxValue).Should().Be(Int128MaxValue); - NumberBaseHelper - .CreateSaturating(BigInteger.Parse( - "57896044618658097711785492504343953926634992332820282019728792003956564819967")) - .Should().Be(MaxValue); - NumberBaseHelper.CreateSaturating(Int256MaxValueAsDouble).Should().Be(MaxValue); - - NumberBaseHelper.CreateSaturating(byte.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateSaturating(short.MinValue).Should().Be(Int16MinValue); - NumberBaseHelper.CreateSaturating(int.MinValue).Should().Be(Int32MinValue); - NumberBaseHelper.CreateSaturating(long.MinValue).Should().Be(Int64MinValue); - NumberBaseHelper.CreateSaturating(Int128.MinValue).Should().Be(Int128MinValue); - NumberBaseHelper - .CreateSaturating(BigInteger.Parse( - "-57896044618658097711785492504343953926634992332820282019728792003956564819968")) - .Should().Be(MinValue); - NumberBaseHelper.CreateSaturating(Int256MinValueAsDouble).Should().Be(MinValue); - } - [Fact] - public static void CreateTruncatingToInt256Test() - { - NumberBaseHelper.CreateTruncating(sbyte.MaxValue).Should().Be(SByteMaxValue); - NumberBaseHelper.CreateTruncating(byte.MaxValue).Should().Be(ByteMaxValue); - NumberBaseHelper.CreateTruncating(short.MaxValue).Should().Be(Int16MaxValue); - NumberBaseHelper.CreateTruncating(ushort.MaxValue).Should().Be(UInt16MaxValue); - NumberBaseHelper.CreateTruncating(int.MaxValue).Should().Be(Int32MaxValue); - NumberBaseHelper.CreateTruncating(uint.MaxValue).Should().Be(UInt32MaxValue); - NumberBaseHelper.CreateTruncating(long.MaxValue).Should().Be(Int64MaxValue); - NumberBaseHelper.CreateTruncating(ulong.MaxValue).Should().Be(UInt64MaxValue); - NumberBaseHelper.CreateTruncating(Int128.MaxValue).Should().Be(Int128MaxValue); - NumberBaseHelper.CreateTruncating(UInt128.MaxValue).Should().Be(UInt128MaxValue); - NumberBaseHelper - .CreateTruncating(BigInteger.Parse( - "57896044618658097711785492504343953926634992332820282019728792003956564819967")) - .Should().Be(MaxValue); - NumberBaseHelper.CreateTruncating(Int256MaxValueAsDouble).Should().Be(MaxValue); - NumberBaseHelper.CreateTruncating(UInt256.MaxValue).Should().Be(NegativeOne); - - NumberBaseHelper.CreateTruncating(sbyte.MinValue).Should().Be(SByteMinValue); - NumberBaseHelper.CreateTruncating(byte.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateTruncating(short.MinValue).Should().Be(Int16MinValue); - NumberBaseHelper.CreateTruncating(ushort.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateTruncating(int.MinValue).Should().Be(Int32MinValue); - NumberBaseHelper.CreateTruncating(uint.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateTruncating(long.MinValue).Should().Be(Int64MinValue); - NumberBaseHelper.CreateTruncating(ulong.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateTruncating(Int128.MinValue).Should().Be(Int128MinValue); - NumberBaseHelper.CreateTruncating(UInt128.MinValue).Should().Be(Zero); - NumberBaseHelper - .CreateTruncating(BigInteger.Parse( - "-57896044618658097711785492504343953926634992332820282019728792003956564819968")) - .Should().Be(MinValue); - NumberBaseHelper.CreateTruncating(Int256MinValueAsDouble).Should().Be(MinValue); - NumberBaseHelper.CreateTruncating(UInt256.MinValue).Should().Be(Zero); - } - - [Fact] - public static void CreateCheckedFromInt256Test() - { - NumberBaseHelper.CreateChecked(ByteMaxValue).Should().Be(byte.MaxValue); - NumberBaseHelper.CreateChecked(Int16MaxValue).Should().Be(short.MaxValue); - NumberBaseHelper.CreateChecked(Int32MaxValue).Should().Be(int.MaxValue); - NumberBaseHelper.CreateChecked(Int64MaxValue).Should().Be(long.MaxValue); - NumberBaseHelper.CreateChecked(Int128MaxValue).Should().Be(Int128.MaxValue); - NumberBaseHelper.CreateChecked(MaxValue).Should() - .Be(BigInteger.Parse( - "57896044618658097711785492504343953926634992332820282019728792003956564819967")); - NumberBaseHelper.CreateChecked(MaxValue).Should().Be(Int256MaxValueAsDouble); - - NumberBaseHelper.CreateChecked(Zero).Should().Be(byte.MinValue); - NumberBaseHelper.CreateChecked(Int16MinValue).Should().Be(short.MinValue); - NumberBaseHelper.CreateChecked(Int32MinValue).Should().Be(int.MinValue); - NumberBaseHelper.CreateChecked(Int64MinValue).Should().Be(long.MinValue); - NumberBaseHelper.CreateChecked(Int128MinValue).Should().Be(Int128.MinValue); - NumberBaseHelper.CreateChecked(MinValue).Should() - .Be(BigInteger.Parse( - "-57896044618658097711785492504343953926634992332820282019728792003956564819968")); - NumberBaseHelper.CreateChecked(MinValue).Should().Be(Int256MinValueAsDouble); - } - [Fact] - public static void CreateSaturatingFromInt256Test() - { - NumberBaseHelper.CreateSaturating(ByteMaxValue).Should().Be(byte.MaxValue); - NumberBaseHelper.CreateSaturating(Int16MaxValue).Should().Be(short.MaxValue); - NumberBaseHelper.CreateSaturating(Int32MaxValue).Should().Be(int.MaxValue); - NumberBaseHelper.CreateSaturating(Int64MaxValue).Should().Be(long.MaxValue); - NumberBaseHelper.CreateSaturating(Int128MaxValue).Should().Be(Int128.MaxValue); - NumberBaseHelper.CreateSaturating(MaxValue).Should() - .Be(BigInteger.Parse( - "57896044618658097711785492504343953926634992332820282019728792003956564819967")); - NumberBaseHelper.CreateSaturating(MaxValue).Should().Be(Int256MaxValueAsDouble); - - NumberBaseHelper.CreateSaturating(Zero).Should().Be(byte.MinValue); - NumberBaseHelper.CreateSaturating(Int16MinValue).Should().Be(short.MinValue); - NumberBaseHelper.CreateSaturating(Int32MinValue).Should().Be(int.MinValue); - NumberBaseHelper.CreateSaturating(Int64MinValue).Should().Be(long.MinValue); - NumberBaseHelper.CreateSaturating(Int128MinValue).Should().Be(Int128.MinValue); - NumberBaseHelper.CreateSaturating(MinValue).Should() - .Be(BigInteger.Parse( - "-57896044618658097711785492504343953926634992332820282019728792003956564819968")); - NumberBaseHelper.CreateSaturating(MinValue).Should().Be(Int256MinValueAsDouble); - } - [Fact] - public static void CreateTruncatingFromInt256Test() - { - NumberBaseHelper.CreateTruncating(ByteMaxValue).Should().Be(byte.MaxValue); - NumberBaseHelper.CreateTruncating(Int16MaxValue).Should().Be(short.MaxValue); - NumberBaseHelper.CreateTruncating(Int32MaxValue).Should().Be(int.MaxValue); - NumberBaseHelper.CreateTruncating(Int64MaxValue).Should().Be(long.MaxValue); - NumberBaseHelper.CreateTruncating(Int128MaxValue).Should().Be(Int128.MaxValue); - NumberBaseHelper.CreateTruncating(MaxValue).Should() - .Be(BigInteger.Parse( - "57896044618658097711785492504343953926634992332820282019728792003956564819967")); - NumberBaseHelper.CreateTruncating(MaxValue).Should().Be(Int256MaxValueAsDouble); - - NumberBaseHelper.CreateTruncating(Zero).Should().Be(byte.MinValue); - NumberBaseHelper.CreateTruncating(Int16MinValue).Should().Be(short.MinValue); - NumberBaseHelper.CreateTruncating(Int32MinValue).Should().Be(int.MinValue); - NumberBaseHelper.CreateTruncating(Int64MinValue).Should().Be(long.MinValue); - NumberBaseHelper.CreateTruncating(Int128MinValue).Should().Be(Int128.MinValue); - NumberBaseHelper.CreateTruncating(MinValue).Should() - .Be(BigInteger.Parse( - "-57896044618658097711785492504343953926634992332820282019728792003956564819968")); - NumberBaseHelper.CreateTruncating(MinValue).Should().Be(Int256MinValueAsDouble); - } - - [Fact] - public static void IsCanonicalTest() - { - NumberBaseHelper.IsCanonical(default(Int)).Should().BeTrue(); - } - - [Fact] - public static void IsComplexNumberTest() - { - NumberBaseHelper.IsComplexNumber(default(Int)).Should().BeFalse(); - } - - [Fact] - public static void IsEvenIntegerTest() - { - NumberBaseHelper.IsEvenInteger(One).Should().BeFalse(); - NumberBaseHelper.IsEvenInteger(Two).Should().BeTrue(); - } - - [Fact] - public static void IsFiniteTest() - { - NumberBaseHelper.IsFinite(default(Int)).Should().BeTrue(); - } - - [Fact] - public static void IsImaginaryNumberTest() - { - NumberBaseHelper.IsImaginaryNumber(default(Int)).Should().BeFalse(); - } - - [Fact] - public static void IsInfinityTest() - { - NumberBaseHelper.IsInfinity(default(Int)).Should().BeFalse(); - } - - [Fact] - public static void IsIntegerTest() - { - NumberBaseHelper.IsInteger(default(Int)).Should().BeTrue(); - } - - [Fact] - public static void IsNaNTest() - { - NumberBaseHelper.IsNaN(default(Int)).Should().BeFalse(); - } - - [Fact] - public static void IsNegativeTest() - { - NumberBaseHelper.IsNegative(One).Should().BeFalse(); - NumberBaseHelper.IsNegative(NegativeOne).Should().BeTrue(); - } - - [Fact] - public static void IsNegativeInfinityTest() - { - NumberBaseHelper.IsNegativeInfinity(One).Should().BeFalse(); - } - - [Fact] - public static void IsNormalTest() - { - NumberBaseHelper.IsNormal(Zero).Should().BeFalse(); - NumberBaseHelper.IsNormal(One).Should().BeTrue(); - } - - [Fact] - public static void IsOddIntegerTest() - { - NumberBaseHelper.IsOddInteger(One).Should().BeTrue(); - NumberBaseHelper.IsOddInteger(Two).Should().BeFalse(); - } - - [Fact] - public static void IsPositiveTest() - { - NumberBaseHelper.IsPositive(One).Should().BeTrue(); - NumberBaseHelper.IsPositive(NegativeOne).Should().BeFalse(); - } - - [Fact] - public static void IsPositiveInfinityTest() - { - NumberBaseHelper.IsPositiveInfinity(One).Should().BeFalse(); - } - - [Fact] - public static void IsRealNumberTest() - { - NumberBaseHelper.IsRealNumber(default).Should().BeTrue(); - } - - [Fact] - public static void IsSubnormalTest() - { - NumberBaseHelper.IsSubnormal(default).Should().BeFalse(); - } - - [Fact] - public static void IsZeroTest() - { - NumberBaseHelper.IsZero(default).Should().BeTrue(); - NumberBaseHelper.IsZero(Zero).Should().BeTrue(); - NumberBaseHelper.IsZero(One).Should().BeFalse(); - NumberBaseHelper.IsZero(NegativeOne).Should().BeFalse(); - } - - [Fact] - public static void MaxMagnitudeTest() - { - NumberBaseHelper.MaxMagnitude(MaxValue, MinValue).Should().Be(MinValue); - NumberBaseHelper.MaxMagnitude(One, NegativeTwo).Should().Be(NegativeTwo); - NumberBaseHelper.MaxMagnitude(Two, NegativeOne).Should().Be(Two); - NumberBaseHelper.MaxMagnitude(NegativeOne, NegativeTwo).Should().Be(NegativeTwo); - } - - [Fact] - public static void MaxMagnitudeNumberTest() - { - NumberBaseHelper.MaxMagnitudeNumber(MaxValue, MinValue).Should().Be(MinValue); - NumberBaseHelper.MaxMagnitudeNumber(One, NegativeTwo).Should().Be(NegativeTwo); - NumberBaseHelper.MaxMagnitudeNumber(Two, NegativeOne).Should().Be(Two); - NumberBaseHelper.MaxMagnitudeNumber(NegativeOne, NegativeTwo).Should().Be(NegativeTwo); - } - - [Fact] - public static void MinMagnitudeTest() - { - NumberBaseHelper.MinMagnitude(MaxValue, MinValue).Should().Be(MaxValue); - NumberBaseHelper.MinMagnitude(One, NegativeTwo).Should().Be(One); - NumberBaseHelper.MinMagnitude(Two, NegativeOne).Should().Be(NegativeOne); - NumberBaseHelper.MinMagnitude(NegativeOne, NegativeTwo).Should().Be(NegativeOne); - } - - [Fact] - public static void MinMagnitudeNumberTest() - { - NumberBaseHelper.MinMagnitudeNumber(MaxValue, MinValue).Should().Be(MaxValue); - NumberBaseHelper.MinMagnitudeNumber(One, NegativeTwo).Should().Be(One); - NumberBaseHelper.MinMagnitudeNumber(Two, NegativeOne).Should().Be(NegativeOne); - NumberBaseHelper.MinMagnitudeNumber(NegativeOne, NegativeTwo).Should().Be(NegativeOne); - } - - [Fact] - public void ParseTest() - { - NumberBaseHelper.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819967", System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture) - .Should().Be(Int256MaxValue) - .And.BeRankedEquallyTo(Int256MaxValue); - NumberBaseHelper.Parse("7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture) - .Should().Be(Int256MaxValue) - .And.BeRankedEquallyTo(Int256MaxValue); - NumberBaseHelper.Parse("-57896044618658097711785492504343953926634992332820282019728792003956564819968", System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture) - .Should().Be(Int256MinValue) - .And.BeRankedEquallyTo(Int256MinValue); - NumberBaseHelper.Parse("8000000000000000000000000000000000000000000000000000000000000000", System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture) - .Should().Be(Int256MinValue) - .And.BeRankedEquallyTo(Int256MinValue); - - Assert.Throws(() => NumberBaseHelper.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968", System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture)); - Assert.Throws(() => NumberBaseHelper.Parse("-57896044618658097711785492504343953926634992332820282019728792003956564819969", System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture)); - } - - [Fact] - public void TryParseTest() - { - NumberBaseHelper.TryParse("57896044618658097711785492504343953926634992332820282019728792003956564819967", System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture, out Int parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(Int256MaxValue) - .And.BeRankedEquallyTo(Int256MaxValue); - NumberBaseHelper.TryParse("7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(Int256MaxValue) - .And.BeRankedEquallyTo(Int256MaxValue); - NumberBaseHelper.TryParse("-57896044618658097711785492504343953926634992332820282019728792003956564819968", System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(Int256MinValue) - .And.BeRankedEquallyTo(Int256MinValue); - NumberBaseHelper.TryParse("8000000000000000000000000000000000000000000000000000000000000000", System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(Int256MinValue) - .And.BeRankedEquallyTo(Int256MinValue); - - NumberBaseHelper.TryParse("57896044618658097711785492504343953926634992332820282019728792003956564819968", System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeFalse(); - parsedValue.Should().Be(default); - NumberBaseHelper.TryParse("-57896044618658097711785492504343953926634992332820282019728792003956564819969", System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeFalse(); - parsedValue.Should().Be(default); - } - - [Fact] - public void ParseUtf8Test() - { - NumberBaseHelper.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819967"u8, System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture) - .Should().Be(Int256MaxValue) - .And.BeRankedEquallyTo(Int256MaxValue); - NumberBaseHelper.Parse("7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8, System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture) - .Should().Be(Int256MaxValue) - .And.BeRankedEquallyTo(Int256MaxValue); - NumberBaseHelper.Parse("-57896044618658097711785492504343953926634992332820282019728792003956564819968"u8, System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture) - .Should().Be(Int256MinValue) - .And.BeRankedEquallyTo(Int256MinValue); - NumberBaseHelper.Parse("8000000000000000000000000000000000000000000000000000000000000000"u8, System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture) - .Should().Be(Int256MinValue) - .And.BeRankedEquallyTo(Int256MinValue); - - Assert.Throws(() => NumberBaseHelper.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968"u8, System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture)); - Assert.Throws(() => NumberBaseHelper.Parse("-57896044618658097711785492504343953926634992332820282019728792003956564819969"u8, System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture)); - } - - [Fact] - public void TryParseUtf8Test() - { - NumberBaseHelper.TryParse("57896044618658097711785492504343953926634992332820282019728792003956564819967"u8, System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture, out Int parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(Int256MaxValue) - .And.BeRankedEquallyTo(Int256MaxValue); - NumberBaseHelper.TryParse("7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8, System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(Int256MaxValue) - .And.BeRankedEquallyTo(Int256MaxValue); - NumberBaseHelper.TryParse("-57896044618658097711785492504343953926634992332820282019728792003956564819968"u8, System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(Int256MinValue) - .And.BeRankedEquallyTo(Int256MinValue); - NumberBaseHelper.TryParse("8000000000000000000000000000000000000000000000000000000000000000"u8, System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(Int256MinValue) - .And.BeRankedEquallyTo(Int256MinValue); - - NumberBaseHelper.TryParse("57896044618658097711785492504343953926634992332820282019728792003956564819968"u8, System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeFalse(); - parsedValue.Should().Be(default); - NumberBaseHelper.TryParse("-57896044618658097711785492504343953926634992332820282019728792003956564819969"u8, System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeFalse(); - parsedValue.Should().Be(default); - } - #endregion - - #region ISignedNumber - [Fact] - public static void NegativeOneTest() - { - MathConstantsHelper.NegativeOne().Should().Be(NegativeOne); - } - #endregion - - #region IPowerFunctions - [Fact] - public void PowTest() - { - GenericFloatingPointFunctions.Pow(Zero, int.MaxValue).Should().Be(Zero); - GenericFloatingPointFunctions.Pow(One, int.MaxValue).Should().Be(One); - GenericFloatingPointFunctions.Pow(MaxValue, Zero).Should().Be(One); - GenericFloatingPointFunctions.Pow(MaxValue, One).Should().Be(MaxValue); - GenericFloatingPointFunctions.Pow(Two, Two).Should().Be(4); - GenericFloatingPointFunctions.Pow(Two, 4).Should().Be(16); - GenericFloatingPointFunctions.Pow(16, Two).Should().Be(256); - GenericFloatingPointFunctions.Pow(Two, 254) - .Should().Be(new Int(0x4000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); - - Assert.Throws(() => GenericFloatingPointFunctions.Pow(Two, NegativeOne)); - Assert.Throws(() => GenericFloatingPointFunctions.Pow(Two, 255)); - Assert.Throws(() => GenericFloatingPointFunctions.Pow(Two + Two, 254)); - } - #endregion - } -} diff --git a/src/MissingValues.Tests.Old/Core/Int256Test.cs b/src/MissingValues.Tests.Old/Core/Int256Test.cs deleted file mode 100644 index 69edd7d..0000000 --- a/src/MissingValues.Tests.Old/Core/Int256Test.cs +++ /dev/null @@ -1,251 +0,0 @@ -using FluentAssertions; -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Numerics; -using System.Text; -using System.Text.Json; -using System.Text.Unicode; -using System.Threading.Tasks; -using Xunit; - -using Int = MissingValues.Int256; - -namespace MissingValues.Tests.Core -{ - public partial class Int256Test - { - private static readonly Int Int256MaxValue = new( - new UInt128(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), - new UInt128(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF) - ); - private static readonly Int Int256MinValue = new( - new UInt128(0x8000_0000_0000_0000, 0x0000_0000_0000_0000), - new UInt128(0x0000_0000_0000_0000, 0x0000_0000_0000_0000) - ); - - [Fact] - public void Ctor_Empty() - { - var i = new Int(); - Assert.Equal(0, i); - } - - [Fact] - public void Ctor_Value() - { - var i = new Int(UInt128.Zero, new(0, 7)); - Assert.Equal(7, i); - } - - [Fact] - public void Cast_ToByte() - { - byte.MinValue.Should().Be((byte)Zero); - byte.MaxValue.Should().Be((byte)ByteMaxValue); - } - - [Fact] - public void Cast_ToInt16() - { - short.MinValue.Should().Be((short)Int16MinValue); - short.MaxValue.Should().Be((short)Int16MaxValue); - } - - [Fact] - public void Cast_ToInt32() - { - int.MinValue.Should().Be((int)Int32MinValue); - int.MaxValue.Should().Be((int)Int32MaxValue); - } - - [Fact] - public void Cast_ToInt64() - { - long.MinValue.Should().Be((long)Int64MinValue); - long.MaxValue.Should().Be((long)Int64MaxValue); - } - - [Fact] - public void Cast_ToInt128() - { - Int128.MinValue.Should().Be((Int128)Int128MinValue); - Int128.MaxValue.Should().Be((Int128)Int128MaxValue); - } - - [Fact] - public void Cast_ToBigInteger() - { - BigInteger.One.Should().Be((BigInteger)One); - BigInteger.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819967") - .Should().Be((BigInteger)MaxValue); - BigInteger.Parse("-57896044618658097711785492504343953926634992332820282019728792003956564819968") - .Should().Be((BigInteger)MinValue); - } - - [Fact] - public void Cast_ToDouble() - { - const double max = 57896044618658097711785492504343953926634992332820282019728792003956564819967.0; - const double min = -57896044618658097711785492504343953926634992332820282019728792003956564819968.0; - - max.Should().Be((double)Int256MaxValue); - min.Should().Be((double)Int256MinValue); - } - - [Fact] - public void ToDecStringTest() - { - Zero.ToString("D", CultureInfo.CurrentCulture) - .Should().Be("0"); - One.ToString("D", CultureInfo.CurrentCulture) - .Should().Be("1"); - MaxValue.ToString("D", CultureInfo.CurrentCulture) - .Should().Be("57896044618658097711785492504343953926634992332820282019728792003956564819967"); - MinValue.ToString("D", CultureInfo.CurrentCulture) - .Should().Be("-57896044618658097711785492504343953926634992332820282019728792003956564819968"); - } - [Fact] - public void ToHexStringTest() - { - One.ToString("X", CultureInfo.CurrentCulture) - .Should().Be("1"); - ((Int)sbyte.MaxValue).ToString("X", CultureInfo.CurrentCulture) - .Should().Be("7F"); - ((Int)short.MaxValue).ToString("X", CultureInfo.CurrentCulture) - .Should().Be("7FFF"); - ((Int)int.MaxValue).ToString("X", CultureInfo.CurrentCulture) - .Should().Be("7FFFFFFF"); - ((Int)long.MaxValue).ToString("X", CultureInfo.CurrentCulture) - .Should().Be("7FFFFFFFFFFFFFFF"); - ((Int)Int128.MaxValue).ToString("X", CultureInfo.CurrentCulture) - .Should().Be("7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"); - - Zero.ToString("X64", CultureInfo.CurrentCulture) - .Should().Be("0000000000000000000000000000000000000000000000000000000000000000"); - MaxValue.ToString("x64", CultureInfo.CurrentCulture) - .Should().Be("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); - MaxValue.ToString("X64", CultureInfo.CurrentCulture) - .Should().Be("7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"); - MinValue.ToString("X64", CultureInfo.CurrentCulture) - .Should().Be("8000000000000000000000000000000000000000000000000000000000000000"); - } - [Fact] - public void ToBinStringTest() - { - One.ToString("B", CultureInfo.CurrentCulture) - .Should().Be("1"); - ((Int)sbyte.MaxValue).ToString("B", CultureInfo.CurrentCulture) - .Should().Be("1111111"); - ((Int)short.MaxValue).ToString("B", CultureInfo.CurrentCulture) - .Should().Be("111111111111111"); - ((Int)int.MaxValue).ToString("B", CultureInfo.CurrentCulture) - .Should().Be("1111111111111111111111111111111"); - ((Int)long.MaxValue).ToString("B", CultureInfo.CurrentCulture) - .Should().Be("111111111111111111111111111111111111111111111111111111111111111"); - ((Int)Int128.MaxValue).ToString("B", CultureInfo.CurrentCulture) - .Should().Be("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"); - - Zero.ToString("B256", CultureInfo.CurrentCulture) - .Should().Be("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"); - MaxValue.ToString("B256", CultureInfo.CurrentCulture) - .Should().Be("0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"); - MinValue.ToString("B256", CultureInfo.CurrentCulture) - .Should().Be("1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"); - } - - [Fact] - public void ToDecFormatStringTest() - { - MaxValue.ToString().Should().Be($"{MaxValue:D}"); - MinValue.ToString().Should().Be($"{MinValue:D}"); - } - [Fact] - public void ToHexFormatStringTest() - { - MaxValue.ToString("X64", CultureInfo.CurrentCulture).Should().Be($"{MaxValue:X64}"); - MinValue.ToString("X64", CultureInfo.CurrentCulture).Should().Be($"{MinValue:X64}"); - } - [Fact] - public void ToBinFormatStringTest() - { - MaxValue.ToString("B256", CultureInfo.CurrentCulture).Should().Be($"{MaxValue:B256}"); - MinValue.ToString("B256", CultureInfo.CurrentCulture).Should().Be($"{MinValue:B256}"); - } - - [Fact] - public void ToDecFormatUtf8StringTest() - { - ReadOnlySpan toString = Encoding.UTF8.GetBytes(MaxValue.ToString()!); - - Span format = stackalloc byte[toString.Length]; - bool success = Utf8.TryWrite(format, CultureInfo.CurrentCulture, $"{MaxValue:D}", out _); - Assert.Equal(toString, format); - success.Should().BeTrue(); - - - toString = Encoding.UTF8.GetBytes(MinValue.ToString()!); - - format = stackalloc byte[toString.Length]; - success = Utf8.TryWrite(format, CultureInfo.CurrentCulture, $"{MinValue:D}", out _); - Assert.Equal(toString, format); - success.Should().BeTrue(); - } - [Fact] - public void ToHexFormatUtf8StringTest() - { - ReadOnlySpan toString = Encoding.UTF8.GetBytes(MaxValue.ToString("X64", CultureInfo.CurrentCulture)!); - - Span format = stackalloc byte[toString.Length]; - bool success = Utf8.TryWrite(format, CultureInfo.CurrentCulture, $"{MaxValue:X64}", out _); - Assert.Equal(toString, format); - success.Should().BeTrue(); - - - toString = Encoding.UTF8.GetBytes(MinValue.ToString("X64", CultureInfo.CurrentCulture)!); - - format = stackalloc byte[toString.Length]; - success = Utf8.TryWrite(format, CultureInfo.CurrentCulture, $"{MinValue:X64}", out _); - Assert.Equal(toString, format); - success.Should().BeTrue(); - } - [Fact] - public void ToBinFormatUtf8StringTest() - { - ReadOnlySpan toString = Encoding.UTF8.GetBytes(MaxValue.ToString("B256", CultureInfo.CurrentCulture)!); - - Span format = stackalloc byte[toString.Length]; - bool success = Utf8.TryWrite(format, CultureInfo.CurrentCulture, $"{MaxValue:B256}", out _); - Assert.Equal(toString, format); - success.Should().BeTrue(); - - - toString = Encoding.UTF8.GetBytes(MinValue.ToString("B256", CultureInfo.CurrentCulture)!); - - format = stackalloc byte[toString.Length]; - success = Utf8.TryWrite(format, CultureInfo.CurrentCulture, $"{MinValue:B256}", out _); - Assert.Equal(toString, format); - success.Should().BeTrue(); - } - - [Fact] - public void JsonWriteTest() - { - JsonSerializer.Serialize(new object[] { MaxValue, MinValue, One, NegativeOne }) - .Should().Be("[57896044618658097711785492504343953926634992332820282019728792003956564819967,-57896044618658097711785492504343953926634992332820282019728792003956564819968,1,-1]"); - } - [Fact] - public void JsonReadTest() - { - JsonSerializer.Deserialize("57896044618658097711785492504343953926634992332820282019728792003956564819967") - .Should().Be(MaxValue); - JsonSerializer.Deserialize("57896044618658097711785492504343953926634992332820282019728792003956564819967"u8) - .Should().Be(MaxValue); - JsonSerializer.Deserialize("-57896044618658097711785492504343953926634992332820282019728792003956564819968") - .Should().Be(MinValue); - JsonSerializer.Deserialize("-57896044618658097711785492504343953926634992332820282019728792003956564819968"u8) - .Should().Be(MinValue); - } - } -} diff --git a/src/MissingValues.Tests.Old/Core/Int512Test.GenericMath.cs b/src/MissingValues.Tests.Old/Core/Int512Test.GenericMath.cs deleted file mode 100644 index fdb887f..0000000 --- a/src/MissingValues.Tests.Old/Core/Int512Test.GenericMath.cs +++ /dev/null @@ -1,1191 +0,0 @@ -using FluentAssertions; -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; - -using Int = MissingValues.Int512; - -namespace MissingValues.Tests.Core -{ - public partial class Int512Test - { - #region Readonly Variables - private const double Int512MaxValueAsDouble = 6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047.0; - private const double Int512MinValueAsDouble = -6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048.0d; - - private static readonly Int ByteMaxValue = new( - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_00FF); - - private static readonly Int Int16MaxValue = new( - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_7FFF); - private static readonly Int Int16MinValue = new( - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_8000); - - private static readonly Int Int32MaxValue = new( - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_7FFF_FFFF); - private static readonly Int Int32MinValue = new( - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_8000_0000); - - private static readonly Int Int64MaxValue = new( - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x7FFF_FFFF_FFFF_FFFF); - private static readonly Int Int64MinValue = new( - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000); - - private static readonly Int Int128MaxValue = new( - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); - private static readonly Int Int128MinValue = new( - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000, 0x0000_0000_0000_0000); - - private static readonly Int Int256MaxValue = new( - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF - ); - private static readonly Int Int256MinValue = new( - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, - 0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000 - ); - - private static readonly Int NegativeOne = Int.NegativeOne; - private static readonly Int NegativeTwo = new( - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE); - private static readonly Int Zero = Int.Zero; - private static readonly Int One = Int.One; - private static readonly Int Two = new( - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0002); - private static readonly Int MaxValue = Int.MaxValue; - private static readonly Int MaxValueMinusOne = new( - 0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE); - private static readonly Int MinValue = Int.MinValue; - private static readonly Int MinValuePlusOne = new( - 0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001); - #endregion - - #region Generic Math Operators - [Fact] - public static void op_AdditionTest() - { - Assert.Equal(One, MathOperatorsHelper.AdditionOperation(Zero, 1)); - Assert.Equal(Two, MathOperatorsHelper.AdditionOperation(One, 1)); - Assert.Equal(MinValue, MathOperatorsHelper.AdditionOperation(MaxValue, 1)); - Assert.Equal(MinValuePlusOne, MathOperatorsHelper.AdditionOperation(MinValue, 1)); - Assert.Equal(Zero, MathOperatorsHelper.AdditionOperation(NegativeOne, 1)); - } - [Fact] - public static void op_CheckedAdditionTest() - { - Assert.Equal(One, MathOperatorsHelper.CheckedAdditionOperation(Zero, 1)); - Assert.Equal(Two, MathOperatorsHelper.CheckedAdditionOperation(Int.One, 1)); - Assert.Equal(MinValuePlusOne, MathOperatorsHelper.CheckedAdditionOperation(MinValue, 1)); - Assert.Equal(Zero, MathOperatorsHelper.CheckedAdditionOperation(NegativeOne, 1)); - - Assert.Throws(() => MathOperatorsHelper.CheckedAdditionOperation(MaxValue, 1)); - } - [Fact] - public static void op_IncrementTest() - { - MathOperatorsHelper.IncrementOperation(Zero).Should().Be(One); - MathOperatorsHelper.IncrementOperation(One).Should().Be(Two); - MathOperatorsHelper.IncrementOperation(MinValue).Should().Be(MinValuePlusOne); - MathOperatorsHelper.IncrementOperation(MaxValueMinusOne).Should().Be(MaxValue); - MathOperatorsHelper.IncrementOperation(MaxValue).Should().Be(MinValue); - } - [Fact] - public static void op_CheckedIncrementTest() - { - MathOperatorsHelper.CheckedIncrementOperation(Zero).Should().Be(One); - MathOperatorsHelper.CheckedIncrementOperation(One).Should().Be(Two); - MathOperatorsHelper.CheckedIncrementOperation(MinValue).Should().Be(MinValuePlusOne); - MathOperatorsHelper.CheckedIncrementOperation(MaxValueMinusOne).Should().Be(MaxValue); - - Assert.Throws(() => MathOperatorsHelper.CheckedIncrementOperation(MaxValue)); - } - [Fact] - public static void op_SubtractionTest() - { - Assert.Equal(NegativeOne, MathOperatorsHelper.SubtractionOperation(Zero, 1)); - Assert.Equal(One, MathOperatorsHelper.SubtractionOperation(Two, 1)); - Assert.Equal(MaxValue, MathOperatorsHelper.SubtractionOperation(MinValue, 1)); - Assert.Equal(MaxValueMinusOne, MathOperatorsHelper.SubtractionOperation(MaxValue, 1)); - Assert.Equal(NegativeTwo, MathOperatorsHelper.SubtractionOperation(NegativeOne, 1)); - } - [Fact] - public static void op_CheckedSubtractionTest() - { - Assert.Equal(NegativeOne, MathOperatorsHelper.CheckedSubtractionOperation(Zero, 1)); - Assert.Equal(One, MathOperatorsHelper.CheckedSubtractionOperation(Two, 1)); - Assert.Equal(MaxValueMinusOne, MathOperatorsHelper.CheckedSubtractionOperation(MaxValue, 1)); - Assert.Equal(NegativeTwo, MathOperatorsHelper.CheckedSubtractionOperation(NegativeOne, 1)); - - Assert.Throws(() => MathOperatorsHelper.CheckedSubtractionOperation(MinValue, 1)); - } - [Fact] - public static void op_DecrementTest() - { - MathOperatorsHelper.DecrementOperation(Two).Should().Be(One); - MathOperatorsHelper.DecrementOperation(One).Should().Be(Zero); - MathOperatorsHelper.DecrementOperation(MinValuePlusOne).Should().Be(MinValue); - MathOperatorsHelper.DecrementOperation(MaxValue).Should().Be(MaxValueMinusOne); - MathOperatorsHelper.DecrementOperation(MinValue).Should().Be(MaxValue); - } - [Fact] - public static void op_CheckedDecrementTest() - { - MathOperatorsHelper.CheckedDecrementOperation(Two).Should().Be(One); - MathOperatorsHelper.CheckedDecrementOperation(One).Should().Be(Zero); - MathOperatorsHelper.CheckedDecrementOperation(MinValuePlusOne).Should().Be(MinValue); - MathOperatorsHelper.CheckedDecrementOperation(MaxValue).Should().Be(MaxValueMinusOne); - - Assert.Throws(() => MathOperatorsHelper.CheckedDecrementOperation(MinValue)); - } - [Fact] - public static void op_MultiplyTest() - { - Assert.Equal(One, MathOperatorsHelper.MultiplicationOperation(One, One)); - Assert.Equal(Two, MathOperatorsHelper.MultiplicationOperation(Two, One)); - Assert.Equal(NegativeTwo, MathOperatorsHelper.MultiplicationOperation(Two, NegativeOne)); - Assert.Equal(MinValuePlusOne, MathOperatorsHelper.MultiplicationOperation(MaxValue, NegativeOne)); - Assert.Equal(MinValue, MathOperatorsHelper.MultiplicationOperation(MinValue, NegativeOne)); - } - [Fact] - public static void op_CheckedMultiplyTest() - { - Assert.Equal(One, MathOperatorsHelper.CheckedMultiplicationOperation(One, One)); - Assert.Equal(Two, MathOperatorsHelper.CheckedMultiplicationOperation(Two, One)); - Assert.Equal(NegativeTwo, MathOperatorsHelper.CheckedMultiplicationOperation(Two, NegativeOne)); - Assert.Equal(MinValuePlusOne, MathOperatorsHelper.CheckedMultiplicationOperation(MaxValue, NegativeOne)); - - Assert.Throws(() => MathOperatorsHelper.CheckedMultiplicationOperation(MinValue, NegativeOne)); - } - [Fact] - public static void op_DivisionTest() - { - Assert.Equal(new Int(0x3FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), MathOperatorsHelper.DivisionOperation(MaxValue, Two)); - Assert.Equal(new Int(0xC000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001), MathOperatorsHelper.DivisionOperation(MaxValueMinusOne, NegativeTwo)); - Assert.Equal(One, MathOperatorsHelper.DivisionOperation(MaxValue, MaxValue)); - Assert.Equal(NegativeOne, MathOperatorsHelper.DivisionOperation(MaxValue, MinValuePlusOne)); - - Assert.Throws(() => MathOperatorsHelper.DivisionOperation(MinValue, NegativeOne)); - } - [Fact] - public static void op_CheckedDivisionTest() - { - Assert.Equal(new Int(0x3FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), MathOperatorsHelper.CheckedDivisionOperation(MaxValue, Two)); - Assert.Equal(new Int(0xC000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001), MathOperatorsHelper.CheckedDivisionOperation(MaxValueMinusOne, NegativeTwo)); - Assert.Equal(One, MathOperatorsHelper.CheckedDivisionOperation(MaxValue, MaxValue)); - Assert.Equal(NegativeOne, MathOperatorsHelper.CheckedDivisionOperation(MaxValue, MinValuePlusOne)); - - Assert.Throws(() => MathOperatorsHelper.CheckedDivisionOperation(MinValue, NegativeOne)); - } - [Fact] - public static void op_ModulusTest() - { - MathOperatorsHelper.ModulusOperation(Two, Two).Should().Be(Zero); - MathOperatorsHelper.ModulusOperation(One, Two).Should().NotBe(Zero); - MathOperatorsHelper.ModulusOperation(MaxValue, new(10U)).Should().Be(7); - MathOperatorsHelper.ModulusOperation(MinValue, new(10U)).Should().Be(-8); - - Assert.Throws(() => MathOperatorsHelper.ModulusOperation(One, Zero)); - } - - [Fact] - public static void op_BitwiseAndTest() - { - BitwiseOperatorsHelper.BitwiseAndOperation(Zero, 1U).Should().Be(Zero); - BitwiseOperatorsHelper.BitwiseAndOperation(One, 1U).Should().Be(One); - BitwiseOperatorsHelper.BitwiseAndOperation(MaxValue, 1U).Should().Be(One); - BitwiseOperatorsHelper.BitwiseAndOperation(MinValue, 1U).Should().Be(Zero); - BitwiseOperatorsHelper.BitwiseAndOperation(NegativeOne, 1U).Should().Be(One); - } - [Fact] - public static void op_BitwiseOrTest() - { - BitwiseOperatorsHelper.BitwiseOrOperation(Zero, 1U) - .Should().Be(One); - BitwiseOperatorsHelper.BitwiseOrOperation(One, 1U) - .Should().Be(One); - BitwiseOperatorsHelper.BitwiseOrOperation(MaxValue, 1U) - .Should().Be(MaxValue); - BitwiseOperatorsHelper.BitwiseOrOperation(MinValue, 1U) - .Should().Be(new(0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001)); - BitwiseOperatorsHelper.BitwiseOrOperation(NegativeOne, 1U) - .Should().Be(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); - } - [Fact] - public static void op_ExclusiveOrTest() - { - BitwiseOperatorsHelper.ExclusiveOrOperation(Zero, 1U) - .Should().Be(One); - BitwiseOperatorsHelper.ExclusiveOrOperation(One, 1U) - .Should().Be(Zero); - BitwiseOperatorsHelper.ExclusiveOrOperation(MaxValue, 1U) - .Should().Be(new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE)); - BitwiseOperatorsHelper.ExclusiveOrOperation(MinValue, 1U) - .Should().Be(new(0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001)); - BitwiseOperatorsHelper.ExclusiveOrOperation(NegativeOne, 1U) - .Should().Be(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE)); - } - [Fact] - public static void op_OnesComplementTest() - { - BitwiseOperatorsHelper.OnesComplementOperation(Zero) - .Should().Be(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); - BitwiseOperatorsHelper.OnesComplementOperation(One) - .Should().Be(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE)); - BitwiseOperatorsHelper.OnesComplementOperation(MaxValue) - .Should().Be(new(0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); - BitwiseOperatorsHelper.OnesComplementOperation(MinValue) - .Should().Be(new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); - BitwiseOperatorsHelper.OnesComplementOperation(NegativeOne) - .Should().Be(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); - } - - [Fact] - public static void op_LeftShiftTest() - { - ShiftOperatorsHelper.LeftShiftOperation(One, 1) - .Should().Be(Two); - ShiftOperatorsHelper.LeftShiftOperation(MaxValue, 1) - .Should().Be(NegativeTwo); - ShiftOperatorsHelper.LeftShiftOperation(MinValue, 1) - .Should().Be(Zero); - ShiftOperatorsHelper.LeftShiftOperation(NegativeOne, 1) - .Should().Be(NegativeTwo); - } - [Fact] - public static void op_RightShiftTest() - { - ShiftOperatorsHelper.RightShiftOperation(Zero, 1) - .Should().Be(Zero); - ShiftOperatorsHelper.RightShiftOperation(One, 1) - .Should().Be(Zero); - ShiftOperatorsHelper.RightShiftOperation(MaxValue, 1) - .Should().Be(new(0x3FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); - ShiftOperatorsHelper.RightShiftOperation(MinValue, 1) - .Should().Be(new(0xC000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); - ShiftOperatorsHelper.RightShiftOperation(NegativeOne, 1) - .Should().Be(NegativeOne); - - var actual = new Int(0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - - ShiftOperatorsHelper.RightShiftOperation(actual, 64 * 1) - .Should().Be(new( - 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); - ShiftOperatorsHelper.RightShiftOperation(actual, 64 * 2) - .Should().Be(new( - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); - ShiftOperatorsHelper.RightShiftOperation(actual, 64 * 3) - .Should().Be(new( - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); - ShiftOperatorsHelper.RightShiftOperation(actual, 64 * 4) - .Should().Be(new( - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, - 0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); - ShiftOperatorsHelper.RightShiftOperation(actual, 64 * 5) - .Should().Be(new( - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, - 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); - ShiftOperatorsHelper.RightShiftOperation(actual, 64 * 6) - .Should().Be(new( - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000, 0x0000_0000_0000_0000)); - ShiftOperatorsHelper.RightShiftOperation(actual, 64 * 7) - .Should().Be(new( - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000)); - } - [Fact] - public static void op_UnsignedRightShiftTest() - { - ShiftOperatorsHelper.UnsignedRightShiftOperation(Zero, 1) - .Should().Be(Zero); - ShiftOperatorsHelper.UnsignedRightShiftOperation(One, 1) - .Should().Be(Zero); - ShiftOperatorsHelper.UnsignedRightShiftOperation(MaxValue, 1) - .Should().Be(new(0x3FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); - ShiftOperatorsHelper.UnsignedRightShiftOperation(MinValue, 1) - .Should().Be(new(0x4000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); - ShiftOperatorsHelper.UnsignedRightShiftOperation(NegativeOne, 1) - .Should().Be(MaxValue); - } - - [Fact] - public static void op_EqualityTest() - { - EqualityOperatorsHelper.EqualityOperation(Zero, 1U).Should().BeFalse(); - EqualityOperatorsHelper.EqualityOperation(One, 1U).Should().BeTrue(); - EqualityOperatorsHelper.EqualityOperation(MaxValue, 1U).Should().BeFalse(); - EqualityOperatorsHelper.EqualityOperation(MinValue, 1U).Should().BeFalse(); - EqualityOperatorsHelper.EqualityOperation(NegativeOne, 1U).Should().BeFalse(); - } - [Fact] - public static void op_InequalityTest() - { - EqualityOperatorsHelper.InequalityOperation(Zero, 1U).Should().BeTrue(); - EqualityOperatorsHelper.InequalityOperation(One, 1U).Should().BeFalse(); - EqualityOperatorsHelper.InequalityOperation(MaxValue, 1U).Should().BeTrue(); - EqualityOperatorsHelper.InequalityOperation(MinValue, 1U).Should().BeTrue(); - EqualityOperatorsHelper.InequalityOperation(NegativeOne, 1U).Should().BeTrue(); - } - - [Fact] - public static void op_GreaterThanTest() - { - ComparisonOperatorsHelper.GreaterThanOperation(Zero, 1U).Should().BeFalse(); - ComparisonOperatorsHelper.GreaterThanOperation(One, 1U).Should().BeFalse(); - ComparisonOperatorsHelper.GreaterThanOperation(MaxValue, 1U).Should().BeTrue(); - ComparisonOperatorsHelper.GreaterThanOperation(MinValue, 1U).Should().BeFalse(); - ComparisonOperatorsHelper.GreaterThanOperation(NegativeOne, 1U).Should().BeFalse(); - } - [Fact] - public static void op_GreaterThanOrEqualTest() - { - ComparisonOperatorsHelper.GreaterThanOrEqualOperation(Zero, 1U).Should().BeFalse(); - ComparisonOperatorsHelper.GreaterThanOrEqualOperation(One, 1U).Should().BeTrue(); - ComparisonOperatorsHelper.GreaterThanOrEqualOperation(MaxValue, 1U).Should().BeTrue(); - ComparisonOperatorsHelper.GreaterThanOrEqualOperation(MinValue, 1U).Should().BeFalse(); - ComparisonOperatorsHelper.GreaterThanOrEqualOperation(NegativeOne, 1U).Should().BeFalse(); - } - [Fact] - public static void op_LessThanTest() - { - ComparisonOperatorsHelper.LessThanOperation(Zero, 1U).Should().BeTrue(); - ComparisonOperatorsHelper.LessThanOperation(One, 1U).Should().BeFalse(); - ComparisonOperatorsHelper.LessThanOperation(MaxValue, 1U).Should().BeFalse(); - ComparisonOperatorsHelper.LessThanOperation(MinValue, 1U).Should().BeTrue(); - ComparisonOperatorsHelper.LessThanOperation(NegativeOne, 1U).Should().BeTrue(); - } - [Fact] - public static void op_LessThanOrEqualTest() - { - ComparisonOperatorsHelper.LessThanOrEqualOperation(Zero, 1U).Should().BeTrue(); - ComparisonOperatorsHelper.LessThanOrEqualOperation(One, 1U).Should().BeTrue(); - ComparisonOperatorsHelper.LessThanOrEqualOperation(MaxValue, 1U).Should().BeFalse(); - ComparisonOperatorsHelper.LessThanOrEqualOperation(MinValue, 1U).Should().BeTrue(); - ComparisonOperatorsHelper.LessThanOrEqualOperation(NegativeOne, 1U).Should().BeTrue(); - } - #endregion - - #region Identities - [Fact] - public static void AdditiveIdentityTest() - { - Assert.Equal(Zero, MathConstantsHelper.AdditiveIdentityHelper()); - } - - [Fact] - public static void MultiplicativeIdentityTest() - { - Assert.Equal(One, MathConstantsHelper.MultiplicativeIdentityHelper()); - } - #endregion - - #region IBinaryInteger - [Fact] - public static void DivRemTest() - { - Assert.Equal((Zero, Zero), BinaryIntegerHelper.DivRem(Zero, Two)); - Assert.Equal((Zero, One), BinaryIntegerHelper.DivRem(One, Two)); - Assert.Equal((new Int(0x3FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), One), BinaryIntegerHelper.DivRem(MaxValue, Two)); - Assert.Equal((new Int(0xC000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), Zero), BinaryIntegerHelper.DivRem(MinValue, Two)); - Assert.Equal((Zero, NegativeOne), BinaryIntegerHelper.DivRem(NegativeOne, 2)); - } - - [Fact] - public static void LeadingZeroCountTest() - { - Assert.Equal(512, BinaryIntegerHelper.LeadingZeroCount(Zero)); - Assert.Equal(511, BinaryIntegerHelper.LeadingZeroCount(One)); - Assert.Equal(1, BinaryIntegerHelper.LeadingZeroCount(MaxValue)); - Assert.Equal(0, BinaryIntegerHelper.LeadingZeroCount(MinValue)); - Assert.Equal(0, BinaryIntegerHelper.LeadingZeroCount(NegativeOne)); - } - - [Fact] - public static void PopCountTest() - { - Assert.Equal(0, BinaryIntegerHelper.PopCount(Zero)); - Assert.Equal(1, BinaryIntegerHelper.PopCount(One)); - Assert.Equal(511, BinaryIntegerHelper.PopCount(MaxValue)); - Assert.Equal(1, BinaryIntegerHelper.PopCount(MinValue)); - Assert.Equal(512, BinaryIntegerHelper.PopCount(NegativeOne)); - } - - [Fact] - public static void RotateLeftTest() - { - Assert.Equal(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), BinaryIntegerHelper.RotateLeft(Zero, 1)); - Assert.Equal(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0002), BinaryIntegerHelper.RotateLeft(One, 1)); - Assert.Equal(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE), BinaryIntegerHelper.RotateLeft(MaxValue, 1)); - Assert.Equal(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001), BinaryIntegerHelper.RotateLeft(MinValue, 1)); - Assert.Equal(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), BinaryIntegerHelper.RotateLeft(NegativeOne, 1)); - } - - [Fact] - public static void RotateRightTest() - { - Assert.Equal(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), BinaryIntegerHelper.RotateRight(Zero, 1)); - Assert.Equal(new(0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), BinaryIntegerHelper.RotateRight(One, 1)); - Assert.Equal(new(0xBFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), BinaryIntegerHelper.RotateRight(MaxValue, 1)); - Assert.Equal(new(0x4000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), BinaryIntegerHelper.RotateRight(MinValue, 1)); - Assert.Equal(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), BinaryIntegerHelper.RotateRight(NegativeOne, 1)); - } - - [Fact] - public static void TrailingZeroCountTest() - { - Assert.Equal(512, BinaryIntegerHelper.TrailingZeroCount(Zero)); - Assert.Equal(0, BinaryIntegerHelper.TrailingZeroCount(One)); - Assert.Equal(0, BinaryIntegerHelper.TrailingZeroCount(MaxValue)); - Assert.Equal(511, BinaryIntegerHelper.TrailingZeroCount(MinValue)); - Assert.Equal(0, BinaryIntegerHelper.TrailingZeroCount(NegativeOne)); - } - - [Fact] - public static void TryReadLittleEndianInt256Test() - { - Int result; - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, isUnsigned: false, out result)); - Assert.Equal(new(0x0100_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 }, isUnsigned: false, out result)); - Assert.Equal(new(0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: false, out result)); - Assert.Equal(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF7F), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0080), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F }, isUnsigned: false, out result)); - Assert.Equal(new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: false, out result)); - Assert.Equal(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), result); - } - - [Fact] - public static void TryReadLittleEndianUInt256Test() - { - Int result; - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, isUnsigned: true, out result)); - Assert.Equal(new(0x0100_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), result); - - Assert.False(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 }, isUnsigned: true, out result)); - Assert.Equal(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001), result); - - Assert.False(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: true, out result)); - Assert.Equal(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0080), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F }, isUnsigned: true, out result)); - Assert.Equal(new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), result); - - Assert.False(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: true, out result)); - Assert.Equal(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), result); - } - - [Fact] - public static void GetByteCountTest() - { - Assert.Equal(64, BinaryIntegerHelper.GetByteCount(Zero)); - Assert.Equal(64, BinaryIntegerHelper.GetByteCount(One)); - Assert.Equal(64, BinaryIntegerHelper.GetByteCount(MaxValue)); - Assert.Equal(64, BinaryIntegerHelper.GetByteCount(MinValue)); - Assert.Equal(64, BinaryIntegerHelper.GetByteCount(NegativeOne)); - } - - [Fact] - public static void GetShortestBitLengthTest() - { - Assert.Equal(0x00, BinaryIntegerHelper.GetShortestBitLength(Zero)); - Assert.Equal(0x01, BinaryIntegerHelper.GetShortestBitLength(One)); - Assert.Equal(0x1FF, BinaryIntegerHelper.GetShortestBitLength(MaxValue)); - Assert.Equal(0x200, BinaryIntegerHelper.GetShortestBitLength(MinValue)); - Assert.Equal(0x01, BinaryIntegerHelper.GetShortestBitLength(NegativeOne)); - } - - [Fact] - public static void TryWriteBigEndianTest() - { - Span destination = stackalloc byte[64]; - int bytesWritten = 0; - - Assert.True(BinaryIntegerHelper.TryWriteBigEndian(Zero, destination, out bytesWritten)); - Assert.Equal(64, bytesWritten); - Assert.Equal(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, destination.ToArray()); - - Assert.True(BinaryIntegerHelper.TryWriteBigEndian(One, destination, out bytesWritten)); - Assert.Equal(64, bytesWritten); - Assert.Equal(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, destination.ToArray()); - - Assert.True(BinaryIntegerHelper.TryWriteBigEndian(MaxValue, destination, out bytesWritten)); - Assert.Equal(64, bytesWritten); - Assert.Equal(new byte[] { 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, destination.ToArray()); - - Assert.True(BinaryIntegerHelper.TryWriteBigEndian(MinValue, destination, out bytesWritten)); - Assert.Equal(64, bytesWritten); - Assert.Equal(new byte[] { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, destination.ToArray()); - - Assert.True(BinaryIntegerHelper.TryWriteBigEndian(NegativeOne, destination, out bytesWritten)); - Assert.Equal(64, bytesWritten); - Assert.Equal(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, destination.ToArray()); - - Assert.False(BinaryIntegerHelper.TryWriteBigEndian(default, Span.Empty, out bytesWritten)); - Assert.Equal(0, bytesWritten); - Assert.Equal(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, destination.ToArray()); - } - - [Fact] - public static void TryWriteLittleEndianTest() - { - Span destination = stackalloc byte[64]; - int bytesWritten = 0; - - Assert.True(BinaryIntegerHelper.TryWriteLittleEndian(Zero, destination, out bytesWritten)); - Assert.Equal(64, bytesWritten); - Assert.Equal(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, destination.ToArray()); - - Assert.True(BinaryIntegerHelper.TryWriteLittleEndian(One, destination, out bytesWritten)); - Assert.Equal(64, bytesWritten); - Assert.Equal(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, destination.ToArray()); - - Assert.True(BinaryIntegerHelper.TryWriteLittleEndian(MaxValue, destination, out bytesWritten)); - Assert.Equal(64, bytesWritten); - Assert.Equal(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F }, destination.ToArray()); - - Assert.True(BinaryIntegerHelper.TryWriteLittleEndian(MinValue, destination, out bytesWritten)); - Assert.Equal(64, bytesWritten); - Assert.Equal(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 }, destination.ToArray()); - - Assert.True(BinaryIntegerHelper.TryWriteLittleEndian(NegativeOne, destination, out bytesWritten)); - Assert.Equal(64, bytesWritten); - Assert.Equal(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, destination.ToArray()); - - Assert.False(BinaryIntegerHelper.TryWriteLittleEndian(default, Span.Empty, out bytesWritten)); - Assert.Equal(0, bytesWritten); - Assert.Equal(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, destination.ToArray()); - } - #endregion - - #region IBinaryNumber - [Fact] - public static void AllBitsSetTest() - { - Assert.Equal(BinaryNumberHelper.AllBitsSet, ~Zero); - } - [Fact] - public static void IsPow2Test() - { - Assert.True(BinaryNumberHelper.IsPow2(new(0x100))); - Assert.True(BinaryNumberHelper.IsPow2(new(0x1_0000))); - Assert.True(BinaryNumberHelper.IsPow2(new(0x1_0000_0000))); - Assert.True(BinaryNumberHelper.IsPow2(new(0, new(0x1, 0x0000_0000_0000_0000)))); - Assert.True(BinaryNumberHelper.IsPow2(new(0x1, new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)))); - } - [Fact] - public static void Log2Test() - { - Assert.Equal(8, BinaryNumberHelper.Log2(new(0x100))); - Assert.Equal(16, BinaryNumberHelper.Log2(new(0x1_0000))); - Assert.Equal(32, BinaryNumberHelper.Log2(new(0x1_0000_0000))); - Assert.Equal(64, BinaryNumberHelper.Log2(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001, 0x0000_0000_0000_0000))); - Assert.Equal(128, BinaryNumberHelper.Log2(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000))); - } - #endregion - - #region IMinMaxValue - [Fact] - public static void MaxValueTest() - { - MaxValue.Should().Be(MathConstantsHelper.MaxValue()); - } - - [Fact] - public static void MinValueTest() - { - MinValue.Should().Be(MathConstantsHelper.MinValue()); - } - #endregion - - #region INumber - [Fact] - public static void ClampTest() - { - NumberHelper.Clamp(MaxValueMinusOne, Int128MaxValue, MaxValue).Should().Be(MaxValueMinusOne); - NumberHelper.Clamp(MinValue, 0, MaxValue).Should().Be(0); - NumberHelper.Clamp(MaxValue, MinValue, 0).Should().Be(0); - - Assert.Throws(() => NumberHelper.Clamp(MinValue, MaxValue, 0)); - } - [Fact] - public static void CopySignTest() - { - NumberHelper.CopySign(MaxValue, NegativeOne).Should().Be(MinValuePlusOne); - NumberHelper.CopySign(MaxValue, One).Should().Be(MaxValue); - NumberHelper.CopySign(NegativeTwo, One).Should().Be(Two); - } - [Fact] - public static void MaxTest() - { - NumberHelper.Max(MaxValue, MinValue).Should().Be(MaxValue); - NumberHelper.Max(One, NegativeTwo).Should().Be(One); - NumberHelper.Max(Two, NegativeOne).Should().Be(Two); - NumberHelper.Max(NegativeOne, NegativeTwo).Should().Be(NegativeOne); - } - [Fact] - public static void MaxNumberTest() - { - NumberHelper.MaxNumber(MaxValue, MinValue).Should().Be(MaxValue); - NumberHelper.MaxNumber(One, NegativeTwo).Should().Be(One); - NumberHelper.MaxNumber(Two, NegativeOne).Should().Be(Two); - NumberHelper.MaxNumber(NegativeOne, NegativeTwo).Should().Be(NegativeOne); - } - [Fact] - public static void MinTest() - { - NumberHelper.Min(MaxValue, MinValue).Should().Be(MinValue); - NumberHelper.Min(One, NegativeTwo).Should().Be(NegativeTwo); - NumberHelper.Min(Two, NegativeOne).Should().Be(NegativeOne); - NumberHelper.Min(NegativeOne, NegativeTwo).Should().Be(NegativeTwo); - } - [Fact] - public static void MinNumberTest() - { - NumberHelper.MinNumber(MaxValue, MinValue).Should().Be(MinValue); - NumberHelper.MinNumber(One, NegativeTwo).Should().Be(NegativeTwo); - NumberHelper.MinNumber(Two, NegativeOne).Should().Be(NegativeOne); - NumberHelper.MinNumber(NegativeOne, NegativeTwo).Should().Be(NegativeTwo); - } - [Fact] - public static void SignTest() - { - NumberHelper.Sign(MinValue).Should().Be(-1); - NumberHelper.Sign(MaxValue).Should().Be(1); - NumberHelper.Sign(Int.Zero).Should().Be(0); - } - #endregion - - #region INumberBase - [Fact] - public static void AbsTest() - { - NumberBaseHelper.Abs(MinValuePlusOne).Should().Be(MaxValue); - NumberBaseHelper.Abs(NegativeTwo).Should().Be(Two); - NumberBaseHelper.Abs(NegativeOne).Should().Be(One); - NumberBaseHelper.Abs(One).Should().Be(One); - - Assert.Throws(() => NumberBaseHelper.Abs(MinValue)); - } - [Fact] - public static void CreateCheckedToInt512Test() - { - NumberBaseHelper.CreateChecked(byte.MaxValue).Should().Be(ByteMaxValue); - NumberBaseHelper.CreateChecked(short.MaxValue).Should().Be(Int16MaxValue); - NumberBaseHelper.CreateChecked(int.MaxValue).Should().Be(Int32MaxValue); - NumberBaseHelper.CreateChecked(long.MaxValue).Should().Be(Int64MaxValue); - NumberBaseHelper.CreateChecked(Int128.MaxValue).Should().Be(Int128MaxValue); - NumberBaseHelper - .CreateChecked(BigInteger.Parse( - "6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047")) - .Should().Be(MaxValue); - NumberBaseHelper.CreateChecked((double)int.MaxValue).Should().Be(Int32MaxValue); - - NumberBaseHelper.CreateChecked(byte.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateChecked(short.MinValue).Should().Be(Int16MinValue); - NumberBaseHelper.CreateChecked(int.MinValue).Should().Be(Int32MinValue); - NumberBaseHelper.CreateChecked(long.MinValue).Should().Be(Int64MinValue); - NumberBaseHelper.CreateChecked(Int128.MinValue).Should().Be(Int128MinValue); - NumberBaseHelper - .CreateChecked(BigInteger.Parse( - "-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048")) - .Should().Be(MinValue); - NumberBaseHelper.CreateChecked((double)int.MinValue).Should().Be(Int32MinValue); - } - [Fact] - public static void CreateSaturatingToInt512Test() - { - NumberBaseHelper.CreateSaturating(byte.MaxValue).Should().Be(ByteMaxValue); - NumberBaseHelper.CreateSaturating(short.MaxValue).Should().Be(Int16MaxValue); - NumberBaseHelper.CreateSaturating(int.MaxValue).Should().Be(Int32MaxValue); - NumberBaseHelper.CreateSaturating(long.MaxValue).Should().Be(Int64MaxValue); - NumberBaseHelper.CreateSaturating(Int128.MaxValue).Should().Be(Int128MaxValue); - NumberBaseHelper - .CreateSaturating(BigInteger.Parse( - "6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047")) - .Should().Be(MaxValue); - NumberBaseHelper.CreateSaturating(Int512MaxValueAsDouble).Should().Be(MaxValue); - - NumberBaseHelper.CreateSaturating(byte.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateSaturating(short.MinValue).Should().Be(Int16MinValue); - NumberBaseHelper.CreateSaturating(int.MinValue).Should().Be(Int32MinValue); - NumberBaseHelper.CreateSaturating(long.MinValue).Should().Be(Int64MinValue); - NumberBaseHelper.CreateSaturating(Int128.MinValue).Should().Be(Int128MinValue); - NumberBaseHelper - .CreateSaturating(BigInteger.Parse( - "-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048")) - .Should().Be(MinValue); - NumberBaseHelper.CreateSaturating(Int512MinValueAsDouble).Should().Be(MinValue); - } - [Fact] - public static void CreateTruncatingToInt512Test() - { - NumberBaseHelper.CreateTruncating(byte.MaxValue).Should().Be(ByteMaxValue); - NumberBaseHelper.CreateTruncating(short.MaxValue).Should().Be(Int16MaxValue); - NumberBaseHelper.CreateTruncating(int.MaxValue).Should().Be(Int32MaxValue); - NumberBaseHelper.CreateTruncating(long.MaxValue).Should().Be(Int64MaxValue); - NumberBaseHelper.CreateTruncating(Int128.MaxValue).Should().Be(Int128MaxValue); - NumberBaseHelper - .CreateTruncating(BigInteger.Parse( - "6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047")) - .Should().Be(MaxValue); - NumberBaseHelper.CreateTruncating(Int512MaxValueAsDouble).Should().Be(MaxValue); - - NumberBaseHelper.CreateTruncating(byte.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateTruncating(short.MinValue).Should().Be(Int16MinValue); - NumberBaseHelper.CreateTruncating(int.MinValue).Should().Be(Int32MinValue); - NumberBaseHelper.CreateTruncating(long.MinValue).Should().Be(Int64MinValue); - NumberBaseHelper.CreateTruncating(Int128.MinValue).Should().Be(Int128MinValue); - NumberBaseHelper - .CreateTruncating(BigInteger.Parse( - "-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048")) - .Should().Be(MinValue); - NumberBaseHelper.CreateTruncating(Int512MinValueAsDouble).Should().Be(MinValue); - } - - [Fact] - public static void CreateCheckedFromInt512Test() - { - NumberBaseHelper.CreateChecked(ByteMaxValue).Should().Be(byte.MaxValue); - NumberBaseHelper.CreateChecked(Int16MaxValue).Should().Be(short.MaxValue); - NumberBaseHelper.CreateChecked(Int32MaxValue).Should().Be(int.MaxValue); - NumberBaseHelper.CreateChecked(Int64MaxValue).Should().Be(long.MaxValue); - NumberBaseHelper.CreateChecked(Int128MaxValue).Should().Be(Int128.MaxValue); - NumberBaseHelper.CreateChecked(MaxValue).Should() - .Be(BigInteger.Parse( - "6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047")); - NumberBaseHelper.CreateChecked(MaxValue).Should().Be(Int512MaxValueAsDouble); - - NumberBaseHelper.CreateChecked(Zero).Should().Be(byte.MinValue); - NumberBaseHelper.CreateChecked(Int16MinValue).Should().Be(short.MinValue); - NumberBaseHelper.CreateChecked(Int32MinValue).Should().Be(int.MinValue); - NumberBaseHelper.CreateChecked(Int64MinValue).Should().Be(long.MinValue); - NumberBaseHelper.CreateChecked(Int128MinValue).Should().Be(Int128.MinValue); - NumberBaseHelper.CreateChecked(MinValue).Should() - .Be(BigInteger.Parse( - "-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048")); - NumberBaseHelper.CreateChecked(MinValue).Should().Be(Int512MinValueAsDouble); - } - [Fact] - public static void CreateSaturatingFromInt512Test() - { - NumberBaseHelper.CreateSaturating(ByteMaxValue).Should().Be(byte.MaxValue); - NumberBaseHelper.CreateSaturating(Int16MaxValue).Should().Be(short.MaxValue); - NumberBaseHelper.CreateSaturating(Int32MaxValue).Should().Be(int.MaxValue); - NumberBaseHelper.CreateSaturating(Int64MaxValue).Should().Be(long.MaxValue); - NumberBaseHelper.CreateSaturating(Int128MaxValue).Should().Be(Int128.MaxValue); - NumberBaseHelper.CreateSaturating(MaxValue).Should() - .Be(BigInteger.Parse( - "6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047")); - NumberBaseHelper.CreateSaturating(MaxValue).Should().Be(Int512MaxValueAsDouble); - - NumberBaseHelper.CreateSaturating(Zero).Should().Be(byte.MinValue); - NumberBaseHelper.CreateSaturating(Int16MinValue).Should().Be(short.MinValue); - NumberBaseHelper.CreateSaturating(Int32MinValue).Should().Be(int.MinValue); - NumberBaseHelper.CreateSaturating(Int64MinValue).Should().Be(long.MinValue); - NumberBaseHelper.CreateSaturating(Int128MinValue).Should().Be(Int128.MinValue); - NumberBaseHelper.CreateSaturating(MinValue).Should() - .Be(BigInteger.Parse( - "-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048")); - NumberBaseHelper.CreateSaturating(MinValue).Should().Be(Int512MinValueAsDouble); - } - [Fact] - public static void CreateTruncatingFromInt512Test() - { - NumberBaseHelper.CreateTruncating(ByteMaxValue).Should().Be(byte.MaxValue); - NumberBaseHelper.CreateTruncating(Int16MaxValue).Should().Be(short.MaxValue); - NumberBaseHelper.CreateTruncating(Int32MaxValue).Should().Be(int.MaxValue); - NumberBaseHelper.CreateTruncating(Int64MaxValue).Should().Be(long.MaxValue); - NumberBaseHelper.CreateTruncating(Int128MaxValue).Should().Be(Int128.MaxValue); - NumberBaseHelper.CreateTruncating(MaxValue).Should() - .Be(BigInteger.Parse( - "6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047")); - NumberBaseHelper.CreateTruncating(MaxValue).Should().Be(Int512MaxValueAsDouble); - - NumberBaseHelper.CreateTruncating(Zero).Should().Be(byte.MinValue); - NumberBaseHelper.CreateTruncating(Int16MinValue).Should().Be(short.MinValue); - NumberBaseHelper.CreateTruncating(Int32MinValue).Should().Be(int.MinValue); - NumberBaseHelper.CreateTruncating(Int64MinValue).Should().Be(long.MinValue); - NumberBaseHelper.CreateTruncating(Int128MinValue).Should().Be(Int128.MinValue); - NumberBaseHelper.CreateTruncating(MinValue).Should() - .Be(BigInteger.Parse( - "-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048")); - NumberBaseHelper.CreateTruncating(MinValue).Should().Be(Int512MinValueAsDouble); - } - - [Fact] - public static void IsCanonicalTest() - { - NumberBaseHelper.IsCanonical(default(Int)).Should().BeTrue(); - } - - [Fact] - public static void IsComplexNumberTest() - { - NumberBaseHelper.IsComplexNumber(default(Int)).Should().BeFalse(); - } - - [Fact] - public static void IsEvenIntegerTest() - { - NumberBaseHelper.IsEvenInteger(One).Should().BeFalse(); - NumberBaseHelper.IsEvenInteger(Two).Should().BeTrue(); - } - - [Fact] - public static void IsFiniteTest() - { - NumberBaseHelper.IsFinite(default(Int)).Should().BeTrue(); - } - - [Fact] - public static void IsImaginaryNumberTest() - { - NumberBaseHelper.IsImaginaryNumber(default(Int)).Should().BeFalse(); - } - - [Fact] - public static void IsInfinityTest() - { - NumberBaseHelper.IsInfinity(default(Int)).Should().BeFalse(); - } - - [Fact] - public static void IsIntegerTest() - { - NumberBaseHelper.IsInteger(default(Int)).Should().BeTrue(); - } - - [Fact] - public static void IsNaNTest() - { - NumberBaseHelper.IsNaN(default(Int)).Should().BeFalse(); - } - - [Fact] - public static void IsNegativeTest() - { - NumberBaseHelper.IsNegative(One).Should().BeFalse(); - NumberBaseHelper.IsNegative(NegativeOne).Should().BeTrue(); - } - - [Fact] - public static void IsNegativeInfinityTest() - { - NumberBaseHelper.IsNegativeInfinity(One).Should().BeFalse(); - } - - [Fact] - public static void IsNormalTest() - { - NumberBaseHelper.IsNormal(Zero).Should().BeFalse(); - NumberBaseHelper.IsNormal(One).Should().BeTrue(); - } - - [Fact] - public static void IsOddIntegerTest() - { - NumberBaseHelper.IsOddInteger(One).Should().BeTrue(); - NumberBaseHelper.IsOddInteger(Two).Should().BeFalse(); - } - - [Fact] - public static void IsPositiveTest() - { - NumberBaseHelper.IsPositive(One).Should().BeTrue(); - NumberBaseHelper.IsPositive(NegativeOne).Should().BeFalse(); - } - - [Fact] - public static void IsPositiveInfinityTest() - { - NumberBaseHelper.IsPositiveInfinity(One).Should().BeFalse(); - } - - [Fact] - public static void IsRealNumberTest() - { - NumberBaseHelper.IsRealNumber(default).Should().BeTrue(); - } - - [Fact] - public static void IsSubnormalTest() - { - NumberBaseHelper.IsSubnormal(default).Should().BeFalse(); - } - - [Fact] - public static void IsZeroTest() - { - NumberBaseHelper.IsZero(default).Should().BeTrue(); - NumberBaseHelper.IsZero(Zero).Should().BeTrue(); - NumberBaseHelper.IsZero(One).Should().BeFalse(); - NumberBaseHelper.IsZero(NegativeOne).Should().BeFalse(); - } - - [Fact] - public static void MaxMagnitudeTest() - { - NumberBaseHelper.MaxMagnitude(MaxValue, MinValue).Should().Be(MinValue); - NumberBaseHelper.MaxMagnitude(One, NegativeTwo).Should().Be(NegativeTwo); - NumberBaseHelper.MaxMagnitude(Two, NegativeOne).Should().Be(Two); - NumberBaseHelper.MaxMagnitude(NegativeOne, NegativeTwo).Should().Be(NegativeTwo); - } - - [Fact] - public static void MaxMagnitudeNumberTest() - { - NumberBaseHelper.MaxMagnitudeNumber(MaxValue, MinValue).Should().Be(MinValue); - NumberBaseHelper.MaxMagnitudeNumber(One, NegativeTwo).Should().Be(NegativeTwo); - NumberBaseHelper.MaxMagnitudeNumber(Two, NegativeOne).Should().Be(Two); - NumberBaseHelper.MaxMagnitudeNumber(NegativeOne, NegativeTwo).Should().Be(NegativeTwo); - } - - [Fact] - public static void MinMagnitudeTest() - { - NumberBaseHelper.MinMagnitude(MaxValue, MinValue).Should().Be(MaxValue); - NumberBaseHelper.MinMagnitude(One, NegativeTwo).Should().Be(One); - NumberBaseHelper.MinMagnitude(Two, NegativeOne).Should().Be(NegativeOne); - NumberBaseHelper.MinMagnitude(NegativeOne, NegativeTwo).Should().Be(NegativeOne); - } - - [Fact] - public static void MinMagnitudeNumberTest() - { - NumberBaseHelper.MinMagnitudeNumber(MaxValue, MinValue).Should().Be(MaxValue); - NumberBaseHelper.MinMagnitudeNumber(One, NegativeTwo).Should().Be(One); - NumberBaseHelper.MinMagnitudeNumber(Two, NegativeOne).Should().Be(NegativeOne); - NumberBaseHelper.MinMagnitudeNumber(NegativeOne, NegativeTwo).Should().Be(NegativeOne); - } - - [Fact] - public void ParseTest() - { - NumberBaseHelper.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047", System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture) - .Should().Be(Int512MaxValue) - .And.BeRankedEquallyTo(Int512MaxValue); - NumberBaseHelper.Parse("7FFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF", System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture) - .Should().Be(Int512MaxValue) - .And.BeRankedEquallyTo(Int512MaxValue); - NumberBaseHelper.Parse("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048", System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture) - .Should().Be(Int512MinValue) - .And.BeRankedEquallyTo(Int512MinValue); - NumberBaseHelper.Parse("8000000000000000" + - "0000000000000000" + - "0000000000000000" + - "0000000000000000" + - "0000000000000000" + - "0000000000000000" + - "0000000000000000" + - "0000000000000000", System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture) - .Should().Be(Int512MinValue) - .And.BeRankedEquallyTo(Int512MinValue); - - Assert.Throws(() => NumberBaseHelper.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048", System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture)); - Assert.Throws(() => NumberBaseHelper.Parse("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042049", System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture)); - } - - [Fact] - public void TryParseTest() - { - NumberBaseHelper.TryParse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047", System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture, out Int parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(Int512MaxValue) - .And.BeRankedEquallyTo(Int512MaxValue); - NumberBaseHelper.TryParse("7FFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF", System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(Int512MaxValue) - .And.BeRankedEquallyTo(Int512MaxValue); - NumberBaseHelper.TryParse("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048", System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(Int512MinValue) - .And.BeRankedEquallyTo(Int512MinValue); - NumberBaseHelper.TryParse("8000000000000000" + - "0000000000000000" + - "0000000000000000" + - "0000000000000000" + - "0000000000000000" + - "0000000000000000" + - "0000000000000000" + - "0000000000000000", System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(Int512MinValue) - .And.BeRankedEquallyTo(Int512MinValue); - - NumberBaseHelper.TryParse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048", System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeFalse(); - parsedValue.Should().Be(default); - NumberBaseHelper.TryParse("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042049", System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeFalse(); - parsedValue.Should().Be(default); - } - - [Fact] - public void ParseUtf8Test() - { - NumberBaseHelper.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047"u8, System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture) - .Should().Be(Int512MaxValue) - .And.BeRankedEquallyTo(Int512MaxValue); - NumberBaseHelper.Parse("7FFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF", System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture) - .Should().Be(Int512MaxValue) - .And.BeRankedEquallyTo(Int512MaxValue); - NumberBaseHelper.Parse("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048"u8, System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture) - .Should().Be(Int512MinValue) - .And.BeRankedEquallyTo(Int512MinValue); - NumberBaseHelper.Parse("8000000000000000"u8 + - "0000000000000000"u8 + - "0000000000000000"u8 + - "0000000000000000"u8 + - "0000000000000000"u8 + - "0000000000000000"u8 + - "0000000000000000"u8 + - "0000000000000000"u8, System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture) - .Should().Be(Int512MinValue) - .And.BeRankedEquallyTo(Int512MinValue); - - Assert.Throws(() => NumberBaseHelper.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048"u8, System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture)); - Assert.Throws(() => NumberBaseHelper.Parse("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042049"u8, System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture)); - } - - [Fact] - public void TryParseUtf8Test() - { - NumberBaseHelper.TryParse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047"u8, System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture, out Int parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(Int512MaxValue) - .And.BeRankedEquallyTo(Int512MaxValue); - NumberBaseHelper.TryParse("7FFFFFFFFFFFFFFF"u8 + - "FFFFFFFFFFFFFFFF"u8 + - "FFFFFFFFFFFFFFFF"u8 + - "FFFFFFFFFFFFFFFF"u8 + - "FFFFFFFFFFFFFFFF"u8 + - "FFFFFFFFFFFFFFFF"u8 + - "FFFFFFFFFFFFFFFF"u8 + - "FFFFFFFFFFFFFFFF"u8, System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(Int512MaxValue) - .And.BeRankedEquallyTo(Int512MaxValue); - NumberBaseHelper.TryParse("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048"u8, System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(Int512MinValue) - .And.BeRankedEquallyTo(Int512MinValue); - NumberBaseHelper.TryParse("8000000000000000"u8 + - "0000000000000000"u8 + - "0000000000000000"u8 + - "0000000000000000"u8 + - "0000000000000000"u8 + - "0000000000000000"u8 + - "0000000000000000"u8 + - "0000000000000000"u8, System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(Int512MinValue) - .And.BeRankedEquallyTo(Int512MinValue); - - NumberBaseHelper.TryParse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048"u8, System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeFalse(); - parsedValue.Should().Be(default); - NumberBaseHelper.TryParse("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042049"u8, System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeFalse(); - parsedValue.Should().Be(default); - } - #endregion - - #region ISignedNumber - [Fact] - public static void NegativeOneTest() - { - MathConstantsHelper.NegativeOne().Should().Be(NegativeOne); - } - #endregion - - #region IPowerFunctions - [Fact] - public void PowTest() - { - GenericFloatingPointFunctions.Pow(Zero, int.MaxValue).Should().Be(Zero); - GenericFloatingPointFunctions.Pow(One, int.MaxValue).Should().Be(One); - GenericFloatingPointFunctions.Pow(MaxValue, Zero).Should().Be(One); - GenericFloatingPointFunctions.Pow(MaxValue, One).Should().Be(MaxValue); - GenericFloatingPointFunctions.Pow(Two, Two).Should().Be(4); - GenericFloatingPointFunctions.Pow(Two, 4).Should().Be(16); - GenericFloatingPointFunctions.Pow(16, Two).Should().Be(256); - GenericFloatingPointFunctions.Pow(Two, 510) - .Should().Be(new Int( - 0x4000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); - - Assert.Throws(() => GenericFloatingPointFunctions.Pow(Two, NegativeOne)); - Assert.Throws(() => GenericFloatingPointFunctions.Pow(Two, 511)); - Assert.Throws(() => GenericFloatingPointFunctions.Pow(Two + Two, 510)); - } - #endregion - } -} diff --git a/src/MissingValues.Tests.Old/Core/Int512Test.cs b/src/MissingValues.Tests.Old/Core/Int512Test.cs deleted file mode 100644 index 88a9333..0000000 --- a/src/MissingValues.Tests.Old/Core/Int512Test.cs +++ /dev/null @@ -1,294 +0,0 @@ -using FluentAssertions; -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Numerics; -using System.Text; -using System.Text.Json; -using System.Text.Unicode; -using System.Threading.Tasks; -using Xunit; - -using Int = MissingValues.Int512; - -namespace MissingValues.Tests.Core -{ - public partial class Int512Test - { - private static readonly Int Int512MaxValue = new( - new UInt256(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), - new UInt256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF) - ); - private static readonly Int Int512MinValue = new( - new UInt256(0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), - new UInt256(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000) - ); - - [Fact] - public void Ctor_Empty() - { - var i = new Int(); - Assert.Equal(0, i); - } - - [Fact] - public void Ctor_Value() - { - var i = new Int(7); - Assert.Equal(7, i); - } - - [Fact] - public void Cast_ToByte() - { - byte.MinValue.Should().Be((byte)Zero); - byte.MaxValue.Should().Be((byte)ByteMaxValue); - } - - [Fact] - public void Cast_ToInt16() - { - short.MinValue.Should().Be((short)Int16MinValue); - short.MaxValue.Should().Be((short)Int16MaxValue); - } - - [Fact] - public void Cast_ToInt32() - { - int.MinValue.Should().Be((int)Int32MinValue); - int.MaxValue.Should().Be((int)Int32MaxValue); - } - - [Fact] - public void Cast_ToInt64() - { - long.MinValue.Should().Be((long)Int64MinValue); - long.MaxValue.Should().Be((long)Int64MaxValue); - } - - [Fact] - public void Cast_ToInt128() - { - Int128.MinValue.Should().Be((Int128)Int128MinValue); - Int128.MaxValue.Should().Be((Int128)Int128MaxValue); - } - - [Fact] - public void Cast_ToInt256() - { - Int256.MinValue.Should().Be((Int256)Int256MinValue); - Int256.MaxValue.Should().Be((Int256)Int256MaxValue); - } - - [Fact] - public void Cast_ToBigInteger() - { - BigInteger.One.Should().Be((BigInteger)One); - BigInteger.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047") - .Should().Be((BigInteger)MaxValue); - BigInteger.Parse("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048") - .Should().Be((BigInteger)MinValue); - } - - [Fact] - public void Cast_ToDouble() - { - const double max = 6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047.0; - const double min = -6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048.0; - - max.Should().Be((double)Int512MaxValue); - min.Should().Be((double)Int512MinValue); - } - - [Fact] - public void ToDecStringTest() - { - MaxValue.ToString("D", CultureInfo.CurrentCulture) - .Should().Be("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047"); - MinValue.ToString("D", CultureInfo.CurrentCulture) - .Should().Be("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048"); - } - [Fact] - public void ToHexStringTest() - { - One.ToString("X", CultureInfo.CurrentCulture) - .Should().Be("1"); - ((Int)sbyte.MaxValue).ToString("X", CultureInfo.CurrentCulture) - .Should().Be("7F"); - ((Int)short.MaxValue).ToString("X", CultureInfo.CurrentCulture) - .Should().Be("7FFF"); - ((Int)int.MaxValue).ToString("X", CultureInfo.CurrentCulture) - .Should().Be("7FFFFFFF"); - ((Int)long.MaxValue).ToString("X", CultureInfo.CurrentCulture) - .Should().Be("7FFFFFFFFFFFFFFF"); - ((Int)Int128.MaxValue).ToString("X", CultureInfo.CurrentCulture) - .Should().Be("7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"); - - MaxValue.ToString("X128", CultureInfo.CurrentCulture) - .Should() - .Be("7FFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFF"); - MinValue.ToString("X128", CultureInfo.CurrentCulture) - .Should() - .Be("8000000000000000" + - "0000000000000000" + - "0000000000000000" + - "0000000000000000" + - "0000000000000000" + - "0000000000000000" + - "0000000000000000" + - "0000000000000000"); - } - [Fact] - public void ToBinStringTest() - { - One.ToString("B", CultureInfo.CurrentCulture) - .Should().Be("1"); - ((Int)sbyte.MaxValue).ToString("B", CultureInfo.CurrentCulture) - .Should().Be("1111111"); - ((Int)short.MaxValue).ToString("B", CultureInfo.CurrentCulture) - .Should().Be("111111111111111"); - ((Int)int.MaxValue).ToString("B", CultureInfo.CurrentCulture) - .Should().Be("1111111111111111111111111111111"); - ((Int)long.MaxValue).ToString("B", CultureInfo.CurrentCulture) - .Should().Be("111111111111111111111111111111111111111111111111111111111111111"); - ((Int)Int128.MaxValue).ToString("B", CultureInfo.CurrentCulture) - .Should().Be("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"); - - MaxValue.ToString("B512", CultureInfo.CurrentCulture) - .Should() - .Be("011111111111111111111111111111111" + - "111111111111111111111111111111111" + - "111111111111111111111111111111111" + - "111111111111111111111111111111111" + - "111111111111111111111111111111111" + - "111111111111111111111111111111111" + - "111111111111111111111111111111111" + - "111111111111111111111111111111111" + - "111111111111111111111111111111111" + - "111111111111111111111111111111111" + - "111111111111111111111111111111111" + - "111111111111111111111111111111111" + - "111111111111111111111111111111111" + - "111111111111111111111111111111111" + - "11111111111111111111111111111111111111111111111111"); - MinValue.ToString("B512", CultureInfo.CurrentCulture) - .Should() - .Be("100000000000000000000000000000000" + - "000000000000000000000000000000000" + - "000000000000000000000000000000000" + - "000000000000000000000000000000000" + - "000000000000000000000000000000000" + - "000000000000000000000000000000000" + - "000000000000000000000000000000000" + - "000000000000000000000000000000000" + - "000000000000000000000000000000000" + - "000000000000000000000000000000000" + - "000000000000000000000000000000000" + - "000000000000000000000000000000000" + - "000000000000000000000000000000000" + - "000000000000000000000000000000000" + - "00000000000000000000000000000000000000000000000000"); - } - - [Fact] - public void ToDecFormatStringTest() - { - MaxValue.ToString().Should().Be($"{MaxValue:D}"); - MinValue.ToString().Should().Be($"{MinValue:D}"); - } - [Fact] - public void ToHexFormatStringTest() - { - MaxValue.ToString("X128", CultureInfo.CurrentCulture).Should().Be($"{MaxValue:X128}"); - MinValue.ToString("X128", CultureInfo.CurrentCulture).Should().Be($"{MinValue:X128}"); - } - [Fact] - public void ToBinFormatStringTest() - { - MaxValue.ToString("B512", CultureInfo.CurrentCulture).Should().Be($"{MaxValue:B512}"); - MinValue.ToString("B512", CultureInfo.CurrentCulture).Should().Be($"{MinValue:B512}"); - } - - [Fact] - public void ToDecFormatUtf8StringTest() - { - ReadOnlySpan toString = Encoding.UTF8.GetBytes(MaxValue.ToString()!); - - Span format = stackalloc byte[toString.Length]; - bool success = Utf8.TryWrite(format, CultureInfo.CurrentCulture, $"{MaxValue:D}", out _); - Assert.Equal(toString, format); - success.Should().BeTrue(); - - - toString = Encoding.UTF8.GetBytes(MinValue.ToString()!); - - format = stackalloc byte[toString.Length]; - success = Utf8.TryWrite(format, CultureInfo.CurrentCulture, $"{MinValue:D}", out _); - Assert.Equal(toString, format); - success.Should().BeTrue(); - } - [Fact] - public void ToHexFormatUtf8StringTest() - { - ReadOnlySpan toString = Encoding.UTF8.GetBytes(MaxValue.ToString("X128", CultureInfo.CurrentCulture)!); - - Span format = stackalloc byte[toString.Length]; - bool success = Utf8.TryWrite(format, CultureInfo.CurrentCulture, $"{MaxValue:X128}", out _); - Assert.Equal(toString, format); - success.Should().BeTrue(); - - - toString = Encoding.UTF8.GetBytes(MinValue.ToString("X128", CultureInfo.CurrentCulture)!); - - format = stackalloc byte[toString.Length]; - success = Utf8.TryWrite(format, CultureInfo.CurrentCulture, $"{MinValue:X128}", out _); - Assert.Equal(toString, format); - success.Should().BeTrue(); - } - [Fact] - public void ToBinFormatUtf8StringTest() - { - ReadOnlySpan toString = Encoding.UTF8.GetBytes(MaxValue.ToString("B512", CultureInfo.CurrentCulture)!); - - Span format = stackalloc byte[toString.Length]; - bool success = Utf8.TryWrite(format, CultureInfo.CurrentCulture, $"{MaxValue:B512}", out _); - Assert.Equal(toString, format); - success.Should().BeTrue(); - - - toString = Encoding.UTF8.GetBytes(MinValue.ToString("B512", CultureInfo.CurrentCulture)!); - - format = stackalloc byte[toString.Length]; - success = Utf8.TryWrite(format, CultureInfo.CurrentCulture, $"{MinValue:B512}", out _); - Assert.Equal(toString, format); - success.Should().BeTrue(); - } - - [Fact] - public void JsonWriteTest() - { - JsonSerializer.Serialize(new object[] { MaxValue, MinValue, One, NegativeOne }) - .Should().Be("[6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047,-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048,1,-1]"); - } - [Fact] - public void JsonReadTest() - { - JsonSerializer.Deserialize("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047") - .Should().Be(MaxValue); - JsonSerializer.Deserialize("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047"u8) - .Should().Be(MaxValue); - JsonSerializer.Deserialize("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048") - .Should().Be(MinValue); - JsonSerializer.Deserialize("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048"u8) - .Should().Be(MinValue); - } - } -} diff --git a/src/MissingValues.Tests.Old/Core/NumberFormatTest.cs b/src/MissingValues.Tests.Old/Core/NumberFormatTest.cs deleted file mode 100644 index 7200d85..0000000 --- a/src/MissingValues.Tests.Old/Core/NumberFormatTest.cs +++ /dev/null @@ -1,104 +0,0 @@ -using MissingValues.Tests.Helpers; -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace MissingValues.Tests.Core -{ - public class NumberFormatTest - { - private static readonly Quad _decimalSampleValue = Values.CreateFloat(0x400C_81CD_6E63_1F8A, 0x0902_DE00_D1B7_1759); // 12345.6789 - private static readonly NumberFormatInfo CustomInfo = new() - { - PositiveSign = "+", - NegativeSign = "-", - CurrencyPositivePattern = 0, - CurrencyNegativePattern = 2, - CurrencySymbol = "$", - CurrencyDecimalDigits = 2, - CurrencyDecimalSeparator = ".", - CurrencyGroupSeparator = ",", - CurrencyGroupSizes = [3], - NumberGroupSeparator = "_", - NumberGroupSizes = [2], - NumberDecimalDigits = 5, - NumberDecimalSeparator = ".", - NumberNegativePattern = 1, - PositiveInfinitySymbol = "+Inf", - NegativeInfinitySymbol = "-Inf", - NaNSymbol = "NaN", - }; - - private static readonly (IFormattable, string, NumberFormatInfo?, string)[] _formats = - [ - (Int256.MaxValue, "E", NumberFormatInfo.CurrentInfo, "5,789604E+76"), - (Int256.MaxValue, "e25", NumberFormatInfo.CurrentInfo, "5,7896044618658097711785493e+76"), - (Int256.MinValue, "E", NumberFormatInfo.CurrentInfo, "-5,789604E+76"), - (Int256.MinValue, "e25", NumberFormatInfo.CurrentInfo, "-5,7896044618658097711785493e+76"), - (Int512.MaxValue, "E", NumberFormatInfo.CurrentInfo, "6,703904E+153"), - (Int512.MaxValue, "e25", NumberFormatInfo.CurrentInfo, "6,7039039649712985497870125e+153"), - (Int512.MinValue, "E", NumberFormatInfo.CurrentInfo, "-6,703904E+153"), - (Int512.MinValue, "e25", NumberFormatInfo.CurrentInfo, "-6,7039039649712985497870125e+153"), - (Int512.MinValue, "F3", NumberFormatInfo.InvariantInfo, "-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048.000"), - (_decimalSampleValue, "F", NumberFormatInfo.InvariantInfo, "12345.68"), - (_decimalSampleValue, "F", CustomInfo, "12345.67890"), - (Int512.MinValue, "N", NumberFormatInfo.InvariantInfo, "-6,703,903,964,971,298,549,787,012,499,102,923,063,739,682,910,296,196,688,861,780,721,860,882,015,036,773,488,400,937,149,083,451,713,845,015,929,093,243,025,426,876,941,405,973,284,973,216,824,503,042,048.00"), - (_decimalSampleValue, "N3", NumberFormatInfo.InvariantInfo, "12,345.679"), - (_decimalSampleValue, "N", CustomInfo, "1_23_45.67890"), - (Int512.MinValue, "C", CustomInfo, "$-6,703,903,964,971,298,549,787,012,499,102,923,063,739,682,910,296,196,688,861,780,721,860,882,015,036,773,488,400,937,149,083,451,713,845,015,929,093,243,025,426,876,941,405,973,284,973,216,824,503,042,048.00"), - (_decimalSampleValue, "C", CustomInfo, "$12,345.68"), - ]; - private static readonly (string, NumberStyles, NumberFormatInfo?, Int512, bool)[] _parseInt512 = - [ - ("1E200", NumberStyles.Number | NumberStyles.AllowExponent, NumberFormatInfo.CurrentInfo, default, false), - ("2,5E10", NumberStyles.Number | NumberStyles.AllowExponent, NumberFormatInfo.CurrentInfo, 25_000_000_000, true), - ("1E10", NumberStyles.Number | NumberStyles.AllowExponent, NumberFormatInfo.CurrentInfo, 10_000_000_000, true), - ("1,000", NumberStyles.Number, NumberFormatInfo.CurrentInfo, Int512.One, true), - ("1.000,0", NumberStyles.Number, NumberFormatInfo.CurrentInfo, 1_000, true), - ("1.000.000", NumberStyles.Number, NumberFormatInfo.CurrentInfo, 1_000_000, true), - ("1.000.000.000,00", NumberStyles.Number, NumberFormatInfo.CurrentInfo, 1_000_000_000, true), - ("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048.000", NumberStyles.Number, NumberFormatInfo.InvariantInfo, Int512.MinValue, true), - ("-6,703,903,964,971,298,549,787,012,499,102,923,063,739,682,910,296,196,688,861,780,721,860,882,015,036,773,488,400,937,149,083,451,713,845,015,929,093,243,025,426,876,941,405,973,284,973,216,824,503,042,048", NumberStyles.Number, NumberFormatInfo.InvariantInfo, Int512.MinValue, true), - ("$-6,703,903,964,971,298,549,787,012,499,102,923,063,739,682,910,296,196,688,861,780,721,860,882,015,036,773,488,400,937,149,083,451,713,845,015,929,093,243,025,426,876,941,405,973,284,973,216,824,503,042,048.00", NumberStyles.Currency, CustomInfo, Int512.MinValue, true), - ]; - private static readonly (string, NumberStyles, NumberFormatInfo?, Quad, bool)[] _parseQuad = - [ - ("2,5E-1", NumberStyles.Float, NumberFormatInfo.CurrentInfo, QuadTest.Quarter, true), - ("0,250", NumberStyles.Float, NumberFormatInfo.CurrentInfo, QuadTest.Quarter, true), - ("$-0.25", NumberStyles.Currency, CustomInfo, QuadTest.NegativeQuarter, true), - ("1,000", NumberStyles.Float, NumberFormatInfo.CurrentInfo, Quad.One, true), - ("1.000,0", NumberStyles.Float | NumberStyles.AllowThousands, NumberFormatInfo.CurrentInfo, QuadTest.Thousand, true), - ("-1.000,0", NumberStyles.Float | NumberStyles.AllowThousands, NumberFormatInfo.CurrentInfo, QuadTest.NegativeThousand, true), - ]; - - public static readonly FormatStringTheoryData FormatsTheoryData = new(_formats); - - public static readonly FormatParsingTheoryData ParseInt512TheoryData = new(_parseInt512); - public static readonly FormatParsingTheoryData ParseQuadTheoryData = new(_parseQuad); - - [Theory] - [MemberData(nameof(FormatsTheoryData))] - public void FormattingTest(IFormattable value, string fmt, NumberFormatInfo? info, string expected) - { - string actual = value.ToString(fmt, info); - actual.Should().Be(expected); - } - [Theory] - [MemberData(nameof(ParseInt512TheoryData))] - public void IntegerParsingTest(string s, NumberStyles style, NumberFormatInfo? info, Int512 expected, bool success) - { - Int512.TryParse(s, style, info, out Int512 actual).Should().Be(success); - actual.Should().Be(expected); - } - [Theory] - [MemberData(nameof(ParseQuadTheoryData))] - public void FloatingPointParsingTest(string s, NumberStyles style, NumberFormatInfo? info, Quad expected, bool success) - { - Quad.TryParse(s, style, info, out Quad actual).Should().Be(success); - actual.Should().Be(expected); - } - } -} diff --git a/src/MissingValues.Tests.Old/Core/OctoTest.GenericMath.cs b/src/MissingValues.Tests.Old/Core/OctoTest.GenericMath.cs deleted file mode 100644 index 8778d68..0000000 --- a/src/MissingValues.Tests.Old/Core/OctoTest.GenericMath.cs +++ /dev/null @@ -1,921 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -using Float = MissingValues.Octo; - -namespace MissingValues.Tests.Core -{ - public partial class OctoTest - { - #region Generic Math Operators - [Theory] - [MemberData(nameof(UnaryNegationOperationTheoryData))] - public static void op_UnaryNegationTest(Float self, Float result) - { - MathOperatorsHelper.UnaryNegationOperation(self) - .Should().Be(result) - .And.BeBitwiseEquivalentTo(result); - } - [Theory] - [MemberData(nameof(AdditionOperationTheoryData))] - public static void op_AdditionTest(Float left, Float right, Float result) - { - MathOperatorsHelper.AdditionOperation(left, right) - .Should().Be(result) - .And.BeBitwiseEquivalentTo(result); - } - [Theory] - [MemberData(nameof(IncrementOperationTheoryData))] - public static void op_IncrementTest(Float self, Float result) - { - MathOperatorsHelper.IncrementOperation(self) - .Should().Be(result) - .And.BeBitwiseEquivalentTo(result); - } - [Theory] - [MemberData(nameof(SubtractionOperationTheoryData))] - public static void op_SubtractionTest(Float left, Float right, Float result) - { - MathOperatorsHelper.SubtractionOperation(left, right) - .Should().Be(result) - .And.BeBitwiseEquivalentTo(result); - } - [Theory] - [MemberData(nameof(DecrementOperationTheoryData))] - public static void op_DecrementTest(Float self, Float result) - { - MathOperatorsHelper.DecrementOperation(self) - .Should().Be(result) - .And.BeBitwiseEquivalentTo(result); - } - [Theory] - [MemberData(nameof(MultiplicationOperationTheoryData))] - public static void op_MultiplicationTest(Float left, Float right, Float result) - { - MathOperatorsHelper.MultiplicationOperation(left, right) - .Should().Be(result) - .And.BeBitwiseEquivalentTo(result); - } - [Theory] - [MemberData(nameof(DivisionOperationTheoryData))] - public static void op_DivisionTest(Float left, Float right, Float result) - { - MathOperatorsHelper.DivisionOperation(left, right) - .Should().Be(result) - .And.BeBitwiseEquivalentTo(result); - } - #endregion - - #region IBinaryFloatingPointIEEE - [Fact] - public static void AllBitsSetTest() - { - BinaryNumberHelper.AllBitsSet.Should().Be(BitwiseOperatorsHelper.OnesComplementOperation(Zero)); - } - [Fact] - public static void IsPow2Test() - { - BinaryNumberHelper.IsPow2(Half).Should().BeTrue(); - BinaryNumberHelper.IsPow2(One).Should().BeTrue(); - BinaryNumberHelper.IsPow2(Two).Should().BeTrue(); - BinaryNumberHelper.IsPow2(Three).Should().BeFalse(); - BinaryNumberHelper.IsPow2(NegativeTwo).Should().BeFalse(); - } - #endregion - - #region IFloatingPointIEEE - [Fact] - public static void EpsilonTest() - { - FloatingPointIeee754.Epsilon.Should().Be(Float.Epsilon); - MathOperatorsHelper.AdditionOperation(FloatingPointIeee754.Epsilon, NumberBaseHelper.Zero) - .Should().NotBe(Float.Zero); - } - [Fact] - public static void NaNTest() - { - FloatingPointIeee754.NaN - .Should().Be(Float.NaN) - .And.BeNaN(); - NumberBaseHelper.IsNaN(FloatingPointIeee754.NaN).Should().BeTrue(); - } - [Fact] - public static void NegativeInfinityTest() - { - FloatingPointIeee754.NegativeInfinity.Should().Be(Float.NegativeInfinity); - NumberBaseHelper.IsInfinity(FloatingPointIeee754.NegativeInfinity).Should().BeTrue(); - NumberBaseHelper.IsNegativeInfinity(FloatingPointIeee754.NegativeInfinity).Should().BeTrue(); - NumberBaseHelper.IsPositiveInfinity(FloatingPointIeee754.NegativeInfinity).Should().BeFalse(); - } - [Fact] - public static void PositiveInfinityTest() - { - FloatingPointIeee754.PositiveInfinity.Should().Be(Float.PositiveInfinity); - NumberBaseHelper.IsInfinity(FloatingPointIeee754.PositiveInfinity).Should().BeTrue(); - NumberBaseHelper.IsNegativeInfinity(FloatingPointIeee754.PositiveInfinity).Should().BeFalse(); - NumberBaseHelper.IsPositiveInfinity(FloatingPointIeee754.PositiveInfinity).Should().BeTrue(); - } - [Fact] - public static void BitDecrementTest() - { - FloatingPointIeee754.BitDecrement(One) - .Should().Be(Values.CreateFloat(0x3FFFEFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); - FloatingPointIeee754.BitDecrement(NegativeOne) - .Should().Be(Values.CreateFloat(0xBFFFF00000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000001)); - FloatingPointIeee754.BitDecrement(Zero) - .Should().Be(-Float.Epsilon); - FloatingPointIeee754.BitDecrement(Float.NegativeInfinity) - .Should().Be(Float.NegativeInfinity); - FloatingPointIeee754.BitDecrement(Float.PositiveInfinity) - .Should().Be(Float.MaxValue); - } - [Fact] - public static void BitIncrementTest() - { - FloatingPointIeee754.BitIncrement(One) - .Should().Be(Values.CreateFloat(0x3FFFF00000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000001)); - FloatingPointIeee754.BitIncrement(NegativeOne) - .Should().Be(Values.CreateFloat(0xBFFFEFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); - FloatingPointIeee754.BitIncrement(NegativeZero) - .Should().Be(Float.Epsilon); - FloatingPointIeee754.BitIncrement(Float.NegativeInfinity) - .Should().Be(Float.MinValue); - FloatingPointIeee754.BitIncrement(Float.PositiveInfinity) - .Should().Be(Float.PositiveInfinity); - } - [Theory] - [MemberData(nameof(FMATheoryData))] - public static void FusedMultiplyAddTest(Float left, Float right, Float addend, Float result) - { - FloatingPointIeee754.FusedMultiplyAdd(left, right, addend) - .Should().Be(result) - .And.BeBitwiseEquivalentTo(result); - } - [Fact] - public static void IeeeRemainderTest() - { - FloatingPointIeee754.Ieee754Remainder(Ten, Three).Should().Be(One); - FloatingPointIeee754.Ieee754Remainder(Ten, Two).Should().Be(Zero); - FloatingPointIeee754.Ieee754Remainder(NegativeTen, Three).Should().Be(NegativeOne); - FloatingPointIeee754.Ieee754Remainder(NegativeTen, Two).Should().Be(NegativeZero); - FloatingPointIeee754.Ieee754Remainder(NegativeTen, Zero).Should().Be(Float.NaN); - } - [Fact] - public static void ILogBTest() - { - FloatingPointIeee754.ILogB(Values.CreateFloat(0x4000_9000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)) - .Should().Be(10); - FloatingPointIeee754.ILogB(Values.CreateFloat(0x4003_F000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)) - .Should().Be(64); - FloatingPointIeee754.ILogB(Values.CreateFloat(0x4007_F000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)) - .Should().Be(128); - FloatingPointIeee754.ILogB(Values.CreateFloat(0xC003_F000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)) - .Should().Be(64); - FloatingPointIeee754.ILogB(Zero) - .Should().Be(int.MinValue); - } - [Fact] - public static void ReciprocalEstimateTest() - { - FloatingPointIeee754.ReciprocalEstimate(Two) - .Should().Be(Half); - FloatingPointIeee754.ReciprocalEstimate(Four) - .Should().BeApproximately(Values.CreateFloat(0x3FFF_D000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), Delta); - } - [Fact] - public static void ScaleBTest() - { - FloatingPointIeee754.ScaleB(Two, 3) - .Should().Be(Values.CreateFloat(0x4000_3000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); - FloatingPointIeee754.ScaleB(NegativeTwo, 3) - .Should().Be(Values.CreateFloat(0xC000_3000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); - FloatingPointIeee754.ScaleB(Zero, 6) - .Should().Be(Zero); - FloatingPointIeee754.ScaleB(Two, 300000) - .Should().Be(Float.PositiveInfinity); - FloatingPointIeee754.ScaleB(Two, -300000) - .Should().Be(Zero); - } - [Fact] - public static void SqrtTest() - { - GenericFloatingPointFunctions.Sqrt(Zero) - .Should().Be(Zero); - GenericFloatingPointFunctions.Sqrt(-Zero) - .Should().Be(-Zero); - GenericFloatingPointFunctions.Sqrt(Float.PositiveInfinity) - .Should().Be(Float.PositiveInfinity); - GenericFloatingPointFunctions.Sqrt(NegativeFour) - .Should().Be(Float.NaN); - GenericFloatingPointFunctions.Sqrt(Float.NaN) - .Should().Be(Float.NaN); - - GenericFloatingPointFunctions.Sqrt(Hundred) - .Should().BeApproximately(Ten, Delta); - } - #endregion - - #region IFloatingPoint - [Theory] - [MemberData(nameof(RoundAwayFromZeroTheoryData))] - [MemberData(nameof(RoundToEvenTheoryData))] - [MemberData(nameof(RoundToNegativeInfinityTheoryData))] - [MemberData(nameof(RoundToPositiveInfinityTheoryData))] - [MemberData(nameof(RoundToZeroTheoryData))] - public static void RoundTest(Float self, int digits, MidpointRounding midpointRounding, Float result) - { - Float.Round(self, digits, midpointRounding).Should().Be(result); - } - #endregion - - #region IFloatingPointConstants - [Fact] - public static void ConstantPiTest() - { - Assert.Equal(Float.Pi, MathConstantsHelper.Pi()); - } - [Fact] - public static void ConstantTauTest() - { - Assert.Equal(Float.Tau, MathConstantsHelper.Tau()); - } - [Fact] - public static void ConstantETest() - { - Assert.Equal(Float.E, MathConstantsHelper.E()); - } - #endregion - - #region IMinMaxValue - [Fact] - public static void MaxValueTest() - { - MaxValue.Should().Be(MathConstantsHelper.MaxValue()); - } - - [Fact] - public static void MinValueTest() - { - MinValue.Should().Be(MathConstantsHelper.MinValue()); - } - #endregion - - #region ISignedNumber - [Fact] - public static void NegativeOneTest() - { - MathConstantsHelper.NegativeOne().Should().Be(NegativeOne); - MathConstantsHelper.NegativeOne().Should().Be(-One); - } - #endregion - - #region INumber - [Fact] - public static void ClampTest() - { - NumberHelper.Clamp(Float.NegativeInfinity, One, Thousand) - .Should().Be(One); - NumberHelper.Clamp(Float.MinValue, One, Thousand) - .Should().Be(One); - NumberHelper.Clamp(NegativeOne, One, Thousand) - .Should().Be(One); - NumberHelper.Clamp(-GreatestSubnormal, One, Thousand) - .Should().Be(One); - NumberHelper.Clamp(-Float.Epsilon, One, Thousand) - .Should().Be(One); - NumberHelper.Clamp(NegativeZero, One, Thousand) - .Should().Be(One); - NumberHelper.Clamp(Float.NaN, One, Thousand) - .Should().Be(Float.NaN); - NumberHelper.Clamp(Zero, One, Thousand) - .Should().Be(One); - NumberHelper.Clamp(Float.Epsilon, One, Thousand) - .Should().Be(One); - NumberHelper.Clamp(GreatestSubnormal, One, Thousand) - .Should().Be(One); - NumberHelper.Clamp(One, One, Thousand) - .Should().Be(One); - NumberHelper.Clamp(Float.MaxValue, One, Thousand) - .Should().Be(Thousand); - NumberHelper.Clamp(Float.PositiveInfinity, One, Thousand) - .Should().Be(Thousand); - } - [Fact] - public static void CopySignTest() - { - NumberHelper.CopySign(One, NegativeOne) - .Should().Be(NegativeOne); - NumberHelper.CopySign(NegativeOne, One) - .Should().Be(One); - NumberHelper.CopySign(Thousand, NegativeOne) - .Should().Be(NegativeThousand); - NumberHelper.CopySign(NegativeHundred, NegativeOne) - .Should().Be(NegativeHundred); - } - [Fact] - public static void MaxTest() - { - NumberHelper.Max(Float.NegativeInfinity, One) - .Should().Be(One); - NumberHelper.Max(Float.MinValue, One) - .Should().Be(One); - NumberHelper.Max(NegativeOne, One) - .Should().Be(One); - NumberHelper.Max(-GreatestSubnormal, One) - .Should().Be(One); - NumberHelper.Max(-Float.Epsilon, One) - .Should().Be(One); - NumberHelper.Max(NegativeZero, One) - .Should().Be(One); - NumberHelper.Max(Float.NaN, One) - .Should().Be(Float.NaN); - NumberHelper.Max(Zero, One) - .Should().Be(One); - NumberHelper.Max(Float.Epsilon, One) - .Should().Be(One); - NumberHelper.Max(GreatestSubnormal, One) - .Should().Be(One); - NumberHelper.Max(One, One) - .Should().Be(One); - NumberHelper.Max(Float.MaxValue, One) - .Should().Be(Float.MaxValue); - NumberHelper.Max(Float.PositiveInfinity, One) - .Should().Be(Float.PositiveInfinity); - } - [Fact] - public static void MaxNumberTest() - { - NumberHelper.MaxNumber(Float.NegativeInfinity, One) - .Should().Be(One); - NumberHelper.MaxNumber(Float.MinValue, One) - .Should().Be(One); - NumberHelper.MaxNumber(NegativeOne, One) - .Should().Be(One); - NumberHelper.MaxNumber(-GreatestSubnormal, One) - .Should().Be(One); - NumberHelper.MaxNumber(-Float.Epsilon, One) - .Should().Be(One); - NumberHelper.MaxNumber(NegativeZero, One) - .Should().Be(One); - NumberHelper.MaxNumber(Float.NaN, One) - .Should().Be(One); - NumberHelper.MaxNumber(Zero, One) - .Should().Be(One); - NumberHelper.MaxNumber(Float.Epsilon, One) - .Should().Be(One); - NumberHelper.MaxNumber(GreatestSubnormal, One) - .Should().Be(One); - NumberHelper.MaxNumber(One, One) - .Should().Be(One); - NumberHelper.MaxNumber(Float.MaxValue, One) - .Should().Be(Float.MaxValue); - NumberHelper.MaxNumber(Float.PositiveInfinity, One) - .Should().Be(Float.PositiveInfinity); - } - [Fact] - public static void MinTest() - { - NumberHelper.Min(Float.NegativeInfinity, One) - .Should().Be(Float.NegativeInfinity); - NumberHelper.Min(Float.MinValue, One) - .Should().Be(Float.MinValue); - NumberHelper.Min(NegativeOne, One) - .Should().Be(NegativeOne); - NumberHelper.Min(-GreatestSubnormal, One) - .Should().Be(-GreatestSubnormal); - NumberHelper.Min(-Float.Epsilon, One) - .Should().Be(-Float.Epsilon); - NumberHelper.Min(NegativeZero, One) - .Should().Be(NegativeZero); - NumberHelper.Min(Float.NaN, One) - .Should().Be(Float.NaN); - NumberHelper.Min(Zero, One) - .Should().Be(Zero); - NumberHelper.Min(Float.Epsilon, One) - .Should().Be(Float.Epsilon); - NumberHelper.Min(GreatestSubnormal, One) - .Should().Be(GreatestSubnormal); - NumberHelper.Min(One, One) - .Should().Be(One); - NumberHelper.Min(Float.MaxValue, One) - .Should().Be(One); - NumberHelper.Min(Float.PositiveInfinity, One) - .Should().Be(One); - } - [Fact] - public static void MinNumberTest() - { - NumberHelper.MinNumber(Float.NegativeInfinity, One) - .Should().Be(Float.NegativeInfinity); - NumberHelper.MinNumber(Float.MinValue, One) - .Should().Be(Float.MinValue); - NumberHelper.MinNumber(NegativeOne, One) - .Should().Be(NegativeOne); - NumberHelper.MinNumber(-GreatestSubnormal, One) - .Should().Be(-GreatestSubnormal); - NumberHelper.MinNumber(-Float.Epsilon, One) - .Should().Be(-Float.Epsilon); - NumberHelper.MinNumber(NegativeZero, One) - .Should().Be(NegativeZero); - NumberHelper.MinNumber(Float.NaN, One) - .Should().Be(One); - NumberHelper.MinNumber(Zero, One) - .Should().Be(Zero); - NumberHelper.MinNumber(Float.Epsilon, One) - .Should().Be(Float.Epsilon); - NumberHelper.MinNumber(GreatestSubnormal, One) - .Should().Be(GreatestSubnormal); - NumberHelper.MinNumber(One, One) - .Should().Be(One); - NumberHelper.MinNumber(Float.MaxValue, One) - .Should().Be(One); - NumberHelper.MinNumber(Float.PositiveInfinity, One) - .Should().Be(One); - } - [Fact] - public static void SignTest() - { - NumberHelper.Sign(One) - .Should().Be(1); - NumberHelper.Sign(NegativeOne) - .Should().Be(-1); - NumberHelper.Sign(Ten) - .Should().Be(1); - NumberHelper.Sign(NegativeTen) - .Should().Be(-1); - NumberHelper.Sign(Zero) - .Should().Be(0); - NumberHelper.Sign(NegativeZero) - .Should().Be(0); - } - #endregion - - #region INumberBase - [Fact] - public static void OneTest() - { - Assert.Equal(One, NumberBaseHelper.One); - } - [Fact] - public static void ZeroTest() - { - Assert.Equal(Zero, NumberBaseHelper.Zero); - } - [Fact] - public static void RadixTest() - { - Assert.Equal(Radix, NumberBaseHelper.Radix); - } - [Fact] - public static void AbsTest() - { - NumberBaseHelper.Abs(One).Should().Be(One); - NumberBaseHelper.Abs(NegativeOne).Should().Be(One); - NumberBaseHelper.Abs(NegativeHalf).Should().Be(Half); - NumberBaseHelper.Abs(NegativeQuarter).Should().Be(Quarter); - NumberBaseHelper.Abs(NegativeZero).Should().Be(Zero); - NumberBaseHelper.Abs(Float.NegativeInfinity).Should().Be(Float.PositiveInfinity); - } - [Fact] - public static void CreateCheckedFromQuadTest() - { - NumberBaseHelper.CreateChecked(ByteMaxValue).Should().Be(byte.MaxValue); - NumberBaseHelper.CreateChecked(Int16MaxValue).Should().Be(short.MaxValue); - NumberBaseHelper.CreateChecked(Int32MaxValue).Should().Be(int.MaxValue); - NumberBaseHelper.CreateChecked(Int64MaxValue).Should().Be(long.MaxValue); - NumberBaseHelper.CreateChecked(Int128MaxValue).Should().Be(Int128.MaxValue); - NumberBaseHelper.CreateChecked(TwoOver255) - .Should().Be(UInt256.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968")); - NumberBaseHelper.CreateChecked(TwoOver511) - .Should() - .Be(UInt512.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048")); - - NumberBaseHelper.CreateChecked(Half).Should().Be((Half)0.5f); - NumberBaseHelper.CreateChecked(Half).Should().Be(0.5f); - NumberBaseHelper.CreateChecked(Half).Should().Be(0.5d); - } - [Fact] - public static void CreateSaturatingFromQuadTest() - { - NumberBaseHelper.CreateSaturating(ByteMaxValue).Should().Be(byte.MaxValue); - NumberBaseHelper.CreateSaturating(Int16MaxValue).Should().Be(short.MaxValue); - NumberBaseHelper.CreateSaturating(Int32MaxValue).Should().Be(int.MaxValue); - NumberBaseHelper.CreateSaturating(Int64MaxValue).Should().Be(long.MaxValue); - NumberBaseHelper.CreateSaturating(Int128MaxValue).Should().Be(Int128.MaxValue); - NumberBaseHelper.CreateSaturating(TwoOver255) - .Should().Be(UInt256.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968")); - NumberBaseHelper.CreateSaturating(TwoOver511) - .Should() - .Be(UInt512.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048")); - - NumberBaseHelper.CreateSaturating(Half).Should().Be((Half)0.5f); - NumberBaseHelper.CreateSaturating(Half).Should().Be(0.5f); - NumberBaseHelper.CreateSaturating(Half).Should().Be(0.5d); - } - [Fact] - public static void CreateTruncatingFromQuadTest() - { - NumberBaseHelper.CreateTruncating(ByteMaxValue).Should().Be(byte.MaxValue); - NumberBaseHelper.CreateTruncating(Int16MaxValue).Should().Be(short.MaxValue); - NumberBaseHelper.CreateTruncating(Int32MaxValue).Should().Be(int.MaxValue); - NumberBaseHelper.CreateTruncating(Int64MaxValue).Should().Be(long.MaxValue); - NumberBaseHelper.CreateTruncating(Int128MaxValue).Should().Be(Int128.MaxValue); - NumberBaseHelper.CreateTruncating(TwoOver255) - .Should().Be(UInt256.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968")); - NumberBaseHelper.CreateTruncating(TwoOver511) - .Should() - .Be(UInt512.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048")); - - NumberBaseHelper.CreateTruncating(Half).Should().Be((Half)0.5f); - NumberBaseHelper.CreateTruncating(Half).Should().Be(0.5f); - NumberBaseHelper.CreateTruncating(Half).Should().Be(0.5d); - } - [Fact] - public static void CreateCheckedToQuadTest() - { - NumberBaseHelper.CreateChecked(byte.MaxValue).Should().Be(ByteMaxValue); - NumberBaseHelper.CreateChecked(short.MaxValue).Should().Be(Int16MaxValue); - NumberBaseHelper.CreateChecked(int.MaxValue).Should().Be(Int32MaxValue); - NumberBaseHelper.CreateChecked(long.MaxValue).Should().Be(Int64MaxValue); - NumberBaseHelper.CreateChecked(Int128.MaxValue).Should().Be(Int128MaxValue); - NumberBaseHelper.CreateChecked(UInt256.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968")) - .Should().Be(TwoOver255); - NumberBaseHelper.CreateChecked(UInt512.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048")) - .Should().Be(TwoOver511); - - NumberBaseHelper.CreateChecked((Half)0.5f).Should().Be(Half); - NumberBaseHelper.CreateChecked(0.5f).Should().Be(Half); - NumberBaseHelper.CreateChecked(0.5d).Should().Be(Half); - } - [Fact] - public static void CreateSaturatingToQuadTest() - { - NumberBaseHelper.CreateSaturating(byte.MaxValue).Should().Be(ByteMaxValue); - NumberBaseHelper.CreateSaturating(short.MaxValue).Should().Be(Int16MaxValue); - NumberBaseHelper.CreateSaturating(int.MaxValue).Should().Be(Int32MaxValue); - NumberBaseHelper.CreateSaturating(long.MaxValue).Should().Be(Int64MaxValue); - NumberBaseHelper.CreateSaturating(Int128.MaxValue).Should().Be(Int128MaxValue); - NumberBaseHelper.CreateSaturating(UInt256.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968")) - .Should().Be(TwoOver255); - NumberBaseHelper.CreateSaturating(UInt512.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048")) - .Should().Be(TwoOver511); - - NumberBaseHelper.CreateSaturating((Half)0.5f).Should().Be(Half); - NumberBaseHelper.CreateSaturating(0.5f).Should().Be(Half); - NumberBaseHelper.CreateSaturating(0.5d).Should().Be(Half); - } - [Fact] - public static void CreateTruncatingToQuadTest() - { - NumberBaseHelper.CreateTruncating(byte.MaxValue).Should().Be(ByteMaxValue); - NumberBaseHelper.CreateTruncating(short.MaxValue).Should().Be(Int16MaxValue); - NumberBaseHelper.CreateTruncating(int.MaxValue).Should().Be(Int32MaxValue); - NumberBaseHelper.CreateTruncating(long.MaxValue).Should().Be(Int64MaxValue); - NumberBaseHelper.CreateTruncating(Int128.MaxValue).Should().Be(Int128MaxValue); - NumberBaseHelper.CreateTruncating(UInt256.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968")) - .Should().Be(TwoOver255); - NumberBaseHelper.CreateTruncating(UInt512.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048")) - .Should().Be(TwoOver511); - - NumberBaseHelper.CreateTruncating((Half)0.5f).Should().Be(Half); - NumberBaseHelper.CreateTruncating(0.5f).Should().Be(Half); - NumberBaseHelper.CreateTruncating(0.5d).Should().Be(Half); - } - [Fact] - public static void IsCanonicalTest() - { - NumberBaseHelper.IsCanonical(One).Should().BeTrue(); - } - [Fact] - public static void IsComplexNumberTest() - { - NumberBaseHelper.IsComplexNumber(One).Should().BeFalse(); - } - [Fact] - public static void IsEvenIntegerTest() - { - NumberBaseHelper.IsEvenInteger(Half).Should().BeFalse(); - NumberBaseHelper.IsEvenInteger(One).Should().BeFalse(); - NumberBaseHelper.IsEvenInteger(Two).Should().BeTrue(); - NumberBaseHelper.IsEvenInteger(Three).Should().BeFalse(); - NumberBaseHelper.IsEvenInteger(Four).Should().BeTrue(); - NumberBaseHelper.IsEvenInteger(NegativeOne).Should().BeFalse(); - NumberBaseHelper.IsEvenInteger(NegativeTwo).Should().BeTrue(); - NumberBaseHelper.IsEvenInteger(NegativeThree).Should().BeFalse(); - NumberBaseHelper.IsEvenInteger(NegativeFour).Should().BeTrue(); - } - [Fact] - public static void IsFiniteTest() - { - NumberBaseHelper.IsFinite(One).Should().BeTrue(); - NumberBaseHelper.IsFinite(NegativeOne).Should().BeTrue(); - NumberBaseHelper.IsFinite(Float.NaN).Should().BeFalse(); - NumberBaseHelper.IsFinite(Float.PositiveInfinity).Should().BeFalse(); - NumberBaseHelper.IsFinite(Float.NegativeInfinity).Should().BeFalse(); - } - [Fact] - public static void IsImaginaryNumberTest() - { - NumberBaseHelper.IsImaginaryNumber(One).Should().BeFalse(); - } - [Fact] - public static void IsInfinityTest() - { - NumberBaseHelper.IsInfinity(One).Should().BeFalse(); - NumberBaseHelper.IsInfinity(NegativeOne).Should().BeFalse(); - NumberBaseHelper.IsInfinity(Float.NaN).Should().BeFalse(); - NumberBaseHelper.IsInfinity(Float.PositiveInfinity).Should().BeTrue(); - NumberBaseHelper.IsInfinity(Float.NegativeInfinity).Should().BeTrue(); - } - [Fact] - public static void IsIntegerTest() - { - NumberBaseHelper.IsInteger(Quarter).Should().BeFalse(); - NumberBaseHelper.IsInteger(Half).Should().BeFalse(); - NumberBaseHelper.IsInteger(Thousand).Should().BeTrue(); - NumberBaseHelper.IsInteger(One).Should().BeTrue(); - NumberBaseHelper.IsInteger(GreaterThanOneSmallest).Should().BeFalse(); - NumberBaseHelper.IsInteger(SmallestSubnormal).Should().BeFalse(); - NumberBaseHelper.IsInteger(NegativeOne).Should().BeTrue(); - NumberBaseHelper.IsInteger(NegativeThousand).Should().BeTrue(); - NumberBaseHelper.IsInteger(NegativeHalf).Should().BeFalse(); - NumberBaseHelper.IsInteger(NegativeQuarter).Should().BeFalse(); - NumberBaseHelper.IsInteger(Float.NaN).Should().BeFalse(); - NumberBaseHelper.IsInteger(Float.PositiveInfinity).Should().BeFalse(); - NumberBaseHelper.IsInteger(Float.NegativeInfinity).Should().BeFalse(); - } - [Fact] - public static void IsNaNTest() - { - NumberBaseHelper.IsNaN(One).Should().BeFalse(); - NumberBaseHelper.IsNaN(NegativeOne).Should().BeFalse(); - NumberBaseHelper.IsNaN(Float.NaN).Should().BeTrue(); - NumberBaseHelper.IsNaN(Float.PositiveInfinity).Should().BeFalse(); - NumberBaseHelper.IsNaN(Float.NegativeInfinity).Should().BeFalse(); - } - [Fact] - public static void IsNegativeTest() - { - NumberBaseHelper.IsNegative(One).Should().BeFalse(); - NumberBaseHelper.IsNegative(GreatestSubnormal).Should().BeFalse(); - NumberBaseHelper.IsNegative(Float.PositiveInfinity).Should().BeFalse(); - NumberBaseHelper.IsNegative(Float.NaN).Should().BeTrue(); - NumberBaseHelper.IsNegative(NegativeOne).Should().BeTrue(); - NumberBaseHelper.IsNegative(Float.NegativeInfinity).Should().BeTrue(); - } - [Fact] - public static void IsNegativeInfinityTest() - { - NumberBaseHelper.IsNegativeInfinity(One).Should().BeFalse(); - NumberBaseHelper.IsNegativeInfinity(NegativeOne).Should().BeFalse(); - NumberBaseHelper.IsNegativeInfinity(Float.NaN).Should().BeFalse(); - NumberBaseHelper.IsNegativeInfinity(Float.PositiveInfinity).Should().BeFalse(); - NumberBaseHelper.IsNegativeInfinity(Float.NegativeInfinity).Should().BeTrue(); - } - [Fact] - public static void IsNormalTest() - { - NumberBaseHelper.IsNormal(GreatestSubnormal).Should().BeFalse(); - NumberBaseHelper.IsNormal(SmallestSubnormal).Should().BeFalse(); - NumberBaseHelper.IsNormal(MaxValue).Should().BeTrue(); - NumberBaseHelper.IsNormal(MinValue).Should().BeTrue(); - NumberBaseHelper.IsNormal(One).Should().BeTrue(); - } - [Fact] - public static void IsOddIntegerTest() - { - NumberBaseHelper.IsOddInteger(Half).Should().BeFalse(); - NumberBaseHelper.IsOddInteger(One).Should().BeTrue(); - NumberBaseHelper.IsOddInteger(Two).Should().BeFalse(); - NumberBaseHelper.IsOddInteger(Three).Should().BeTrue(); - NumberBaseHelper.IsOddInteger(Four).Should().BeFalse(); - NumberBaseHelper.IsOddInteger(NegativeOne).Should().BeTrue(); - NumberBaseHelper.IsOddInteger(NegativeTwo).Should().BeFalse(); - NumberBaseHelper.IsOddInteger(NegativeThree).Should().BeTrue(); - NumberBaseHelper.IsOddInteger(NegativeFour).Should().BeFalse(); - } - [Fact] - public static void IsPositiveTest() - { - NumberBaseHelper.IsPositive(One).Should().BeTrue(); - NumberBaseHelper.IsPositive(GreatestSubnormal).Should().BeTrue(); - NumberBaseHelper.IsPositive(Float.PositiveInfinity).Should().BeTrue(); - NumberBaseHelper.IsPositive(Float.NaN).Should().BeFalse(); - NumberBaseHelper.IsPositive(NegativeOne).Should().BeFalse(); - NumberBaseHelper.IsPositive(Float.NegativeInfinity).Should().BeFalse(); - } - [Fact] - public static void IsPositiveInfinityTest() - { - NumberBaseHelper.IsPositiveInfinity(One).Should().BeFalse(); - NumberBaseHelper.IsPositiveInfinity(NegativeOne).Should().BeFalse(); - NumberBaseHelper.IsPositiveInfinity(Float.NaN).Should().BeFalse(); - NumberBaseHelper.IsPositiveInfinity(Float.PositiveInfinity).Should().BeTrue(); - NumberBaseHelper.IsPositiveInfinity(Float.NegativeInfinity).Should().BeFalse(); - } - [Fact] - public static void IsRealNumberTest() - { - NumberBaseHelper.IsRealNumber(GreatestSubnormal).Should().BeTrue(); - NumberBaseHelper.IsRealNumber(MaxValue).Should().BeTrue(); - NumberBaseHelper.IsRealNumber(NegativeThousand).Should().BeTrue(); - NumberBaseHelper.IsRealNumber(Float.PositiveInfinity).Should().BeTrue(); - NumberBaseHelper.IsRealNumber(Float.NegativeInfinity).Should().BeTrue(); - NumberBaseHelper.IsRealNumber(Float.NaN).Should().BeFalse(); - } - [Fact] - public static void IsSubnormalTest() - { - NumberBaseHelper.IsSubnormal(GreatestSubnormal).Should().BeTrue(); - NumberBaseHelper.IsSubnormal(SmallestSubnormal).Should().BeTrue(); - NumberBaseHelper.IsSubnormal(MaxValue).Should().BeFalse(); - NumberBaseHelper.IsSubnormal(MinValue).Should().BeFalse(); - NumberBaseHelper.IsSubnormal(One).Should().BeFalse(); - } - [Fact] - public static void IsZeroTest() - { - NumberBaseHelper.IsZero(One).Should().BeFalse(); - NumberBaseHelper.IsZero(Float.Epsilon).Should().BeFalse(); - NumberBaseHelper.IsZero(Zero).Should().BeTrue(); - NumberBaseHelper.IsZero(NegativeZero).Should().BeTrue(); - } - [Fact] - public static void MaxMagnitudeTest() - { - NumberBaseHelper.MaxMagnitude(Float.NegativeInfinity, One) - .Should().Be(Float.NegativeInfinity); - NumberBaseHelper.MaxMagnitude(Float.MinValue, One) - .Should().Be(Float.MinValue); - NumberBaseHelper.MaxMagnitude(NegativeOne, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitude(-GreatestSubnormal, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitude(-Float.Epsilon, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitude(NegativeZero, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitude(Float.NaN, One) - .Should().Be(Float.NaN); - NumberBaseHelper.MaxMagnitude(Zero, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitude(Float.Epsilon, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitude(GreatestSubnormal, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitude(One, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitude(Float.MaxValue, One) - .Should().Be(Float.MaxValue); - NumberBaseHelper.MaxMagnitude(Float.PositiveInfinity, One) - .Should().Be(Float.PositiveInfinity); - } - [Fact] - public static void MaxMagnitudeNumberTest() - { - NumberBaseHelper.MaxMagnitudeNumber(Float.NegativeInfinity, One) - .Should().Be(Float.NegativeInfinity); - NumberBaseHelper.MaxMagnitudeNumber(Float.MinValue, One) - .Should().Be(Float.MinValue); - NumberBaseHelper.MaxMagnitudeNumber(NegativeOne, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitudeNumber(-GreatestSubnormal, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitudeNumber(-Float.Epsilon, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitudeNumber(NegativeZero, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitudeNumber(Float.NaN, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitudeNumber(Zero, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitudeNumber(Float.Epsilon, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitudeNumber(GreatestSubnormal, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitudeNumber(One, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitudeNumber(Float.MaxValue, One) - .Should().Be(Float.MaxValue); - NumberBaseHelper.MaxMagnitudeNumber(Float.PositiveInfinity, One) - .Should().Be(Float.PositiveInfinity); - } - [Fact] - public static void MinMagnitudeTest() - { - NumberBaseHelper.MinMagnitude(Float.NegativeInfinity, One) - .Should().Be(One); - NumberBaseHelper.MinMagnitude(Float.MinValue, One) - .Should().Be(One); - NumberBaseHelper.MinMagnitude(NegativeOne, One) - .Should().Be(NegativeOne); - NumberBaseHelper.MinMagnitude(-GreatestSubnormal, One) - .Should().Be(-GreatestSubnormal); - NumberBaseHelper.MinMagnitude(-Float.Epsilon, One) - .Should().Be(-Float.Epsilon); - NumberBaseHelper.MinMagnitude(NegativeZero, One) - .Should().Be(NegativeZero); - NumberBaseHelper.MinMagnitude(Float.NaN, One) - .Should().Be(Float.NaN); - NumberBaseHelper.MinMagnitude(Zero, One) - .Should().Be(Zero); - NumberBaseHelper.MinMagnitude(Float.Epsilon, One) - .Should().Be(Float.Epsilon); - NumberBaseHelper.MinMagnitude(GreatestSubnormal, One) - .Should().Be(GreatestSubnormal); - NumberBaseHelper.MinMagnitude(One, One) - .Should().Be(One); - NumberBaseHelper.MinMagnitude(Float.MaxValue, One) - .Should().Be(One); - NumberBaseHelper.MinMagnitude(Float.PositiveInfinity, One) - .Should().Be(One); - } - [Fact] - public static void MinMagnitudeNumberTest() - { - NumberBaseHelper.MinMagnitudeNumber(Float.NegativeInfinity, One) - .Should().Be(One); - NumberBaseHelper.MinMagnitudeNumber(Float.MinValue, One) - .Should().Be(One); - NumberBaseHelper.MinMagnitudeNumber(NegativeOne, One) - .Should().Be(NegativeOne); - NumberBaseHelper.MinMagnitudeNumber(-GreatestSubnormal, One) - .Should().Be(-GreatestSubnormal); - NumberBaseHelper.MinMagnitudeNumber(-Float.Epsilon, One) - .Should().Be(-Float.Epsilon); - NumberBaseHelper.MinMagnitudeNumber(NegativeZero, One) - .Should().Be(NegativeZero); - NumberBaseHelper.MinMagnitudeNumber(Float.NaN, One) - .Should().Be(One); - NumberBaseHelper.MinMagnitudeNumber(Zero, One) - .Should().Be(Zero); - NumberBaseHelper.MinMagnitudeNumber(Float.Epsilon, One) - .Should().Be(Float.Epsilon); - NumberBaseHelper.MinMagnitudeNumber(GreatestSubnormal, One) - .Should().Be(GreatestSubnormal); - NumberBaseHelper.MinMagnitudeNumber(One, One) - .Should().Be(One); - NumberBaseHelper.MinMagnitudeNumber(Float.MaxValue, One) - .Should().Be(One); - NumberBaseHelper.MinMagnitudeNumber(Float.PositiveInfinity, One) - .Should().Be(One); - } - [Theory] - [MemberData(nameof(TryParseTheoryData))] - public void ParseTest(string s, bool success, Float output) - { - if (success) - { - NumberBaseHelper.Parse(s, NumberStyles.Float, NumberFormatInfo.CurrentInfo) - .Should().Be(output); - } - else - { - Assert.Throws(() => NumberBaseHelper.Parse(s, NumberStyles.Float, NumberFormatInfo.CurrentInfo)); - } - } - - [Theory] - [MemberData(nameof(TryParseTheoryData))] - public void TryParseTest(string s, bool success, Float output) - { - Float result; - - NumberBaseHelper.TryParse(s, NumberStyles.Float, NumberFormatInfo.CurrentInfo, out result).Should().Be(success); - result.Should().Be(output); - } - - [Theory] - [MemberData(nameof(TryParseTheoryData))] - public void ParseUtf8Test(string s, bool success, Float output) - { - byte[] utf8 = Encoding.UTF8.GetBytes(s); - - if (success) - { - NumberBaseHelper.Parse(utf8, NumberStyles.Float, NumberFormatInfo.CurrentInfo) - .Should().Be(output); - } - else - { - Assert.Throws(() => NumberBaseHelper.Parse(utf8, NumberStyles.Float, NumberFormatInfo.CurrentInfo)); - } - } - - [Theory] - [MemberData(nameof(TryParseTheoryData))] - public void TryParseUtf8Test(string s, bool success, Float output) - { - ReadOnlySpan utf8 = Encoding.UTF8.GetBytes(s); - Float result; - - NumberBaseHelper.TryParse(utf8, NumberStyles.Float, NumberFormatInfo.CurrentInfo, out result).Should().Be(success); - result.Should().Be(output); - } - #endregion - } -} diff --git a/src/MissingValues.Tests.Old/Core/OctoTest.TheoryData.cs b/src/MissingValues.Tests.Old/Core/OctoTest.TheoryData.cs deleted file mode 100644 index 0c7c093..0000000 --- a/src/MissingValues.Tests.Old/Core/OctoTest.TheoryData.cs +++ /dev/null @@ -1,780 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace MissingValues.Tests.Core -{ - public partial class OctoTest - { -#pragma warning disable S3263 // Static fields should appear in the order they must be initialized - private static (string, bool, Octo)[] _tryParseData => - [ - ("10,0", true, Ten), - ("3", true, Three), - ("-3", true, NegativeThree), - ("2,0", true, Two), - ("-2", true, NegativeTwo), - ("0", true, Zero), - ("-0", true, NegativeZero), - (NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol, true, Octo.PositiveInfinity), - (NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol, true, Octo.NegativeInfinity), - (NumberFormatInfo.CurrentInfo.NaNSymbol, true, Octo.NaN), - ]; - - private static (Octo, Octo)[] _unaryNegationOperationData => - [ - (Zero, NegativeZero), - (One, NegativeOne), - (Two, NegativeTwo), - (Ten, NegativeTen), - (Hundred, NegativeHundred), - (Thousand, NegativeThousand) - ]; - private static (Octo, Octo)[] _incrementOperationData => - [ - (NegativeTwo, NegativeOne), - (NegativeOne, Zero), - (Zero, One), - (One, Two), - ]; - private static (Octo, Octo)[] _decrementOperationData => - [ - (NegativeOne, NegativeTwo), - (Zero, NegativeOne), - (One, Zero), - (Two, One), - ]; - - private static (Octo, Octo, Octo)[] _additionOperationData => - [ - (One, One, Two), - (One, NegativeOne, Zero), - (One, NegativeTwo, NegativeOne), - (One, Four, Five), - (Three, Two, Five), - (SmallestSubnormal, GreatestSubnormal, Values.CreateFloat(0x0000_1000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), - (Octo.PositiveInfinity, Octo.One, Octo.PositiveInfinity), - (Octo.NegativeInfinity, Octo.One, Octo.NegativeInfinity), - (Octo.PositiveInfinity, Octo.PositiveInfinity, Octo.PositiveInfinity), - (Octo.NegativeInfinity, Octo.NegativeInfinity, Octo.NegativeInfinity), - ]; - private static (Octo, Octo, Octo)[] _subtractionOperationData => - [ - (One, One, Zero), - (One, NegativeOne, Two), - (One, Two, NegativeOne), - (SmallestSubnormal, GreatestSubnormal, Values.CreateFloat(0x8000_0FFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE)), - (Octo.PositiveInfinity, Octo.PositiveInfinity, Octo.NaN), - (Octo.NegativeInfinity, Octo.NegativeInfinity, Octo.NaN), - ]; - private static (Octo, Octo, Octo)[] _multiplicationOperationData => - [ - (One, One, One), - (One, NegativeOne, NegativeOne), - (Ten, Ten, Hundred), - (NegativeHundred, Ten, NegativeThousand), - (NegativeTen, Hundred, NegativeThousand), - (Zero, NegativeThousand, NegativeZero), - (Zero, Octo.PositiveInfinity, Octo.NaN), - (NegativeZero, Octo.NegativeInfinity, Octo.NaN), - (Octo.PositiveInfinity, Zero, Octo.NaN), - (Octo.NegativeInfinity, NegativeZero, Octo.NaN), - ]; - private static (Octo, Octo, Octo)[] _divisionOperationData => - [ - (One, Two, Half), - (One, Four, Quarter), - (Ten, Five, Two), - (Ten, Ten, One), - (Hundred, Ten, Ten), - (NegativeThousand, Ten, NegativeHundred), - (Zero, Zero, Octo.NaN), - (One, Zero, Octo.PositiveInfinity), - (NegativeOne, Zero, Octo.NegativeInfinity), - (Octo.PositiveInfinity, Octo.PositiveInfinity, Octo.NaN), - (Octo.NegativeInfinity, Octo.NegativeInfinity, Octo.NaN), - ]; - - private static (byte, Octo)[] _castFromByteData => - [ - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (byte.MaxValue, ByteMaxValue), - ]; - private static (ushort, Octo)[] _castFromUInt16Data => - [ - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - (byte.MaxValue, ByteMaxValue), - (ushort.MaxValue, UInt16MaxValue), - ]; - private static (uint, Octo)[] _castFromUInt32Data => - [ - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - (byte.MaxValue, ByteMaxValue), - (ushort.MaxValue, UInt16MaxValue), - (uint.MaxValue, UInt32MaxValue), - ]; - private static (ulong, Octo)[] _castFromUInt64Data => - [ - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - (byte.MaxValue, ByteMaxValue), - (ushort.MaxValue, UInt16MaxValue), - (uint.MaxValue, UInt32MaxValue), - (ulong.MaxValue, UInt64MaxValue), - ]; - private static (UInt128, Octo)[] _castFromUInt128Data => - [ - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - (byte.MaxValue, ByteMaxValue), - (ushort.MaxValue, UInt16MaxValue), - (uint.MaxValue, UInt32MaxValue), - (ulong.MaxValue, UInt64MaxValue), - (UInt128.MaxValue, UInt128MaxValue), - ]; - private static (UInt256, Octo)[] _castFromUInt256Data => - [ - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - (byte.MaxValue, ByteMaxValue), - (ushort.MaxValue, UInt16MaxValue), - (uint.MaxValue, UInt32MaxValue), - (ulong.MaxValue, UInt64MaxValue), - (UInt128.MaxValue, UInt128MaxValue), - ]; - private static (UInt512, Octo)[] _castFromUInt512Data => - [ - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - (byte.MaxValue, ByteMaxValue), - (ushort.MaxValue, UInt16MaxValue), - (uint.MaxValue, UInt32MaxValue), - (ulong.MaxValue, UInt64MaxValue), - (UInt128.MaxValue, UInt128MaxValue), - ]; - private static (sbyte, Octo)[] _castFromSByteData => - [ - (sbyte.MinValue, SByteMinValue), - (-100, NegativeHundred), - (-10, NegativeTen), - (-2, NegativeTwo), - (-1, NegativeOne), - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (sbyte.MaxValue, SByteMaxValue), - ]; - private static (short, Octo)[] _castFromInt16Data => - [ - (short.MinValue, Int16MinValue), - (sbyte.MinValue, SByteMinValue), - (-1000, NegativeThousand), - (-100, NegativeHundred), - (-10, NegativeTen), - (-2, NegativeTwo), - (-1, NegativeOne), - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - (sbyte.MaxValue, SByteMaxValue), - (short.MaxValue, Int16MaxValue), - ]; - private static (int, Octo)[] _castFromInt32Data => - [ - (int.MinValue, Int32MinValue), - (short.MinValue, Int16MinValue), - (sbyte.MinValue, SByteMinValue), - (-1000, NegativeThousand), - (-100, NegativeHundred), - (-10, NegativeTen), - (-2, NegativeTwo), - (-1, NegativeOne), - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - (sbyte.MaxValue, SByteMaxValue), - (short.MaxValue, Int16MaxValue), - (int.MaxValue, Int32MaxValue), - ]; - private static (long, Octo)[] _castFromInt64Data => - [ - (long.MinValue, Int64MinValue), - (int.MinValue, Int32MinValue), - (short.MinValue, Int16MinValue), - (sbyte.MinValue, SByteMinValue), - (-1000, NegativeThousand), - (-100, NegativeHundred), - (-10, NegativeTen), - (-2, NegativeTwo), - (-1, NegativeOne), - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - (sbyte.MaxValue, SByteMaxValue), - (short.MaxValue, Int16MaxValue), - (int.MaxValue, Int32MaxValue), - (long.MaxValue, Int64MaxValue), - ]; - private static (Int128, Octo)[] _castFromInt128Data => - [ - (Int128.MinValue, Int128MinValue), - (long.MinValue, Int64MinValue), - (int.MinValue, Int32MinValue), - (short.MinValue, Int16MinValue), - (sbyte.MinValue, SByteMinValue), - (-1000, NegativeThousand), - (-100, NegativeHundred), - (-10, NegativeTen), - (-2, NegativeTwo), - (-1, NegativeOne), - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - (sbyte.MaxValue, SByteMaxValue), - (short.MaxValue, Int16MaxValue), - (int.MaxValue, Int32MaxValue), - (long.MaxValue, Int64MaxValue), - (Int128.MaxValue, Int128MaxValue), - ]; - private static (Int256, Octo)[] _castFromInt256Data => - [ - (Int128.MinValue, Int128MinValue), - (long.MinValue, Int64MinValue), - (int.MinValue, Int32MinValue), - (short.MinValue, Int16MinValue), - (sbyte.MinValue, SByteMinValue), - (-1000, NegativeThousand), - (-100, NegativeHundred), - (-10, NegativeTen), - (-2, NegativeTwo), - (-1, NegativeOne), - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - (sbyte.MaxValue, SByteMaxValue), - (short.MaxValue, Int16MaxValue), - (int.MaxValue, Int32MaxValue), - (long.MaxValue, Int64MaxValue), - (Int128.MaxValue, Int128MaxValue), - ]; - private static (Int512, Octo)[] _castFromInt512Data => - [ - (Int128.MinValue, Int128MinValue), - (long.MinValue, Int64MinValue), - (int.MinValue, Int32MinValue), - (short.MinValue, Int16MinValue), - (sbyte.MinValue, SByteMinValue), - (-1000, NegativeThousand), - (-100, NegativeHundred), - (-10, NegativeTen), - (-2, NegativeTwo), - (-1, NegativeOne), - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - (sbyte.MaxValue, SByteMaxValue), - (short.MaxValue, Int16MaxValue), - (int.MaxValue, Int32MaxValue), - (long.MaxValue, Int64MaxValue), - (Int128.MaxValue, Int128MaxValue), - ]; - private static (Half, Octo)[] _castFromHalfData => - [ - (System.Half.NegativeOne, NegativeOne), - (System.Half.NegativeZero, NegativeZero), - (System.Half.Zero, Zero), - (System.Half.One, One), - ((Half)10, Ten), - ((Half)100, Hundred), - ((Half)1000, Thousand), - ]; - private static (float, Octo)[] _castFromSingleData => - [ - (-1000, NegativeThousand), - (-100, NegativeHundred), - (-10, NegativeTen), - (-2, NegativeTwo), - (-1, NegativeOne), - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - ]; - private static (double, Octo)[] _castFromDoubleData => - [ - (-1000, NegativeThousand), - (-100, NegativeHundred), - (-10, NegativeTen), - (-2, NegativeTwo), - (-1, NegativeOne), - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - ]; - - private static (Octo, byte)[] _castToByteData => - [ - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Hundred, 100), - (ByteMaxValue, byte.MaxValue), - ]; - private static (Octo, ushort)[] _castToUInt16Data => - [ - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Hundred, 100), - (Thousand, 1000), - (ByteMaxValue, byte.MaxValue), - (UInt16MaxValue, ushort.MaxValue), - ]; - private static (Octo, uint)[] _castToUInt32Data => - [ - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Hundred, 100), - (Thousand, 1000), - (ByteMaxValue, byte.MaxValue), - (UInt16MaxValue, ushort.MaxValue), - (UInt32MaxValue, uint.MaxValue), - ]; - private static (Octo, ulong)[] _castToUInt64Data => - [ - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Thousand, 1000), - (ByteMaxValue, byte.MaxValue), - (UInt16MaxValue, ushort.MaxValue), - (UInt32MaxValue, uint.MaxValue), - (UInt64MaxValue, ulong.MaxValue), - ]; - private static (Octo, UInt128)[] _castToUInt128Data => - [ - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Hundred, 100), - (Thousand, 1000), - (ByteMaxValue, byte.MaxValue), - (UInt16MaxValue, ushort.MaxValue), - (UInt32MaxValue, uint.MaxValue), - (UInt64MaxValue, ulong.MaxValue), - (UInt128MaxValue, UInt128.MaxValue), - ]; - private static (Octo, UInt256)[] _castToUInt256Data => - [ - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Hundred, 100), - (Thousand, 1000), - (ByteMaxValue, byte.MaxValue), - (UInt16MaxValue, ushort.MaxValue), - (UInt32MaxValue, uint.MaxValue), - (UInt64MaxValue, ulong.MaxValue), - (UInt128MaxValue, UInt128.MaxValue), - ]; - private static (Octo, UInt512)[] _castToUInt512Data => - [ - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Hundred, 100), - (Thousand, 1000), - (ByteMaxValue, byte.MaxValue), - (UInt16MaxValue, ushort.MaxValue), - (UInt32MaxValue, uint.MaxValue), - (UInt64MaxValue, ulong.MaxValue), - (UInt128MaxValue, UInt128.MaxValue), - ]; - private static (Octo, sbyte)[] _castToSByteData => - [ - (SByteMinValue, sbyte.MinValue), - (NegativeHundred, -100), - (NegativeTen, -10), - (NegativeTwo, -2), - (NegativeOne, -1), - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Hundred, 100), - (SByteMaxValue, sbyte.MaxValue), - ]; - private static (Octo, short)[] _castToInt16Data => - [ - (Int16MinValue, short.MinValue), - (SByteMinValue, sbyte.MinValue), - (NegativeHundred, -100), - (NegativeTen, -10), - (NegativeTwo, -2), - (NegativeOne, -1), - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Hundred, 100), - (SByteMaxValue, sbyte.MaxValue), - (Int16MaxValue, short.MaxValue), - ]; - private static (Octo, int)[] _castToInt32Data => - [ - (Int32MinValue, int.MinValue), - (Int16MinValue, short.MinValue), - (SByteMinValue, sbyte.MinValue), - (NegativeHundred, -100), - (NegativeTen, -10), - (NegativeTwo, -2), - (NegativeOne, -1), - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Hundred, 100), - (SByteMaxValue, sbyte.MaxValue), - (Int16MaxValue, short.MaxValue), - (Int32MaxValue, int.MaxValue), - ]; - private static (Octo, long)[] _castToInt64Data => - [ - (Int64MinValue, long.MinValue), - (Int32MinValue, int.MinValue), - (Int16MinValue, short.MinValue), - (SByteMinValue, sbyte.MinValue), - (NegativeHundred, -100), - (NegativeTen, -10), - (NegativeTwo, -2), - (NegativeOne, -1), - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Hundred, 100), - (SByteMaxValue, sbyte.MaxValue), - (Int16MaxValue, short.MaxValue), - (Int32MaxValue, int.MaxValue), - (Int64MaxValue, long.MaxValue), - ]; - private static (Octo, Int128)[] _castToInt128Data => - [ - (Int128MinValue, Int128.MinValue), - (Int64MinValue, long.MinValue), - (Int32MinValue, int.MinValue), - (Int16MinValue, short.MinValue), - (SByteMinValue, sbyte.MinValue), - (NegativeHundred, -100), - (NegativeTen, -10), - (NegativeTwo, -2), - (NegativeOne, -1), - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Hundred, 100), - (SByteMaxValue, sbyte.MaxValue), - (Int16MaxValue, short.MaxValue), - (Int32MaxValue, int.MaxValue), - (Int64MaxValue, long.MaxValue), - (Int128MaxValue, Int128.MaxValue), - ]; - private static (Octo, Int256)[] _castToInt256Data => - [ - (Int128MinValue, Int128.MinValue), - (Int64MinValue, long.MinValue), - (Int32MinValue, int.MinValue), - (Int16MinValue, short.MinValue), - (SByteMinValue, sbyte.MinValue), - (NegativeHundred, -100), - (NegativeTen, -10), - (NegativeTwo, -2), - (NegativeOne, -1), - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Hundred, 100), - (SByteMaxValue, sbyte.MaxValue), - (Int16MaxValue, short.MaxValue), - (Int32MaxValue, int.MaxValue), - (Int64MaxValue, long.MaxValue), - (Int128MaxValue, Int128.MaxValue), - ]; - private static (Octo, Int512)[] _castToInt512Data => - [ - (Int128MinValue, Int128.MinValue), - (Int64MinValue, long.MinValue), - (Int32MinValue, int.MinValue), - (Int16MinValue, short.MinValue), - (SByteMinValue, sbyte.MinValue), - (NegativeHundred, -100), - (NegativeTen, -10), - (NegativeTwo, -2), - (NegativeOne, -1), - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Hundred, 100), - (SByteMaxValue, sbyte.MaxValue), - (Int16MaxValue, short.MaxValue), - (Int32MaxValue, int.MaxValue), - (Int64MaxValue, long.MaxValue), - (Int128MaxValue, Int128.MaxValue), - ]; - private static (Octo, Half)[] _castToHalfData => - [ - (NegativeHundred, -(Half)100.0f), - (NegativeTen, -(Half)10.0f), - (NegativeTwo, -(Half)2.0f), - (NegativeOne, -(Half)1.0f), - (NegativeZero, -(Half)0.0f), - (Zero, (Half)0.0f), - (One, System.Half.One), - (Two, (Half)2.0f), - (Ten, (Half)10.0f), - (Hundred, (Half)100.0f), - ]; - private static (Octo, float)[] _castToSingleData => - [ - (NegativeThousand, -1000.0f), - (NegativeHundred, -100.0f), - (NegativeTen, -10.0f), - (NegativeTwo, -2.0f), - (NegativeOne, -1.0f), - (NegativeZero, -0.0f), - (Zero, 0.0f), - (Half, 0.5f), - (One, 1.0f), - (Two, 2.0f), - (Ten, 10.0f), - (Hundred, 100.0f), - (Thousand, 1000.0f), - ]; - private static (Octo, double)[] _castToDoubleData => - [ - (NegativeThousand, -1000.0d), - (NegativeHundred, -100.0d), - (NegativeTen, -10.0d), - (NegativeTwo, -2.0d), - (NegativeOne, -1.0d), - (NegativeZero, -0.0d), - (Zero, 0.0d), - (Half, 0.5d), - (One, 1.0d), - (Two, 2.0d), - (Ten, 10.0d), - (Hundred, 100.0d), - (Thousand, 1000.0d), - ]; - private static (Octo, Quad)[] _castToQuadData => - [ - (NegativeThousand, QuadTest.NegativeThousand), - (NegativeHundred, QuadTest.NegativeHundred), - (NegativeTen, QuadTest.NegativeTen), - (NegativeTwo, QuadTest.NegativeTwo), - (NegativeOne, QuadTest.NegativeOne), - (NegativeZero, QuadTest.NegativeZero), - (Zero, QuadTest.Zero), - (Half, QuadTest.Half), - (One, QuadTest.One), - (Two, QuadTest.Two), - (Ten, QuadTest.Ten), - (Hundred, QuadTest.Hundred), - (Thousand, QuadTest.Thousand), - ]; - - private static (Octo, int, MidpointRounding, Octo)[] _roundAwayFromZeroData => - [ - (Values.CreateFloat(0x4000_0C00_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.AwayFromZero, Four), - (Values.CreateFloat(0x4000_0666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.AwayFromZero, Three), - (Values.CreateFloat(0x4000_0400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.AwayFromZero, Three), - (Values.CreateFloat(0x4000_00CC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.AwayFromZero, Two), - (Values.CreateFloat(0xC000_00CC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.AwayFromZero, NegativeTwo), - (Values.CreateFloat(0xC000_0400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.AwayFromZero, NegativeThree), - (Values.CreateFloat(0xC000_0666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.AwayFromZero, NegativeThree), - (Values.CreateFloat(0xC000_0C00_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.AwayFromZero, NegativeFour), - ]; - private static (Octo, int, MidpointRounding, Octo)[] _roundToEvenData => - [ - (Values.CreateFloat(0x4000_0C00_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToEven, Four), - (Values.CreateFloat(0x4000_0666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToEven, Three), - (Values.CreateFloat(0x4000_0400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToEven, Two), - (Values.CreateFloat(0x4000_00CC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToEven, Two), - (Values.CreateFloat(0xC000_00CC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToEven, NegativeTwo), - (Values.CreateFloat(0xC000_0400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToEven, NegativeTwo), - (Values.CreateFloat(0xC000_0666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToEven, NegativeThree), - (Values.CreateFloat(0xC000_0C00_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToEven, NegativeFour), - ]; - private static (Octo, int, MidpointRounding, Octo)[] _roundToNegativeInfinityData => - [ - (Values.CreateFloat(0x4000_0C00_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToNegativeInfinity, Three), - (Values.CreateFloat(0x4000_0666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToNegativeInfinity, Two), - (Values.CreateFloat(0x4000_0400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToNegativeInfinity, Two), - (Values.CreateFloat(0x4000_00CC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToNegativeInfinity, Two), - (Values.CreateFloat(0xC000_00CC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToNegativeInfinity, NegativeThree), - (Values.CreateFloat(0xC000_0400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToNegativeInfinity, NegativeThree), - (Values.CreateFloat(0xC000_0666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToNegativeInfinity, NegativeThree), - (Values.CreateFloat(0xC000_0C00_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToNegativeInfinity, NegativeFour), - ]; - private static (Octo, int, MidpointRounding, Octo)[] _roundToPositiveInfinityData => - [ - (Values.CreateFloat(0x4000_0C00_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToPositiveInfinity, Four), - (Values.CreateFloat(0x4000_0666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToPositiveInfinity, Three), - (Values.CreateFloat(0x4000_0400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToPositiveInfinity, Three), - (Values.CreateFloat(0x4000_00CC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToPositiveInfinity, Three), - (Values.CreateFloat(0xC000_00CC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToPositiveInfinity, NegativeTwo), - (Values.CreateFloat(0xC000_0400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToPositiveInfinity, NegativeTwo), - (Values.CreateFloat(0xC000_0666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToPositiveInfinity, NegativeTwo), - (Values.CreateFloat(0xC000_0C00_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToPositiveInfinity, NegativeThree), - ]; - private static (Octo, int, MidpointRounding, Octo)[] _roundToZeroData => - [ - (Values.CreateFloat(0x4000_0C00_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToZero, Three), - (Values.CreateFloat(0x4000_0666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToZero, Two), - (Values.CreateFloat(0x4000_0400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToZero, Two), - (Values.CreateFloat(0x4000_00CC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToZero, Two), - (Values.CreateFloat(0xC000_00CC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToZero, NegativeTwo), - (Values.CreateFloat(0xC000_0400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToZero, NegativeTwo), - (Values.CreateFloat(0xC000_0666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToZero, NegativeTwo), - (Values.CreateFloat(0xC000_0C00_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToZero, NegativeThree), - ]; - - private static (Octo, Octo, Octo, Octo)[] _fmaData => - [ - (One, One, One, Two), - (Ten, Ten, Zero, Hundred), - (Five, Zero, Five, Five), - (Half, Two, Two, Three), - (Two, Four, Two, Ten), - (Ten, Half, Five, Ten), - (Values.CreateFloat(13835044861142630400, 0, 0, 0), One, Two, Values.CreateFloat(0x3FFF_E800_0000_0000, 0, 0, 0)), - ]; - - - public static TryParseTheoryData TryParseTheoryData = new(_tryParseData); - - public static UnaryTheoryData UnaryNegationOperationTheoryData = new(_unaryNegationOperationData); - public static UnaryTheoryData IncrementOperationTheoryData = new(_incrementOperationData); - public static UnaryTheoryData DecrementOperationTheoryData = new(_decrementOperationData); - - public static OperationTheoryData AdditionOperationTheoryData = new(_additionOperationData); - public static OperationTheoryData SubtractionOperationTheoryData = new(_subtractionOperationData); - public static OperationTheoryData MultiplicationOperationTheoryData = new(_multiplicationOperationData); - public static OperationTheoryData DivisionOperationTheoryData = new(_divisionOperationData); - - public static CastingTheoryData CastFromByteTheoryData = new(_castFromByteData); - public static CastingTheoryData CastFromUInt16TheoryData = new(_castFromUInt16Data); - public static CastingTheoryData CastFromUInt32TheoryData = new(_castFromUInt32Data); - public static CastingTheoryData CastFromUInt64TheoryData = new(_castFromUInt64Data); - public static CastingTheoryData CastFromUInt128TheoryData = new(_castFromUInt128Data); - public static CastingTheoryData CastFromUInt256TheoryData = new(_castFromUInt256Data); - public static CastingTheoryData CastFromUInt512TheoryData = new(_castFromUInt512Data); - public static CastingTheoryData CastFromSByteTheoryData = new(_castFromSByteData); - public static CastingTheoryData CastFromInt16TheoryData = new(_castFromInt16Data); - public static CastingTheoryData CastFromInt32TheoryData = new(_castFromInt32Data); - public static CastingTheoryData CastFromInt64TheoryData = new(_castFromInt64Data); - public static CastingTheoryData CastFromInt128TheoryData = new(_castFromInt128Data); - public static CastingTheoryData CastFromInt256TheoryData = new(_castFromInt256Data); - public static CastingTheoryData CastFromInt512TheoryData = new(_castFromInt512Data); - public static CastingTheoryData CastFromHalfTheoryData = new(_castFromHalfData); - public static CastingTheoryData CastFromSingleTheoryData = new(_castFromSingleData); - public static CastingTheoryData CastFromDoubleTheoryData = new(_castFromDoubleData); - - public static CastingTheoryData CastToByteTheoryData = new(_castToByteData); - public static CastingTheoryData CastToUInt16TheoryData = new(_castToUInt16Data); - public static CastingTheoryData CastToUInt32TheoryData = new(_castToUInt32Data); - public static CastingTheoryData CastToUInt64TheoryData = new(_castToUInt64Data); - public static CastingTheoryData CastToUInt128TheoryData = new(_castToUInt128Data); - public static CastingTheoryData CastToUInt256TheoryData = new(_castToUInt256Data); - public static CastingTheoryData CastToUInt512TheoryData = new(_castToUInt512Data); - public static CastingTheoryData CastToSByteTheoryData = new(_castToSByteData); - public static CastingTheoryData CastToInt16TheoryData = new(_castToInt16Data); - public static CastingTheoryData CastToInt32TheoryData = new(_castToInt32Data); - public static CastingTheoryData CastToInt64TheoryData = new(_castToInt64Data); - public static CastingTheoryData CastToInt128TheoryData = new(_castToInt128Data); - public static CastingTheoryData CastToInt256TheoryData = new(_castToInt256Data); - public static CastingTheoryData CastToInt512TheoryData = new(_castToInt512Data); - public static CastingTheoryData CastToHalfTheoryData = new(_castToHalfData); - public static CastingTheoryData CastToSingleTheoryData = new(_castToSingleData); - public static CastingTheoryData CastToDoubleTheoryData = new(_castToDoubleData); - public static CastingTheoryData CastToQuadTheoryData = new(_castToQuadData); - - public static RoundTheoryData RoundAwayFromZeroTheoryData = new(_roundAwayFromZeroData); - public static RoundTheoryData RoundToEvenTheoryData = new(_roundToEvenData); - public static RoundTheoryData RoundToNegativeInfinityTheoryData = new(_roundToNegativeInfinityData); - public static RoundTheoryData RoundToPositiveInfinityTheoryData = new(_roundToPositiveInfinityData); - public static RoundTheoryData RoundToZeroTheoryData = new(_roundToZeroData); - - public static FusedMultiplyAddTheoryData FMATheoryData = new(_fmaData); -#pragma warning restore S3263 // Static fields should appear in the order they must be initialized - } -} diff --git a/src/MissingValues.Tests.Old/Core/OctoTest.cs b/src/MissingValues.Tests.Old/Core/OctoTest.cs deleted file mode 100644 index 5002b14..0000000 --- a/src/MissingValues.Tests.Old/Core/OctoTest.cs +++ /dev/null @@ -1,355 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Numerics; -using System.Text; -using System.Text.Json; -using System.Threading.Tasks; - -namespace MissingValues.Tests.Core -{ - public partial class OctoTest - { - public static readonly Octo NegativeThousand = Values.CreateFloat(0xC000_8F40_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo NegativeHundred = Values.CreateFloat(0xC000_5900_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo NegativeTen = Values.CreateFloat(0xC000_2400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo NegativeFive = Values.CreateFloat(0xC000_1400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo NegativeFour = Values.CreateFloat(0xC000_1000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo NegativeThree = Values.CreateFloat(0xC000_0800_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo NegativeTwo = Values.CreateFloat(0xC000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo NegativeOne = Octo.NegativeOne; - public static readonly Octo NegativeHalf = Values.CreateFloat(0xBFFF_E000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo NegativeQuarter = Values.CreateFloat(0xBFFF_D000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo NegativeZero = Octo.NegativeZero; - public static readonly Octo Zero = Octo.Zero; - public static readonly Octo Quarter = Values.CreateFloat(0x3FFF_D000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo Half = Values.CreateFloat(0x3FFF_E000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo One = Octo.One; - public static readonly Octo Two = Values.CreateFloat(0x4000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo Three = Values.CreateFloat(0x4000_0800_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo Four = Values.CreateFloat(0x4000_1000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo Five = Values.CreateFloat(0x4000_1400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo Ten = Values.CreateFloat(0x4000_2400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo Hundred = Values.CreateFloat(0x4000_5900_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo Thousand = Values.CreateFloat(0x4000_8F40_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - - public static readonly Octo GreaterThanOneSmallest = Values.CreateFloat(0x3FFF_F000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001); - public static readonly Octo LessThanOneLargest = Values.CreateFloat(0x3FFF_EFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); - - public static readonly Octo SmallestSubnormal = Values.CreateFloat(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001); - public static readonly Octo GreatestSubnormal = Values.CreateFloat(0x0000_0FFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); - - public static readonly Octo MaxValue = Octo.MaxValue; - public static readonly Octo MinValue = Octo.MinValue; - - public static readonly Octo ByteMaxValue = Values.CreateFloat(0x4000_6FE0_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo UInt16MaxValue = Values.CreateFloat(0x4000_EFFF_E000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo UInt32MaxValue = Values.CreateFloat(0x4001_EFFF_FFFF_E000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo UInt64MaxValue = Values.CreateFloat(0x4003_EFFF_FFFF_FFFF, 0xFFFF_E000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo UInt128MaxValue = Values.CreateFloat(0x4007_EFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_E000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo TwoOver255 = Values.CreateFloat(0x400F_E000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo TwoOver511 = Values.CreateFloat(0x401F_E000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - - public static readonly Octo SByteMaxValue = Values.CreateFloat(0x4000_5FC0_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo SByteMinValue = Values.CreateFloat(0xC000_6000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo Int16MaxValue = Values.CreateFloat(0x4000_DFFF_C000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo Int16MinValue = Values.CreateFloat(0xC000_E000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo Int32MaxValue = Values.CreateFloat(0x4001_DFFF_FFFF_C000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo Int32MinValue = Values.CreateFloat(0xC001_E000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo Int64MaxValue = Values.CreateFloat(0x4003_DFFF_FFFF_FFFF, 0xFFFF_C000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo Int64MinValue = Values.CreateFloat(0xC003_E000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo Int128MaxValue = Values.CreateFloat(0x4007_DFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_C000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Octo Int128MinValue = Values.CreateFloat(0xC007_E000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - - public static readonly Octo Delta = Values.CreateFloat(0x400E_B000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - - public static readonly int Radix = 2; - - [Fact] - public void Ctor_Empty() - { - var i = new Octo(); - Assert.Equal(Zero, i); - } - - [Theory] - [MemberData(nameof(CastFromByteTheoryData))] - public void Cast_FromByte(byte from, Octo to) - { - ((Octo)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromUInt16TheoryData))] - public void Cast_FromUInt16(ushort from, Octo to) - { - ((Octo)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromUInt32TheoryData))] - public void Cast_FromUInt32(uint from, Octo to) - { - ((Octo)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromUInt64TheoryData))] - public void Cast_FromUInt64(ulong from, Octo to) - { - ((Octo)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromUInt128TheoryData))] - public void Cast_FromUInt128(UInt128 from, Octo to) - { - ((Octo)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromUInt256TheoryData))] - public void Cast_FromUInt256(UInt256 from, Octo to) - { - ((Octo)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromUInt512TheoryData))] - public void Cast_FromUInt512(UInt512 from, Octo to) - { - ((Octo)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromSByteTheoryData))] - public void Cast_FromSByte(sbyte from, Octo to) - { - ((Octo)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromInt16TheoryData))] - public void Cast_FromInt16(short from, Octo to) - { - ((Octo)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromInt32TheoryData))] - public void Cast_FromInt32(int from, Octo to) - { - ((Octo)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromInt64TheoryData))] - public void Cast_FromInt64(long from, Octo to) - { - ((Octo)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromInt128TheoryData))] - public void Cast_FromInt128(Int128 from, Octo to) - { - ((Octo)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromInt256TheoryData))] - public void Cast_FromInt256(Int256 from, Octo to) - { - ((Octo)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromInt512TheoryData))] - public void Cast_FromInt512(Int512 from, Octo to) - { - ((Octo)from).Should().Be(to); - } - [Fact] - public void Cast_FromBigInteger() - { - TwoOver255.Should() - .Be((Octo)BigInteger.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968")); - TwoOver511 - .Should() - .Be((Octo)BigInteger.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048")); - } - [Theory] - [MemberData(nameof(CastFromHalfTheoryData))] - public void Cast_FromHalf(Half from, Octo to) - { - ((Octo)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromSingleTheoryData))] - public void Cast_FromSingle(float from, Octo to) - { - ((Octo)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromDoubleTheoryData))] - public void Cast_FromDouble(double from, Octo to) - { - ((Octo)from).Should().Be(to); - } - - [Theory] - [MemberData(nameof(CastToByteTheoryData))] - public void Cast_ToByte(Octo from, byte to) - { - ((byte)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToUInt16TheoryData))] - public void Cast_ToUInt16(Octo from, ushort to) - { - ((ushort)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToUInt32TheoryData))] - public void Cast_ToUInt32(Octo from, uint to) - { - ((uint)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToUInt64TheoryData))] - public void Cast_ToUInt64(Octo from, ulong to) - { - ((ulong)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToUInt128TheoryData))] - public void Cast_ToUInt128(Octo from, UInt128 to) - { - ((UInt128)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToUInt256TheoryData))] - public void Cast_ToUInt256(Octo from, UInt256 to) - { - ((UInt256)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToUInt512TheoryData))] - public void Cast_ToUInt512(Octo from, UInt512 to) - { - ((UInt512)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToSByteTheoryData))] - public void Cast_ToSByte(Octo from, sbyte to) - { - ((sbyte)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToInt16TheoryData))] - public void Cast_ToInt16(Octo from, short to) - { - ((short)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToInt32TheoryData))] - public void Cast_ToInt32(Octo from, int to) - { - ((int)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToInt64TheoryData))] - public void Cast_ToInt64(Octo from, long to) - { - ((long)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToInt128TheoryData))] - public void Cast_ToInt128(Octo from, Int128 to) - { - ((Int128)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToInt256TheoryData))] - public void Cast_ToInt256(Octo from, Int256 to) - { - ((Int256)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToInt512TheoryData))] - public void Cast_ToInt512(Octo from, Int512 to) - { - ((Int512)from).Should().Be(to); - } - [Fact] - public void Cast_ToBigInteger() - { - BigInteger.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968") - .Should().Be((BigInteger)TwoOver255); - BigInteger.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048") - .Should().Be((BigInteger)TwoOver511); - } - [Theory] - [MemberData(nameof(CastToHalfTheoryData))] - public void Cast_ToHalf(Octo from, Half to) - { - ((Half)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToSingleTheoryData))] - public void Cast_ToSingle(Octo from, float to) - { - ((float)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToDoubleTheoryData))] - public void Cast_ToDouble(Octo from, double to) - { - ((double)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToQuadTheoryData))] - public void Cast_ToQuad(Octo from, Quad to) - { - ((Quad)from).Should().Be(to); - } - - [Fact] - public void ToGeneralStringTest() - { - Zero.ToString("G70", CultureInfo.InvariantCulture) - .Should().Be("0"); - One.ToString("G70", CultureInfo.InvariantCulture) - .Should().Be("1"); - Two.ToString("G70", CultureInfo.InvariantCulture) - .Should().Be("2"); - Three.ToString("G70", CultureInfo.InvariantCulture) - .Should().Be("3"); - Five.ToString("G70", CultureInfo.InvariantCulture) - .Should().Be("5"); - Ten.ToString("G70", CultureInfo.InvariantCulture) - .Should().Be("10"); - Hundred.ToString("G70", CultureInfo.InvariantCulture) - .Should().Be("100"); - Thousand.ToString("G70", CultureInfo.InvariantCulture) - .Should().Be("1000"); - (new Octo(0x400E_ACFA_698C_9539, 0x0BA8_8C1B_7795_0E32, 0xD6C2_C314_97A4_2D00, 0x0000_0000_0000_0000)) // 1E71 - .ToString("G70", CultureInfo.InvariantCulture) - .Should().Be("1E+71"); - } - - [Theory] - [MemberData(nameof(TryParseTheoryData))] - public void BasicTryParseTest(string s, bool success, Octo expected) - { - Octo.TryParse(s, out Octo actual).Should().Be(success); - actual.Should().Be(expected); - } - - - [Fact] - public void JsonWriteTest() - { - JsonSerializer.Serialize(new Octo[] { MaxValue, One, Half, Quarter, Zero }) - .Should().Be($"[{MaxValue.ToString(null, CultureInfo.InvariantCulture)},1,0.5,0.25,0]"); - } - [Fact] - public void JsonReadTest() - { - string toString = Quarter.ToString(null, CultureInfo.InvariantCulture); - - JsonSerializer.Deserialize(toString) - .Should().Be(Quarter); - JsonSerializer.Deserialize(Encoding.UTF8.GetBytes(toString)) - .Should().Be(Quarter); - } - } -} diff --git a/src/MissingValues.Tests.Old/Core/QuadTest.GenericMath.cs b/src/MissingValues.Tests.Old/Core/QuadTest.GenericMath.cs deleted file mode 100644 index cc86743..0000000 --- a/src/MissingValues.Tests.Old/Core/QuadTest.GenericMath.cs +++ /dev/null @@ -1,1466 +0,0 @@ -using MissingValues.Tests.Helpers; -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Numerics; -using System.Text; -using System.Text.Unicode; -using System.Threading.Tasks; - -using Float = MissingValues.Quad; - -namespace MissingValues.Tests.Core -{ - public partial class QuadTest - { - #region Generic Math Operators - [Theory] - [MemberData(nameof(UnaryNegationOperationTheoryData))] - public static void op_UnaryNegationTest(Float self, Float result) - { - MathOperatorsHelper.UnaryNegationOperation(self) - .Should().Be(result) - .And.BeBitwiseEquivalentTo(result); - } - [Theory] - [MemberData(nameof(AdditionOperationTheoryData))] - public static void op_AdditionTest(Float left, Float right, Float result) - { - MathOperatorsHelper.AdditionOperation(left, right) - .Should().Be(result) - .And.BeBitwiseEquivalentTo(result); - } - [Theory] - [MemberData(nameof(IncrementOperationTheoryData))] - public static void op_IncrementTest(Float self, Float result) - { - MathOperatorsHelper.IncrementOperation(self) - .Should().Be(result) - .And.BeBitwiseEquivalentTo(result); - } - [Theory] - [MemberData(nameof(SubtractionOperationTheoryData))] - public static void op_SubtractionTest(Float left, Float right, Float result) - { - MathOperatorsHelper.SubtractionOperation(left, right) - .Should().Be(result) - .And.BeBitwiseEquivalentTo(result); - } - [Theory] - [MemberData(nameof(DecrementOperationTheoryData))] - public static void op_DecrementTest(Float self, Float result) - { - MathOperatorsHelper.DecrementOperation(self) - .Should().Be(result) - .And.BeBitwiseEquivalentTo(result); - } - [Theory] - [MemberData(nameof(MultiplicationOperationTheoryData))] - public static void op_MultiplicationTest(Float left, Float right, Float result) - { - MathOperatorsHelper.MultiplicationOperation(left, right) - .Should().Be(result) - .And.BeBitwiseEquivalentTo(result); - } - [Theory] - [MemberData(nameof(DivisionOperationTheoryData))] - public static void op_DivisionTest(Float left, Float right, Float result) - { - MathOperatorsHelper.DivisionOperation(left, right) - .Should().Be(result) - .And.BeBitwiseEquivalentTo(result); - } - [Fact] - public static void op_BitwiseAndTest() - { - BitwiseOperatorsHelper.BitwiseAndOperation(Zero, Values.CreateFloat(0x0, 0x1)).Should().Be(Zero); - BitwiseOperatorsHelper.BitwiseAndOperation(Values.CreateFloat(0x0, 0x1), Values.CreateFloat(0x0, 0x1)).Should().Be(Values.CreateFloat(0x0, 0x1)); - BitwiseOperatorsHelper.BitwiseAndOperation(BinaryNumberHelper.AllBitsSet, Values.CreateFloat(0x0, 0x1)).Should().Be(Values.CreateFloat(0x0, 0x1)); - } - [Fact] - public static void op_BitwiseOrTest() - { - BitwiseOperatorsHelper.BitwiseOrOperation(Zero, Values.CreateFloat(0x0, 0x1)) - .Should().Be(Values.CreateFloat(0x0, 0x1)); - BitwiseOperatorsHelper.BitwiseOrOperation(Values.CreateFloat(0x0, 0x1), Values.CreateFloat(0x0, 0x1)) - .Should().Be(Values.CreateFloat(0x0, 0x1)); - BitwiseOperatorsHelper.BitwiseOrOperation(BinaryNumberHelper.AllBitsSet, Values.CreateFloat(0x0, 0x1)) - .Should().Be(BinaryNumberHelper.AllBitsSet); - } - [Fact] - public static void op_ExclusiveOrTest() - { - BitwiseOperatorsHelper.ExclusiveOrOperation(Zero, Values.CreateFloat(0x0, 0x1)) - .Should().Be(Values.CreateFloat(0x0, 0x1)); - BitwiseOperatorsHelper.ExclusiveOrOperation(Values.CreateFloat(0x0, 0x1), Values.CreateFloat(0x0, 0x1)) - .Should().Be(Zero); - BitwiseOperatorsHelper.ExclusiveOrOperation(BinaryNumberHelper.AllBitsSet, Values.CreateFloat(0x0, 0x1)) - .Should().Be(Values.CreateFloat(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE)); - } - [Fact] - public static void op_OnesComplementTest() - { - BitwiseOperatorsHelper.OnesComplementOperation(Zero) - .Should().Be(BinaryNumberHelper.AllBitsSet); - BitwiseOperatorsHelper.OnesComplementOperation(Values.CreateFloat(0x0, 0x1)) - .Should().Be(Values.CreateFloat(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE)); - BitwiseOperatorsHelper.OnesComplementOperation(BinaryNumberHelper.AllBitsSet) - .Should().Be(Zero); - } - [Theory] - [MemberData(nameof(GreaterThanTheoryData))] - public static void op_GreaterThanTest(Float left, Float right, bool result) - { - ComparisonOperatorsHelper.GreaterThanOperation(left, right) - .Should().Be(result); - } - [Theory] - [MemberData(nameof(GreaterThanTheoryData))] - [MemberData(nameof(EqualToTheoryData))] - public static void op_GreaterThanOrEqualTest(Float left, Float right, bool result) - { - ComparisonOperatorsHelper.GreaterThanOrEqualOperation(left, right) - .Should().Be(result); - } - [Theory] - [MemberData(nameof(LessThanTheoryData))] - public static void op_LessThanTest(Float left, Float right, bool result) - { - ComparisonOperatorsHelper.LessThanOperation(left, right) - .Should().Be(result); - } - [Theory] - [MemberData(nameof(LessThanTheoryData))] - [MemberData(nameof(EqualToTheoryData))] - public static void op_LessThanOrEqualTest(Float left, Float right, bool result) - { - ComparisonOperatorsHelper.LessThanOrEqualOperation(left, right) - .Should().Be(result); - } - [Theory] - [MemberData(nameof(EqualToTheoryData))] - public static void op_EqualToTest(Float left, Float right, bool result) - { - EqualityOperatorsHelper.EqualityOperation(left, right) - .Should().Be(result); - } - [Theory] - [MemberData(nameof(NotEqualToTheoryData))] - public static void op_NotEqualToTest(Float left, Float right, bool result) - { - EqualityOperatorsHelper.InequalityOperation(left, right) - .Should().Be(result); - } - #endregion - - #region Identities - [Fact] - public static void AdditiveIdentityTest() - { - Assert.Equal(Zero, MathConstantsHelper.AdditiveIdentityHelper()); - } - - [Fact] - public static void MultiplicativeIdentityTest() - { - Assert.Equal(One, MathConstantsHelper.MultiplicativeIdentityHelper()); - } - #endregion - - #region IBinaryFloatingPointIEEE - [Fact] - public static void AllBitsSetTest() - { - BinaryNumberHelper.AllBitsSet.Should().Be(BitwiseOperatorsHelper.OnesComplementOperation(Zero)); - } - [Fact] - public static void IsPow2Test() - { - BinaryNumberHelper.IsPow2(Half).Should().BeTrue(); - BinaryNumberHelper.IsPow2(One).Should().BeTrue(); - BinaryNumberHelper.IsPow2(Two).Should().BeTrue(); - BinaryNumberHelper.IsPow2(Three).Should().BeFalse(); - BinaryNumberHelper.IsPow2(NegativeTwo).Should().BeFalse(); - } - #endregion - - #region IFloatingPointIEEE - [Fact] - public static void EpsilonTest() - { - FloatingPointIeee754.Epsilon.Should().Be(Float.Epsilon); - MathOperatorsHelper.AdditionOperation(FloatingPointIeee754.Epsilon, NumberBaseHelper.Zero) - .Should().NotBe(Float.Zero); - } - [Fact] - public static void NaNTest() - { - FloatingPointIeee754.NaN - .Should().Be(Float.NaN) - .And.BeNaN(); - NumberBaseHelper.IsNaN(FloatingPointIeee754.NaN).Should().BeTrue(); - } - [Fact] - public static void NegativeInfinityTest() - { - FloatingPointIeee754.NegativeInfinity.Should().Be(Float.NegativeInfinity); - NumberBaseHelper.IsInfinity(FloatingPointIeee754.NegativeInfinity).Should().BeTrue(); - NumberBaseHelper.IsNegativeInfinity(FloatingPointIeee754.NegativeInfinity).Should().BeTrue(); - NumberBaseHelper.IsPositiveInfinity(FloatingPointIeee754.NegativeInfinity).Should().BeFalse(); - } - [Fact] - public static void PositiveInfinityTest() - { - FloatingPointIeee754.PositiveInfinity.Should().Be(Float.PositiveInfinity); - NumberBaseHelper.IsInfinity(FloatingPointIeee754.PositiveInfinity).Should().BeTrue(); - NumberBaseHelper.IsNegativeInfinity(FloatingPointIeee754.PositiveInfinity).Should().BeFalse(); - NumberBaseHelper.IsPositiveInfinity(FloatingPointIeee754.PositiveInfinity).Should().BeTrue(); - } - [Fact] - public static void AcosTest() - { - GenericFloatingPointFunctions.Acos(Float.NaN) - .Should() - .BeBitwiseEquivalentTo(Float.NaN) - .And.BeNaN(); - GenericFloatingPointFunctions.Acos(Two) - .Should().BeNaN(); - GenericFloatingPointFunctions.Acos(NegativeTwo) - .Should().BeNaN(); - GenericFloatingPointFunctions.Acos(Half) - .Should().BeApproximately(Float.Pi / 3, Delta); - GenericFloatingPointFunctions.Acos(One) - .Should().BeApproximately(Float.Zero, Delta); - GenericFloatingPointFunctions.Acos(NegativeOne) - .Should().BeApproximately(Float.Pi, Delta); - } - [Fact] - public static void AcoshTest() - { - GenericFloatingPointFunctions.Acosh(Two) - .Should().BeApproximately(Values.CreateFloat(0x3FFF_5124_2719_8043, 0x49BE_684B_D018_8D53), Delta); - GenericFloatingPointFunctions.Acosh(Half) - .Should().BeNaN(); - GenericFloatingPointFunctions.Acosh(Zero) - .Should().BeNaN(); - GenericFloatingPointFunctions.Acosh(NegativeOne) - .Should().BeNaN(); - } - [Fact] - public static void AsinTest() - { - GenericFloatingPointFunctions.Asin(Half) - .Should().BeApproximately(Values.CreateFloat(0x3FFE_0C15_2382_D736, 0x5846_5BB3_2E0F_567B), Delta) - .And.BeApproximately(Float.Pi / Six, Delta); - GenericFloatingPointFunctions.Asin(Two) - .Should().Be(Float.NaN); - GenericFloatingPointFunctions.Asin(One) - .Should().BeApproximately(Float.Pi / Two, Delta); - GenericFloatingPointFunctions.Asin(NegativeOne) - .Should().BeApproximately(-Float.Pi / Two, Delta); - } - [Fact] - public static void AsinhTest() - { - GenericFloatingPointFunctions.Asinh(Two) - .Should().BeApproximately(Values.CreateFloat(0x3FFF_7192_1831_3D08, 0x72F8_E831_837F_0E95), Delta); - GenericFloatingPointFunctions.Asinh(Zero) - .Should().BeApproximately(Zero, Delta); - GenericFloatingPointFunctions.Asinh(Values.CreateFloat(0xBFFF_8000_0000_0000, 0x0000_0000_0000_0000)) - .Should().BeApproximately(Values.CreateFloat(0x3FFF_31DC_0090_B63D, 0x8682_7E4B_AAAD_1909), Delta); - } - [Fact] - public static void AtanTest() - { - GenericFloatingPointFunctions.Atan(Half) - .Should().BeApproximately(Values.CreateFloat(0x3FFD_DAC6_7056_1BB4, 0xF1DE_7924_87B0_F0F3), Delta); - GenericFloatingPointFunctions.Atan(Zero) - .Should().BeApproximately(Zero, Delta); - GenericFloatingPointFunctions.Atan(Float.PositiveInfinity) - .Should().BeApproximately(Float.Pi / Two, Delta); - GenericFloatingPointFunctions.Atan(Two) - .Should().BeApproximately(Values.CreateFloat(0x3FFF_1B6E_192E_BBE4, 0x3F5A_7D44_566B_01A8), Delta); - } - [Fact] - public static void Atan2Test() - { - FloatingPointIeee754.Atan2(Zero, Two) - .Should().BeApproximately(Zero, Delta); - FloatingPointIeee754.Atan2(Zero, Zero) - .Should().BeApproximately(Zero, Delta); - FloatingPointIeee754.Atan2(Zero, NegativeTwo) - .Should().BeApproximately(Float.Pi, Delta); - FloatingPointIeee754.Atan2(One, Two) - .Should().BeApproximately(Values.CreateFloat(0x3FFD_DAC6_7056_1BB4, 0xF1DE_7924_87B0_F0F3), Delta); - FloatingPointIeee754.Atan2(NegativeOne, Two) - .Should().BeApproximately(Values.CreateFloat(0xBFFD_DAC6_7056_1BB4, 0xF1DE_7924_87B0_F0F3), Delta); - FloatingPointIeee754.Atan2(One, NegativeTwo) - .Should().BeApproximately(Values.CreateFloat(0x4000_56C6_E739_7F5A, 0xE130_A2BB_E272_574C), Delta); - } - [Fact] - public static void AtanhTest() - { - GenericFloatingPointFunctions.Atanh(Two) - .Should().Be(Float.NaN); - GenericFloatingPointFunctions.Atanh(NegativeFour) - .Should().Be(Float.NaN); - GenericFloatingPointFunctions.Atanh(Zero) - .Should().BeApproximately(Zero, Delta); - GenericFloatingPointFunctions.Atanh(Half) - .Should().BeApproximately(Values.CreateFloat(0x3FFE_193E_A7AA_D030, 0xA976_BA8D_B53A_D6E3), Delta); - } - [Fact] - public static void BitDecrementTest() - { - FloatingPointIeee754.BitDecrement(One) - .Should().Be(Values.CreateFloat(0x3FFEFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); - FloatingPointIeee754.BitDecrement(NegativeOne) - .Should().Be(Values.CreateFloat(0xBFFF000000000000, 0x0000000000000001)); - FloatingPointIeee754.BitDecrement(Zero) - .Should().Be(-Float.Epsilon); - FloatingPointIeee754.BitDecrement(Float.NegativeInfinity) - .Should().Be(Float.NegativeInfinity); - FloatingPointIeee754.BitDecrement(Float.PositiveInfinity) - .Should().Be(Float.MaxValue); - } - [Fact] - public static void BitIncrementTest() - { - FloatingPointIeee754.BitIncrement(One) - .Should().Be(Values.CreateFloat(0x3FFF000000000000, 0x0000000000000001)); - FloatingPointIeee754.BitIncrement(NegativeOne) - .Should().Be(Values.CreateFloat(0xBFFEFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); - FloatingPointIeee754.BitIncrement(NegativeZero) - .Should().Be(Float.Epsilon); - FloatingPointIeee754.BitIncrement(Float.NegativeInfinity) - .Should().Be(Float.MinValue); - FloatingPointIeee754.BitIncrement(Float.PositiveInfinity) - .Should().Be(Float.PositiveInfinity); - } - [Fact] - public static void CbrtTest() - { - GenericFloatingPointFunctions.Cbrt(Values.CreateFloat(0x4005_0000_0000_0000, 0x0000_0000_0000_0000)) - .Should().Be(Four); - - - GenericFloatingPointFunctions.Cbrt(Zero) - .Should().Be(Zero); - GenericFloatingPointFunctions.Cbrt(-Zero) - .Should().Be(-Zero); - GenericFloatingPointFunctions.Cbrt(Float.PositiveInfinity) - .Should().Be(Float.PositiveInfinity); - GenericFloatingPointFunctions.Cbrt(NegativeFour) - .Should().BeApproximately(Values.CreateFloat(0xBFFF_965F_EA53_D6E3, 0xC82B_0599_9AB4_3DC5), Delta); - GenericFloatingPointFunctions.Cbrt(Float.NaN) - .Should().Be(Float.NaN); - } - [Fact] - public static void CosTest() - { - GenericFloatingPointFunctions.Cos(Zero) - .Should().BeApproximately(One, Delta); - GenericFloatingPointFunctions.Cos(Float.Pi / Two) - .Should().BeApproximately(Zero, Delta); - GenericFloatingPointFunctions.Cos(Float.Pi) - .Should().BeApproximately(NegativeOne, Delta); - GenericFloatingPointFunctions.Cos(Float.Pi * Two) - .Should().BeApproximately(One, Delta); - - GenericFloatingPointFunctions.Cos(Float.NaN) - .Should().Be(Float.NaN); - GenericFloatingPointFunctions.Cos(Float.PositiveInfinity) - .Should().Be(Float.NaN); - GenericFloatingPointFunctions.Cos(Float.NegativeInfinity) - .Should().Be(Float.NaN); - } - [Fact] - public static void CoshTest() - { - GenericFloatingPointFunctions.Cosh(Zero) - .Should().Be(One); - GenericFloatingPointFunctions.Cosh(Two) - .Should().BeApproximately(Values.CreateFloat(0x4000_E18F_A0DF_2D9B, 0xC293_27F7_1777_4D0C), Delta); - GenericFloatingPointFunctions.Cosh(Five) - .Should().BeApproximately(Values.CreateFloat(0x4005_28D6_FCBE_FF3A, 0x9C65_3333_916C_7D52), Delta); - GenericFloatingPointFunctions.Cosh(NegativeFive) - .Should().BeApproximately(Values.CreateFloat(0x4005_28D6_FCBE_FF3A, 0x9C65_3333_916C_7D52), Delta); - } - [Fact] - public static void ExpTest() - { - GenericFloatingPointFunctions.Exp(Two) - .Should().BeApproximately(Values.CreateFloat(0x4001_D8E6_4B8D_4DDA, 0xDCC3_3A3B_A206_B68B), Delta); - GenericFloatingPointFunctions.Exp(NegativeHalf) - .Should().BeApproximately(Values.CreateFloat(0x3FFE_368B_2FC6_F960, 0x9FE7_ACEB_46AA_619C), Delta); - GenericFloatingPointFunctions.Exp(Values.CreateFloat(0x400C_7700_0000_0000, 0x0000_0000_0000_0000)) - .Should().Be(Float.PositiveInfinity); - GenericFloatingPointFunctions.Exp(Values.CreateFloat(0xC00C_7700_0000_0000, 0x0000_0000_0000_0000)) - .Should().Be(Zero); - GenericFloatingPointFunctions.Exp(Zero) - .Should().Be(One); - GenericFloatingPointFunctions.Exp(Float.PositiveInfinity) - .Should().Be(Float.PositiveInfinity); - GenericFloatingPointFunctions.Exp(Float.NaN) - .Should().Be(Float.NaN); - GenericFloatingPointFunctions.Exp(Float.NegativeInfinity) - .Should().Be(Zero); - } - [Fact] - public static void ExpM1Test() - { - GenericFloatingPointFunctions.ExpM1(Two) - .Should().BeApproximately(GenericFloatingPointFunctions.Exp(Two) - One, Delta); - GenericFloatingPointFunctions.ExpM1(NegativeHalf) - .Should().BeApproximately(GenericFloatingPointFunctions.Exp(NegativeHalf) - One, Delta); - } - [Fact] - public static void Exp10Test() - { - GenericFloatingPointFunctions.Exp10(Two) - .Should().Be(Hundred); - GenericFloatingPointFunctions.Exp10(Zero) - .Should().Be(One); - GenericFloatingPointFunctions.Exp10(Float.PositiveInfinity) - .Should().Be(Float.PositiveInfinity); - GenericFloatingPointFunctions.Exp10(Float.NaN) - .Should().Be(Float.NaN); - GenericFloatingPointFunctions.Exp10(Float.NegativeInfinity) - .Should().Be(Zero); - } - [Fact] - public static void Exp2Test() - { - GenericFloatingPointFunctions.Exp2(Two) - .Should().Be(Four); - GenericFloatingPointFunctions.Exp2(Zero) - .Should().Be(One); - GenericFloatingPointFunctions.Exp2(Float.PositiveInfinity) - .Should().Be(Float.PositiveInfinity); - GenericFloatingPointFunctions.Exp2(Float.NaN) - .Should().Be(Float.NaN); - GenericFloatingPointFunctions.Exp2(Float.NegativeInfinity) - .Should().Be(Zero); - } - [Theory] - [MemberData(nameof(FMATheoryData))] - public static void FusedMultiplyAddTest(Float left, Float right, Float addend, Float result) - { - FloatingPointIeee754.FusedMultiplyAdd(left, right, addend) - .Should().Be(result) - .And.BeBitwiseEquivalentTo(result); - } - [Fact] - public static void HypotTest() - { - GenericFloatingPointFunctions.Hypot(Hundred, Ten) - .Should().BeApproximately(Values.CreateFloat(0x4005_91FE_B9F2_BF46, 0xC3A7_08A3_1212_49E7), Delta); - GenericFloatingPointFunctions.Hypot(Float.PositiveInfinity, Float.NegativeInfinity) - .Should().Be(Float.PositiveInfinity); - GenericFloatingPointFunctions.Hypot(Float.NaN, Float.NaN) - .Should().Be(Float.NaN); - } - [Fact] - public static void IeeeRemainderTest() - { - FloatingPointIeee754.Ieee754Remainder(Ten, Three).Should().Be(One); - FloatingPointIeee754.Ieee754Remainder(Ten, Two).Should().Be(Zero); - FloatingPointIeee754.Ieee754Remainder(NegativeTen, Three).Should().Be(NegativeOne); - FloatingPointIeee754.Ieee754Remainder(NegativeTen, Two).Should().Be(NegativeZero); - FloatingPointIeee754.Ieee754Remainder(NegativeTen, Zero).Should().Be(Float.NaN); - } - [Fact] - public static void ILogBTest() - { - FloatingPointIeee754.ILogB(Values.CreateFloat(0x4009_0000_0000_0000, 0x0000_0000_0000_0000)) - .Should().Be(10); - FloatingPointIeee754.ILogB(Values.CreateFloat(0x403F_0000_0000_0000, 0x0000_0000_0000_0000)) - .Should().Be(64); - FloatingPointIeee754.ILogB(Values.CreateFloat(0xC03F_0000_0000_0000, 0x0000_0000_0000_0000)) - .Should().Be(64); - FloatingPointIeee754.ILogB(Zero) - .Should().Be(int.MinValue); - } - [Fact] - public static void LogTest() - { - GenericFloatingPointFunctions.Log(Hundred) - .Should().BeApproximately(Values.CreateFloat(0x4001_26BB_1BBB_5551, 0x582D_D4AD_AC57_05A6), Delta); - GenericFloatingPointFunctions.Log(One) - .Should().Be(Zero); - GenericFloatingPointFunctions.Log(Zero) - .Should().Be(Float.NegativeInfinity); - GenericFloatingPointFunctions.Log(NegativeFive) - .Should().Be(Float.NaN); - } - [Fact] - public static void LogP1Test() - { - GenericFloatingPointFunctions.LogP1(One) - .Should().Be(GenericFloatingPointFunctions.Log(Two)) - .And.BeApproximately(Values.CreateFloat(0x3FFE_62E4_2FEF_A39E, 0xF357_93C7_6730_07E6), Delta); - GenericFloatingPointFunctions.LogP1(Zero) - .Should().Be(Zero); - GenericFloatingPointFunctions.LogP1(NegativeOne) - .Should().Be(Float.NegativeInfinity); - GenericFloatingPointFunctions.LogP1(NegativeFive) - .Should().Be(Float.NaN); - } - [Fact] - public static void Log2Test() - { - GenericFloatingPointFunctions.Log2(Four) - .Should().BeApproximately(Two, Delta); - GenericFloatingPointFunctions.Log2(One) - .Should().Be(Zero); - GenericFloatingPointFunctions.Log2(Zero) - .Should().Be(Float.NegativeInfinity); - GenericFloatingPointFunctions.Log2(NegativeFive) - .Should().Be(Float.NaN); - } - [Fact] - public static void Log10Test() - { - GenericFloatingPointFunctions.Log10(Thousand) - .Should().BeApproximately(Three, Delta); - GenericFloatingPointFunctions.Log10(One) - .Should().Be(Zero); - GenericFloatingPointFunctions.Log10(Zero) - .Should().Be(Float.NegativeInfinity); - GenericFloatingPointFunctions.Log10(NegativeFive) - .Should().Be(Float.NaN); - } - [Fact] - public static void PowTest() - { - GenericFloatingPointFunctions.Pow(Three, Ten) - .Should() - .BeApproximately(Values.CreateFloat(0x400E_CD52_0000_0000, 0x0000_0000_0000_0000), Delta); - GenericFloatingPointFunctions.Pow(Two, NegativeFour) - .Should() - .BeApproximately(Values.CreateFloat(0x3FFB_0000_0000_0000, 0x0000_0000_0000_0000), Delta); - - // Special Cases - Float anything = 8, oddInt = 7, nonInt = 7.5d, greaterThanOne = GreaterThanOneSmallest, lessThanOne = LessThanOneLargest; - - GenericFloatingPointFunctions.Pow(anything, Zero) - .Should() - .Be(One); - - GenericFloatingPointFunctions.Pow(anything, One) - .Should() - .Be(anything); - - GenericFloatingPointFunctions.Pow(anything, Float.NaN) - .Should() - .Be(Float.NaN); - - GenericFloatingPointFunctions.Pow(One, Float.NaN) - .Should() - .Be(One); - - GenericFloatingPointFunctions.Pow(Float.NaN, anything) - .Should() - .Be(Float.NaN); - - GenericFloatingPointFunctions.Pow(greaterThanOne, Float.PositiveInfinity) - .Should() - .Be(Float.PositiveInfinity); - - GenericFloatingPointFunctions.Pow(greaterThanOne, Float.NegativeInfinity) - .Should() - .Be(Zero); - - GenericFloatingPointFunctions.Pow(lessThanOne, Float.PositiveInfinity) - .Should() - .Be(Zero); - - GenericFloatingPointFunctions.Pow(lessThanOne, Float.NegativeInfinity) - .Should() - .Be(Float.PositiveInfinity); - - GenericFloatingPointFunctions.Pow(One, Float.PositiveInfinity) - .Should() - .Be(One); - - GenericFloatingPointFunctions.Pow(One, Float.NegativeInfinity) - .Should() - .Be(One); - - GenericFloatingPointFunctions.Pow(NegativeOne, Float.PositiveInfinity) - .Should() - .Be(One); - - GenericFloatingPointFunctions.Pow(NegativeOne, Float.NegativeInfinity) - .Should() - .Be(One); - - GenericFloatingPointFunctions.Pow(Zero, anything) - .Should() - .Be(Zero); - - GenericFloatingPointFunctions.Pow(NegativeZero, anything) - .Should() - .Be(Zero); - - GenericFloatingPointFunctions.Pow(Zero, -anything) - .Should() - .Be(Float.PositiveInfinity); - - GenericFloatingPointFunctions.Pow(NegativeZero, -anything) - .Should() - .Be(Float.PositiveInfinity); - - GenericFloatingPointFunctions.Pow(NegativeZero, oddInt) - .Should() - .Be(-(GenericFloatingPointFunctions.Pow(Zero, oddInt))); - - GenericFloatingPointFunctions.Pow(Float.PositiveInfinity, anything) - .Should() - .Be(Float.PositiveInfinity); - - GenericFloatingPointFunctions.Pow(Float.PositiveInfinity, -anything) - .Should() - .Be(Zero); - - GenericFloatingPointFunctions.Pow(Float.NegativeInfinity, anything) - .Should() - .Be(GenericFloatingPointFunctions.Pow(NegativeZero, -anything)); - - GenericFloatingPointFunctions.Pow(-anything, oddInt) - .Should() - .Be(GenericFloatingPointFunctions.Pow(NegativeOne, oddInt) * GenericFloatingPointFunctions.Pow(+anything, oddInt)); - - GenericFloatingPointFunctions.Pow(-anything, nonInt) - .Should() - .Be(Float.NaN); - } - [Fact] - public static void ReciprocalEstimateTest() - { - FloatingPointIeee754.ReciprocalEstimate(Two) - .Should().Be(Half); - FloatingPointIeee754.ReciprocalEstimate(Three) - .Should().BeApproximately(Values.CreateFloat(0x3FFD_5555_5555_5555, 0x5555_165E_5289_24A5), Delta); - FloatingPointIeee754.ReciprocalEstimate(Four) - .Should().BeApproximately(Values.CreateFloat(0x3FFD_0000_0000_0000, 0x0000_0000_0000_0000), Delta); - } - [Fact] - public static void RootNTest() - { - GenericFloatingPointFunctions.RootN(Values.CreateFloat(0x4005_4400_0000_0000, 0x0000_0000_0000_0000), 4) - .Should().Be(Three); - GenericFloatingPointFunctions.RootN(Values.CreateFloat(0x4005_0000_0000_0000, 0x0000_0000_0000_0000), 3) - .Should().Be(Four) - .And.Be(GenericFloatingPointFunctions.Cbrt(Values.CreateFloat(0x4005_0000_0000_0000, 0x0000_0000_0000_0000))); - GenericFloatingPointFunctions.RootN(Hundred, 2) - .Should().Be(Ten) - .And.Be(GenericFloatingPointFunctions.Sqrt(Hundred)); - - GenericFloatingPointFunctions.RootN(Zero, 2) - .Should().Be(Zero); - GenericFloatingPointFunctions.RootN(NegativeZero, 2) - .Should().Be(NegativeZero); - GenericFloatingPointFunctions.RootN(Float.PositiveInfinity, 2) - .Should().Be(Float.PositiveInfinity); - GenericFloatingPointFunctions.RootN(NegativeFour, 2) - .Should().Be(Float.NaN); - GenericFloatingPointFunctions.RootN(Float.NaN, 2) - .Should().Be(Float.NaN); - } - [Fact] - public static void ScaleBTest() - { - FloatingPointIeee754.ScaleB(Two, 3) - .Should().Be(Values.CreateFloat(0x4003_0000_0000_0000, 0x0000_0000_0000_0000)); - FloatingPointIeee754.ScaleB(NegativeTwo, 3) - .Should().Be(Values.CreateFloat(0xC003_0000_0000_0000, 0x0000_0000_0000_0000)); - FloatingPointIeee754.ScaleB(Zero, 6) - .Should().Be(Zero); - FloatingPointIeee754.ScaleB(Two, 30000) - .Should().Be(Float.PositiveInfinity); - FloatingPointIeee754.ScaleB(Two, -30000) - .Should().Be(Zero); - } - [Fact] - public static void SinTest() - { - GenericFloatingPointFunctions.Sin(Float.NaN) - .Should().Be(Float.NaN); - GenericFloatingPointFunctions.Sin(Float.PositiveInfinity) - .Should().Be(Float.NaN); - GenericFloatingPointFunctions.Sin(Float.NegativeInfinity) - .Should().Be(Float.NaN); - } - [Fact] - public static void SinCosTest() - { - Float sin, cos; - - (sin, cos) = GenericFloatingPointFunctions.SinCos(Zero); - sin.Should().BeApproximately(Zero, Delta); - cos.Should().BeApproximately(One, Delta); - - (sin, cos) = GenericFloatingPointFunctions.SinCos(Float.Pi); - sin.Should().BeApproximately(Zero, Delta); - cos.Should().BeApproximately(NegativeOne, Delta); - - (sin, cos) = GenericFloatingPointFunctions.SinCos(Float.Pi / Two); - sin.Should().BeApproximately(One, Delta); - cos.Should().BeApproximately(Zero, Delta); - - (sin, cos) = GenericFloatingPointFunctions.SinCos(Float.Pi * Two); - sin.Should().BeApproximately(Zero, Delta); - cos.Should().BeApproximately(One, Delta); - } - [Fact] - public static void SinhTest() - { - GenericFloatingPointFunctions.Sinh(Two) - .Should().BeApproximately(Values.CreateFloat(0x4000_D03C_F63B_6E19, 0xF6F3_4C80_2C96_2009), Delta); - GenericFloatingPointFunctions.Sinh(Zero) - .Should().Be(Zero); - } - [Fact] - public static void SqrtTest() - { - GenericFloatingPointFunctions.Sqrt(Ten) - .Should().BeApproximately(Values.CreateFloat(0x4000_94C5_83AD_A5B5, 0x2920_4A2B_C830_CD9C), Delta); - GenericFloatingPointFunctions.Sqrt(Hundred) - .Should().BeApproximately(Ten, Delta); - - GenericFloatingPointFunctions.Sqrt(Zero) - .Should().Be(Zero); - GenericFloatingPointFunctions.Sqrt(-Zero) - .Should().Be(-Zero); - GenericFloatingPointFunctions.Sqrt(Float.PositiveInfinity) - .Should().Be(Float.PositiveInfinity); - GenericFloatingPointFunctions.Sqrt(NegativeFour) - .Should().Be(Float.NaN); - GenericFloatingPointFunctions.Sqrt(Float.NaN) - .Should().Be(Float.NaN); - } - [Fact] - public static void TanTest() - { - GenericFloatingPointFunctions.Tan(Float.NaN) - .Should().Be(Float.NaN); - GenericFloatingPointFunctions.Tan(Float.PositiveInfinity) - .Should().Be(Float.NaN); - GenericFloatingPointFunctions.Tan(Float.NegativeInfinity) - .Should().Be(Float.NaN); - } - [Fact] - public static void TanhTest() - { - GenericFloatingPointFunctions.Tanh(Two) - .Should().BeApproximately(Values.CreateFloat(0x3FFE_ED95_05E1_BC3D, 0x3D33_C432_FC3E_8256), Delta); - GenericFloatingPointFunctions.Tanh(Float.NaN) - .Should().Be(Float.NaN); - GenericFloatingPointFunctions.Tanh(Zero) - .Should().Be(Zero); - } - #endregion - - #region IFloatingPoint - [Theory] - [MemberData(nameof(RoundAwayFromZeroTheoryData))] - [MemberData(nameof(RoundToEvenTheoryData))] - [MemberData(nameof(RoundToNegativeInfinityTheoryData))] - [MemberData(nameof(RoundToPositiveInfinityTheoryData))] - [MemberData(nameof(RoundToZeroTheoryData))] - public static void RoundTest(Float self, int digits, MidpointRounding midpointRounding, Float result) - { - Float.Round(self, digits, midpointRounding).Should().Be(result); - } - #endregion - - #region IFloatingPointConstants - [Fact] - public static void ConstantPiTest() - { - Assert.Equal(Float.Pi, MathConstantsHelper.Pi()); - } - [Fact] - public static void ConstantTauTest() - { - Assert.Equal(Float.Tau, MathConstantsHelper.Tau()); - } - [Fact] - public static void ConstantETest() - { - Assert.Equal(Float.E, MathConstantsHelper.E()); - } - #endregion - - #region IMinMaxValue - [Fact] - public static void MaxValueTest() - { - MaxValue.Should().Be(MathConstantsHelper.MaxValue()); - } - - [Fact] - public static void MinValueTest() - { - MinValue.Should().Be(MathConstantsHelper.MinValue()); - } - #endregion - - #region ISignedNumber - [Fact] - public static void NegativeOneTest() - { - MathConstantsHelper.NegativeOne().Should().Be(NegativeOne); - MathConstantsHelper.NegativeOne().Should().Be(-One); - } - #endregion - - #region INumber - [Fact] - public static void ClampTest() - { - NumberHelper.Clamp(Float.NegativeInfinity, One, Thousand) - .Should().Be(One); - NumberHelper.Clamp(Float.MinValue, One, Thousand) - .Should().Be(One); - NumberHelper.Clamp(NegativeOne, One, Thousand) - .Should().Be(One); - NumberHelper.Clamp(-GreatestSubnormal, One, Thousand) - .Should().Be(One); - NumberHelper.Clamp(-Float.Epsilon, One, Thousand) - .Should().Be(One); - NumberHelper.Clamp(NegativeZero, One, Thousand) - .Should().Be(One); - NumberHelper.Clamp(Float.NaN, One, Thousand) - .Should().Be(Float.NaN); - NumberHelper.Clamp(Zero, One, Thousand) - .Should().Be(One); - NumberHelper.Clamp(Float.Epsilon, One, Thousand) - .Should().Be(One); - NumberHelper.Clamp(GreatestSubnormal, One, Thousand) - .Should().Be(One); - NumberHelper.Clamp(One, One, Thousand) - .Should().Be(One); - NumberHelper.Clamp(Float.MaxValue, One, Thousand) - .Should().Be(Thousand); - NumberHelper.Clamp(Float.PositiveInfinity, One, Thousand) - .Should().Be(Thousand); - } - [Fact] - public static void CopySignTest() - { - NumberHelper.CopySign(One, NegativeOne) - .Should().Be(NegativeOne); - NumberHelper.CopySign(NegativeOne, One) - .Should().Be(One); - NumberHelper.CopySign(Thousand, NegativeOne) - .Should().Be(NegativeThousand); - NumberHelper.CopySign(NegativeHundred, NegativeOne) - .Should().Be(NegativeHundred); - } - [Fact] - public static void MaxTest() - { - NumberHelper.Max(Float.NegativeInfinity, One) - .Should().Be(One); - NumberHelper.Max(Float.MinValue, One) - .Should().Be(One); - NumberHelper.Max(NegativeOne, One) - .Should().Be(One); - NumberHelper.Max(-GreatestSubnormal, One) - .Should().Be(One); - NumberHelper.Max(-Float.Epsilon, One) - .Should().Be(One); - NumberHelper.Max(NegativeZero, One) - .Should().Be(One); - NumberHelper.Max(Float.NaN, One) - .Should().Be(Float.NaN); - NumberHelper.Max(Zero, One) - .Should().Be(One); - NumberHelper.Max(Float.Epsilon, One) - .Should().Be(One); - NumberHelper.Max(GreatestSubnormal, One) - .Should().Be(One); - NumberHelper.Max(One, One) - .Should().Be(One); - NumberHelper.Max(Float.MaxValue, One) - .Should().Be(Float.MaxValue); - NumberHelper.Max(Float.PositiveInfinity, One) - .Should().Be(Float.PositiveInfinity); - } - [Fact] - public static void MaxNumberTest() - { - NumberHelper.MaxNumber(Float.NegativeInfinity, One) - .Should().Be(One); - NumberHelper.MaxNumber(Float.MinValue, One) - .Should().Be(One); - NumberHelper.MaxNumber(NegativeOne, One) - .Should().Be(One); - NumberHelper.MaxNumber(-GreatestSubnormal, One) - .Should().Be(One); - NumberHelper.MaxNumber(-Float.Epsilon, One) - .Should().Be(One); - NumberHelper.MaxNumber(NegativeZero, One) - .Should().Be(One); - NumberHelper.MaxNumber(Float.NaN, One) - .Should().Be(One); - NumberHelper.MaxNumber(Zero, One) - .Should().Be(One); - NumberHelper.MaxNumber(Float.Epsilon, One) - .Should().Be(One); - NumberHelper.MaxNumber(GreatestSubnormal, One) - .Should().Be(One); - NumberHelper.MaxNumber(One, One) - .Should().Be(One); - NumberHelper.MaxNumber(Float.MaxValue, One) - .Should().Be(Float.MaxValue); - NumberHelper.MaxNumber(Float.PositiveInfinity, One) - .Should().Be(Float.PositiveInfinity); - } - [Fact] - public static void MinTest() - { - NumberHelper.Min(Float.NegativeInfinity, One) - .Should().Be(Float.NegativeInfinity); - NumberHelper.Min(Float.MinValue, One) - .Should().Be(Float.MinValue); - NumberHelper.Min(NegativeOne, One) - .Should().Be(NegativeOne); - NumberHelper.Min(-GreatestSubnormal, One) - .Should().Be(-GreatestSubnormal); - NumberHelper.Min(-Float.Epsilon, One) - .Should().Be(-Float.Epsilon); - NumberHelper.Min(NegativeZero, One) - .Should().Be(NegativeZero); - NumberHelper.Min(Float.NaN, One) - .Should().Be(Float.NaN); - NumberHelper.Min(Zero, One) - .Should().Be(Zero); - NumberHelper.Min(Float.Epsilon, One) - .Should().Be(Float.Epsilon); - NumberHelper.Min(GreatestSubnormal, One) - .Should().Be(GreatestSubnormal); - NumberHelper.Min(One, One) - .Should().Be(One); - NumberHelper.Min(Float.MaxValue, One) - .Should().Be(One); - NumberHelper.Min(Float.PositiveInfinity, One) - .Should().Be(One); - } - [Fact] - public static void MinNumberTest() - { - NumberHelper.MinNumber(Float.NegativeInfinity, One) - .Should().Be(Float.NegativeInfinity); - NumberHelper.MinNumber(Float.MinValue, One) - .Should().Be(Float.MinValue); - NumberHelper.MinNumber(NegativeOne, One) - .Should().Be(NegativeOne); - NumberHelper.MinNumber(-GreatestSubnormal, One) - .Should().Be(-GreatestSubnormal); - NumberHelper.MinNumber(-Float.Epsilon, One) - .Should().Be(-Float.Epsilon); - NumberHelper.MinNumber(NegativeZero, One) - .Should().Be(NegativeZero); - NumberHelper.MinNumber(Float.NaN, One) - .Should().Be(One); - NumberHelper.MinNumber(Zero, One) - .Should().Be(Zero); - NumberHelper.MinNumber(Float.Epsilon, One) - .Should().Be(Float.Epsilon); - NumberHelper.MinNumber(GreatestSubnormal, One) - .Should().Be(GreatestSubnormal); - NumberHelper.MinNumber(One, One) - .Should().Be(One); - NumberHelper.MinNumber(Float.MaxValue, One) - .Should().Be(One); - NumberHelper.MinNumber(Float.PositiveInfinity, One) - .Should().Be(One); - } - [Fact] - public static void SignTest() - { - NumberHelper.Sign(One) - .Should().Be(1); - NumberHelper.Sign(NegativeOne) - .Should().Be(-1); - NumberHelper.Sign(Ten) - .Should().Be(1); - NumberHelper.Sign(NegativeTen) - .Should().Be(-1); - NumberHelper.Sign(Zero) - .Should().Be(0); - NumberHelper.Sign(NegativeZero) - .Should().Be(0); - } - #endregion - - #region INumberBase - [Fact] - public static void OneTest() - { - Assert.Equal(One, NumberBaseHelper.One); - } - [Fact] - public static void ZeroTest() - { - Assert.Equal(Zero, NumberBaseHelper.Zero); - } - [Fact] - public static void RadixTest() - { - Assert.Equal(Radix, NumberBaseHelper.Radix); - } - [Fact] - public static void AbsTest() - { - NumberBaseHelper.Abs(One).Should().Be(One); - NumberBaseHelper.Abs(NegativeOne).Should().Be(One); - NumberBaseHelper.Abs(NegativeHalf).Should().Be(Half); - NumberBaseHelper.Abs(NegativeQuarter).Should().Be(Quarter); - NumberBaseHelper.Abs(NegativeZero).Should().Be(Zero); - NumberBaseHelper.Abs(Float.NegativeInfinity).Should().Be(Float.PositiveInfinity); - } - [Fact] - public static void CreateCheckedFromQuadTest() - { - NumberBaseHelper.CreateChecked(ByteMaxValue).Should().Be(byte.MaxValue); - NumberBaseHelper.CreateChecked(Int16MaxValue).Should().Be(short.MaxValue); - NumberBaseHelper.CreateChecked(Int32MaxValue).Should().Be(int.MaxValue); - NumberBaseHelper.CreateChecked(Int64MaxValue).Should().Be(long.MaxValue); - NumberBaseHelper.CreateChecked(TwoOver127).Should().Be(UInt128.Parse("170141183460469231731687303715884105728")); - NumberBaseHelper.CreateChecked(TwoOver255) - .Should().Be(UInt256.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968")); - NumberBaseHelper.CreateChecked(TwoOver511) - .Should().Be(UInt512.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048")); - - NumberBaseHelper.CreateChecked(Half).Should().Be((Half)0.5f); - NumberBaseHelper.CreateChecked(Half).Should().Be(0.5f); - NumberBaseHelper.CreateChecked(Half).Should().Be(0.5d); - } - [Fact] - public static void CreateSaturatingFromQuadTest() - { - NumberBaseHelper.CreateSaturating(ByteMaxValue).Should().Be(byte.MaxValue); - NumberBaseHelper.CreateSaturating(Int16MaxValue).Should().Be(short.MaxValue); - NumberBaseHelper.CreateSaturating(Int32MaxValue).Should().Be(int.MaxValue); - NumberBaseHelper.CreateSaturating(Int64MaxValue).Should().Be(long.MaxValue); - NumberBaseHelper.CreateSaturating(TwoOver127).Should().Be(UInt128.Parse("170141183460469231731687303715884105728")); - NumberBaseHelper.CreateSaturating(TwoOver255) - .Should().Be(UInt256.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968")); - NumberBaseHelper.CreateSaturating(TwoOver511) - .Should().Be(UInt512.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048")); - - NumberBaseHelper.CreateSaturating(Half).Should().Be((Half)0.5f); - NumberBaseHelper.CreateSaturating(Half).Should().Be(0.5f); - NumberBaseHelper.CreateSaturating(Half).Should().Be(0.5d); - } - [Fact] - public static void CreateTruncatingFromQuadTest() - { - NumberBaseHelper.CreateTruncating(ByteMaxValue).Should().Be(byte.MaxValue); - NumberBaseHelper.CreateTruncating(Int16MaxValue).Should().Be(short.MaxValue); - NumberBaseHelper.CreateTruncating(Int32MaxValue).Should().Be(int.MaxValue); - NumberBaseHelper.CreateTruncating(Int64MaxValue).Should().Be(long.MaxValue); - NumberBaseHelper.CreateTruncating(TwoOver127).Should().Be(UInt128.Parse("170141183460469231731687303715884105728")); - NumberBaseHelper.CreateTruncating(TwoOver255) - .Should().Be(UInt256.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968")); - NumberBaseHelper.CreateTruncating(TwoOver511) - .Should().Be(UInt512.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048")); - - NumberBaseHelper.CreateTruncating(Half).Should().Be((Half)0.5f); - NumberBaseHelper.CreateTruncating(Half).Should().Be(0.5f); - NumberBaseHelper.CreateTruncating(Half).Should().Be(0.5d); - } - [Fact] - public static void CreateCheckedToQuadTest() - { - NumberBaseHelper.CreateChecked(byte.MaxValue).Should().Be(ByteMaxValue); - NumberBaseHelper.CreateChecked(short.MaxValue).Should().Be(Int16MaxValue); - NumberBaseHelper.CreateChecked(int.MaxValue).Should().Be(Int32MaxValue); - NumberBaseHelper.CreateChecked(long.MaxValue).Should().Be(Int64MaxValue); - NumberBaseHelper.CreateChecked(UInt128.Parse("170141183460469231731687303715884105728")) - .Should().Be(TwoOver127); - NumberBaseHelper.CreateChecked(UInt256.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968")) - .Should().Be(TwoOver255); - NumberBaseHelper.CreateChecked(UInt512.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048")) - .Should().Be(TwoOver511); - - NumberBaseHelper.CreateChecked((Half)0.5f).Should().Be(Half); - NumberBaseHelper.CreateChecked(0.5f).Should().Be(Half); - NumberBaseHelper.CreateChecked(0.5d).Should().Be(Half); - } - [Fact] - public static void CreateSaturatingToQuadTest() - { - NumberBaseHelper.CreateSaturating(byte.MaxValue).Should().Be(ByteMaxValue); - NumberBaseHelper.CreateSaturating(short.MaxValue).Should().Be(Int16MaxValue); - NumberBaseHelper.CreateSaturating(int.MaxValue).Should().Be(Int32MaxValue); - NumberBaseHelper.CreateSaturating(long.MaxValue).Should().Be(Int64MaxValue); - NumberBaseHelper.CreateSaturating(UInt128.Parse("170141183460469231731687303715884105728")) - .Should().Be(TwoOver127); - NumberBaseHelper.CreateSaturating(UInt256.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968")) - .Should().Be(TwoOver255); - NumberBaseHelper.CreateSaturating(UInt512.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048")) - .Should().Be(TwoOver511); - - NumberBaseHelper.CreateSaturating((Half)0.5f).Should().Be(Half); - NumberBaseHelper.CreateSaturating(0.5f).Should().Be(Half); - NumberBaseHelper.CreateSaturating(0.5d).Should().Be(Half); - } - [Fact] - public static void CreateTruncatingToQuadTest() - { - NumberBaseHelper.CreateTruncating(byte.MaxValue).Should().Be(ByteMaxValue); - NumberBaseHelper.CreateTruncating(short.MaxValue).Should().Be(Int16MaxValue); - NumberBaseHelper.CreateTruncating(int.MaxValue).Should().Be(Int32MaxValue); - NumberBaseHelper.CreateTruncating(long.MaxValue).Should().Be(Int64MaxValue); - NumberBaseHelper.CreateTruncating(UInt128.Parse("170141183460469231731687303715884105728")) - .Should().Be(TwoOver127); - NumberBaseHelper.CreateTruncating(UInt256.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968")) - .Should().Be(TwoOver255); - NumberBaseHelper.CreateTruncating(UInt512.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048")) - .Should().Be(TwoOver511); - - NumberBaseHelper.CreateTruncating((Half)0.5f).Should().Be(Half); - NumberBaseHelper.CreateTruncating(0.5f).Should().Be(Half); - NumberBaseHelper.CreateTruncating(0.5d).Should().Be(Half); - } - [Fact] - public static void IsCanonicalTest() - { - NumberBaseHelper.IsCanonical(One).Should().BeTrue(); - } - [Fact] - public static void IsComplexNumberTest() - { - NumberBaseHelper.IsComplexNumber(One).Should().BeFalse(); - } - [Fact] - public static void IsEvenIntegerTest() - { - NumberBaseHelper.IsEvenInteger(Half).Should().BeFalse(); - NumberBaseHelper.IsEvenInteger(One).Should().BeFalse(); - NumberBaseHelper.IsEvenInteger(Two).Should().BeTrue(); - NumberBaseHelper.IsEvenInteger(Three).Should().BeFalse(); - NumberBaseHelper.IsEvenInteger(Four).Should().BeTrue(); - NumberBaseHelper.IsEvenInteger(NegativeOne).Should().BeFalse(); - NumberBaseHelper.IsEvenInteger(NegativeTwo).Should().BeTrue(); - NumberBaseHelper.IsEvenInteger(NegativeThree).Should().BeFalse(); - NumberBaseHelper.IsEvenInteger(NegativeFour).Should().BeTrue(); - } - [Fact] - public static void IsFiniteTest() - { - NumberBaseHelper.IsFinite(One).Should().BeTrue(); - NumberBaseHelper.IsFinite(NegativeOne).Should().BeTrue(); - NumberBaseHelper.IsFinite(Float.NaN).Should().BeFalse(); - NumberBaseHelper.IsFinite(Float.PositiveInfinity).Should().BeFalse(); - NumberBaseHelper.IsFinite(Float.NegativeInfinity).Should().BeFalse(); - } - [Fact] - public static void IsImaginaryNumberTest() - { - NumberBaseHelper.IsImaginaryNumber(One).Should().BeFalse(); - } - [Fact] - public static void IsInfinityTest() - { - NumberBaseHelper.IsInfinity(One).Should().BeFalse(); - NumberBaseHelper.IsInfinity(NegativeOne).Should().BeFalse(); - NumberBaseHelper.IsInfinity(Float.NaN).Should().BeFalse(); - NumberBaseHelper.IsInfinity(Float.PositiveInfinity).Should().BeTrue(); - NumberBaseHelper.IsInfinity(Float.NegativeInfinity).Should().BeTrue(); - } - [Fact] - public static void IsIntegerTest() - { - NumberBaseHelper.IsInteger(Quarter).Should().BeFalse(); - NumberBaseHelper.IsInteger(Half).Should().BeFalse(); - NumberBaseHelper.IsInteger(Thousand).Should().BeTrue(); - NumberBaseHelper.IsInteger(One).Should().BeTrue(); - NumberBaseHelper.IsInteger(GreaterThanOneSmallest).Should().BeFalse(); - NumberBaseHelper.IsInteger(SmallestSubnormal).Should().BeFalse(); - NumberBaseHelper.IsInteger(NegativeOne).Should().BeTrue(); - NumberBaseHelper.IsInteger(NegativeThousand).Should().BeTrue(); - NumberBaseHelper.IsInteger(NegativeHalf).Should().BeFalse(); - NumberBaseHelper.IsInteger(NegativeQuarter).Should().BeFalse(); - NumberBaseHelper.IsInteger(Float.NaN).Should().BeFalse(); - NumberBaseHelper.IsInteger(Float.PositiveInfinity).Should().BeFalse(); - NumberBaseHelper.IsInteger(Float.NegativeInfinity).Should().BeFalse(); - } - [Fact] - public static void IsNaNTest() - { - NumberBaseHelper.IsNaN(One).Should().BeFalse(); - NumberBaseHelper.IsNaN(NegativeOne).Should().BeFalse(); - NumberBaseHelper.IsNaN(Float.NaN).Should().BeTrue(); - NumberBaseHelper.IsNaN(Float.PositiveInfinity).Should().BeFalse(); - NumberBaseHelper.IsNaN(Float.NegativeInfinity).Should().BeFalse(); - } - [Fact] - public static void IsNegativeTest() - { - NumberBaseHelper.IsNegative(One).Should().BeFalse(); - NumberBaseHelper.IsNegative(GreatestSubnormal).Should().BeFalse(); - NumberBaseHelper.IsNegative(Float.PositiveInfinity).Should().BeFalse(); - NumberBaseHelper.IsNegative(Float.NaN).Should().BeTrue(); - NumberBaseHelper.IsNegative(NegativeOne).Should().BeTrue(); - NumberBaseHelper.IsNegative(Float.NegativeInfinity).Should().BeTrue(); - } - [Fact] - public static void IsNegativeInfinityTest() - { - NumberBaseHelper.IsNegativeInfinity(One).Should().BeFalse(); - NumberBaseHelper.IsNegativeInfinity(NegativeOne).Should().BeFalse(); - NumberBaseHelper.IsNegativeInfinity(Float.NaN).Should().BeFalse(); - NumberBaseHelper.IsNegativeInfinity(Float.PositiveInfinity).Should().BeFalse(); - NumberBaseHelper.IsNegativeInfinity(Float.NegativeInfinity).Should().BeTrue(); - } - [Fact] - public static void IsNormalTest() - { - NumberBaseHelper.IsNormal(GreatestSubnormal).Should().BeFalse(); - NumberBaseHelper.IsNormal(SmallestSubnormal).Should().BeFalse(); - NumberBaseHelper.IsNormal(MaxValue).Should().BeTrue(); - NumberBaseHelper.IsNormal(MinValue).Should().BeTrue(); - NumberBaseHelper.IsNormal(One).Should().BeTrue(); - } - [Fact] - public static void IsOddIntegerTest() - { - NumberBaseHelper.IsOddInteger(Half).Should().BeFalse(); - NumberBaseHelper.IsOddInteger(One).Should().BeTrue(); - NumberBaseHelper.IsOddInteger(Two).Should().BeFalse(); - NumberBaseHelper.IsOddInteger(Three).Should().BeTrue(); - NumberBaseHelper.IsOddInteger(Four).Should().BeFalse(); - NumberBaseHelper.IsOddInteger(NegativeOne).Should().BeTrue(); - NumberBaseHelper.IsOddInteger(NegativeTwo).Should().BeFalse(); - NumberBaseHelper.IsOddInteger(NegativeThree).Should().BeTrue(); - NumberBaseHelper.IsOddInteger(NegativeFour).Should().BeFalse(); - } - [Fact] - public static void IsPositiveTest() - { - NumberBaseHelper.IsPositive(One).Should().BeTrue(); - NumberBaseHelper.IsPositive(GreatestSubnormal).Should().BeTrue(); - NumberBaseHelper.IsPositive(Float.PositiveInfinity).Should().BeTrue(); - NumberBaseHelper.IsPositive(Float.NaN).Should().BeFalse(); - NumberBaseHelper.IsPositive(NegativeOne).Should().BeFalse(); - NumberBaseHelper.IsPositive(Float.NegativeInfinity).Should().BeFalse(); - } - [Fact] - public static void IsPositiveInfinityTest() - { - NumberBaseHelper.IsPositiveInfinity(One).Should().BeFalse(); - NumberBaseHelper.IsPositiveInfinity(NegativeOne).Should().BeFalse(); - NumberBaseHelper.IsPositiveInfinity(Float.NaN).Should().BeFalse(); - NumberBaseHelper.IsPositiveInfinity(Float.PositiveInfinity).Should().BeTrue(); - NumberBaseHelper.IsPositiveInfinity(Float.NegativeInfinity).Should().BeFalse(); - } - [Fact] - public static void IsRealNumberTest() - { - NumberBaseHelper.IsRealNumber(GreatestSubnormal).Should().BeTrue(); - NumberBaseHelper.IsRealNumber(MaxValue).Should().BeTrue(); - NumberBaseHelper.IsRealNumber(NegativeThousand).Should().BeTrue(); - NumberBaseHelper.IsRealNumber(Float.PositiveInfinity).Should().BeTrue(); - NumberBaseHelper.IsRealNumber(Float.NegativeInfinity).Should().BeTrue(); - NumberBaseHelper.IsRealNumber(Float.NaN).Should().BeFalse(); - } - [Fact] - public static void IsSubnormalTest() - { - NumberBaseHelper.IsSubnormal(GreatestSubnormal).Should().BeTrue(); - NumberBaseHelper.IsSubnormal(SmallestSubnormal).Should().BeTrue(); - NumberBaseHelper.IsSubnormal(MaxValue).Should().BeFalse(); - NumberBaseHelper.IsSubnormal(MinValue).Should().BeFalse(); - NumberBaseHelper.IsSubnormal(One).Should().BeFalse(); - } - [Fact] - public static void IsZeroTest() - { - NumberBaseHelper.IsZero(One).Should().BeFalse(); - NumberBaseHelper.IsZero(Float.Epsilon).Should().BeFalse(); - NumberBaseHelper.IsZero(Zero).Should().BeTrue(); - NumberBaseHelper.IsZero(NegativeZero).Should().BeTrue(); - } - [Fact] - public static void MaxMagnitudeTest() - { - NumberBaseHelper.MaxMagnitude(Float.NegativeInfinity, One) - .Should().Be(Float.NegativeInfinity); - NumberBaseHelper.MaxMagnitude(Float.MinValue, One) - .Should().Be(Float.MinValue); - NumberBaseHelper.MaxMagnitude(NegativeOne, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitude(-GreatestSubnormal, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitude(-Float.Epsilon, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitude(NegativeZero, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitude(Float.NaN, One) - .Should().Be(Float.NaN); - NumberBaseHelper.MaxMagnitude(Zero, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitude(Float.Epsilon, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitude(GreatestSubnormal, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitude(One, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitude(Float.MaxValue, One) - .Should().Be(Float.MaxValue); - NumberBaseHelper.MaxMagnitude(Float.PositiveInfinity, One) - .Should().Be(Float.PositiveInfinity); - } - [Fact] - public static void MaxMagnitudeNumberTest() - { - NumberBaseHelper.MaxMagnitudeNumber(Float.NegativeInfinity, One) - .Should().Be(Float.NegativeInfinity); - NumberBaseHelper.MaxMagnitudeNumber(Float.MinValue, One) - .Should().Be(Float.MinValue); - NumberBaseHelper.MaxMagnitudeNumber(NegativeOne, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitudeNumber(-GreatestSubnormal, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitudeNumber(-Float.Epsilon, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitudeNumber(NegativeZero, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitudeNumber(Float.NaN, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitudeNumber(Zero, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitudeNumber(Float.Epsilon, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitudeNumber(GreatestSubnormal, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitudeNumber(One, One) - .Should().Be(One); - NumberBaseHelper.MaxMagnitudeNumber(Float.MaxValue, One) - .Should().Be(Float.MaxValue); - NumberBaseHelper.MaxMagnitudeNumber(Float.PositiveInfinity, One) - .Should().Be(Float.PositiveInfinity); - } - [Fact] - public static void MinMagnitudeTest() - { - NumberBaseHelper.MinMagnitude(Float.NegativeInfinity, One) - .Should().Be(One); - NumberBaseHelper.MinMagnitude(Float.MinValue, One) - .Should().Be(One); - NumberBaseHelper.MinMagnitude(NegativeOne, One) - .Should().Be(NegativeOne); - NumberBaseHelper.MinMagnitude(-GreatestSubnormal, One) - .Should().Be(-GreatestSubnormal); - NumberBaseHelper.MinMagnitude(-Float.Epsilon, One) - .Should().Be(-Float.Epsilon); - NumberBaseHelper.MinMagnitude(NegativeZero, One) - .Should().Be(NegativeZero); - NumberBaseHelper.MinMagnitude(Float.NaN, One) - .Should().Be(Float.NaN); - NumberBaseHelper.MinMagnitude(Zero, One) - .Should().Be(Zero); - NumberBaseHelper.MinMagnitude(Float.Epsilon, One) - .Should().Be(Float.Epsilon); - NumberBaseHelper.MinMagnitude(GreatestSubnormal, One) - .Should().Be(GreatestSubnormal); - NumberBaseHelper.MinMagnitude(One, One) - .Should().Be(One); - NumberBaseHelper.MinMagnitude(Float.MaxValue, One) - .Should().Be(One); - NumberBaseHelper.MinMagnitude(Float.PositiveInfinity, One) - .Should().Be(One); - } - [Fact] - public static void MinMagnitudeNumberTest() - { - NumberBaseHelper.MinMagnitudeNumber(Float.NegativeInfinity, One) - .Should().Be(One); - NumberBaseHelper.MinMagnitudeNumber(Float.MinValue, One) - .Should().Be(One); - NumberBaseHelper.MinMagnitudeNumber(NegativeOne, One) - .Should().Be(NegativeOne); - NumberBaseHelper.MinMagnitudeNumber(-GreatestSubnormal, One) - .Should().Be(-GreatestSubnormal); - NumberBaseHelper.MinMagnitudeNumber(-Float.Epsilon, One) - .Should().Be(-Float.Epsilon); - NumberBaseHelper.MinMagnitudeNumber(NegativeZero, One) - .Should().Be(NegativeZero); - NumberBaseHelper.MinMagnitudeNumber(Float.NaN, One) - .Should().Be(One); - NumberBaseHelper.MinMagnitudeNumber(Zero, One) - .Should().Be(Zero); - NumberBaseHelper.MinMagnitudeNumber(Float.Epsilon, One) - .Should().Be(Float.Epsilon); - NumberBaseHelper.MinMagnitudeNumber(GreatestSubnormal, One) - .Should().Be(GreatestSubnormal); - NumberBaseHelper.MinMagnitudeNumber(One, One) - .Should().Be(One); - NumberBaseHelper.MinMagnitudeNumber(Float.MaxValue, One) - .Should().Be(One); - NumberBaseHelper.MinMagnitudeNumber(Float.PositiveInfinity, One) - .Should().Be(One); - } - - [Theory] - [MemberData(nameof(TryParseTheoryData))] - public void ParseTest(string s, bool success, Float output) - { - if (success) - { - NumberBaseHelper.Parse(s, NumberStyles.Float, NumberFormatInfo.CurrentInfo) - .Should().Be(output); - } - else - { - Assert.Throws(() => NumberBaseHelper.Parse(s, NumberStyles.Float, NumberFormatInfo.CurrentInfo)); - } - } - - [Theory] - [MemberData(nameof(TryParseTheoryData))] - public void TryParseTest(string s, bool success, Float output) - { - Float result; - - NumberBaseHelper.TryParse(s, NumberStyles.Float, NumberFormatInfo.CurrentInfo, out result).Should().Be(success); - result.Should().Be(output); - } - - [Theory] - [MemberData(nameof(TryParseTheoryData))] - public void ParseUtf8Test(string s, bool success, Float output) - { - byte[] utf8 = Encoding.UTF8.GetBytes(s); - - if (success) - { - NumberBaseHelper.Parse(utf8, NumberStyles.Float, NumberFormatInfo.CurrentInfo) - .Should().Be(output); - } - else - { - Assert.Throws(() => NumberBaseHelper.Parse(utf8, NumberStyles.Float, NumberFormatInfo.CurrentInfo)); - } - } - - [Theory] - [MemberData(nameof(TryParseTheoryData))] - public void TryParseUtf8Test(string s, bool success, Float output) - { - ReadOnlySpan utf8 = Encoding.UTF8.GetBytes(s); - Float result; - - NumberBaseHelper.TryParse(utf8, NumberStyles.Float, NumberFormatInfo.CurrentInfo, out result).Should().Be(success); - result.Should().Be(output); - } - #endregion - } -} diff --git a/src/MissingValues.Tests.Old/Core/QuadTest.TheoryData.cs b/src/MissingValues.Tests.Old/Core/QuadTest.TheoryData.cs deleted file mode 100644 index 8037eb2..0000000 --- a/src/MissingValues.Tests.Old/Core/QuadTest.TheoryData.cs +++ /dev/null @@ -1,798 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.Contracts; -using System.Globalization; -using System.Xml; - -namespace MissingValues.Tests.Core -{ - public partial class QuadTest - { -#pragma warning disable S3263 // Static fields should appear in the order they must be initialized - private static (string, bool, Quad)[] _tryParseData => - [ - ("2,0", true, Two), - ("-2", true, NegativeTwo), - ("0", true, Zero), - (NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol, true, Quad.PositiveInfinity), - (NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol, true, Quad.NegativeInfinity), - (NumberFormatInfo.CurrentInfo.NaNSymbol, true, Quad.NaN), - ("256,4995", true, Values.CreateFloat(0x4007_007F_DF3B_645A, 0x1CAC_0831_26E9_78D5)), - ("471581881", true, Values.CreateFloat(0x401B_C1BC_4B90_0000, 0x0000_0000_0000_0000)), - ("1,93561113", true, Values.CreateFloat(0x3FFF_EF84_3605_1FA4, 0x8B0F_3D34_BECE_8762)), - ("9715574,2", true, Values.CreateFloat(0x4016_287E_EC66_6666, 0x6666_6666_6666_6666)), - ("0,51438427732005011792", true, Values.CreateFloat(0x3FFE_075D_6041_5519, 0x72D0_0AD3_7DB4_57E9)), - ("0,04201133209656899095", true, Values.CreateFloat(0x3FFA_5828_262D_512C, 0x8840_B3B3_D424_5947)), - ("7,7E777", true, Values.CreateFloat(0x4A17_0F28_5D1D_4C84, 0xA11F_6899_101B_A9A4)), - ("-7,7E-777", true, Values.CreateFloat(0xB5EC_BFCE_3AF6_4E08, 0x42C8_5750_BEBD_A572)), - ("1A", false, default), - ]; - - private static (Quad, Quad)[] _unaryNegationOperationData => - [ - (Zero, NegativeZero), - (One, NegativeOne), - (Two, NegativeTwo), - (Ten, NegativeTen), - (Hundred, NegativeHundred), - (Thousand, NegativeThousand) - ]; - private static (Quad, Quad)[] _incrementOperationData => - [ - (NegativeTwo, NegativeOne), - (NegativeOne, Zero), - (Zero, One), - (One, Two), - ]; - private static (Quad, Quad)[] _decrementOperationData => - [ - (NegativeOne, NegativeTwo), - (Zero, NegativeOne), - (One, Zero), - (Two, One), - ]; - - private static (Quad, Quad, Quad)[] _additionOperationData => - [ - (One, One, Two), - (One, NegativeOne, Zero), - (One, NegativeTwo, NegativeOne), - (One, Four, Five), - (Three, Two, Five), - (SmallestSubnormal, GreatestSubnormal, Values.CreateFloat(0x0001_0000_0000_0000, 0x0000_0000_0000_0000)), - (Quad.PositiveInfinity, Quad.One, Quad.PositiveInfinity), - (Quad.NegativeInfinity, Quad.One, Quad.NegativeInfinity), - (Quad.PositiveInfinity, Quad.PositiveInfinity, Quad.PositiveInfinity), - (Quad.NegativeInfinity, Quad.NegativeInfinity, Quad.NegativeInfinity), - ]; - private static (Quad, Quad, Quad)[] _subtractionOperationData => - [ - (One, One, Zero), - (One, NegativeOne, Two), - (One, Two, NegativeOne), - (SmallestSubnormal, GreatestSubnormal, Values.CreateFloat(0x8000_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE)), - (Quad.PositiveInfinity, Quad.PositiveInfinity, Quad.NaN), - (Quad.NegativeInfinity, Quad.NegativeInfinity, Quad.NaN), - ]; - private static (Quad, Quad, Quad)[] _multiplicationOperationData => - [ - (One, One, One), - (One, NegativeOne, NegativeOne), - (Ten, Ten, Hundred), - (NegativeHundred, Ten, NegativeThousand), - (NegativeTen, Hundred, NegativeThousand), - (Zero, NegativeThousand, NegativeZero), - (Zero, Quad.PositiveInfinity, Quad.NaN), - (NegativeZero, Quad.NegativeInfinity, Quad.NaN), - (Quad.PositiveInfinity, Zero, Quad.NaN), - (Quad.NegativeInfinity, NegativeZero, Quad.NaN), - ]; - private static (Quad, Quad, Quad)[] _divisionOperationData => - [ - (Ten, Ten, One), - (Hundred, Ten, Ten), - (NegativeThousand, Ten, NegativeHundred), - (Zero, Zero, Quad.NaN), - (One, Zero, Quad.PositiveInfinity), - (NegativeOne, Zero, Quad.NegativeInfinity), - (Quad.PositiveInfinity, Quad.PositiveInfinity, Quad.NaN), - (Quad.NegativeInfinity, Quad.NegativeInfinity, Quad.NaN), - ]; - - private static (byte, Quad)[] _castFromByteData => - [ - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (byte.MaxValue, ByteMaxValue), - ]; - private static (ushort, Quad)[] _castFromUInt16Data => - [ - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - (byte.MaxValue, ByteMaxValue), - (ushort.MaxValue, UInt16MaxValue), - ]; - private static (uint, Quad)[] _castFromUInt32Data => - [ - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - (byte.MaxValue, ByteMaxValue), - (ushort.MaxValue, UInt16MaxValue), - (uint.MaxValue, UInt32MaxValue), - ]; - private static (ulong, Quad)[] _castFromUInt64Data => - [ - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - (byte.MaxValue, ByteMaxValue), - (ushort.MaxValue, UInt16MaxValue), - (uint.MaxValue, UInt32MaxValue), - (ulong.MaxValue, UInt64MaxValue), - ]; - private static (UInt128, Quad)[] _castFromUInt128Data => - [ - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - (byte.MaxValue, ByteMaxValue), - (ushort.MaxValue, UInt16MaxValue), - (uint.MaxValue, UInt32MaxValue), - (ulong.MaxValue, UInt64MaxValue), - ]; - private static (UInt256, Quad)[] _castFromUInt256Data => - [ - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - (byte.MaxValue, ByteMaxValue), - (ushort.MaxValue, UInt16MaxValue), - (uint.MaxValue, UInt32MaxValue), - (ulong.MaxValue, UInt64MaxValue), - ]; - private static (UInt512, Quad)[] _castFromUInt512Data => - [ - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - (byte.MaxValue, ByteMaxValue), - (ushort.MaxValue, UInt16MaxValue), - (uint.MaxValue, UInt32MaxValue), - (ulong.MaxValue, UInt64MaxValue), - ]; - private static (sbyte, Quad)[] _castFromSByteData => - [ - (sbyte.MinValue, SByteMinValue), - (-100, NegativeHundred), - (-10, NegativeTen), - (-2, NegativeTwo), - (-1, NegativeOne), - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (sbyte.MaxValue, SByteMaxValue), - ]; - private static (short, Quad)[] _castFromInt16Data => - [ - (short.MinValue, Int16MinValue), - (sbyte.MinValue, SByteMinValue), - (-1000, NegativeThousand), - (-100, NegativeHundred), - (-10, NegativeTen), - (-2, NegativeTwo), - (-1, NegativeOne), - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - (sbyte.MaxValue, SByteMaxValue), - (short.MaxValue, Int16MaxValue), - ]; - private static (int, Quad)[] _castFromInt32Data => - [ - (int.MinValue, Int32MinValue), - (short.MinValue, Int16MinValue), - (sbyte.MinValue, SByteMinValue), - (-1000, NegativeThousand), - (-100, NegativeHundred), - (-10, NegativeTen), - (-2, NegativeTwo), - (-1, NegativeOne), - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - (sbyte.MaxValue, SByteMaxValue), - (short.MaxValue, Int16MaxValue), - (int.MaxValue, Int32MaxValue), - ]; - private static (long, Quad)[] _castFromInt64Data => - [ - (long.MinValue, Int64MinValue), - (int.MinValue, Int32MinValue), - (short.MinValue, Int16MinValue), - (sbyte.MinValue, SByteMinValue), - (-1000, NegativeThousand), - (-100, NegativeHundred), - (-10, NegativeTen), - (-2, NegativeTwo), - (-1, NegativeOne), - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - (sbyte.MaxValue, SByteMaxValue), - (short.MaxValue, Int16MaxValue), - (int.MaxValue, Int32MaxValue), - (long.MaxValue, Int64MaxValue), - ]; - private static (Int128, Quad)[] _castFromInt128Data => - [ - (long.MinValue, Int64MinValue), - (int.MinValue, Int32MinValue), - (short.MinValue, Int16MinValue), - (sbyte.MinValue, SByteMinValue), - (-1000, NegativeThousand), - (-100, NegativeHundred), - (-10, NegativeTen), - (-2, NegativeTwo), - (-1, NegativeOne), - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - (sbyte.MaxValue, SByteMaxValue), - (short.MaxValue, Int16MaxValue), - (int.MaxValue, Int32MaxValue), - (long.MaxValue, Int64MaxValue), - ]; - private static (Int256, Quad)[] _castFromInt256Data => - [ - (long.MinValue, Int64MinValue), - (int.MinValue, Int32MinValue), - (short.MinValue, Int16MinValue), - (sbyte.MinValue, SByteMinValue), - (-1000, NegativeThousand), - (-100, NegativeHundred), - (-10, NegativeTen), - (-2, NegativeTwo), - (-1, NegativeOne), - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - (sbyte.MaxValue, SByteMaxValue), - (short.MaxValue, Int16MaxValue), - (int.MaxValue, Int32MaxValue), - (long.MaxValue, Int64MaxValue), - ]; - private static (Int512, Quad)[] _castFromInt512Data => - [ - (long.MinValue, Int64MinValue), - (int.MinValue, Int32MinValue), - (short.MinValue, Int16MinValue), - (sbyte.MinValue, SByteMinValue), - (-1000, NegativeThousand), - (-100, NegativeHundred), - (-10, NegativeTen), - (-2, NegativeTwo), - (-1, NegativeOne), - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - (sbyte.MaxValue, SByteMaxValue), - (short.MaxValue, Int16MaxValue), - (int.MaxValue, Int32MaxValue), - (long.MaxValue, Int64MaxValue), - ]; - private static (Half, Quad)[] _castFromHalfData => - [ - (System.Half.NegativeOne, NegativeOne), - (System.Half.NegativeZero, NegativeZero), - (System.Half.Zero, Zero), - (System.Half.One, One), - ((Half)10, Ten), - ((Half)100, Hundred), - ((Half)1000, Thousand), - ]; - private static (float, Quad)[] _castFromSingleData => - [ - (-1000, NegativeThousand), - (-100, NegativeHundred), - (-10, NegativeTen), - (-2, NegativeTwo), - (-1, NegativeOne), - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - ]; - private static (double, Quad)[] _castFromDoubleData => - [ - (-1000, NegativeThousand), - (-100, NegativeHundred), - (-10, NegativeTen), - (-2, NegativeTwo), - (-1, NegativeOne), - (0, Zero), - (1, One), - (2, Two), - (10, Ten), - (100, Hundred), - (1000, Thousand), - ]; - - private static (Quad, byte)[] _castToByteData => - [ - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Hundred, 100), - (ByteMaxValue, byte.MaxValue), - ]; - private static (Quad, ushort)[] _castToUInt16Data => - [ - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Hundred, 100), - (Thousand, 1000), - (ByteMaxValue, byte.MaxValue), - (UInt16MaxValue, ushort.MaxValue), - ]; - private static (Quad, uint)[] _castToUInt32Data => - [ - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Hundred, 100), - (Thousand, 1000), - (ByteMaxValue, byte.MaxValue), - (UInt16MaxValue, ushort.MaxValue), - (UInt32MaxValue, uint.MaxValue), - ]; - private static (Quad, ulong)[] _castToUInt64Data => - [ - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Thousand, 1000), - (ByteMaxValue, byte.MaxValue), - (UInt16MaxValue, ushort.MaxValue), - (UInt32MaxValue, uint.MaxValue), - (UInt64MaxValue, ulong.MaxValue), - ]; - private static (Quad, UInt128)[] _castToUInt128Data => - [ - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Hundred, 100), - (Thousand, 1000), - (ByteMaxValue, byte.MaxValue), - (UInt16MaxValue, ushort.MaxValue), - (UInt32MaxValue, uint.MaxValue), - (UInt64MaxValue, ulong.MaxValue), - ]; - private static (Quad, UInt256)[] _castToUInt256Data => - [ - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Hundred, 100), - (Thousand, 1000), - (ByteMaxValue, byte.MaxValue), - (UInt16MaxValue, ushort.MaxValue), - (UInt32MaxValue, uint.MaxValue), - (UInt64MaxValue, ulong.MaxValue), - ]; - private static (Quad, UInt512)[] _castToUInt512Data => - [ - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Hundred, 100), - (Thousand, 1000), - (ByteMaxValue, byte.MaxValue), - (UInt16MaxValue, ushort.MaxValue), - (UInt32MaxValue, uint.MaxValue), - (UInt64MaxValue, ulong.MaxValue), - ]; - private static (Quad, sbyte)[] _castToSByteData => - [ - (SByteMinValue, sbyte.MinValue), - (NegativeHundred, -100), - (NegativeTen, -10), - (NegativeTwo, -2), - (NegativeOne, -1), - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Hundred, 100), - (SByteMaxValue, sbyte.MaxValue), - ]; - private static (Quad, short)[] _castToInt16Data => - [ - (Int16MinValue, short.MinValue), - (SByteMinValue, sbyte.MinValue), - (NegativeHundred, -100), - (NegativeTen, -10), - (NegativeTwo, -2), - (NegativeOne, -1), - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Hundred, 100), - (SByteMaxValue, sbyte.MaxValue), - (Int16MaxValue, short.MaxValue), - ]; - private static (Quad, int)[] _castToInt32Data => - [ - (Int32MinValue, int.MinValue), - (Int16MinValue, short.MinValue), - (SByteMinValue, sbyte.MinValue), - (NegativeHundred, -100), - (NegativeTen, -10), - (NegativeTwo, -2), - (NegativeOne, -1), - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Hundred, 100), - (SByteMaxValue, sbyte.MaxValue), - (Int16MaxValue, short.MaxValue), - (Int32MaxValue, int.MaxValue), - ]; - private static (Quad, long)[] _castToInt64Data => - [ - (Int64MinValue, long.MinValue), - (Int32MinValue, int.MinValue), - (Int16MinValue, short.MinValue), - (SByteMinValue, sbyte.MinValue), - (NegativeHundred, -100), - (NegativeTen, -10), - (NegativeTwo, -2), - (NegativeOne, -1), - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Hundred, 100), - (SByteMaxValue, sbyte.MaxValue), - (Int16MaxValue, short.MaxValue), - (Int32MaxValue, int.MaxValue), - (Int64MaxValue, long.MaxValue), - ]; - private static (Quad, Int128)[] _castToInt128Data => - [ - (Int64MinValue, long.MinValue), - (Int32MinValue, int.MinValue), - (Int16MinValue, short.MinValue), - (SByteMinValue, sbyte.MinValue), - (NegativeHundred, -100), - (NegativeTen, -10), - (NegativeTwo, -2), - (NegativeOne, -1), - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Hundred, 100), - (SByteMaxValue, sbyte.MaxValue), - (Int16MaxValue, short.MaxValue), - (Int32MaxValue, int.MaxValue), - (Int64MaxValue, long.MaxValue), - ]; - private static (Quad, Int256)[] _castToInt256Data => - [ - (Int64MinValue, long.MinValue), - (Int32MinValue, int.MinValue), - (Int16MinValue, short.MinValue), - (SByteMinValue, sbyte.MinValue), - (NegativeHundred, -100), - (NegativeTen, -10), - (NegativeTwo, -2), - (NegativeOne, -1), - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Hundred, 100), - (SByteMaxValue, sbyte.MaxValue), - (Int16MaxValue, short.MaxValue), - (Int32MaxValue, int.MaxValue), - (Int64MaxValue, long.MaxValue), - ]; - private static (Quad, Int512)[] _castToInt512Data => - [ - (Int64MinValue, long.MinValue), - (Int32MinValue, int.MinValue), - (Int16MinValue, short.MinValue), - (SByteMinValue, sbyte.MinValue), - (NegativeHundred, -100), - (NegativeTen, -10), - (NegativeTwo, -2), - (NegativeOne, -1), - (Half, 0), - (One, 1), - (Two, 2), - (Ten, 10), - (Hundred, 100), - (SByteMaxValue, sbyte.MaxValue), - (Int16MaxValue, short.MaxValue), - (Int32MaxValue, int.MaxValue), - (Int64MaxValue, long.MaxValue), - ]; - private static (Quad, Half)[] _castToHalfData => - [ - (NegativeHundred, -(Half)100.0f), - (NegativeTen, -(Half)10.0f), - (NegativeTwo, -(Half)2.0f), - (NegativeOne, -(Half)1.0f), - (NegativeZero, -(Half)0.0f), - (Zero, (Half)0.0f), - (One, System.Half.One), - (Two, (Half)2.0f), - (Ten, (Half)10.0f), - (Hundred, (Half)100.0f), - ]; - private static (Quad, float)[] _castToSingleData => - [ - (NegativeThousand, -1000.0f), - (NegativeHundred, -100.0f), - (NegativeTen, -10.0f), - (NegativeTwo, -2.0f), - (NegativeOne, -1.0f), - (NegativeZero, -0.0f), - (Zero, 0.0f), - (Half, 0.5f), - (One, 1.0f), - (Two, 2.0f), - (Ten, 10.0f), - (Hundred, 100.0f), - (Thousand, 1000.0f), - ]; - private static (Quad, double)[] _castToDoubleData => - [ - (NegativeThousand, -1000.0d), - (NegativeHundred, -100.0d), - (NegativeTen, -10.0d), - (NegativeTwo, -2.0d), - (NegativeOne, -1.0d), - (NegativeZero, -0.0d), - (Zero, 0.0d), - (Half, 0.5d), - (One, 1.0d), - (Two, 2.0d), - (Ten, 10.0d), - (Hundred, 100.0d), - (Thousand, 1000.0d), - ]; - private static (Quad, Octo)[] _castToOctoData => - [ - (NegativeThousand, OctoTest.NegativeThousand), - (NegativeHundred, OctoTest.NegativeHundred), - (NegativeTen, OctoTest.NegativeTen), - (NegativeTwo, OctoTest.NegativeTwo), - (NegativeOne, OctoTest.NegativeOne), - (NegativeZero, OctoTest.NegativeZero), - (Zero, OctoTest.Zero), - (Half, OctoTest.Half), - (One, OctoTest.One), - (Two, OctoTest.Two), - (Ten, OctoTest.Ten), - (Hundred, OctoTest.Hundred), - (Thousand, OctoTest.Thousand), - ]; - - private static (Quad, int, MidpointRounding, Quad)[] _roundAwayFromZeroData => - [ - (Values.CreateFloat(0x4000_C000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.AwayFromZero, Four), - (Values.CreateFloat(0x4000_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.AwayFromZero, Three), - (Values.CreateFloat(0x4000_4000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.AwayFromZero, Three), - (Values.CreateFloat(0x4000_0CCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.AwayFromZero, Two), - (Values.CreateFloat(0xC000_0CCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.AwayFromZero, NegativeTwo), - (Values.CreateFloat(0xC000_4000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.AwayFromZero, NegativeThree), - (Values.CreateFloat(0xC000_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.AwayFromZero, NegativeThree), - (Values.CreateFloat(0xC000_C000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.AwayFromZero, NegativeFour), - ]; - private static (Quad, int, MidpointRounding, Quad)[] _roundToEvenData => - [ - (Values.CreateFloat(0x4000_C000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToEven, Four), - (Values.CreateFloat(0x4000_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToEven, Three), - (Values.CreateFloat(0x4000_4000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToEven, Two), - (Values.CreateFloat(0x4000_0CCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToEven, Two), - (Values.CreateFloat(0xC000_0CCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToEven, NegativeTwo), - (Values.CreateFloat(0xC000_4000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToEven, NegativeTwo), - (Values.CreateFloat(0xC000_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToEven, NegativeThree), - (Values.CreateFloat(0xC000_C000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToEven, NegativeFour), - ]; - private static (Quad, int, MidpointRounding, Quad)[] _roundToNegativeInfinityData => - [ - (Values.CreateFloat(0x4000_C000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToNegativeInfinity, Three), - (Values.CreateFloat(0x4000_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToNegativeInfinity, Two), - (Values.CreateFloat(0x4000_4000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToNegativeInfinity, Two), - (Values.CreateFloat(0x4000_0CCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToNegativeInfinity, Two), - (Values.CreateFloat(0xC000_0CCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToNegativeInfinity, NegativeThree), - (Values.CreateFloat(0xC000_4000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToNegativeInfinity, NegativeThree), - (Values.CreateFloat(0xC000_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToNegativeInfinity, NegativeThree), - (Values.CreateFloat(0xC000_C000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToNegativeInfinity, NegativeFour), - ]; - private static (Quad, int, MidpointRounding, Quad)[] _roundToPositiveInfinityData => - [ - (Values.CreateFloat(0x4000_C000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToPositiveInfinity, Four), - (Values.CreateFloat(0x4000_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToPositiveInfinity, Three), - (Values.CreateFloat(0x4000_4000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToPositiveInfinity, Three), - (Values.CreateFloat(0x4000_0CCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToPositiveInfinity, Three), - (Values.CreateFloat(0xC000_0CCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToPositiveInfinity, NegativeTwo), - (Values.CreateFloat(0xC000_4000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToPositiveInfinity, NegativeTwo), - (Values.CreateFloat(0xC000_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToPositiveInfinity, NegativeTwo), - (Values.CreateFloat(0xC000_C000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToPositiveInfinity, NegativeThree), - ]; - private static (Quad, int, MidpointRounding, Quad)[] _roundToZeroData => - [ - (Values.CreateFloat(0x4000_C000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToZero, Three), - (Values.CreateFloat(0x4000_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToZero, Two), - (Values.CreateFloat(0x4000_4000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToZero, Two), - (Values.CreateFloat(0x4000_0CCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToZero, Two), - (Values.CreateFloat(0xC000_0CCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToZero, NegativeTwo), - (Values.CreateFloat(0xC000_4000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToZero, NegativeTwo), - (Values.CreateFloat(0xC000_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToZero, NegativeTwo), - (Values.CreateFloat(0xC000_C000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToZero, NegativeThree), - ]; - - private static (Quad, Quad, bool)[] _greaterThanData => - [ - (Two, One, true), - (Thousand, NegativeThousand, true), - (NegativeQuarter, NegativeHalf, true), - (Quarter, Half, false), - (Ten, Hundred, false), - (GreaterThanOneSmallest, One, true), - ]; - private static (Quad, Quad, bool)[] _lessThanData => - [ - (Zero, One, true), - (Zero, Quarter, true), - (NegativeThousand, Thousand, true), - (NegativeOne, NegativeThree, false), - (Hundred, Two, false), - (LessThanOneLargest, One, true), - ]; - private static (Quad, Quad, bool)[] _equalToData => - [ - (One, One, true), - (Two, Two, true), - (Quad.NaN, Quad.NaN, false), - (GreatestSubnormal, GreatestSubnormal, true), - ]; - private static (Quad, Quad, bool)[] _notEqualToData => - [ - (One, One, false), - (Quad.NaN, Quad.NaN, true), - (NegativeTwo, Two, true), - (SmallestSubnormal, GreatestSubnormal, true) - ]; - - private static (Quad, Quad, Quad, Quad)[] _fmaData => - [ - (One, One, One, Two), - (Ten, Ten, Zero, Hundred), - (Five, Zero, Five, Five), - (Values.CreateFloat(0xBFFF_4000_0000_0000, 0), One, Two, Values.CreateFloat(0x3FFE_8000_0000_0000, 0)) - ]; - - - public static TryParseTheoryData TryParseTheoryData = new(_tryParseData); - - public static UnaryTheoryData UnaryNegationOperationTheoryData = new(_unaryNegationOperationData); - public static UnaryTheoryData IncrementOperationTheoryData = new(_incrementOperationData); - public static UnaryTheoryData DecrementOperationTheoryData = new(_decrementOperationData); - - public static OperationTheoryData AdditionOperationTheoryData = new(_additionOperationData); - public static OperationTheoryData SubtractionOperationTheoryData = new(_subtractionOperationData); - public static OperationTheoryData MultiplicationOperationTheoryData = new(_multiplicationOperationData); - public static OperationTheoryData DivisionOperationTheoryData = new(_divisionOperationData); - - public static CastingTheoryData CastFromByteTheoryData = new(_castFromByteData); - public static CastingTheoryData CastFromUInt16TheoryData = new(_castFromUInt16Data); - public static CastingTheoryData CastFromUInt32TheoryData = new(_castFromUInt32Data); - public static CastingTheoryData CastFromUInt64TheoryData = new(_castFromUInt64Data); - public static CastingTheoryData CastFromUInt128TheoryData = new(_castFromUInt128Data); - public static CastingTheoryData CastFromUInt256TheoryData = new(_castFromUInt256Data); - public static CastingTheoryData CastFromUInt512TheoryData = new(_castFromUInt512Data); - public static CastingTheoryData CastFromSByteTheoryData = new(_castFromSByteData); - public static CastingTheoryData CastFromInt16TheoryData = new(_castFromInt16Data); - public static CastingTheoryData CastFromInt32TheoryData = new(_castFromInt32Data); - public static CastingTheoryData CastFromInt64TheoryData = new(_castFromInt64Data); - public static CastingTheoryData CastFromInt128TheoryData = new(_castFromInt128Data); - public static CastingTheoryData CastFromInt256TheoryData = new(_castFromInt256Data); - public static CastingTheoryData CastFromInt512TheoryData = new(_castFromInt512Data); - public static CastingTheoryData CastFromHalfTheoryData = new(_castFromHalfData); - public static CastingTheoryData CastFromSingleTheoryData = new(_castFromSingleData); - public static CastingTheoryData CastFromDoubleTheoryData = new(_castFromDoubleData); - - public static CastingTheoryData CastToByteTheoryData = new(_castToByteData); - public static CastingTheoryData CastToUInt16TheoryData = new(_castToUInt16Data); - public static CastingTheoryData CastToUInt32TheoryData = new(_castToUInt32Data); - public static CastingTheoryData CastToUInt64TheoryData = new(_castToUInt64Data); - public static CastingTheoryData CastToUInt128TheoryData = new(_castToUInt128Data); - public static CastingTheoryData CastToUInt256TheoryData = new(_castToUInt256Data); - public static CastingTheoryData CastToUInt512TheoryData = new(_castToUInt512Data); - public static CastingTheoryData CastToSByteTheoryData = new(_castToSByteData); - public static CastingTheoryData CastToInt16TheoryData = new(_castToInt16Data); - public static CastingTheoryData CastToInt32TheoryData = new(_castToInt32Data); - public static CastingTheoryData CastToInt64TheoryData = new(_castToInt64Data); - public static CastingTheoryData CastToInt128TheoryData = new(_castToInt128Data); - public static CastingTheoryData CastToInt256TheoryData = new(_castToInt256Data); - public static CastingTheoryData CastToInt512TheoryData = new(_castToInt512Data); - public static CastingTheoryData CastToHalfTheoryData = new(_castToHalfData); - public static CastingTheoryData CastToSingleTheoryData = new(_castToSingleData); - public static CastingTheoryData CastToDoubleTheoryData = new(_castToDoubleData); - public static CastingTheoryData CastToOctoTheoryData = new(_castToOctoData); - - public static RoundTheoryData RoundAwayFromZeroTheoryData = new(_roundAwayFromZeroData); - public static RoundTheoryData RoundToEvenTheoryData = new(_roundToEvenData); - public static RoundTheoryData RoundToNegativeInfinityTheoryData = new(_roundToNegativeInfinityData); - public static RoundTheoryData RoundToPositiveInfinityTheoryData = new(_roundToPositiveInfinityData); - public static RoundTheoryData RoundToZeroTheoryData = new(_roundToZeroData); - - public static ComparisonOperatorsTheoryData GreaterThanTheoryData = new(_greaterThanData); - public static ComparisonOperatorsTheoryData LessThanTheoryData = new(_lessThanData); - public static ComparisonOperatorsTheoryData EqualToTheoryData = new(_equalToData); - public static ComparisonOperatorsTheoryData NotEqualToTheoryData = new(_notEqualToData); - - public static FusedMultiplyAddTheoryData FMATheoryData = new(_fmaData); -#pragma warning restore S3263 // Static fields should appear in the order they must be initialized - } -} diff --git a/src/MissingValues.Tests.Old/Core/QuadTest.cs b/src/MissingValues.Tests.Old/Core/QuadTest.cs deleted file mode 100644 index 8abefb7..0000000 --- a/src/MissingValues.Tests.Old/Core/QuadTest.cs +++ /dev/null @@ -1,466 +0,0 @@ -using MissingValues.Internals; -using System; -using System.Collections.Generic; -using System.Diagnostics.Contracts; -using System.Globalization; -using System.Linq; -using System.Numerics; -using System.Text; -using System.Text.Json; -using System.Text.Unicode; -using System.Threading.Tasks; - -namespace MissingValues.Tests.Core -{ - public partial class QuadTest - { - public static readonly Quad NegativeThousand = Values.CreateFloat(0xC008_F400_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad NegativeHundred = Values.CreateFloat(0xC005_9000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad NegativeTen = Values.CreateFloat(0xC002_4000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad NegativeSix = Values.CreateFloat(0xC001_8000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad NegativeFive = Values.CreateFloat(0xC001_4000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad NegativeFour = Values.CreateFloat(0xC001_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad NegativeThree = Values.CreateFloat(0xC000_8000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad NegativeTwo = Values.CreateFloat(0xC000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad NegativeOne = Quad.NegativeOne; - public static readonly Quad NegativeHalf = Values.CreateFloat(0xBFFE_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad NegativeQuarter = Values.CreateFloat(0xBFFD_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad NegativeZero = Quad.NegativeZero; - public static readonly Quad Zero = Quad.Zero; - public static readonly Quad Quarter = Values.CreateFloat(0x3FFD_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad Half = Values.CreateFloat(0x3FFE_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad One = Quad.One; - public static readonly Quad Two = Values.CreateFloat(0x4000_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad Three = Values.CreateFloat(0x4000_8000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad Four = Values.CreateFloat(0x4001_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad Five = Values.CreateFloat(0x4001_4000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad Six = Values.CreateFloat(0x4001_8000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad Ten = Values.CreateFloat(0x4002_4000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad Hundred = Values.CreateFloat(0x4005_9000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad Thousand = Values.CreateFloat(0x4008_F400_0000_0000, 0x0000_0000_0000_0000); - - public static readonly Quad GreaterThanOneSmallest = Values.CreateFloat(0x3FFF_0000_0000_0000, 0x0000_0000_0000_0001); - public static readonly Quad LessThanOneLargest = Values.CreateFloat(0x3FFE_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); - - public static readonly Quad SmallestSubnormal = Values.CreateFloat(0x0000_0000_0000_0000, 0x0000_0000_0000_0001); - public static readonly Quad GreatestSubnormal = Values.CreateFloat(0x0000_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); - - public static readonly Quad MaxValue = Quad.MaxValue; - public static readonly Quad MinValue = Quad.MinValue; - - public static readonly Quad ByteMaxValue = Values.CreateFloat(0x4006_FE00_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad UInt16MaxValue = Values.CreateFloat(0x400E_FFFE_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad UInt32MaxValue = Values.CreateFloat(0x401E_FFFF_FFFE_0000, 0x0000_0000_0000_0000); - public static readonly Quad UInt64MaxValue = Values.CreateFloat(0x403E_FFFF_FFFF_FFFF, 0xFFFE_0000_0000_0000); - public static readonly Quad TwoOver127 = Values.CreateFloat(0x407E_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad TwoOver255 = Values.CreateFloat(0x40FE_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad TwoOver511 = Values.CreateFloat(0x41FE_0000_0000_0000, 0x0000_0000_0000_0000); - - public static readonly Quad SByteMaxValue = Values.CreateFloat(0x4005_FC00_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad SByteMinValue = Values.CreateFloat(0xC006_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad Int16MaxValue = Values.CreateFloat(0x400D_FFFC_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad Int16MinValue = Values.CreateFloat(0xC00E_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad Int32MaxValue = Values.CreateFloat(0x401D_FFFF_FFFC_0000, 0x0000_0000_0000_0000); - public static readonly Quad Int32MinValue = Values.CreateFloat(0xC01E_0000_0000_0000, 0x0000_0000_0000_0000); - public static readonly Quad Int64MaxValue = Values.CreateFloat(0x403D_FFFF_FFFF_FFFF, 0xFFFC_0000_0000_0000); - public static readonly Quad Int64MinValue = Values.CreateFloat(0xC03E_0000_0000_0000, 0x0000_0000_0000_0000); - - public static readonly Quad Delta = Values.CreateFloat(0x406F_0000_0000_0000, 0x0000_0000_0000_0000); - - public static readonly int Radix = 2; - - - [Fact] - public void Ctor_Empty() - { - var i = new Quad(); - Assert.Equal(Zero, i); - } - - [Theory] - [MemberData(nameof(CastFromByteTheoryData))] - public void Cast_FromByte(byte from, Quad to) - { - ((Quad)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromUInt16TheoryData))] - public void Cast_FromUInt16(ushort from, Quad to) - { - ((Quad)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromUInt32TheoryData))] - public void Cast_FromUInt32(uint from, Quad to) - { - ((Quad)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromUInt64TheoryData))] - public void Cast_FromUInt64(ulong from, Quad to) - { - ((Quad)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromUInt128TheoryData))] - public void Cast_FromUInt128(UInt128 from, Quad to) - { - ((Quad)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromUInt256TheoryData))] - public void Cast_FromUInt256(UInt256 from, Quad to) - { - ((Quad)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromUInt512TheoryData))] - public void Cast_FromUInt512(UInt512 from, Quad to) - { - ((Quad)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromSByteTheoryData))] - public void Cast_FromSByte(sbyte from, Quad to) - { - ((Quad)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromInt16TheoryData))] - public void Cast_FromInt16(short from, Quad to) - { - ((Quad)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromInt32TheoryData))] - public void Cast_FromInt32(int from, Quad to) - { - ((Quad)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromInt64TheoryData))] - public void Cast_FromInt64(long from, Quad to) - { - ((Quad)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromInt128TheoryData))] - public void Cast_FromInt128(Int128 from, Quad to) - { - ((Quad)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromInt256TheoryData))] - public void Cast_FromInt256(Int256 from, Quad to) - { - ((Quad)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromInt512TheoryData))] - public void Cast_FromInt512(Int512 from, Quad to) - { - ((Quad)from).Should().Be(to); - } - [Fact] - public void Cast_FromBigInteger() - { - TwoOver127.Should() - .Be((Quad)BigInteger.Parse("170141183460469231731687303715884105728")); - TwoOver255.Should() - .Be((Quad)BigInteger.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968")); - TwoOver511 - .Should() - .Be((Quad)BigInteger.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048")); - } - [Theory] - [MemberData(nameof(CastFromHalfTheoryData))] - public void Cast_FromHalf(Half from, Quad to) - { - ((Quad)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromSingleTheoryData))] - public void Cast_FromSingle(float from, Quad to) - { - ((Quad)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastFromDoubleTheoryData))] - public void Cast_FromDouble(double from, Quad to) - { - ((Quad)from).Should().Be(to); - } - - [Theory] - [MemberData(nameof(CastToByteTheoryData))] - public void Cast_ToByte(Quad from, byte to) - { - ((byte)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToUInt16TheoryData))] - public void Cast_ToUInt16(Quad from, ushort to) - { - ((ushort)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToUInt32TheoryData))] - public void Cast_ToUInt32(Quad from, uint to) - { - ((uint)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToUInt64TheoryData))] - public void Cast_ToUInt64(Quad from, ulong to) - { - ((ulong)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToUInt128TheoryData))] - public void Cast_ToUInt128(Quad from, UInt128 to) - { - ((UInt128)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToUInt256TheoryData))] - public void Cast_ToUInt256(Quad from, UInt256 to) - { - ((UInt256)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToUInt512TheoryData))] - public void Cast_ToUInt512(Quad from, UInt512 to) - { - ((UInt512)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToSByteTheoryData))] - public void Cast_ToSByte(Quad from, sbyte to) - { - ((sbyte)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToInt16TheoryData))] - public void Cast_ToInt16(Quad from, short to) - { - ((short)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToInt32TheoryData))] - public void Cast_ToInt32(Quad from, int to) - { - ((int)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToInt64TheoryData))] - public void Cast_ToInt64(Quad from, long to) - { - ((long)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToInt128TheoryData))] - public void Cast_ToInt128(Quad from, Int128 to) - { - ((Int128)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToInt256TheoryData))] - public void Cast_ToInt256(Quad from, Int256 to) - { - ((Int256)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToInt512TheoryData))] - public void Cast_ToInt512(Quad from, Int512 to) - { - ((Int512)from).Should().Be(to); - } - [Fact] - public void Cast_ToBigInteger() - { - BigInteger.Parse("170141183460469231731687303715884105728") - .Should().Be((BigInteger)TwoOver127); - BigInteger.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968") - .Should().Be((BigInteger)TwoOver255); - BigInteger.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048") - .Should().Be((BigInteger)TwoOver511); - } - [Theory] - [MemberData(nameof(CastToHalfTheoryData))] - public void Cast_ToHalf(Quad from, Half to) - { - ((Half)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToSingleTheoryData))] - public void Cast_ToSingle(Quad from, float to) - { - ((float)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToDoubleTheoryData))] - public void Cast_ToDouble(Quad from, double to) - { - ((double)from).Should().Be(to); - } - [Theory] - [MemberData(nameof(CastToOctoTheoryData))] - public void Cast_ToOcto(Quad from, Octo to) - { - ((Octo)from).Should().Be(to); - } - - [Fact] - public void ToGeneralStringTest() - { - NegativeQuarter.ToString("G33", CultureInfo.InvariantCulture) - .Should().Be("-0.25"); - Half.ToString("G33", CultureInfo.InvariantCulture) - .Should().Be("0.5"); - NegativeHalf.ToString("G33", CultureInfo.InvariantCulture) - .Should().Be("-0.5"); - One.ToString("G33", CultureInfo.InvariantCulture) - .Should().Be("1"); - Thousand.ToString("G33", CultureInfo.InvariantCulture) - .Should().Be("1000"); - NegativeThousand.ToString("G33", CultureInfo.InvariantCulture) - .Should().Be("-1000"); - } - - [Fact] - public void ToScientificStringTest() - { - NegativeQuarter.ToString("E33", CultureInfo.InvariantCulture) - .Should().Be("-2.5E-1"); - Half.ToString("E33", CultureInfo.InvariantCulture) - .Should().Be("5E-1"); - NegativeHalf.ToString("E33", CultureInfo.InvariantCulture) - .Should().Be("-5E-1"); - One.ToString("E33", CultureInfo.InvariantCulture) - .Should().Be("1E+0"); - Thousand.ToString("E33", CultureInfo.InvariantCulture) - .Should().Be("1E+3"); - NegativeThousand.ToString("E33", CultureInfo.InvariantCulture) - .Should().Be("-1E+3"); - } - - [Fact] - public void ToGeneralFormatStringTest() - { - $"{NegativeQuarter:G33}" - .Should().Be("-0,25"); - $"{Half:G33}" - .Should().Be("0,5"); - $"{NegativeHalf:G33}" - .Should().Be("-0,5"); - $"{One:G33}" - .Should().Be("1"); - $"{Thousand:G33}" - .Should().Be("1000"); - $"{NegativeThousand:G33}" - .Should().Be("-1000"); - } - - [Fact] - public void ToScientificFormatStringTest() - { - $"{NegativeQuarter:E33}" - .Should().Be("-2,5E-1"); - $"{Half:E33}" - .Should().Be("5E-1"); - $"{NegativeHalf:E33}" - .Should().Be("-5E-1"); - $"{One:E33}" - .Should().Be("1E+0"); - $"{Thousand:E33}" - .Should().Be("1E+3"); - $"{NegativeThousand:E33}" - .Should().Be("-1E+3"); - } - - [Fact] - public void ToGeneralFormatUtf8StringTest() - { - int bytesWritten; - Span utf8 = stackalloc byte[10]; - - Utf8.TryWrite(utf8, $"{NegativeQuarter:G33}", out bytesWritten); - Assert.Equal("-0,25"u8, utf8[..bytesWritten]); - utf8.Clear(); - - Utf8.TryWrite(utf8, $"{Half:G33}", out bytesWritten); - Assert.Equal("0,5"u8, utf8[..bytesWritten]); - utf8.Clear(); - - Utf8.TryWrite(utf8, $"{NegativeHalf:G33}", out bytesWritten); - Assert.Equal("-0,5"u8, utf8[..bytesWritten]); - utf8.Clear(); - - Utf8.TryWrite(utf8, $"{One:G33}", out bytesWritten); - Assert.Equal("1"u8, utf8[..bytesWritten]); - utf8.Clear(); - - Utf8.TryWrite(utf8, $"{Thousand:G33}", out bytesWritten); - Assert.Equal("1000"u8, utf8[..bytesWritten]); - utf8.Clear(); - - Utf8.TryWrite(utf8, $"{NegativeThousand:G33}", out bytesWritten); - Assert.Equal("-1000"u8, utf8[..bytesWritten]); - } - - [Fact] - public void ToScientificFormatUtf8StringTest() - { - int bytesWritten; - Span utf8 = stackalloc byte[10]; - - Utf8.TryWrite(utf8, $"{NegativeQuarter:E33}", out bytesWritten); - Assert.Equal("-2,5E-1"u8, utf8[..bytesWritten]); - utf8.Clear(); - - Utf8.TryWrite(utf8, $"{Half:E33}", out bytesWritten); - Assert.Equal("5E-1"u8, utf8[..bytesWritten]); - utf8.Clear(); - - Utf8.TryWrite(utf8, $"{NegativeHalf:E33}", out bytesWritten); - Assert.Equal("-5E-1"u8, utf8[..bytesWritten]); - utf8.Clear(); - - Utf8.TryWrite(utf8, $"{One:E33}", out bytesWritten); - Assert.Equal("1E+0"u8, utf8[..bytesWritten]); - utf8.Clear(); - - Utf8.TryWrite(utf8, $"{Thousand:E33}", out bytesWritten); - Assert.Equal("1E+3"u8, utf8[..bytesWritten]); - utf8.Clear(); - - Utf8.TryWrite(utf8, $"{NegativeThousand:E33}", out bytesWritten); - Assert.Equal("-1E+3"u8, utf8[..bytesWritten]); - } - - [Theory] - [MemberData(nameof(TryParseTheoryData))] - public void BasicTryParseTest(string s, bool success, Quad expected) - { - Quad.TryParse(s, out Quad actual).Should().Be(success); - actual.Should().Be(expected); - } - - [Fact] - public void JsonWriteTest() - { - JsonSerializer.Serialize(new Quad[] { MaxValue, One, Half, Quarter, Zero }) - .Should().Be($"[{MaxValue.ToString(null, CultureInfo.InvariantCulture)},1,0.5,0.25,0]"); - } - [Fact] - public void JsonReadTest() - { - string toString = Quarter.ToString(null, CultureInfo.InvariantCulture); - - JsonSerializer.Deserialize(toString) - .Should().Be(Quarter); - JsonSerializer.Deserialize(Encoding.UTF8.GetBytes(toString)) - .Should().Be(Quarter); - } - } -} diff --git a/src/MissingValues.Tests.Old/Core/UInt256Test.GenericMath.cs b/src/MissingValues.Tests.Old/Core/UInt256Test.GenericMath.cs deleted file mode 100644 index 3a88fc2..0000000 --- a/src/MissingValues.Tests.Old/Core/UInt256Test.GenericMath.cs +++ /dev/null @@ -1,1180 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; - -using UInt = MissingValues.UInt256; - -namespace MissingValues.Tests.Core -{ - public partial class UInt256Test - { - #region Readonly Variables - private const string MaxValueBin = - "11111111111111111111111111111111" - + "11111111111111111111111111111111" - + "11111111111111111111111111111111" - + "11111111111111111111111111111111" - + "11111111111111111111111111111111" - + "11111111111111111111111111111111" - + "11111111111111111111111111111111" - + "11111111111111111111111111111111"; - private ReadOnlySpan MaxValueBinUtf8 => - "11111111111111111111111111111111"u8 - + "11111111111111111111111111111111"u8 - + "11111111111111111111111111111111"u8 - + "11111111111111111111111111111111"u8 - + "11111111111111111111111111111111"u8 - + "11111111111111111111111111111111"u8 - + "11111111111111111111111111111111"u8 - + "11111111111111111111111111111111"u8; - private const double MaxValueAsDouble = 115792089237316195423570985008687907853269984665640564039457584007913129639935.0; - - private static readonly UInt ByteMaxValue = new(0, new(0x0000_0000_0000_0000, 0x0000_0000_0000_00FF)); - private static readonly UInt UInt16MaxValue = new(0, new(0x0000_0000_0000_0000, 0x0000_0000_0000_FFFF)); - private static readonly UInt UInt32MaxValue = new(0, new(0x0000_0000_0000_0000, 0x0000_0000_FFFF_FFFF)); - private static readonly UInt UInt64MaxValue = new(0, new(0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF)); - private static readonly UInt UInt128MaxValue = new(0, new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); - - private static readonly UInt Zero = new(new (0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new (0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); - private static readonly UInt One = new(new (0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new (0x0000_0000_0000_0000, 0x0000_0000_0000_0001)); - private static readonly UInt Two = new(new (0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new (0x0000_0000_0000_0000, 0x0000_0000_0000_0002)); - - private static readonly UInt MaxValue = new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); - private static readonly UInt MaxValueMinusOne = new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE)); - private static readonly UInt MaxValueMinusTwo = new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFD)); - - private static readonly UInt E40 = new(0x0000_0000_0000_0000, 0x0000_0000_0000_001D, 0x6329_F1C3_5CA4_BFAB, 0xB9F5_6100_0000_0000); - #endregion - - #region Generic Math Operators - [Fact] - public static void op_AdditionTest() - { - Assert.Equal(One, MathOperatorsHelper.AdditionOperation(Zero, One)); - Assert.Equal(Two, MathOperatorsHelper.AdditionOperation(One, One)); - Assert.Equal(Zero, MathOperatorsHelper.AdditionOperation(MaxValue, One)); - } - [Fact] - public static void op_CheckedAdditionTest() - { - Assert.Equal(One, MathOperatorsHelper.CheckedAdditionOperation(Zero, One)); - Assert.Equal(Two, MathOperatorsHelper.CheckedAdditionOperation(One, One)); - - Assert.Throws(() => MathOperatorsHelper.CheckedAdditionOperation(MaxValue, 1)); - } - [Fact] - public static void op_IncrementTest() - { - MathOperatorsHelper.IncrementOperation(Zero).Should().Be(One); - MathOperatorsHelper.IncrementOperation(One).Should().Be(Two); - MathOperatorsHelper.IncrementOperation(MaxValueMinusTwo).Should().Be(MaxValueMinusOne); - MathOperatorsHelper.IncrementOperation(MaxValueMinusOne).Should().Be(MaxValue); - MathOperatorsHelper.IncrementOperation(MaxValue).Should().Be(Zero); - } - [Fact] - public static void op_CheckedIncrementTest() - { - MathOperatorsHelper.CheckedIncrementOperation(Zero).Should().Be(One); - MathOperatorsHelper.CheckedIncrementOperation(One).Should().Be(Two); - MathOperatorsHelper.CheckedIncrementOperation(MaxValueMinusTwo).Should().Be(MaxValueMinusOne); - MathOperatorsHelper.CheckedIncrementOperation(MaxValueMinusOne).Should().Be(MaxValue); - - Assert.Throws(() => MathOperatorsHelper.CheckedIncrementOperation(MaxValue)); - } - [Fact] - public static void op_SubtractionTest() - { - Assert.Equal(One, MathOperatorsHelper.SubtractionOperation(Two, One)); - Assert.Equal(MaxValueMinusOne, MathOperatorsHelper.SubtractionOperation(MaxValue, 1)); - } - [Fact] - public static void op_CheckedSubtractionTest() - { - Assert.Equal(One, MathOperatorsHelper.CheckedSubtractionOperation(Two, One)); - Assert.Equal(MaxValueMinusOne, MathOperatorsHelper.CheckedSubtractionOperation(MaxValue, 1)); - - Assert.Throws(() => MathOperatorsHelper.CheckedSubtractionOperation(Zero, 1)); - } - [Fact] - public static void op_DecrementTest() - { - MathOperatorsHelper.DecrementOperation(Two).Should().Be(One); - MathOperatorsHelper.DecrementOperation(One).Should().Be(Zero); - MathOperatorsHelper.DecrementOperation(MaxValueMinusOne).Should().Be(MaxValueMinusTwo); - MathOperatorsHelper.DecrementOperation(MaxValue).Should().Be(MaxValueMinusOne); - MathOperatorsHelper.DecrementOperation(Zero).Should().Be(MaxValue); - } - [Fact] - public static void op_CheckedDecrementTest() - { - MathOperatorsHelper.CheckedDecrementOperation(Two).Should().Be(One); - MathOperatorsHelper.CheckedDecrementOperation(One).Should().Be(Zero); - MathOperatorsHelper.CheckedDecrementOperation(MaxValueMinusOne).Should().Be(MaxValueMinusTwo); - MathOperatorsHelper.CheckedDecrementOperation(MaxValue).Should().Be(MaxValueMinusOne); - - Assert.Throws(() => MathOperatorsHelper.CheckedDecrementOperation(Zero)); - } - [Fact] - public static void op_MultiplyTest() - { - Assert.Equal(One, MathOperatorsHelper.MultiplicationOperation(One, One)); - Assert.Equal(Two, MathOperatorsHelper.MultiplicationOperation(Two, One)); - } - [Fact] - public static void op_CheckedMultiplyTest() - { - Assert.Equal(One, MathOperatorsHelper.CheckedMultiplicationOperation(One, One)); - Assert.Equal(Two, MathOperatorsHelper.CheckedMultiplicationOperation(Two, One)); - - Assert.Throws(() => MathOperatorsHelper.CheckedMultiplicationOperation(MaxValue, Two)); - } - [Fact] - public static void op_DivisionTest() - { - Assert.Equal(new UInt(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), MathOperatorsHelper.DivisionOperation(MaxValue, Two)); - Assert.Equal(new UInt(0, 0, 0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), MathOperatorsHelper.DivisionOperation(UInt128.MaxValue, Two)); - Assert.Equal(new UInt(0x0000_0000_0000_0001, 0xD83C_94FB_6D2A_C34A, 0x5663_D3C7_A0D8_65CA, 0x3C4C_A40E_0EA7_CFE9), MathOperatorsHelper.DivisionOperation(MaxValue, 0x8AC7_2304_89E8_0000)); - - Assert.Equal(new UInt(0x0000_0000_0000_0000, 0x0000_0000_0000_0003, 0x671F_73B5_4F1C_8956, 0x5B9E_F4D6_3241_2884), MathOperatorsHelper.DivisionOperation(MaxValue, new UInt128(0x4B3B_4CA8_5A86_C47A, 0x098A_2240_0000_0000))); - Assert.Equal(One, MathOperatorsHelper.DivisionOperation(MaxValue, MaxValue)); - Assert.Equal(new UInt(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x08B6_1313_BBAB_CE2C, 0x6232_3AC4_B3B3_DA01), MathOperatorsHelper.DivisionOperation(MaxValue, E40)); - - Assert.Throws(() => MathOperatorsHelper.DivisionOperation(One, Zero)); - } - [Fact] - public static void op_CheckedDivisionTest() - { - Assert.Equal(new UInt(new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), MathOperatorsHelper.CheckedDivisionOperation(MaxValue, Two)); - Assert.Equal(new UInt(0x0000_0000_0000_0001, 0xD83C_94FB_6D2A_C34A, 0x5663_D3C7_A0D8_65CA, 0x3C4C_A40E_0EA7_CFE9), MathOperatorsHelper.CheckedDivisionOperation(MaxValue, 0x8AC7_2304_89E8_0000)); - Assert.Equal(new UInt(0x0000_0000_0000_0000, 0x0000_0000_0000_0003, 0x671F_73B5_4F1C_8956, 0x5B9E_F4D6_3241_2884), MathOperatorsHelper.CheckedDivisionOperation(MaxValue, new UInt128(0x4B3B_4CA8_5A86_C47A, 0x098A_2240_0000_0000))); - Assert.Equal(One, MathOperatorsHelper.CheckedDivisionOperation(MaxValue, MaxValue)); - Assert.Equal(new UInt(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x08B6_1313_BBAB_CE2C, 0x6232_3AC4_B3B3_DA01), MathOperatorsHelper.CheckedDivisionOperation(MaxValue, E40)); - - Assert.Throws(() => MathOperatorsHelper.CheckedDivisionOperation(One, Zero)); - } - [Fact] - public static void op_ModulusTest() - { - MathOperatorsHelper.ModulusOperation(Two, Two).Should().Be(Zero); - MathOperatorsHelper.ModulusOperation(One, Two).Should().NotBe(Zero); - MathOperatorsHelper.ModulusOperation(MaxValue, new(10U)).Should().Be(5U); - MathOperatorsHelper.ModulusOperation(MaxValue, new(10_000_000_000_000_000_000U)).Should().Be(7584007913129639935U); - MathOperatorsHelper.ModulusOperation(MaxValue, E40) - .Should().Be(new UInt(0x0000_0000_0000_0000, 0x0000_0000_0000_0009, 0x9C10_2376_5631_2693, 0x7E70_9EFF_FFFF_FFFF)); - - Assert.Throws(() => MathOperatorsHelper.ModulusOperation(One, Zero)); - } - - [Fact] - public static void op_BitwiseAndTest() - { - BitwiseOperatorsHelper.BitwiseAndOperation(Zero, 1U).Should().Be(Zero); - BitwiseOperatorsHelper.BitwiseAndOperation(One, 1U).Should().Be(One); - BitwiseOperatorsHelper.BitwiseAndOperation(MaxValue, 1U).Should().Be(One); - } - [Fact] - public static void op_BitwiseOrTest() - { - BitwiseOperatorsHelper.BitwiseOrOperation(Zero, 1U) - .Should().Be(One); - BitwiseOperatorsHelper.BitwiseOrOperation(One, 1U) - .Should().Be(One); - BitwiseOperatorsHelper.BitwiseOrOperation(MaxValue, 1U) - .Should().Be(MaxValue); - } - [Fact] - public static void op_ExclusiveOrTest() - { - BitwiseOperatorsHelper.ExclusiveOrOperation(Zero, 1U) - .Should().Be(One); - BitwiseOperatorsHelper.ExclusiveOrOperation(One, 1U) - .Should().Be(Zero); - BitwiseOperatorsHelper.ExclusiveOrOperation(MaxValue, 1U) - .Should().Be(new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE))); - } - [Fact] - public static void op_OnesComplementTest() - { - BitwiseOperatorsHelper.OnesComplementOperation(Zero) - .Should().Be(MaxValue); - BitwiseOperatorsHelper.OnesComplementOperation(One) - .Should().Be(new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE))); - BitwiseOperatorsHelper.OnesComplementOperation(MaxValue) - .Should().Be(Zero); - } - - [Fact] - public static void op_LeftShiftTest() - { - ShiftOperatorsHelper.LeftShiftOperation(Zero, 1) - .Should().Be(Zero); - ShiftOperatorsHelper.LeftShiftOperation(One, 1) - .Should().Be(Two); - ShiftOperatorsHelper.LeftShiftOperation(MaxValue, 1) - .Should().Be(MaxValueMinusOne); - - UInt actual = new(0x028F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28, 0xF5C2_8F5C_28F5_C28F); - - ShiftOperatorsHelper.LeftShiftOperation(actual, 0) - .Should().Be(actual); - ShiftOperatorsHelper.LeftShiftOperation(actual, 64) - .Should().Be(new(0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28, 0xF5C2_8F5C_28F5_C28F, 0)); - ShiftOperatorsHelper.LeftShiftOperation(actual, 128) - .Should().Be(new(0x8F5C_28F5_C28F_5C28, 0xF5C2_8F5C_28F5_C28F, 0, 0)); - ShiftOperatorsHelper.LeftShiftOperation(actual, 192) - .Should().Be(new(0xF5C2_8F5C_28F5_C28F, 0, 0, 0)); - } - [Fact] - public static void op_RightShiftTest() - { - ShiftOperatorsHelper.RightShiftOperation(Zero, 1) - .Should().Be(Zero); - ShiftOperatorsHelper.RightShiftOperation(One, 1) - .Should().Be(Zero); - ShiftOperatorsHelper.RightShiftOperation(MaxValue, 1) - .Should().Be(new(new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF))); - - UInt actual = new(0x028F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28, 0xF5C2_8F5C_28F5_C28F); - - ShiftOperatorsHelper.RightShiftOperation(actual, 0) - .Should().Be(actual); - ShiftOperatorsHelper.RightShiftOperation(actual, 64) - .Should().Be(new(0, 0x028F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28)); - ShiftOperatorsHelper.RightShiftOperation(actual, 128) - .Should().Be(new(0, 0, 0x028F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2)); - ShiftOperatorsHelper.RightShiftOperation(actual, 192) - .Should().Be(new(0, 0, 0, 0x028F_5C28_F5C2_8F5C)); - } - [Fact] - public static void op_UnsignedRightShiftTest() - { - ShiftOperatorsHelper.UnsignedRightShiftOperation(Zero, 1) - .Should().Be(Zero); - ShiftOperatorsHelper.UnsignedRightShiftOperation(One, 1) - .Should().Be(Zero); - ShiftOperatorsHelper.UnsignedRightShiftOperation(MaxValue, 1) - .Should().Be(new(new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF))); - - UInt actual = new(0x028F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28, 0xF5C2_8F5C_28F5_C28F); - - ShiftOperatorsHelper.UnsignedRightShiftOperation(actual, 0) - .Should().Be(actual); - ShiftOperatorsHelper.UnsignedRightShiftOperation(actual, 64) - .Should().Be(new(0, 0x028F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28)); - ShiftOperatorsHelper.UnsignedRightShiftOperation(actual, 128) - .Should().Be(new(0, 0, 0x028F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2)); - ShiftOperatorsHelper.UnsignedRightShiftOperation(actual, 192) - .Should().Be(new(0, 0, 0, 0x028F_5C28_F5C2_8F5C)); - } - - [Fact] - public static void op_EqualityTest() - { - EqualityOperatorsHelper.EqualityOperation(Zero, 1U).Should().BeFalse(); - EqualityOperatorsHelper.EqualityOperation(One, 1U).Should().BeTrue(); - EqualityOperatorsHelper.EqualityOperation(MaxValue, 1U).Should().BeFalse(); - } - [Fact] - public static void op_InequalityTest() - { - EqualityOperatorsHelper.InequalityOperation(Zero, 1U).Should().BeTrue(); - EqualityOperatorsHelper.InequalityOperation(One, 1U).Should().BeFalse(); - EqualityOperatorsHelper.InequalityOperation(MaxValue, 1U).Should().BeTrue(); - } - - [Fact] - public static void op_GreaterThanTest() - { - ComparisonOperatorsHelper.GreaterThanOperation(Zero, 1U).Should().BeFalse(); - ComparisonOperatorsHelper.GreaterThanOperation(One, 1U).Should().BeFalse(); - ComparisonOperatorsHelper.GreaterThanOperation(MaxValue, 1U).Should().BeTrue(); - } - [Fact] - public static void op_GreaterThanOrEqualTest() - { - ComparisonOperatorsHelper.GreaterThanOrEqualOperation(Zero, 1U).Should().BeFalse(); - ComparisonOperatorsHelper.GreaterThanOrEqualOperation(One, 1U).Should().BeTrue(); - ComparisonOperatorsHelper.GreaterThanOrEqualOperation(MaxValue, 1U).Should().BeTrue(); - } - [Fact] - public static void op_LessThanTest() - { - ComparisonOperatorsHelper.LessThanOperation(Zero, 1U).Should().BeTrue(); - ComparisonOperatorsHelper.LessThanOperation(One, 1U).Should().BeFalse(); - ComparisonOperatorsHelper.LessThanOperation(MaxValue, 1U).Should().BeFalse(); - } - [Fact] - public static void op_LessThanOrEqualTest() - { - ComparisonOperatorsHelper.LessThanOrEqualOperation(Zero, 1U).Should().BeTrue(); - ComparisonOperatorsHelper.LessThanOrEqualOperation(One, 1U).Should().BeTrue(); - ComparisonOperatorsHelper.LessThanOrEqualOperation(MaxValue, 1U).Should().BeFalse(); - } - #endregion - - #region Identities - [Fact] - public static void AdditiveIdentityTest() - { - Assert.Equal(Zero, MathConstantsHelper.AdditiveIdentityHelper()); - } - - [Fact] - public static void MultiplicativeIdentityTest() - { - Assert.Equal(One, MathConstantsHelper.MultiplicativeIdentityHelper()); - } - #endregion - - #region IBinaryInteger - [Fact] - public static void DivRemTest() - { - Assert.Equal((Zero, Zero), BinaryIntegerHelper.DivRem(Zero, Two)); - Assert.Equal((Zero, One), BinaryIntegerHelper.DivRem(One, Two)); - Assert.Equal( - (new UInt(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x08B6_1313_BBAB_CE2C, 0x6232_3AC4_B3B3_DA01), - new UInt(0x0000_0000_0000_0000, 0x0000_0000_0000_0009, 0x9C10_2376_5631_2693, 0x7E70_9EFF_FFFF_FFFF)), - BinaryIntegerHelper.DivRem(MaxValue, E40)); - Assert.Equal((new UInt(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), One), BinaryIntegerHelper.DivRem(MaxValue, 2)); - } - - [Fact] - public static void LeadingZeroCountTest() - { - Assert.Equal(256U, BinaryIntegerHelper.LeadingZeroCount(Zero)); - Assert.Equal(255U, BinaryIntegerHelper.LeadingZeroCount(One)); - Assert.Equal(192U, BinaryIntegerHelper.LeadingZeroCount(ulong.MaxValue)); - Assert.Equal(128U, BinaryIntegerHelper.LeadingZeroCount(UInt128.MaxValue)); - Assert.Equal(64U, BinaryIntegerHelper.LeadingZeroCount(MaxValue >>> 64)); - Assert.Equal(0U, BinaryIntegerHelper.LeadingZeroCount(MaxValue)); - } - - [Fact] - public static void PopCountTest() - { - Assert.Equal(0U, BinaryIntegerHelper.PopCount(Zero)); - Assert.Equal(1U, BinaryIntegerHelper.PopCount(One)); - Assert.Equal(256U, BinaryIntegerHelper.PopCount(MaxValue)); - } - - [Fact] - public static void RotateLeftTest() - { - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), BinaryIntegerHelper.RotateLeft(Zero, 1)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0002)), BinaryIntegerHelper.RotateLeft(One, 1)); - Assert.Equal(new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), BinaryIntegerHelper.RotateLeft(MaxValue, 1)); - } - - [Fact] - public static void RotateRightTest() - { - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), BinaryIntegerHelper.RotateRight(Zero, 1)); - Assert.Equal(new(new(0x8000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), BinaryIntegerHelper.RotateRight(One, 1)); - Assert.Equal(new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), BinaryIntegerHelper.RotateRight(MaxValue, 1)); - } - - [Fact] - public static void TrailingZeroCountTest() - { - Assert.Equal(256U, BinaryIntegerHelper.TrailingZeroCount(Zero)); - Assert.Equal(0U, BinaryIntegerHelper.TrailingZeroCount(One)); - Assert.Equal(1U, BinaryIntegerHelper.TrailingZeroCount(Two)); - Assert.Equal(64U, BinaryIntegerHelper.TrailingZeroCount(new UInt(0,0,1,0))); - Assert.Equal(128U, BinaryIntegerHelper.TrailingZeroCount(new UInt(0,1,0,0))); - Assert.Equal(192U, BinaryIntegerHelper.TrailingZeroCount(new UInt(1,0,0,0))); - Assert.Equal(0U, BinaryIntegerHelper.TrailingZeroCount(MaxValue)); - } - - [Fact] - public static void TryReadBigEndianInt128Test() - { - UInt result; - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new UInt128(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), result); - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, isUnsigned: false, out result)); - Assert.Equal(new UInt128(0x0000_0000_0000_0000, 0x0000_0000_0000_0001), result); - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 }, isUnsigned: false, out result)); - Assert.Equal(new UInt128(0x0000_0000_0000_0000, 0x0000_0000_0000_0080), result); - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new UInt128(0x0100_0000_0000_0000, 0x0000_0000_0000_0000), result); - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: false, out result)); - Assert.Equal(new UInt128(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), result); - - Assert.False(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new UInt128(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), result); - - Assert.False(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F }, isUnsigned: false, out result)); - Assert.Equal(new UInt128(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), result); - - Assert.False(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: false, out result)); - Assert.Equal(new UInt128(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), result); - } - - [Fact] - public static void TryReadBigEndianUInt128Test() - { - UInt result; - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(0, new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, isUnsigned: true, out result)); - Assert.Equal(new(0, new(0x0000_0000_0000_0000, 0x0000_0000_0000_0001)), result); - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 }, isUnsigned: true, out result)); - Assert.Equal(new(0, new(0x0000_0000_0000_0000, 0x0000_0000_0000_0080)), result); - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(0, new(0x0100_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: true, out result)); - Assert.Equal(new(0, new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), result); - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(0, new(0x8000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F }, isUnsigned: true, out result)); - Assert.Equal(new(0, new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF7F)), result); - - Assert.True(BinaryIntegerHelper.TryReadBigEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: true, out result)); - Assert.Equal(new(0, new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), result); - } - - [Fact] - public static void TryReadLittleEndianInt128Test() - { - UInt result; - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0100_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.False(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0001)), result); - - Assert.False(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0080)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), result); - - Assert.False(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - } - - [Fact] - public static void TryReadLittleEndianInt192Test() - { - UInt result; - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0100_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.False(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0001)), result); - - Assert.False(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0080)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x7FFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), result); - - Assert.False(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - } - - [Fact] - public static void TryReadLittleEndianInt256Test() - { - UInt result; - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0100_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.False(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0001)), result); - - Assert.False(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0080)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), result); - - Assert.False(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: false, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - } - - [Fact] - public static void TryReadLittleEndianUInt128Test() - { - UInt result; - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(0, new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, isUnsigned: true, out result)); - Assert.Equal(new(0, new(0x0100_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 }, isUnsigned: true, out result)); - Assert.Equal(new(0, new(0x8000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(0, new(0x0000_0000_0000_0000, 0x0000_0000_0000_0001)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: true, out result)); - Assert.Equal(new(0, new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF7F)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(0, new(0x0000_0000_0000_0000, 0x0000_0000_0000_0080)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F }, isUnsigned: true, out result)); - Assert.Equal(new(0, new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: true, out result)); - Assert.Equal(new(0, new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), result); - } - - [Fact] - public static void TryReadLittleEndianUInt192Test() - { - UInt result; - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(0, new UInt128(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0100_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x8000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(0, new UInt128(0x0000_0000_0000_0000, 0x0000_0000_0000_0001)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF7F)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(0, new UInt128(0x0000_0000_0000_0000, 0x0000_0000_0000_0080)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x7FFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), result); - } - - [Fact] - public static void TryReadLittleEndianUInt256Test() - { - UInt result; - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0100_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x8000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0001)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: true, out result)); - Assert.Equal(new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF7F)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new(0x0000_0000_0000_0000, 0x0000_0000_0000_0080)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F }, isUnsigned: true, out result)); - Assert.Equal(new(new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: true, out result)); - Assert.Equal(new(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)), result); - } - - [Fact] - public static void GetByteCountTest() - { - Assert.Equal(32, BinaryIntegerHelper.GetByteCount(Zero)); - Assert.Equal(32, BinaryIntegerHelper.GetByteCount(One)); - Assert.Equal(32, BinaryIntegerHelper.GetByteCount(MaxValue)); - } - - [Fact] - public static void GetShortestBitLengthTest() - { - Assert.Equal(0x00, BinaryIntegerHelper.GetShortestBitLength(Zero)); - Assert.Equal(0x01, BinaryIntegerHelper.GetShortestBitLength(One)); - Assert.Equal(0x100, BinaryIntegerHelper.GetShortestBitLength(MaxValue)); - } - - [Fact] - public static void TryWriteBigEndianTest() - { - Span destination = stackalloc byte[32]; - int bytesWritten = 0; - - Assert.True(BinaryIntegerHelper.TryWriteBigEndian(Zero, destination, out bytesWritten)); - Assert.Equal(32, bytesWritten); - Assert.Equal(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, destination.ToArray()); - - Assert.True(BinaryIntegerHelper.TryWriteBigEndian(One, destination, out bytesWritten)); - Assert.Equal(32, bytesWritten); - Assert.Equal(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, destination.ToArray()); - - Assert.True(BinaryIntegerHelper.TryWriteBigEndian(MaxValue, destination, out bytesWritten)); - Assert.Equal(32, bytesWritten); - Assert.Equal(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, destination.ToArray()); - - Assert.False(BinaryIntegerHelper.TryWriteBigEndian(default, Span.Empty, out bytesWritten)); - Assert.Equal(0, bytesWritten); - Assert.Equal(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, destination.ToArray()); - } - - [Fact] - public static void TryWriteLittleEndianTest() - { - Span destination = stackalloc byte[32]; - int bytesWritten = 0; - - Assert.True(BinaryIntegerHelper.TryWriteLittleEndian(Zero, destination, out bytesWritten)); - Assert.Equal(32, bytesWritten); - Assert.Equal(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, destination.ToArray()); - - Assert.True(BinaryIntegerHelper.TryWriteLittleEndian(One, destination, out bytesWritten)); - Assert.Equal(32, bytesWritten); - Assert.Equal(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, destination.ToArray()); - - Assert.True(BinaryIntegerHelper.TryWriteLittleEndian(MaxValue, destination, out bytesWritten)); - Assert.Equal(32, bytesWritten); - Assert.Equal(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, destination.ToArray()); - - Assert.False(BinaryIntegerHelper.TryWriteLittleEndian(default, Span.Empty, out bytesWritten)); - Assert.Equal(0, bytesWritten); - Assert.Equal(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, destination.ToArray()); - } - #endregion - - #region IBinaryNumber - [Fact] - public static void AllBitsSetTest() - { - Assert.Equal(BinaryNumberHelper.AllBitsSet, ~Zero); - } - [Fact] - public static void IsPow2Test() - { - Assert.True(BinaryNumberHelper.IsPow2(new(0x100))); - Assert.True(BinaryNumberHelper.IsPow2(new(0x1_0000))); - Assert.True(BinaryNumberHelper.IsPow2(new(0x1_0000_0000))); - Assert.True(BinaryNumberHelper.IsPow2(new(0, new(0x1, 0x0000_0000_0000_0000)))); - Assert.True(BinaryNumberHelper.IsPow2(new(0x1, new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)))); - } - [Fact] - public static void Log2Test() - { - Assert.Equal(8U, BinaryNumberHelper.Log2(new(0x100))); - Assert.Equal(16U, BinaryNumberHelper.Log2(new(0x1_0000))); - Assert.Equal(32U, BinaryNumberHelper.Log2(new(0x1_0000_0000))); - Assert.Equal(64U, BinaryNumberHelper.Log2(new(0, new(0x1, 0x0000_0000_0000_0000)))); - Assert.Equal(128U, BinaryNumberHelper.Log2(new(0x1, new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000)))); - } - #endregion - - #region IMinMaxValue - [Fact] - public static void MaxValueTest() - { - MaxValue.Should().Be(MathConstantsHelper.MaxValue()); - } - - [Fact] - public static void MinValueTest() - { - Zero.Should().Be(MathConstantsHelper.MinValue()); - } - #endregion - - #region INumber - [Fact] - public static void ClampTest() - { - NumberHelper.Clamp(MaxValueMinusOne, UInt128MaxValue, MaxValue).Should().Be(MaxValueMinusOne); - NumberHelper.Clamp(Zero, Two, MaxValue).Should().Be(Two); - NumberHelper.Clamp(MaxValue, Zero, One).Should().Be(One); - - Assert.Throws(() => NumberHelper.Clamp(Zero, MaxValue, Zero)); - } - [Fact] - public static void CopySignTest() - { - NumberHelper.CopySign(MaxValue, One).Should().Be(MaxValue); - } - [Fact] - public static void MaxTest() - { - NumberHelper.Max(MaxValue, Two).Should().Be(MaxValue); - NumberHelper.Max(One, Zero).Should().Be(One); - NumberHelper.Max(Two, Zero).Should().Be(Two); - NumberHelper.Max(Two, One).Should().Be(Two); - } - [Fact] - public static void MaxNumberTest() - { - NumberHelper.MaxNumber(MaxValue, Zero).Should().Be(MaxValue); - NumberHelper.MaxNumber(One, Zero).Should().Be(One); - NumberHelper.MaxNumber(Two, Zero).Should().Be(Two); - } - [Fact] - public static void MinTest() - { - NumberHelper.Min(MaxValue, Zero).Should().Be(Zero); - NumberHelper.Min(One, Zero).Should().Be(Zero); - NumberHelper.Min(Two, Zero).Should().Be(Zero); - } - [Fact] - public static void MinNumberTest() - { - NumberHelper.MinNumber(MaxValue, Zero).Should().Be(Zero); - NumberHelper.MinNumber(One,Zero).Should().Be(Zero); - NumberHelper.MinNumber(Two, Zero).Should().Be(Zero); - } - [Fact] - public static void SignTest() - { - NumberHelper.Sign(MaxValue).Should().Be(1); - NumberHelper.Sign(UInt.Zero).Should().Be(0); - } - #endregion - - #region INumberBase - [Fact] - public static void AbsTest() - { - NumberBaseHelper.Abs(One).Should().Be(One); - } - [Fact] - public static void CreateCheckedToUInt256Test() - { - NumberBaseHelper.CreateChecked(byte.MaxValue).Should().Be(ByteMaxValue); - NumberBaseHelper.CreateChecked(ushort.MaxValue).Should().Be(UInt16MaxValue); - NumberBaseHelper.CreateChecked(uint.MaxValue).Should().Be(UInt32MaxValue); - NumberBaseHelper.CreateChecked(ulong.MaxValue).Should().Be(UInt64MaxValue); - NumberBaseHelper.CreateChecked(UInt128.MaxValue).Should().Be(UInt128MaxValue); - NumberBaseHelper - .CreateChecked(BigInteger.Parse( - "115792089237316195423570985008687907853269984665640564039457584007913129639935")) - .Should().Be(MaxValue); - NumberBaseHelper.CreateChecked(MaxValueAsDouble).Should().Be(MaxValue); - - NumberBaseHelper.CreateChecked(byte.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateChecked(ushort.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateChecked(uint.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateChecked(ulong.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateChecked(UInt128.MinValue).Should().Be(Zero); - } - [Fact] - public static void CreateSaturatingToUInt256Test() - { - NumberBaseHelper.CreateSaturating(byte.MaxValue).Should().Be(ByteMaxValue); - NumberBaseHelper.CreateSaturating(ushort.MaxValue).Should().Be(UInt16MaxValue); - NumberBaseHelper.CreateSaturating(uint.MaxValue).Should().Be(UInt32MaxValue); - NumberBaseHelper.CreateSaturating(ulong.MaxValue).Should().Be(UInt64MaxValue); - NumberBaseHelper.CreateSaturating(UInt128.MaxValue).Should().Be(UInt128MaxValue); - NumberBaseHelper - .CreateSaturating(BigInteger.Parse( - "115792089237316195423570985008687907853269984665640564039457584007913129639935")) - .Should().Be(MaxValue); - NumberBaseHelper.CreateSaturating(MaxValueAsDouble).Should().Be(MaxValue); - - NumberBaseHelper.CreateSaturating(byte.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateSaturating(ushort.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateSaturating(uint.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateSaturating(ulong.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateSaturating(UInt128.MinValue).Should().Be(Zero); - } - [Fact] - public static void CreateTruncatingToUInt256Test() - { - NumberBaseHelper.CreateTruncating(byte.MaxValue).Should().Be(ByteMaxValue); - NumberBaseHelper.CreateTruncating(ushort.MaxValue).Should().Be(UInt16MaxValue); - NumberBaseHelper.CreateTruncating(uint.MaxValue).Should().Be(UInt32MaxValue); - NumberBaseHelper.CreateTruncating(ulong.MaxValue).Should().Be(UInt64MaxValue); - NumberBaseHelper.CreateTruncating(UInt128.MaxValue).Should().Be(UInt128MaxValue); - NumberBaseHelper - .CreateTruncating(BigInteger.Parse( - "115792089237316195423570985008687907853269984665640564039457584007913129639935")) - .Should().Be(MaxValue); - NumberBaseHelper.CreateTruncating(MaxValueAsDouble).Should().Be(MaxValue); - - NumberBaseHelper.CreateTruncating(byte.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateTruncating(ushort.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateTruncating(uint.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateTruncating(ulong.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateTruncating(UInt128.MinValue).Should().Be(Zero); - } - - [Fact] - public static void CreateCheckedFromUInt256Test() - { - NumberBaseHelper.CreateChecked(ByteMaxValue).Should().Be(byte.MaxValue); - NumberBaseHelper.CreateChecked(UInt16MaxValue).Should().Be(ushort.MaxValue); - NumberBaseHelper.CreateChecked(UInt32MaxValue).Should().Be(uint.MaxValue); - NumberBaseHelper.CreateChecked(UInt64MaxValue).Should().Be(ulong.MaxValue); - NumberBaseHelper.CreateChecked(UInt128MaxValue).Should().Be(UInt128.MaxValue); - NumberBaseHelper.CreateChecked(MaxValue).Should() - .Be(BigInteger.Parse( - "115792089237316195423570985008687907853269984665640564039457584007913129639935")); - NumberBaseHelper.CreateChecked(MaxValue).Should().Be(MaxValueAsDouble); - - NumberBaseHelper.CreateChecked(Zero).Should().Be(byte.MinValue); - NumberBaseHelper.CreateChecked(Zero).Should().Be(ushort.MinValue); - NumberBaseHelper.CreateChecked(Zero).Should().Be(uint.MinValue); - NumberBaseHelper.CreateChecked(Zero).Should().Be(ulong.MinValue); - NumberBaseHelper.CreateChecked(Zero).Should().Be(UInt128.MinValue); - } - [Fact] - public static void CreateSaturatingFromUInt256Test() - { - NumberBaseHelper.CreateSaturating(ByteMaxValue).Should().Be(byte.MaxValue); - NumberBaseHelper.CreateSaturating(UInt16MaxValue).Should().Be(ushort.MaxValue); - NumberBaseHelper.CreateSaturating(UInt32MaxValue).Should().Be(uint.MaxValue); - NumberBaseHelper.CreateSaturating(UInt64MaxValue).Should().Be(ulong.MaxValue); - NumberBaseHelper.CreateSaturating(UInt128MaxValue).Should().Be(UInt128.MaxValue); - NumberBaseHelper.CreateSaturating(MaxValue).Should() - .Be(BigInteger.Parse( - "115792089237316195423570985008687907853269984665640564039457584007913129639935")); - NumberBaseHelper.CreateSaturating(MaxValue).Should().Be(MaxValueAsDouble); - - NumberBaseHelper.CreateSaturating(Zero).Should().Be(byte.MinValue); - NumberBaseHelper.CreateSaturating(Zero).Should().Be(ushort.MinValue); - NumberBaseHelper.CreateSaturating(Zero).Should().Be(uint.MinValue); - NumberBaseHelper.CreateSaturating(Zero).Should().Be(ulong.MinValue); - NumberBaseHelper.CreateSaturating(Zero).Should().Be(UInt128.MinValue); - } - [Fact] - public static void CreateTruncatingFromUInt256Test() - { - NumberBaseHelper.CreateTruncating(ByteMaxValue).Should().Be(byte.MaxValue); - NumberBaseHelper.CreateTruncating(UInt16MaxValue).Should().Be(ushort.MaxValue); - NumberBaseHelper.CreateTruncating(UInt32MaxValue).Should().Be(uint.MaxValue); - NumberBaseHelper.CreateTruncating(UInt64MaxValue).Should().Be(ulong.MaxValue); - NumberBaseHelper.CreateTruncating(UInt128MaxValue).Should().Be(UInt128.MaxValue); - NumberBaseHelper.CreateTruncating(MaxValue).Should() - .Be(BigInteger.Parse( - "115792089237316195423570985008687907853269984665640564039457584007913129639935")); - NumberBaseHelper.CreateTruncating(MaxValue).Should().Be(MaxValueAsDouble); - - NumberBaseHelper.CreateTruncating(Zero).Should().Be(byte.MinValue); - NumberBaseHelper.CreateTruncating(Zero).Should().Be(ushort.MinValue); - NumberBaseHelper.CreateTruncating(Zero).Should().Be(uint.MinValue); - NumberBaseHelper.CreateTruncating(Zero).Should().Be(ulong.MinValue); - NumberBaseHelper.CreateTruncating(Zero).Should().Be(UInt128.MinValue); - } - - [Fact] - public static void IsCanonicalTest() - { - NumberBaseHelper.IsCanonical(default(UInt)).Should().BeTrue(); - } - - [Fact] - public static void IsComplexNumberTest() - { - NumberBaseHelper.IsComplexNumber(default(UInt)).Should().BeFalse(); - } - - [Fact] - public static void IsEvenIntegerTest() - { - NumberBaseHelper.IsEvenInteger(One).Should().BeFalse(); - NumberBaseHelper.IsEvenInteger(Two).Should().BeTrue(); - } - - [Fact] - public static void IsFiniteTest() - { - NumberBaseHelper.IsFinite(default(UInt)).Should().BeTrue(); - } - - [Fact] - public static void IsImaginaryNumberTest() - { - NumberBaseHelper.IsImaginaryNumber(default(UInt)).Should().BeFalse(); - } - - [Fact] - public static void IsInfinityTest() - { - NumberBaseHelper.IsInfinity(default(UInt)).Should().BeFalse(); - } - - [Fact] - public static void IsIntegerTest() - { - NumberBaseHelper.IsInteger(default(UInt)).Should().BeTrue(); - } - - [Fact] - public static void IsNaNTest() - { - NumberBaseHelper.IsNaN(default(UInt)).Should().BeFalse(); - } - - [Fact] - public static void IsNegativeTest() - { - NumberBaseHelper.IsNegative(One).Should().BeFalse(); - } - - [Fact] - public static void IsNegativeInfinityTest() - { - NumberBaseHelper.IsNegativeInfinity(One).Should().BeFalse(); - } - - [Fact] - public static void IsNormalTest() - { - NumberBaseHelper.IsNormal(Zero).Should().BeFalse(); - NumberBaseHelper.IsNormal(One).Should().BeTrue(); - } - - [Fact] - public static void IsOddIntegerTest() - { - NumberBaseHelper.IsOddInteger(One).Should().BeTrue(); - NumberBaseHelper.IsOddInteger(Two).Should().BeFalse(); - } - - [Fact] - public static void IsPositiveTest() - { - NumberBaseHelper.IsPositive(One).Should().BeTrue(); - } - - [Fact] - public static void IsPositiveInfinityTest() - { - NumberBaseHelper.IsPositiveInfinity(One).Should().BeFalse(); - } - - [Fact] - public static void IsRealNumberTest() - { - NumberBaseHelper.IsRealNumber(default).Should().BeTrue(); - } - - [Fact] - public static void IsSubnormalTest() - { - NumberBaseHelper.IsSubnormal(default).Should().BeFalse(); - } - - [Fact] - public static void IsZeroTest() - { - NumberBaseHelper.IsZero(default).Should().BeTrue(); - NumberBaseHelper.IsZero(Zero).Should().BeTrue(); - NumberBaseHelper.IsZero(One).Should().BeFalse(); - } - - [Fact] - public static void MaxMagnitudeTest() - { - NumberBaseHelper.MaxMagnitude(MaxValue, Zero).Should().Be(MaxValue); - NumberBaseHelper.MaxMagnitude(One, Zero).Should().Be(One); - NumberBaseHelper.MaxMagnitude(Two, Zero).Should().Be(Two); - } - - [Fact] - public static void MaxMagnitudeNumberTest() - { - NumberBaseHelper.MaxMagnitudeNumber(MaxValue, Zero).Should().Be(MaxValue); - NumberBaseHelper.MaxMagnitudeNumber(One, Zero).Should().Be(One); - NumberBaseHelper.MaxMagnitudeNumber(Two, Zero).Should().Be(Two); - } - - [Fact] - public static void MinMagnitudeTest() - { - NumberBaseHelper.MinMagnitude(MaxValue, MaxValueMinusOne).Should().Be(MaxValueMinusOne); - NumberBaseHelper.MinMagnitude(One, Zero).Should().Be(Zero); - NumberBaseHelper.MinMagnitude(Two, Zero).Should().Be(Zero); - } - - [Fact] - public static void MinMagnitudeNumberTest() - { - NumberBaseHelper.MinMagnitudeNumber(MaxValue, MaxValueMinusOne).Should().Be(MaxValueMinusOne); - NumberBaseHelper.MinMagnitudeNumber(One, Zero).Should().Be(Zero); - NumberBaseHelper.MinMagnitudeNumber(Two, Zero).Should().Be(Zero); - } - - [Fact] - public void ParseTest() - { - NumberBaseHelper.Parse("115792089237316195423570985008687907853269984665640564039457584007913129639935", System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture) - .Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - - NumberBaseHelper.Parse("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture) - .Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - NumberBaseHelper.Parse("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture) - .Should().Be(new(0x0000_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)) - .And.BeRankedEquallyTo(new(0x0000_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); - NumberBaseHelper.Parse("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture) - .Should().Be(new(0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)) - .And.BeRankedEquallyTo(new(0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); - NumberBaseHelper.Parse("FFFFFFFFFFFFFFFF", System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture) - .Should().Be(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF)) - .And.BeRankedEquallyTo(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF)); - NumberBaseHelper.Parse("123456790ABCDEF123456790ABCDEFF", System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture) - .Should().Be(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0123_4567_90AB_CDEF, 0x1234_5679_0ABC_DEFF)) - .And.BeRankedEquallyTo(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0123_4567_90AB_CDEF, 0x1234_5679_0ABC_DEFF)); - - NumberBaseHelper.Parse(MaxValueBin, System.Globalization.NumberStyles.BinaryNumber, CultureInfo.CurrentCulture) - .Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - NumberBaseHelper.Parse("00010001010101111001001000001000100100100011011100110001011000011000", System.Globalization.NumberStyles.BinaryNumber, CultureInfo.CurrentCulture) - .Should().Be(new(0x0, 0x0, 0x1, 0x1579_2089_2373_1618)) - .And.BeRankedEquallyTo(new(0x0, 0x0, 0x1, 0x1579_2089_2373_1618)); - - Assert.Throws(() => NumberBaseHelper.Parse("115792089237316195423570985008687907853269984665640564039457584007913129639936", System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture)); - } - - [Fact] - public void TryParseTest() - { - NumberBaseHelper.TryParse("115792089237316195423570985008687907853269984665640564039457584007913129639935", System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture, out UInt parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - NumberBaseHelper.TryParse("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - NumberBaseHelper.TryParse(MaxValueBin, System.Globalization.NumberStyles.BinaryNumber, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - - NumberBaseHelper.TryParse("115792089237316195423570985008687907853269984665640564039457584007913129639936", System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeFalse(); - parsedValue.Should().Be(default); - } - - [Fact] - public void ParseUtf8Test() - { - NumberBaseHelper.Parse("115792089237316195423570985008687907853269984665640564039457584007913129639935"u8, System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture) - .Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - - NumberBaseHelper.Parse("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8, System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture) - .Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - NumberBaseHelper.Parse("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8, System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture) - .Should().Be(new(0x0000_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)) - .And.BeRankedEquallyTo(new(0x0000_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); - NumberBaseHelper.Parse("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8, System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture) - .Should().Be(new(0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)) - .And.BeRankedEquallyTo(new(0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); - NumberBaseHelper.Parse("FFFFFFFFFFFFFFFF"u8, System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture) - .Should().Be(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF)) - .And.BeRankedEquallyTo(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF)); - NumberBaseHelper.Parse("123456790ABCDEF123456790ABCDEFF"u8, System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture) - .Should().Be(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0123_4567_90AB_CDEF, 0x1234_5679_0ABC_DEFF)) - .And.BeRankedEquallyTo(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0123_4567_90AB_CDEF, 0x1234_5679_0ABC_DEFF)); - - NumberBaseHelper.Parse(MaxValueBinUtf8, System.Globalization.NumberStyles.BinaryNumber, CultureInfo.CurrentCulture) - .Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - NumberBaseHelper.Parse("00010001010101111001001000001000100100100011011100110001011000011000"u8, System.Globalization.NumberStyles.BinaryNumber, CultureInfo.CurrentCulture) - .Should().Be(new(0x0, 0x0, 0x1, 0x1579_2089_2373_1618)) - .And.BeRankedEquallyTo(new(0x0, 0x0, 0x1, 0x1579_2089_2373_1618)); - - Assert.Throws(() => NumberBaseHelper.Parse("115792089237316195423570985008687907853269984665640564039457584007913129639936"u8, System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture)); - } - - [Fact] - public void TryParseUtf8Test() - { - NumberBaseHelper.TryParse("115792089237316195423570985008687907853269984665640564039457584007913129639935"u8, System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture, out UInt parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - NumberBaseHelper.TryParse("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8, System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - NumberBaseHelper.TryParse(MaxValueBinUtf8, System.Globalization.NumberStyles.BinaryNumber, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - - NumberBaseHelper.TryParse("115792089237316195423570985008687907853269984665640564039457584007913129639936"u8, System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeFalse(); - parsedValue.Should().Be(default); - } - #endregion - - #region IPowerFunctions - [Fact] - public void PowTest() - { - GenericFloatingPointFunctions.Pow(Zero, (uint)int.MaxValue).Should().Be(Zero); - GenericFloatingPointFunctions.Pow(One, (uint)int.MaxValue).Should().Be(One); - GenericFloatingPointFunctions.Pow(MaxValue, Zero).Should().Be(One); - GenericFloatingPointFunctions.Pow(MaxValue, One).Should().Be(MaxValue); - GenericFloatingPointFunctions.Pow(Two, Two).Should().Be(4); - GenericFloatingPointFunctions.Pow(Two, 4U).Should().Be(16); - GenericFloatingPointFunctions.Pow(16U, Two).Should().Be(256); - GenericFloatingPointFunctions.Pow(Two, 255U) - .Should().Be(new UInt(0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); - - Assert.Throws(() => GenericFloatingPointFunctions.Pow(Two, 256U)); - Assert.Throws(() => GenericFloatingPointFunctions.Pow(Two + Two, 255U)); - } - #endregion - } -} diff --git a/src/MissingValues.Tests.Old/Core/UInt256Test.cs b/src/MissingValues.Tests.Old/Core/UInt256Test.cs deleted file mode 100644 index a234c97..0000000 --- a/src/MissingValues.Tests.Old/Core/UInt256Test.cs +++ /dev/null @@ -1,236 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Numerics; -using System.Text; -using System.Text.Json; -using System.Text.Unicode; -using System.Threading.Tasks; - -using UInt = MissingValues.UInt256; - -namespace MissingValues.Tests.Core -{ - public partial class UInt256Test - { - [Fact] - public void Cast_ToByte() - { - byte.MinValue.Should().Be((byte)Zero); - byte.MaxValue.Should().Be((byte)ByteMaxValue); - } - - [Fact] - public void Cast_ToUInt16() - { - ushort.MinValue.Should().Be((ushort)Zero); - ushort.MaxValue.Should().Be((ushort)UInt16MaxValue); - } - - [Fact] - public void Cast_ToUInt32() - { - uint.MinValue.Should().Be((uint)Zero); - uint.MaxValue.Should().Be((uint)UInt32MaxValue); - } - - [Fact] - public void Cast_ToUInt64() - { - ulong.MinValue.Should().Be((ulong)Zero); - ulong.MaxValue.Should().Be((ulong)UInt64MaxValue); - } - - [Fact] - public void Cast_ToUInt128() - { - UInt128.MinValue.Should().Be((UInt128)Zero); - UInt128.MaxValue.Should().Be((UInt128)UInt128MaxValue); - } - - [Fact] - public void Cast_ToBigInteger() - { - BigInteger.One.Should().Be((BigInteger)One); - BigInteger.Parse("115792089237316195423570985008687907853269984665640564039457584007913129639935") - .Should().Be((BigInteger)MaxValue); - } - - [Fact] - public void Cast_ToDouble() - { - // Test a UInt256Converter value where _upper is 0 - UInt value1 = new UInt(UInt128.Zero, UInt128.MaxValue); - double exp1 = System.Math.Round((double)UInt128.MaxValue, 5); - double act1 = System.Math.Round((double)value1, 5); - double diff1 = System.Math.Abs(exp1 * 0.00000000001); - Assert.True(System.Math.Abs(exp1 - act1) <= diff1); - - - // Test a UInt256Converter value where _upper is not 0 - UInt value2 = new UInt(UInt128.MaxValue, UInt128.MaxValue); - double exp2 = System.Math.Round(((double)UInt128.MaxValue) * System.Math.Pow(2.0, 128), 5); - double act2 = System.Math.Round((double)value2, 5); - double diff2 = System.Math.Abs(exp2 * 0.00000000001); - Assert.True(System.Math.Abs(exp2 - act2) <= diff2); - } - - [Fact] - public void BigMulTest() - { - UInt upper = UInt.BigMul(MaxValue, Two, out UInt lower); - - upper - .Should() - .Be(new(0x1)); - lower - .Should() - .Be(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE)); - } - - [Fact] - public void Internal_DivRemTest() - { - const long Left = 101_000_000_000; - const long Right = 10_000_000_000; - const long Quotient = 10; - const long Remainder = 1_000_000_000; - - UInt a = Left; - UInt b = Right; - - UInt.DivRem(in a, in b, out UInt quotient, out UInt remainder); - - quotient.Should().Be(Quotient); - remainder.Should().Be(Remainder); - - UInt.DivRem(in a, in b, out a, out remainder); - - a.Should().Be(Quotient); - remainder.Should().Be(Remainder); - - UInt.DivRem(Left, in b, out quotient, out b); - - quotient.Should().Be(Quotient); - b.Should().Be(Remainder); - } - - [Fact] - public void BasicParseTest() - { - UInt.Parse("115792089237316195423570985008687907853269984665640564039457584007913129639935") - .Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - } - - [Fact] - public void BasicTryParseTest() - { - UInt.TryParse("115792089237316195423570985008687907853269984665640564039457584007913129639935", out UInt parsedValue).Should().BeTrue(); - parsedValue.Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - } - - [Fact] - public void ToDecStringTest() - { - Zero.ToString("D", CultureInfo.CurrentCulture) - .Should().Be("0"); - One.ToString("D", CultureInfo.CurrentCulture) - .Should().Be("1"); - MaxValue.ToString("D", CultureInfo.CurrentCulture) - .Should().Be("115792089237316195423570985008687907853269984665640564039457584007913129639935"); - } - [Fact] - public void ToHexStringTest() - { - One.ToString("X", CultureInfo.CurrentCulture) - .Should().Be("1"); - ((UInt)byte.MaxValue).ToString("X", CultureInfo.CurrentCulture) - .Should().Be("FF"); - ((UInt)ushort.MaxValue).ToString("X", CultureInfo.CurrentCulture) - .Should().Be("FFFF"); - ((UInt)uint.MaxValue).ToString("X", CultureInfo.CurrentCulture) - .Should().Be("FFFFFFFF"); - ((UInt)ulong.MaxValue).ToString("X", CultureInfo.CurrentCulture) - .Should().Be("FFFFFFFFFFFFFFFF"); - ((UInt)UInt128.MaxValue).ToString("X", CultureInfo.CurrentCulture) - .Should().Be("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"); - - Zero.ToString("X64", CultureInfo.CurrentCulture) - .Should().Be("0000000000000000000000000000000000000000000000000000000000000000"); - MaxValue.ToString("x64", CultureInfo.CurrentCulture) - .Should().Be("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); - MaxValue.ToString("X64", CultureInfo.CurrentCulture) - .Should().Be("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"); - } - [Fact] - public void ToBinStringTest() - { - One.ToString("B", CultureInfo.CurrentCulture) - .Should().Be("1"); - ((UInt)byte.MaxValue).ToString("B", CultureInfo.CurrentCulture) - .Should().Be("11111111"); - ((UInt)ushort.MaxValue).ToString("B", CultureInfo.CurrentCulture) - .Should().Be("1111111111111111"); - ((UInt)uint.MaxValue).ToString("B", CultureInfo.CurrentCulture) - .Should().Be("11111111111111111111111111111111"); - ((UInt)ulong.MaxValue).ToString("B", CultureInfo.CurrentCulture) - .Should().Be("1111111111111111111111111111111111111111111111111111111111111111"); - ((UInt)UInt128.MaxValue).ToString("B", CultureInfo.CurrentCulture) - .Should().Be("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"); - - Zero.ToString("B256", CultureInfo.CurrentCulture) - .Should().Be("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"); - MaxValue.ToString("B256", CultureInfo.CurrentCulture) - .Should().Be("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"); - } - - [Fact] - public void ToDecFormatUtf8StringTest() - { - ReadOnlySpan toString = Encoding.UTF8.GetBytes(MaxValue.ToString()!); - - Span format = stackalloc byte[toString.Length]; - bool success = Utf8.TryWrite(format, CultureInfo.CurrentCulture, $"{MaxValue:D}", out _); - Assert.Equal(toString, format); - success.Should().BeTrue(); - } - [Fact] - public void ToHexFormatUtf8StringTest() - { - ReadOnlySpan toString = Encoding.UTF8.GetBytes(MaxValue.ToString("X64", CultureInfo.CurrentCulture)!); - - Span format = stackalloc byte[toString.Length]; - bool success = Utf8.TryWrite(format, CultureInfo.CurrentCulture, $"{MaxValue:X64}", out _); - Assert.Equal(toString, format); - success.Should().BeTrue(); - } - [Fact] - public void ToBinFormatUtf8StringTest() - { - ReadOnlySpan toString = Encoding.UTF8.GetBytes(MaxValue.ToString("B256", CultureInfo.CurrentCulture)!); - - Span format = stackalloc byte[toString.Length]; - bool success = Utf8.TryWrite(format, CultureInfo.CurrentCulture, $"{MaxValue:B256}", out _); - Assert.Equal(toString, format); - success.Should().BeTrue(); - } - - [Fact] - public void JsonWriteTest() - { - JsonSerializer.Serialize(new object[] { MaxValue, Zero, One }) - .Should().Be("[115792089237316195423570985008687907853269984665640564039457584007913129639935,0,1]"); - } - [Fact] - public void JsonReadTest() - { - JsonSerializer.Deserialize("115792089237316195423570985008687907853269984665640564039457584007913129639935") - .Should().Be(MaxValue); - JsonSerializer.Deserialize("115792089237316195423570985008687907853269984665640564039457584007913129639935"u8) - .Should().Be(MaxValue); - } - } -} diff --git a/src/MissingValues.Tests.Old/Core/UInt512Test.GenericMath.cs b/src/MissingValues.Tests.Old/Core/UInt512Test.GenericMath.cs deleted file mode 100644 index d22d1e5..0000000 --- a/src/MissingValues.Tests.Old/Core/UInt512Test.GenericMath.cs +++ /dev/null @@ -1,1172 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; - -using UInt = MissingValues.UInt512; - -namespace MissingValues.Tests.Core -{ - public partial class UInt512Test - { - #region Readonly Variables - private const string MaxValueBin = - "11111111111111111111111111111111" - + "11111111111111111111111111111111" - + "11111111111111111111111111111111" - + "11111111111111111111111111111111" - + "11111111111111111111111111111111" - + "11111111111111111111111111111111" - + "11111111111111111111111111111111" - + "11111111111111111111111111111111" - + "11111111111111111111111111111111" - + "11111111111111111111111111111111" - + "11111111111111111111111111111111" - + "11111111111111111111111111111111" - + "11111111111111111111111111111111" - + "11111111111111111111111111111111" - + "11111111111111111111111111111111" - + "11111111111111111111111111111111"; - private ReadOnlySpan MaxValueBinUtf8 => - "11111111111111111111111111111111"u8 - + "11111111111111111111111111111111"u8 - + "11111111111111111111111111111111"u8 - + "11111111111111111111111111111111"u8 - + "11111111111111111111111111111111"u8 - + "11111111111111111111111111111111"u8 - + "11111111111111111111111111111111"u8 - + "11111111111111111111111111111111"u8 - + "11111111111111111111111111111111"u8 - + "11111111111111111111111111111111"u8 - + "11111111111111111111111111111111"u8 - + "11111111111111111111111111111111"u8 - + "11111111111111111111111111111111"u8 - + "11111111111111111111111111111111"u8 - + "11111111111111111111111111111111"u8 - + "11111111111111111111111111111111"u8; - private const double MaxValueAsDouble = 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095.0; - - private static readonly UInt ByteMaxValue = new( - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_00FF); - private static readonly UInt UInt16MaxValue = new( - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_FFFF); - private static readonly UInt UInt32MaxValue = new( - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_FFFF_FFFF); - private static readonly UInt UInt64MaxValue = new( - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF); - private static readonly UInt UInt128MaxValue = new( - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); - private static readonly UInt UInt256MaxValue = new( - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); - - private static readonly UInt Zero = new( - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - private static readonly UInt One = new( - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001); - private static readonly UInt Two = new( - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0002); - - private static readonly UInt MaxValue = new( - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); - private static readonly UInt MaxValueMinusOne = new( - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE); - private static readonly UInt MaxValueMinusTwo = new( - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFD); - private static readonly UInt HalfMaxValue = new( - 0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); - - private static readonly UInt E40 = new( - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_001D, 0x6329_F1C3_5CA4_BFAB, 0xB9F5_6100_0000_0000); - #endregion - - #region Generic Math Operators - [Fact] - public static void op_AdditionTest() - { - Assert.Equal(One, MathOperatorsHelper.AdditionOperation(Zero, One)); - Assert.Equal(Two, MathOperatorsHelper.AdditionOperation(One, One)); - Assert.Equal(Zero, MathOperatorsHelper.AdditionOperation(MaxValue, One)); - } - [Fact] - public static void op_CheckedAdditionTest() - { - Assert.Equal(One, MathOperatorsHelper.CheckedAdditionOperation(Zero, One)); - Assert.Equal(Two, MathOperatorsHelper.CheckedAdditionOperation(One, One)); - - Assert.Throws(() => MathOperatorsHelper.CheckedAdditionOperation(MaxValue, 1)); - } - [Fact] - public static void op_IncrementTest() - { - MathOperatorsHelper.IncrementOperation(Zero).Should().Be(One); - MathOperatorsHelper.IncrementOperation(One).Should().Be(Two); - MathOperatorsHelper.IncrementOperation(MaxValueMinusTwo).Should().Be(MaxValueMinusOne); - MathOperatorsHelper.IncrementOperation(MaxValueMinusOne).Should().Be(MaxValue); - MathOperatorsHelper.IncrementOperation(MaxValue).Should().Be(Zero); - } - [Fact] - public static void op_CheckedIncrementTest() - { - MathOperatorsHelper.CheckedIncrementOperation(Zero).Should().Be(One); - MathOperatorsHelper.CheckedIncrementOperation(One).Should().Be(Two); - MathOperatorsHelper.CheckedIncrementOperation(MaxValueMinusTwo).Should().Be(MaxValueMinusOne); - MathOperatorsHelper.CheckedIncrementOperation(MaxValueMinusOne).Should().Be(MaxValue); - - Assert.Throws(() => MathOperatorsHelper.CheckedIncrementOperation(MaxValue)); - } - [Fact] - public static void op_SubtractionTest() - { - Assert.Equal(One, MathOperatorsHelper.SubtractionOperation(Two, One)); - Assert.Equal(MaxValueMinusOne, MathOperatorsHelper.SubtractionOperation(MaxValue, 1)); - } - [Fact] - public static void op_CheckedSubtractionTest() - { - Assert.Equal(One, MathOperatorsHelper.CheckedSubtractionOperation(Two, One)); - Assert.Equal(MaxValueMinusOne, MathOperatorsHelper.CheckedSubtractionOperation(MaxValue, 1)); - - Assert.Throws(() => MathOperatorsHelper.CheckedSubtractionOperation(Zero, 1)); - } - [Fact] - public static void op_DecrementTest() - { - MathOperatorsHelper.DecrementOperation(Two).Should().Be(One); - MathOperatorsHelper.DecrementOperation(One).Should().Be(Zero); - MathOperatorsHelper.DecrementOperation(MaxValueMinusOne).Should().Be(MaxValueMinusTwo); - MathOperatorsHelper.DecrementOperation(MaxValue).Should().Be(MaxValueMinusOne); - MathOperatorsHelper.DecrementOperation(Zero).Should().Be(MaxValue); - } - [Fact] - public static void op_CheckedDecrementTest() - { - MathOperatorsHelper.CheckedDecrementOperation(Two).Should().Be(One); - MathOperatorsHelper.CheckedDecrementOperation(One).Should().Be(Zero); - MathOperatorsHelper.CheckedDecrementOperation(MaxValueMinusOne).Should().Be(MaxValueMinusTwo); - MathOperatorsHelper.CheckedDecrementOperation(MaxValue).Should().Be(MaxValueMinusOne); - - Assert.Throws(() => MathOperatorsHelper.CheckedDecrementOperation(Zero)); - } - [Fact] - public static void op_MultiplyTest() - { - Assert.Equal(One, MathOperatorsHelper.MultiplicationOperation(One, One)); - Assert.Equal(Two, MathOperatorsHelper.MultiplicationOperation(Two, One)); - Assert.Equal(MaxValueMinusOne, MathOperatorsHelper.MultiplicationOperation(Two, HalfMaxValue)); - } - [Fact] - public static void op_CheckedMultiplyTest() - { - Assert.Equal(One, MathOperatorsHelper.CheckedMultiplicationOperation(One, One)); - Assert.Equal(Two, MathOperatorsHelper.CheckedMultiplicationOperation(Two, One)); - - Assert.Throws(() => MathOperatorsHelper.CheckedMultiplicationOperation(MaxValue, Two)); - } - [Fact] - public static void op_DivisionTest() - { - Assert.Equal( - HalfMaxValue, - MathOperatorsHelper.DivisionOperation(MaxValue, Two)); - Assert.Equal( - new UInt(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), - MathOperatorsHelper.DivisionOperation( - UInt256.MaxValue, - Two)); - Assert.Equal( - new UInt(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), - MathOperatorsHelper.DivisionOperation( - UInt128.MaxValue, - Two)); - - Assert.Equal( - new(0x028F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28, 0xF5C2_8F5C_28F5_C28F, - 0x5C28_F5C2_8F5C_28F5, 0xC28F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28), - MaxValue / 100); - Assert.Equal( - new(0x0006_8DB8_BAC7_10CB, 0x295E_9E1B_089A_0275, 0x2546_0AA6_4C2F_837B, 0x4A23_39C0_EBED_FA43, - 0xFE5C_91D1_4E3B_CD35, 0xA858_793D_D97F_62B6, 0xAE7D_566C_F41F_212D, 0x7731_8FC5_0481_6F00), - (MaxValue / 100) / 100); - Assert.Equal( - new UInt(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x08B6_1313_BBAB_CE2C, 0x6232_3AC4_B3B3_DA01, - 0x53B6_2BE7_BC1A_0042, 0xB443_E18A_C4E7_0AFD, 0xB897_7684_D802_7110, 0x5B47_424E_B16F_CC18), - MathOperatorsHelper.DivisionOperation(MaxValue, E40)); - Assert.Equal( - new UInt( - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x1DA4_8CE4_68E7_C702, 0x6520_247D_3556_476D, 0x1469_CAF6_DB22_4CF9, 0x7D7D_B189_5F2A_4679 - ), - MathOperatorsHelper.DivisionOperation(new UInt( - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x08B6_1313_BBAB_CE2C, 0x6232_3AC4_B3B3_DA01, - 0x53B6_2BE7_BC1A_0042, 0xB443_E18A_C4E7_0AFD, 0xB897_7684_D802_7110, 0x5B47_424E_B16F_CC18 - ), - new UInt( - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x4B3B_4CA8_5A86_C47A, 0x098A_2240_0000_0000 - ))); - Assert.Equal(One, MathOperatorsHelper.DivisionOperation(MaxValue, MaxValue)); - - Assert.Throws(() => MathOperatorsHelper.DivisionOperation(One, Zero)); - } - [Fact] - public static void op_CheckedDivisionTest() - { - Assert.Equal( - HalfMaxValue, - MathOperatorsHelper.CheckedDivisionOperation(MaxValue, Two)); - Assert.Equal(One, MathOperatorsHelper.CheckedDivisionOperation(MaxValue, MaxValue)); - Assert.Equal( - new UInt(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x08B6_1313_BBAB_CE2C, 0x6232_3AC4_B3B3_DA01, - 0x53B6_2BE7_BC1A_0042, 0xB443_E18A_C4E7_0AFD, 0xB897_7684_D802_7110, 0x5B47_424E_B16F_CC18), - MathOperatorsHelper.CheckedDivisionOperation(MaxValue, E40)); - - Assert.Throws(() => MathOperatorsHelper.CheckedDivisionOperation(One, Zero)); - } - [Fact] - public static void op_ModulusTest() - { - MathOperatorsHelper.ModulusOperation(Two, Two).Should().Be(Zero); - MathOperatorsHelper.ModulusOperation(One, Two).Should().NotBe(Zero); - MathOperatorsHelper.ModulusOperation(MaxValue, new(10U)).Should().Be(5U); - MathOperatorsHelper.ModulusOperation(MaxValue, E40) - .Should().Be( - new UInt(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0011, 0xC828_0B1A_5E03_5840, 0xF8B2_E7FF_FFFF_FFFF)); - - Assert.Throws(() => MathOperatorsHelper.ModulusOperation(One, Zero)); - } - - [Fact] - public static void op_BitwiseAndTest() - { - BitwiseOperatorsHelper.BitwiseAndOperation(Zero, 1U).Should().Be(Zero); - BitwiseOperatorsHelper.BitwiseAndOperation(One, 1U).Should().Be(One); - BitwiseOperatorsHelper.BitwiseAndOperation(MaxValue, 1U).Should().Be(One); - } - [Fact] - public static void op_BitwiseOrTest() - { - BitwiseOperatorsHelper.BitwiseOrOperation(Zero, 1U) - .Should().Be(One); - BitwiseOperatorsHelper.BitwiseOrOperation(One, 1U) - .Should().Be(One); - BitwiseOperatorsHelper.BitwiseOrOperation(MaxValue, 1U) - .Should().Be(MaxValue); - } - [Fact] - public static void op_ExclusiveOrTest() - { - BitwiseOperatorsHelper.ExclusiveOrOperation(Zero, 1U) - .Should().Be(One); - BitwiseOperatorsHelper.ExclusiveOrOperation(One, 1U) - .Should().Be(Zero); - BitwiseOperatorsHelper.ExclusiveOrOperation(MaxValue, 1U) - .Should().Be(MaxValueMinusOne); - } - [Fact] - public static void op_OnesComplementTest() - { - BitwiseOperatorsHelper.OnesComplementOperation(Zero) - .Should().Be(MaxValue); - BitwiseOperatorsHelper.OnesComplementOperation(One) - .Should().Be(MaxValueMinusOne); - BitwiseOperatorsHelper.OnesComplementOperation(MaxValue) - .Should().Be(Zero); - } - - [Fact] - public static void op_LeftShiftTest() - { - ShiftOperatorsHelper.LeftShiftOperation(Zero, 1) - .Should().Be(Zero); - ShiftOperatorsHelper.LeftShiftOperation(One, 1) - .Should().Be(Two); - ShiftOperatorsHelper.LeftShiftOperation(MaxValue, 1) - .Should().Be(MaxValueMinusOne); - - UInt actual = new( - 0x028F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28, 0xF5C2_8F5C_28F5_C28F, - 0x5C28_F5C2_8F5C_28F5, 0xC28F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28); - - ShiftOperatorsHelper.LeftShiftOperation(actual, 0) - .Should().Be(actual); - ShiftOperatorsHelper.LeftShiftOperation(actual, 64) - .Should().Be(new( - 0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28, 0xF5C2_8F5C_28F5_C28F, 0x5C28_F5C2_8F5C_28F5, - 0xC28F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28, 0)); - ShiftOperatorsHelper.LeftShiftOperation(actual, 64 * 2) - .Should().Be(new( - 0x8F5C_28F5_C28F_5C28, 0xF5C2_8F5C_28F5_C28F, 0x5C28_F5C2_8F5C_28F5, 0xC28F_5C28_F5C2_8F5C, - 0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28, 0, 0)); - ShiftOperatorsHelper.LeftShiftOperation(actual, 64 * 3) - .Should().Be(new( - 0xF5C2_8F5C_28F5_C28F, 0x5C28_F5C2_8F5C_28F5, 0xC28F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2, - 0x8F5C_28F5_C28F_5C28, 0, 0, 0)); - ShiftOperatorsHelper.LeftShiftOperation(actual, 64 * 4) - .Should().Be(new( - 0x5C28_F5C2_8F5C_28F5, 0xC28F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28, - 0, 0, 0, 0 )); - ShiftOperatorsHelper.LeftShiftOperation(actual, 64 * 5) - .Should().Be(new( - 0xC28F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28, 0, - 0, 0, 0, 0)); - ShiftOperatorsHelper.LeftShiftOperation(actual, 64 * 6) - .Should().Be(new( - 0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28, 0, 0, - 0, 0, 0, 0)); - ShiftOperatorsHelper.LeftShiftOperation(actual, 64 * 7) - .Should().Be(new( - 0x8F5C_28F5_C28F_5C28, 0, 0, 0, - 0, 0, 0, 0)); - } - [Fact] - public static void op_RightShiftTest() - { - ShiftOperatorsHelper.RightShiftOperation(Zero, 1) - .Should().Be(Zero); - ShiftOperatorsHelper.RightShiftOperation(One, 1) - .Should().Be(Zero); - ShiftOperatorsHelper.RightShiftOperation(MaxValue, 1) - .Should().Be(HalfMaxValue); - - UInt actual = new( - 0x028F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28, 0xF5C2_8F5C_28F5_C28F, - 0x5C28_F5C2_8F5C_28F5, 0xC28F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28); - - ShiftOperatorsHelper.RightShiftOperation(actual, 64 * 0) - .Should().Be(actual); - ShiftOperatorsHelper.RightShiftOperation(actual, 64 * 1) - .Should().Be(new( - 0, 0x028F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28, - 0xF5C2_8F5C_28F5_C28F, 0x5C28_F5C2_8F5C_28F5, 0xC28F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2)); - ShiftOperatorsHelper.RightShiftOperation(actual, 64 * 2) - .Should().Be(new( - 0, 0, 0x028F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2, - 0x8F5C_28F5_C28F_5C28, 0xF5C2_8F5C_28F5_C28F, 0x5C28_F5C2_8F5C_28F5, 0xC28F_5C28_F5C2_8F5C)); - ShiftOperatorsHelper.RightShiftOperation(actual, 64 * 3) - .Should().Be(new( - 0, 0, 0, 0x028F_5C28_F5C2_8F5C, - 0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28, 0xF5C2_8F5C_28F5_C28F, 0x5C28_F5C2_8F5C_28F5)); - ShiftOperatorsHelper.RightShiftOperation(actual, 64 * 4) - .Should().Be(new( - 0, 0, 0, 0, - 0x028F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28, 0xF5C2_8F5C_28F5_C28F)); - ShiftOperatorsHelper.RightShiftOperation(actual, 64 * 5) - .Should().Be(new( - 0, 0, 0, 0, - 0, 0x028F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28)); - ShiftOperatorsHelper.RightShiftOperation(actual, 64 * 6) - .Should().Be(new( - 0, 0, 0, 0, - 0, 0, 0x028F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2)); - ShiftOperatorsHelper.RightShiftOperation(actual, 64 * 7) - .Should().Be(new( - 0, 0, 0, 0, - 0, 0, 0, 0x028F_5C28_F5C2_8F5C)); - } - [Fact] - public static void op_UnsignedRightShiftTest() - { - ShiftOperatorsHelper.UnsignedRightShiftOperation(Zero, 1) - .Should().Be(Zero); - ShiftOperatorsHelper.UnsignedRightShiftOperation(One, 1) - .Should().Be(Zero); - ShiftOperatorsHelper.UnsignedRightShiftOperation(MaxValue, 1) - .Should().Be(HalfMaxValue); - - UInt actual = new( - 0x028F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28, 0xF5C2_8F5C_28F5_C28F, - 0x5C28_F5C2_8F5C_28F5, 0xC28F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28); - - ShiftOperatorsHelper.UnsignedRightShiftOperation(actual, 64 * 0) - .Should().Be(actual); - ShiftOperatorsHelper.UnsignedRightShiftOperation(actual, 64 * 1) - .Should().Be(new( - 0, 0x028F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28, - 0xF5C2_8F5C_28F5_C28F, 0x5C28_F5C2_8F5C_28F5, 0xC28F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2)); - ShiftOperatorsHelper.UnsignedRightShiftOperation(actual, 64 * 2) - .Should().Be(new( - 0, 0, 0x028F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2, - 0x8F5C_28F5_C28F_5C28, 0xF5C2_8F5C_28F5_C28F, 0x5C28_F5C2_8F5C_28F5, 0xC28F_5C28_F5C2_8F5C)); - ShiftOperatorsHelper.UnsignedRightShiftOperation(actual, 64 * 3) - .Should().Be(new( - 0, 0, 0, 0x028F_5C28_F5C2_8F5C, - 0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28, 0xF5C2_8F5C_28F5_C28F, 0x5C28_F5C2_8F5C_28F5)); - ShiftOperatorsHelper.UnsignedRightShiftOperation(actual, 64 * 4) - .Should().Be(new( - 0, 0, 0, 0, - 0x028F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28, 0xF5C2_8F5C_28F5_C28F)); - ShiftOperatorsHelper.UnsignedRightShiftOperation(actual, 64 * 5) - .Should().Be(new( - 0, 0, 0, 0, - 0, 0x028F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2, 0x8F5C_28F5_C28F_5C28)); - ShiftOperatorsHelper.UnsignedRightShiftOperation(actual, 64 * 6) - .Should().Be(new( - 0, 0, 0, 0, - 0, 0, 0x028F_5C28_F5C2_8F5C, 0x28F5_C28F_5C28_F5C2)); - ShiftOperatorsHelper.UnsignedRightShiftOperation(actual, 64 * 7) - .Should().Be(new( - 0, 0, 0, 0, - 0, 0, 0, 0x028F_5C28_F5C2_8F5C)); - } - - [Fact] - public static void op_EqualityTest() - { - EqualityOperatorsHelper.EqualityOperation(Zero, 1U).Should().BeFalse(); - EqualityOperatorsHelper.EqualityOperation(One, 1U).Should().BeTrue(); - EqualityOperatorsHelper.EqualityOperation(MaxValue, 1U).Should().BeFalse(); - } - [Fact] - public static void op_InequalityTest() - { - EqualityOperatorsHelper.InequalityOperation(Zero, 1U).Should().BeTrue(); - EqualityOperatorsHelper.InequalityOperation(One, 1U).Should().BeFalse(); - EqualityOperatorsHelper.InequalityOperation(MaxValue, 1U).Should().BeTrue(); - } - - [Fact] - public static void op_GreaterThanTest() - { - ComparisonOperatorsHelper.GreaterThanOperation(Zero, 1U).Should().BeFalse(); - ComparisonOperatorsHelper.GreaterThanOperation(One, 1U).Should().BeFalse(); - ComparisonOperatorsHelper.GreaterThanOperation(MaxValue, 1U).Should().BeTrue(); - - ComparisonOperatorsHelper.GreaterThanOperation( - new(0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1), new(0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1)) - .Should().BeTrue(); - ComparisonOperatorsHelper.GreaterThanOperation( - new(0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1), new(0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0)) - .Should().BeTrue(); - ComparisonOperatorsHelper.GreaterThanOperation( - new(0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1), new(0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x1, 0x1)) - .Should().BeTrue(); - } - [Fact] - public static void op_GreaterThanOrEqualTest() - { - ComparisonOperatorsHelper.GreaterThanOrEqualOperation(Zero, 1U).Should().BeFalse(); - ComparisonOperatorsHelper.GreaterThanOrEqualOperation(One, 1U).Should().BeTrue(); - ComparisonOperatorsHelper.GreaterThanOrEqualOperation(MaxValue, 1U).Should().BeTrue(); - } - [Fact] - public static void op_LessThanTest() - { - ComparisonOperatorsHelper.LessThanOperation(Zero, 1U).Should().BeTrue(); - ComparisonOperatorsHelper.LessThanOperation(One, 1U).Should().BeFalse(); - ComparisonOperatorsHelper.LessThanOperation(MaxValue, 1U).Should().BeFalse(); - } - [Fact] - public static void op_LessThanOrEqualTest() - { - ComparisonOperatorsHelper.LessThanOrEqualOperation(Zero, 1U).Should().BeTrue(); - ComparisonOperatorsHelper.LessThanOrEqualOperation(One, 1U).Should().BeTrue(); - ComparisonOperatorsHelper.LessThanOrEqualOperation(MaxValue, 1U).Should().BeFalse(); - } - #endregion - - #region Identities - [Fact] - public static void AdditiveIdentityTest() - { - Assert.Equal(Zero, MathConstantsHelper.AdditiveIdentityHelper()); - } - - [Fact] - public static void MultiplicativeIdentityTest() - { - Assert.Equal(One, MathConstantsHelper.MultiplicativeIdentityHelper()); - } - #endregion - - #region IBinaryInteger - [Fact] - public static void DivRemTest() - { - Assert.Equal((Zero, Zero), BinaryIntegerHelper.DivRem(Zero, Two)); - Assert.Equal((Zero, One), BinaryIntegerHelper.DivRem(One, Two)); - Assert.Equal((HalfMaxValue, One), BinaryIntegerHelper.DivRem(MaxValue, 2)); - Assert.Equal(( - new UInt(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x08B6_1313_BBAB_CE2C, 0x6232_3AC4_B3B3_DA01, - 0x53B6_2BE7_BC1A_0042, 0xB443_E18A_C4E7_0AFD, 0xB897_7684_D802_7110, 0x5B47_424E_B16F_CC18), - new UInt(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0011, 0xC828_0B1A_5E03_5840, 0xF8B2_E7FF_FFFF_FFFF)), - BinaryIntegerHelper.DivRem(MaxValue, E40)); - } - - [Fact] - public static void LeadingZeroCountTest() - { - Assert.Equal(512U, BinaryIntegerHelper.LeadingZeroCount(Zero)); - Assert.Equal(511U, BinaryIntegerHelper.LeadingZeroCount(One)); - Assert.Equal(448U, BinaryIntegerHelper.LeadingZeroCount(ulong.MaxValue)); - Assert.Equal(384U, BinaryIntegerHelper.LeadingZeroCount(UInt128.MaxValue)); - Assert.Equal(256U, BinaryIntegerHelper.LeadingZeroCount(UInt256.MaxValue)); - Assert.Equal(192U, BinaryIntegerHelper.LeadingZeroCount(MaxValue >>> 192)); - Assert.Equal(128U, BinaryIntegerHelper.LeadingZeroCount(MaxValue >>> 128)); - Assert.Equal(64U, BinaryIntegerHelper.LeadingZeroCount(MaxValue >>> 64)); - Assert.Equal(0U, BinaryIntegerHelper.LeadingZeroCount(MaxValue)); - } - - [Fact] - public static void PopCountTest() - { - Assert.Equal(0U, BinaryIntegerHelper.PopCount(Zero)); - Assert.Equal(1U, BinaryIntegerHelper.PopCount(One)); - Assert.Equal(512U, BinaryIntegerHelper.PopCount(MaxValue)); - } - - [Fact] - public static void RotateLeftTest() - { - Assert.Equal(Zero, BinaryIntegerHelper.RotateLeft(Zero, 1)); - Assert.Equal(Two, BinaryIntegerHelper.RotateLeft(One, 1)); - Assert.Equal(MaxValue, BinaryIntegerHelper.RotateLeft(MaxValue, 1)); - } - - [Fact] - public static void RotateRightTest() - { - Assert.Equal(new( - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), BinaryIntegerHelper.RotateRight(Zero, 1)); - Assert.Equal(new( - 0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), BinaryIntegerHelper.RotateRight(One, 1)); - Assert.Equal(new( - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, - 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), BinaryIntegerHelper.RotateRight(MaxValue, 1)); - } - - [Fact] - public static void TrailingZeroCountTest() - { - Assert.Equal(512U, BinaryIntegerHelper.TrailingZeroCount(Zero)); - Assert.Equal(0U, BinaryIntegerHelper.TrailingZeroCount(One)); - Assert.Equal(64U, BinaryIntegerHelper.TrailingZeroCount(new UInt(0, 0, 0, 0, 0, 0, 1, 0))); - Assert.Equal(128U, BinaryIntegerHelper.TrailingZeroCount(new UInt(0, 0, 0, 0, 0, 1, 0, 0))); - Assert.Equal(192U, BinaryIntegerHelper.TrailingZeroCount(new UInt(0, 0, 0, 0, 1, 0, 0, 0))); - Assert.Equal(256U, BinaryIntegerHelper.TrailingZeroCount(new UInt(0, 0, 0, 1, 0, 0, 0, 0))); - Assert.Equal(320U, BinaryIntegerHelper.TrailingZeroCount(new UInt(0, 0, 1, 0, 0, 0, 0, 0))); - Assert.Equal(384U, BinaryIntegerHelper.TrailingZeroCount(new UInt(0, 1, 0, 0, 0, 0, 0, 0))); - Assert.Equal(448U, BinaryIntegerHelper.TrailingZeroCount(new UInt(1, 0, 0, 0, 0, 0, 0, 0))); - Assert.Equal(0U, BinaryIntegerHelper.TrailingZeroCount(MaxValue)); - } - [Fact] - public static void TryReadLittleEndianInt256Test() - { - UInt result; - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, isUnsigned: false, out result)); - Assert.Equal(new(0x0100_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), result); - - Assert.False(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 }, isUnsigned: false, out result)); - Assert.Equal(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001), result); - - Assert.False(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: false, out result)); - Assert.Equal(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: false, out result)); - Assert.Equal(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0080), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F }, isUnsigned: false, out result)); - Assert.Equal(new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), result); - - Assert.False(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: false, out result)); - Assert.Equal(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), result); - } - - [Fact] - public static void TryReadLittleEndianUInt256Test() - { - UInt result; - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, isUnsigned: true, out result)); - Assert.Equal(new(0x0100_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 }, isUnsigned: true, out result)); - Assert.Equal(new(0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: true, out result)); - Assert.Equal(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF7F), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, isUnsigned: true, out result)); - Assert.Equal(new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0080), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F }, isUnsigned: true, out result)); - Assert.Equal(new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), result); - - Assert.True(BinaryIntegerHelper.TryReadLittleEndian(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, isUnsigned: true, out result)); - Assert.Equal(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), result); - } - - [Fact] - public static void GetByteCountTest() - { - Assert.Equal(64, BinaryIntegerHelper.GetByteCount(Zero)); - Assert.Equal(64, BinaryIntegerHelper.GetByteCount(One)); - Assert.Equal(64, BinaryIntegerHelper.GetByteCount(MaxValue)); - } - - [Fact] - public static void GetShortestBitLengthTest() - { - Assert.Equal(0x00, BinaryIntegerHelper.GetShortestBitLength(Zero)); - Assert.Equal(0x01, BinaryIntegerHelper.GetShortestBitLength(One)); - Assert.Equal(0x200, BinaryIntegerHelper.GetShortestBitLength(MaxValue)); - } - - [Fact] - public static void TryWriteBigEndianTest() - { - Span destination = stackalloc byte[64]; - int bytesWritten = 0; - - Assert.True(BinaryIntegerHelper.TryWriteBigEndian(Zero, destination, out bytesWritten)); - Assert.Equal(64, bytesWritten); - Assert.Equal(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, destination.ToArray()); - - Assert.True(BinaryIntegerHelper.TryWriteBigEndian(One, destination, out bytesWritten)); - Assert.Equal(64, bytesWritten); - Assert.Equal(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, destination.ToArray()); - - Assert.True(BinaryIntegerHelper.TryWriteBigEndian(MaxValue, destination, out bytesWritten)); - Assert.Equal(64, bytesWritten); - Assert.Equal(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, destination.ToArray()); - - Assert.False(BinaryIntegerHelper.TryWriteBigEndian(default, Span.Empty, out bytesWritten)); - Assert.Equal(0, bytesWritten); - Assert.Equal(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, destination.ToArray()); - } - - [Fact] - public static void TryWriteLittleEndianTest() - { - Span destination = stackalloc byte[64]; - int bytesWritten = 0; - - Assert.True(BinaryIntegerHelper.TryWriteLittleEndian(Zero, destination, out bytesWritten)); - Assert.Equal(64, bytesWritten); - Assert.Equal(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, destination.ToArray()); - - Assert.True(BinaryIntegerHelper.TryWriteLittleEndian(One, destination, out bytesWritten)); - Assert.Equal(64, bytesWritten); - Assert.Equal(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, destination.ToArray()); - - Assert.True(BinaryIntegerHelper.TryWriteLittleEndian(MaxValue, destination, out bytesWritten)); - Assert.Equal(64, bytesWritten); - Assert.Equal(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, destination.ToArray()); - - Assert.False(BinaryIntegerHelper.TryWriteLittleEndian(default, Span.Empty, out bytesWritten)); - Assert.Equal(0, bytesWritten); - Assert.Equal(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, destination.ToArray()); - } - #endregion - - #region IBinaryNumber - [Fact] - public static void AllBitsSetTest() - { - Assert.Equal(BinaryNumberHelper.AllBitsSet, ~Zero); - } - [Fact] - public static void IsPow2Test() - { - Assert.True(BinaryNumberHelper.IsPow2(new(0x100))); - Assert.True(BinaryNumberHelper.IsPow2(new(0x1_0000))); - Assert.True(BinaryNumberHelper.IsPow2(new(0x1_0000_0000))); - Assert.True(BinaryNumberHelper.IsPow2(new( - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001, 0x0000_0000_0000_0000))); - Assert.True(BinaryNumberHelper.IsPow2(new( - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0001, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000))); - } - [Fact] - public static void Log2Test() - { - Assert.Equal(8U, BinaryNumberHelper.Log2(new(0x100))); - Assert.Equal(16U, BinaryNumberHelper.Log2(new(0x1_0000))); - Assert.Equal(32U, BinaryNumberHelper.Log2(new(0x1_0000_0000))); - Assert.Equal(64U, BinaryNumberHelper.Log2(new( - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001, 0x0000_0000_0000_0000))); - Assert.Equal(128U, BinaryNumberHelper.Log2(new( - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0001, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000))); - Assert.Equal(256U, BinaryNumberHelper.Log2(new( - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000))); - } - #endregion - - #region IMinMaxValue - [Fact] - public static void MaxValueTest() - { - MaxValue.Should().Be(MathConstantsHelper.MaxValue()); - } - - [Fact] - public static void MinValueTest() - { - Zero.Should().Be(MathConstantsHelper.MinValue()); - } - #endregion - - #region INumber - [Fact] - public static void ClampTest() - { - NumberHelper.Clamp(MaxValueMinusOne, UInt128MaxValue, MaxValue).Should().Be(MaxValueMinusOne); - NumberHelper.Clamp(Zero, Two, MaxValue).Should().Be(Two); - NumberHelper.Clamp(MaxValue, Zero, One).Should().Be(One); - - Assert.Throws(() => NumberHelper.Clamp(Zero, MaxValue, Zero)); - } - [Fact] - public static void CopySignTest() - { - NumberHelper.CopySign(MaxValue, One).Should().Be(MaxValue); - } - [Fact] - public static void MaxTest() - { - NumberHelper.Max(MaxValue, Two).Should().Be(MaxValue); - NumberHelper.Max(One, Zero).Should().Be(One); - NumberHelper.Max(Two, Zero).Should().Be(Two); - NumberHelper.Max(Two, One).Should().Be(Two); - } - [Fact] - public static void MaxNumberTest() - { - NumberHelper.MaxNumber(MaxValue, Zero).Should().Be(MaxValue); - NumberHelper.MaxNumber(One, Zero).Should().Be(One); - NumberHelper.MaxNumber(Two, Zero).Should().Be(Two); - } - [Fact] - public static void MinTest() - { - NumberHelper.Min(MaxValue, Zero).Should().Be(Zero); - NumberHelper.Min(One, Zero).Should().Be(Zero); - NumberHelper.Min(Two, Zero).Should().Be(Zero); - } - [Fact] - public static void MinNumberTest() - { - NumberHelper.MinNumber(MaxValue, Zero).Should().Be(Zero); - NumberHelper.MinNumber(One,Zero).Should().Be(Zero); - NumberHelper.MinNumber(Two, Zero).Should().Be(Zero); - } - [Fact] - public static void SignTest() - { - NumberHelper.Sign(MaxValue).Should().Be(1); - NumberHelper.Sign(UInt.Zero).Should().Be(0); - } - #endregion - - #region INumberBase - [Fact] - public static void AbsTest() - { - NumberBaseHelper.Abs(One).Should().Be(One); - } - [Fact] - public static void CreateCheckedToUInt512Test() - { - NumberBaseHelper.CreateChecked(byte.MaxValue).Should().Be(ByteMaxValue); - NumberBaseHelper.CreateChecked(ushort.MaxValue).Should().Be(UInt16MaxValue); - NumberBaseHelper.CreateChecked(uint.MaxValue).Should().Be(UInt32MaxValue); - NumberBaseHelper.CreateChecked(ulong.MaxValue).Should().Be(UInt64MaxValue); - NumberBaseHelper.CreateChecked(UInt128.MaxValue).Should().Be(UInt128MaxValue); - NumberBaseHelper.CreateChecked(UInt256.MaxValue).Should().Be(UInt256MaxValue); - NumberBaseHelper - .CreateChecked(BigInteger.Parse( - "13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095")) - .Should().Be(MaxValue); - NumberBaseHelper.CreateChecked(MaxValueAsDouble).Should().Be(MaxValue); - - NumberBaseHelper.CreateChecked(byte.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateChecked(ushort.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateChecked(uint.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateChecked(ulong.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateChecked(UInt128.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateChecked(UInt256.MinValue).Should().Be(Zero); - } - [Fact] - public static void CreateSaturatingToUInt512Test() - { - NumberBaseHelper.CreateSaturating(byte.MaxValue).Should().Be(ByteMaxValue); - NumberBaseHelper.CreateSaturating(ushort.MaxValue).Should().Be(UInt16MaxValue); - NumberBaseHelper.CreateSaturating(uint.MaxValue).Should().Be(UInt32MaxValue); - NumberBaseHelper.CreateSaturating(ulong.MaxValue).Should().Be(UInt64MaxValue); - NumberBaseHelper.CreateSaturating(UInt128.MaxValue).Should().Be(UInt128MaxValue); - NumberBaseHelper.CreateSaturating(UInt256.MaxValue).Should().Be(UInt256MaxValue); - NumberBaseHelper - .CreateSaturating(BigInteger.Parse( - "13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095")) - .Should().Be(MaxValue); - NumberBaseHelper.CreateSaturating(MaxValueAsDouble).Should().Be(MaxValue); - - NumberBaseHelper.CreateSaturating(byte.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateSaturating(ushort.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateSaturating(uint.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateSaturating(ulong.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateSaturating(UInt128.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateSaturating(UInt256.MinValue).Should().Be(Zero); - } - [Fact] - public static void CreateTruncatingToUInt512Test() - { - NumberBaseHelper.CreateTruncating(byte.MaxValue).Should().Be(ByteMaxValue); - NumberBaseHelper.CreateTruncating(ushort.MaxValue).Should().Be(UInt16MaxValue); - NumberBaseHelper.CreateTruncating(uint.MaxValue).Should().Be(UInt32MaxValue); - NumberBaseHelper.CreateTruncating(ulong.MaxValue).Should().Be(UInt64MaxValue); - NumberBaseHelper.CreateTruncating(UInt128.MaxValue).Should().Be(UInt128MaxValue); - NumberBaseHelper.CreateTruncating(UInt256.MaxValue).Should().Be(UInt256MaxValue); - NumberBaseHelper - .CreateTruncating(BigInteger.Parse( - "13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095")) - .Should().Be(MaxValue); - NumberBaseHelper.CreateTruncating(MaxValueAsDouble).Should().Be(MaxValue); - - NumberBaseHelper.CreateTruncating(byte.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateTruncating(ushort.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateTruncating(uint.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateTruncating(ulong.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateTruncating(UInt128.MinValue).Should().Be(Zero); - NumberBaseHelper.CreateTruncating(UInt256.MinValue).Should().Be(Zero); - } - - [Fact] - public static void CreateCheckedFromUInt512Test() - { - NumberBaseHelper.CreateChecked(ByteMaxValue).Should().Be(byte.MaxValue); - NumberBaseHelper.CreateChecked(UInt16MaxValue).Should().Be(ushort.MaxValue); - NumberBaseHelper.CreateChecked(UInt32MaxValue).Should().Be(uint.MaxValue); - NumberBaseHelper.CreateChecked(UInt64MaxValue).Should().Be(ulong.MaxValue); - NumberBaseHelper.CreateChecked(UInt128MaxValue).Should().Be(UInt128.MaxValue); - NumberBaseHelper.CreateChecked(UInt256MaxValue).Should().Be(UInt256.MaxValue); - NumberBaseHelper.CreateChecked(MaxValue).Should() - .Be(BigInteger.Parse( - "13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095")); - NumberBaseHelper.CreateChecked(MaxValue).Should().Be(MaxValueAsDouble); - - NumberBaseHelper.CreateChecked(Zero).Should().Be(byte.MinValue); - NumberBaseHelper.CreateChecked(Zero).Should().Be(ushort.MinValue); - NumberBaseHelper.CreateChecked(Zero).Should().Be(uint.MinValue); - NumberBaseHelper.CreateChecked(Zero).Should().Be(ulong.MinValue); - NumberBaseHelper.CreateChecked(Zero).Should().Be(UInt128.MinValue); - NumberBaseHelper.CreateChecked(Zero).Should().Be(UInt256.MinValue); - } - [Fact] - public static void CreateSaturatingFromUInt512Test() - { - NumberBaseHelper.CreateSaturating(ByteMaxValue).Should().Be(byte.MaxValue); - NumberBaseHelper.CreateSaturating(UInt16MaxValue).Should().Be(ushort.MaxValue); - NumberBaseHelper.CreateSaturating(UInt32MaxValue).Should().Be(uint.MaxValue); - NumberBaseHelper.CreateSaturating(UInt64MaxValue).Should().Be(ulong.MaxValue); - NumberBaseHelper.CreateSaturating(UInt128MaxValue).Should().Be(UInt128.MaxValue); - NumberBaseHelper.CreateSaturating(UInt256MaxValue).Should().Be(UInt256.MaxValue); - NumberBaseHelper.CreateSaturating(MaxValue).Should() - .Be(BigInteger.Parse( - "13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095")); - NumberBaseHelper.CreateSaturating(MaxValue).Should().Be(MaxValueAsDouble); - - NumberBaseHelper.CreateSaturating(Zero).Should().Be(byte.MinValue); - NumberBaseHelper.CreateSaturating(Zero).Should().Be(ushort.MinValue); - NumberBaseHelper.CreateSaturating(Zero).Should().Be(uint.MinValue); - NumberBaseHelper.CreateSaturating(Zero).Should().Be(ulong.MinValue); - NumberBaseHelper.CreateSaturating(Zero).Should().Be(UInt128.MinValue); - NumberBaseHelper.CreateSaturating(Zero).Should().Be(UInt256.MinValue); - } - [Fact] - public static void CreateTruncatingFromUInt512Test() - { - NumberBaseHelper.CreateTruncating(ByteMaxValue).Should().Be(byte.MaxValue); - NumberBaseHelper.CreateTruncating(UInt16MaxValue).Should().Be(ushort.MaxValue); - NumberBaseHelper.CreateTruncating(UInt32MaxValue).Should().Be(uint.MaxValue); - NumberBaseHelper.CreateTruncating(UInt64MaxValue).Should().Be(ulong.MaxValue); - NumberBaseHelper.CreateTruncating(UInt128MaxValue).Should().Be(UInt128.MaxValue); - NumberBaseHelper.CreateTruncating(UInt256MaxValue).Should().Be(UInt256.MaxValue); - NumberBaseHelper.CreateTruncating(MaxValue).Should() - .Be(BigInteger.Parse( - "13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095")); - NumberBaseHelper.CreateTruncating(MaxValue).Should().Be(MaxValueAsDouble); - - NumberBaseHelper.CreateTruncating(Zero).Should().Be(byte.MinValue); - NumberBaseHelper.CreateTruncating(Zero).Should().Be(ushort.MinValue); - NumberBaseHelper.CreateTruncating(Zero).Should().Be(uint.MinValue); - NumberBaseHelper.CreateTruncating(Zero).Should().Be(ulong.MinValue); - NumberBaseHelper.CreateTruncating(Zero).Should().Be(UInt128.MinValue); - NumberBaseHelper.CreateTruncating(Zero).Should().Be(UInt256.MinValue); - } - - [Fact] - public static void IsCanonicalTest() - { - NumberBaseHelper.IsCanonical(default(UInt)).Should().BeTrue(); - } - - [Fact] - public static void IsComplexNumberTest() - { - NumberBaseHelper.IsComplexNumber(default(UInt)).Should().BeFalse(); - } - - [Fact] - public static void IsEvenIntegerTest() - { - NumberBaseHelper.IsEvenInteger(One).Should().BeFalse(); - NumberBaseHelper.IsEvenInteger(Two).Should().BeTrue(); - } - - [Fact] - public static void IsFiniteTest() - { - NumberBaseHelper.IsFinite(default(UInt)).Should().BeTrue(); - } - - [Fact] - public static void IsImaginaryNumberTest() - { - NumberBaseHelper.IsImaginaryNumber(default(UInt)).Should().BeFalse(); - } - - [Fact] - public static void IsInfinityTest() - { - NumberBaseHelper.IsInfinity(default(UInt)).Should().BeFalse(); - } - - [Fact] - public static void IsIntegerTest() - { - NumberBaseHelper.IsInteger(default(UInt)).Should().BeTrue(); - } - - [Fact] - public static void IsNaNTest() - { - NumberBaseHelper.IsNaN(default(UInt)).Should().BeFalse(); - } - - [Fact] - public static void IsNegativeTest() - { - NumberBaseHelper.IsNegative(One).Should().BeFalse(); - } - - [Fact] - public static void IsNegativeInfinityTest() - { - NumberBaseHelper.IsNegativeInfinity(One).Should().BeFalse(); - } - - [Fact] - public static void IsNormalTest() - { - NumberBaseHelper.IsNormal(Zero).Should().BeFalse(); - NumberBaseHelper.IsNormal(One).Should().BeTrue(); - } - - [Fact] - public static void IsOddIntegerTest() - { - NumberBaseHelper.IsOddInteger(One).Should().BeTrue(); - NumberBaseHelper.IsOddInteger(Two).Should().BeFalse(); - } - - [Fact] - public static void IsPositiveTest() - { - NumberBaseHelper.IsPositive(One).Should().BeTrue(); - } - - [Fact] - public static void IsPositiveInfinityTest() - { - NumberBaseHelper.IsPositiveInfinity(One).Should().BeFalse(); - } - - [Fact] - public static void IsRealNumberTest() - { - NumberBaseHelper.IsRealNumber(default).Should().BeTrue(); - } - - [Fact] - public static void IsSubnormalTest() - { - NumberBaseHelper.IsSubnormal(default).Should().BeFalse(); - } - - [Fact] - public static void IsZeroTest() - { - NumberBaseHelper.IsZero(default).Should().BeTrue(); - NumberBaseHelper.IsZero(Zero).Should().BeTrue(); - NumberBaseHelper.IsZero(One).Should().BeFalse(); - } - - [Fact] - public static void MaxMagnitudeTest() - { - NumberBaseHelper.MaxMagnitude(MaxValue, Zero).Should().Be(MaxValue); - NumberBaseHelper.MaxMagnitude(One, Zero).Should().Be(One); - NumberBaseHelper.MaxMagnitude(Two, Zero).Should().Be(Two); - } - - [Fact] - public static void MaxMagnitudeNumberTest() - { - NumberBaseHelper.MaxMagnitudeNumber(MaxValue, Zero).Should().Be(MaxValue); - NumberBaseHelper.MaxMagnitudeNumber(One, Zero).Should().Be(One); - NumberBaseHelper.MaxMagnitudeNumber(Two, Zero).Should().Be(Two); - } - - [Fact] - public static void MinMagnitudeTest() - { - NumberBaseHelper.MinMagnitude(MaxValue, MaxValueMinusOne).Should().Be(MaxValueMinusOne); - NumberBaseHelper.MinMagnitude(One, Zero).Should().Be(Zero); - NumberBaseHelper.MinMagnitude(Two, Zero).Should().Be(Zero); - } - - [Fact] - public static void MinMagnitudeNumberTest() - { - NumberBaseHelper.MinMagnitudeNumber(MaxValue, MaxValueMinusOne).Should().Be(MaxValueMinusOne); - NumberBaseHelper.MinMagnitudeNumber(One, Zero).Should().Be(Zero); - NumberBaseHelper.MinMagnitudeNumber(Two, Zero).Should().Be(Zero); - } - - [Fact] - public void ParseTest() - { - NumberBaseHelper.Parse("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095", System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture) - .Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - NumberBaseHelper.Parse("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture) - .Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - NumberBaseHelper.Parse(MaxValueBin, System.Globalization.NumberStyles.BinaryNumber, CultureInfo.CurrentCulture) - .Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - - Assert.Throws(() => NumberBaseHelper.Parse("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096", System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture)); - } - - [Fact] - public void TryParseTest() - { - NumberBaseHelper.TryParse("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095", System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture, out UInt parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - NumberBaseHelper.TryParse("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - NumberBaseHelper.TryParse(MaxValueBin, System.Globalization.NumberStyles.BinaryNumber, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - - NumberBaseHelper.TryParse("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096", System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeFalse(); - parsedValue.Should().Be(default); - } - - [Fact] - public void ParseUtf8Test() - { - NumberBaseHelper.Parse("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095"u8, System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture) - .Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - NumberBaseHelper.Parse("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8, System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture) - .Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - NumberBaseHelper.Parse(MaxValueBinUtf8, System.Globalization.NumberStyles.BinaryNumber, CultureInfo.CurrentCulture) - .Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - - Assert.Throws(() => NumberBaseHelper.Parse("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096"u8, System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture)); - } - - [Fact] - public void TryParseUtf8Test() - { - NumberBaseHelper.TryParse("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095"u8, System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture, out UInt parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - NumberBaseHelper.TryParse("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8, System.Globalization.NumberStyles.HexNumber, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - NumberBaseHelper.TryParse(MaxValueBinUtf8, System.Globalization.NumberStyles.BinaryNumber, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeTrue(); - parsedValue.Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - - NumberBaseHelper.TryParse("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096"u8, System.Globalization.NumberStyles.Integer, CultureInfo.CurrentCulture, out parsedValue) - .Should().BeFalse(); - parsedValue.Should().Be(default); - } - #endregion - - #region IPowerFunctions - [Fact] - public void PowTest() - { - GenericFloatingPointFunctions.Pow(Zero, (uint)int.MaxValue).Should().Be(Zero); - GenericFloatingPointFunctions.Pow(One, (uint)int.MaxValue).Should().Be(One); - GenericFloatingPointFunctions.Pow(MaxValue, Zero).Should().Be(One); - GenericFloatingPointFunctions.Pow(MaxValue, One).Should().Be(MaxValue); - GenericFloatingPointFunctions.Pow(Two, Two).Should().Be(4); - GenericFloatingPointFunctions.Pow(Two, 4U).Should().Be(16); - GenericFloatingPointFunctions.Pow(16U, Two).Should().Be(256); - GenericFloatingPointFunctions.Pow(Two, 511U) - .Should().Be(new UInt( - 0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, - 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); - - Assert.Throws(() => GenericFloatingPointFunctions.Pow(Two, 512U)); - Assert.Throws(() => GenericFloatingPointFunctions.Pow(Two + Two, 511U)); - } - #endregion - } -} diff --git a/src/MissingValues.Tests.Old/Core/UInt512Test.cs b/src/MissingValues.Tests.Old/Core/UInt512Test.cs deleted file mode 100644 index f1f8110..0000000 --- a/src/MissingValues.Tests.Old/Core/UInt512Test.cs +++ /dev/null @@ -1,259 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Numerics; -using System.Text; -using System.Text.Json; -using System.Text.Unicode; -using System.Threading.Tasks; - -using UInt = MissingValues.UInt512; - -namespace MissingValues.Tests.Core -{ - public partial class UInt512Test - { - [Fact] - public void Cast_ToByte() - { - byte.MinValue.Should().Be((byte)Zero); - byte.MaxValue.Should().Be((byte)ByteMaxValue); - } - - [Fact] - public void Cast_ToUInt16() - { - ushort.MinValue.Should().Be((ushort)Zero); - ushort.MaxValue.Should().Be((ushort)UInt16MaxValue); - } - - [Fact] - public void Cast_ToUInt32() - { - uint.MinValue.Should().Be((uint)Zero); - uint.MaxValue.Should().Be((uint)UInt32MaxValue); - } - - [Fact] - public void Cast_ToUInt64() - { - ulong.MinValue.Should().Be((ulong)Zero); - ulong.MaxValue.Should().Be((ulong)UInt64MaxValue); - } - - [Fact] - public void Cast_ToUInt128() - { - UInt128.MinValue.Should().Be((UInt128)Zero); - UInt128.MaxValue.Should().Be((UInt128)UInt128MaxValue); - } - - [Fact] - public void Cast_ToUInt256() - { - UInt256.MinValue.Should().Be((UInt256)Zero); - UInt256.MaxValue.Should().Be((UInt256)UInt256MaxValue); - } - - [Fact] - public void Cast_ToBigInteger() - { - BigInteger.One.Should().Be((BigInteger)One); - BigInteger.Parse("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095") - .Should().Be((BigInteger)MaxValue); - } - - [Fact] - public void Cast_ToDouble() - { - // Test a UInt256Converter value where _upper is 0 - UInt value1 = new UInt(UInt256.MaxValue); - double exp1 = System.Math.Round((double)UInt256.MaxValue, 5); - double act1 = System.Math.Round((double)value1, 5); - double diff1 = System.Math.Abs(exp1 * 0.00000000001); - Assert.True(System.Math.Abs(exp1 - act1) <= diff1); - - - // Test a UInt256Converter value where _upper is not 0 - UInt value2 = new UInt(UInt256.MaxValue, UInt256.MaxValue); - double exp2 = System.Math.Round(((double)UInt256.MaxValue) * System.Math.Pow(2.0, 256), 5); - double act2 = System.Math.Round((double)value2, 5); - double diff2 = System.Math.Abs(exp2 * 0.00000000001); - Assert.True(System.Math.Abs(exp2 - act2) <= diff2); - } - - [Fact] - public void BigMulTest() - { - UInt upper = UInt.BigMul(MaxValue, Two, out UInt lower); - - upper - .Should() - .Be(new(0x1)); - lower - .Should() - .Be(new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE)); - } - - [Fact] - public void Internal_DivRemTest() - { - const long Left = 101_000_000_000; - const long Right = 10_000_000_000; - const long Quotient = 10; - const long Remainder = 1_000_000_000; - - UInt a = Left; - UInt b = Right; - - UInt.DivRem(in a, in b, out UInt quotient, out UInt remainder); - - quotient.Should().Be(Quotient); - remainder.Should().Be(Remainder); - - UInt.DivRem(in a, in b, out a, out remainder); - - a.Should().Be(Quotient); - remainder.Should().Be(Remainder); - - UInt.DivRem(Left, in b, out quotient, out b); - - quotient.Should().Be(Quotient); - b.Should().Be(Remainder); - } - - [Fact] - public void BasicParseTest() - { - UInt.Parse("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095") - .Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - } - - [Fact] - public void BasicTryParseTest() - { - UInt.TryParse("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095", out UInt parsedValue).Should().BeTrue(); - parsedValue.Should().Be(MaxValue) - .And.BeRankedEquallyTo(MaxValue); - } - - [Fact] - public void ToDecStringTest() - { - Zero.ToString("D", CultureInfo.CurrentCulture) - .Should().Be("0"); - MaxValue.ToString("D", CultureInfo.CurrentCulture) - .Should().Be("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095"); - } - [Fact] - public void ToHexStringTest() - { - One.ToString("X", CultureInfo.CurrentCulture) - .Should().Be("1"); - ((UInt)byte.MaxValue).ToString("X", CultureInfo.CurrentCulture) - .Should().Be("FF"); - ((UInt)ushort.MaxValue).ToString("X", CultureInfo.CurrentCulture) - .Should().Be("FFFF"); - ((UInt)uint.MaxValue).ToString("X", CultureInfo.CurrentCulture) - .Should().Be("FFFFFFFF"); - ((UInt)ulong.MaxValue).ToString("X", CultureInfo.CurrentCulture) - .Should().Be("FFFFFFFFFFFFFFFF"); - ((UInt)UInt128.MaxValue).ToString("X", CultureInfo.CurrentCulture) - .Should().Be("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"); - - Zero.ToString("X128", CultureInfo.CurrentCulture) - .Should().Be("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"); - MaxValue.ToString("x128", CultureInfo.CurrentCulture) - .Should().Be("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); - MaxValue.ToString("X128", CultureInfo.CurrentCulture) - .Should().Be("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"); - } - [Fact] - public void ToBinStringTest() - { - One.ToString("B", CultureInfo.CurrentCulture) - .Should().Be("1"); - ((UInt)byte.MaxValue).ToString("B", CultureInfo.CurrentCulture) - .Should().Be("11111111"); - ((UInt)ushort.MaxValue).ToString("B", CultureInfo.CurrentCulture) - .Should().Be("1111111111111111"); - ((UInt)uint.MaxValue).ToString("B", CultureInfo.CurrentCulture) - .Should().Be("11111111111111111111111111111111"); - ((UInt)ulong.MaxValue).ToString("B", CultureInfo.CurrentCulture) - .Should().Be("1111111111111111111111111111111111111111111111111111111111111111"); - ((UInt)UInt128.MaxValue).ToString("B", CultureInfo.CurrentCulture) - .Should().Be("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"); - - Zero.ToString("B512", CultureInfo.CurrentCulture) - .Should() - .Be("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"); - MaxValue.ToString("B512", CultureInfo.CurrentCulture) - .Should() - .Be("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"); - } - - [Fact] - public void ToDecFormatStringTest() - { - MaxValue.ToString().Should().Be($"{MaxValue:D}"); - } - [Fact] - public void ToHexFormatStringTest() - { - MaxValue.ToString("X128", CultureInfo.CurrentCulture).Should().Be($"{MaxValue:X128}"); - } - [Fact] - public void ToBinFormatStringTest() - { - MaxValue.ToString("B512", CultureInfo.CurrentCulture).Should().Be($"{MaxValue:B512}"); - } - - [Fact] - public void ToDecFormatUtf8StringTest() - { - ReadOnlySpan toString = Encoding.UTF8.GetBytes(MaxValue.ToString()!); - - Span format = stackalloc byte[toString.Length]; - bool success = Utf8.TryWrite(format, CultureInfo.CurrentCulture, $"{MaxValue:D}", out _); - Assert.Equal(toString, format); - success.Should().BeTrue(); - } - [Fact] - public void ToHexFormatUtf8StringTest() - { - ReadOnlySpan toString = Encoding.UTF8.GetBytes(MaxValue.ToString("X128", CultureInfo.CurrentCulture)!); - - Span format = stackalloc byte[toString.Length]; - bool success = Utf8.TryWrite(format, CultureInfo.CurrentCulture, $"{MaxValue:X128}", out _); - Assert.Equal(toString, format); - success.Should().BeTrue(); - } - [Fact] - public void ToBinFormatUtf8StringTest() - { - ReadOnlySpan toString = Encoding.UTF8.GetBytes(MaxValue.ToString("B512", CultureInfo.CurrentCulture)!); - - Span format = stackalloc byte[toString.Length]; - bool success = Utf8.TryWrite(format, CultureInfo.CurrentCulture, $"{MaxValue:B512}", out _); - Assert.Equal(toString, format); - success.Should().BeTrue(); - } - - [Fact] - public void JsonWriteTest() - { - JsonSerializer.Serialize(new object[] { MaxValue, Zero, One }) - .Should().Be("[13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095,0,1]"); - } - [Fact] - public void JsonReadTest() - { - JsonSerializer.Deserialize("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095") - .Should().Be(MaxValue); - JsonSerializer.Deserialize("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095"u8) - .Should().Be(MaxValue); - } - } -} diff --git a/src/MissingValues.Tests.Old/Helpers/BinaryIntegerHelper.cs b/src/MissingValues.Tests.Old/Helpers/BinaryIntegerHelper.cs deleted file mode 100644 index 5bd3a0c..0000000 --- a/src/MissingValues.Tests.Old/Helpers/BinaryIntegerHelper.cs +++ /dev/null @@ -1,75 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; - -namespace MissingValues.Tests.Helpers -{ - internal static class BinaryIntegerHelper - where TSelf : IBinaryInteger - { - /// - public static (TSelf Quotient, TSelf Remainder) DivRem(TSelf left, TSelf right) - { - return TSelf.DivRem(left, right); - } - /// - public static TSelf LeadingZeroCount(TSelf value) - { - return TSelf.LeadingZeroCount(value); - } - /// - public static TSelf PopCount(TSelf value) - { - return TSelf.PopCount(value); - } - /// - public static TSelf RotateLeft(TSelf value, int rotateAmount) - { - return TSelf.RotateLeft(value, rotateAmount); - } - /// - public static TSelf RotateRight(TSelf value, int rotateAmount) - { - return TSelf.RotateRight(value, rotateAmount); - } - /// - public static TSelf TrailingZeroCount(TSelf value) - { - return TSelf.TrailingZeroCount(value); - } - /// - public static bool TryReadBigEndian(ReadOnlySpan source, bool isUnsigned, out TSelf value) - { - return TSelf.TryReadBigEndian(source, isUnsigned, out value); - } - /// - public static bool TryReadLittleEndian(ReadOnlySpan source, bool isUnsigned, out TSelf value) - { - return TSelf.TryReadLittleEndian(source, isUnsigned, out value); - } - /// - public static int GetByteCount(TSelf value) - { - return value.GetByteCount(); - } - /// - public static int GetShortestBitLength(TSelf value) - { - return value.GetShortestBitLength(); - } - /// - public static bool TryWriteBigEndian(TSelf value, Span destination, out int bytesWritten) - { - return value.TryWriteBigEndian(destination, out bytesWritten); - } - /// - public static bool TryWriteLittleEndian(TSelf value, Span destination, out int bytesWritten) - { - return value.TryWriteLittleEndian(destination, out bytesWritten); - } - - } -} diff --git a/src/MissingValues.Tests.Old/Helpers/BinaryNumberHelper.cs b/src/MissingValues.Tests.Old/Helpers/BinaryNumberHelper.cs deleted file mode 100644 index b182c62..0000000 --- a/src/MissingValues.Tests.Old/Helpers/BinaryNumberHelper.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; - -namespace MissingValues.Tests.Helpers -{ - internal static class BinaryNumberHelper - where TSelf : IBinaryNumber - { - /// - public static TSelf AllBitsSet => TSelf.AllBitsSet; - /// - public static bool IsPow2(TSelf value) => TSelf.IsPow2(value); - /// - public static TSelf Log2(TSelf value) => TSelf.Log2(value); - } -} diff --git a/src/MissingValues.Tests.Old/Helpers/FloatingPoint.cs b/src/MissingValues.Tests.Old/Helpers/FloatingPoint.cs deleted file mode 100644 index 14ec260..0000000 --- a/src/MissingValues.Tests.Old/Helpers/FloatingPoint.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; - -namespace MissingValues.Tests.Helpers -{ - internal static class FloatingPoint - where TSelf : IFloatingPoint - { - /// - public static TSelf Ceiling(TSelf x) => TSelf.Ceiling(x); - /// - public static TSelf Floor(TSelf x) => TSelf.Floor(x); - /// - public static TSelf Round(TSelf x) => TSelf.Round(x); - /// - public static TSelf Round(TSelf x, int digits) => TSelf.Round(x, digits); - /// - public static TSelf Round(TSelf x, MidpointRounding mode) => TSelf.Round(x, mode); - /// - public static TSelf Round(TSelf x, int digits, MidpointRounding mode) => TSelf.Round(x, digits, mode); - /// - public static TSelf Truncate(TSelf x) => TSelf.Truncate(x); - /// - public static int GetExponentByteCount(TSelf x) => x.GetExponentByteCount(); - /// - public static int GetExponentShortestBitLength(TSelf x) => x.GetExponentShortestBitLength(); - /// - public static int GetSignificandBitLength(TSelf x) => x.GetSignificandBitLength(); - /// - public static int GetSignificandByteCount(TSelf x) => x.GetSignificandByteCount(); - public static bool TryWriteExponentBigEndian(TSelf x, Span destination, out int bytesWritten) => x.TryWriteExponentBigEndian(destination, out bytesWritten); - public static bool TryWriteExponentLittleEndian(TSelf x, Span destination, out int bytesWritten) => x.TryWriteExponentLittleEndian(destination, out bytesWritten); - public static bool TryWriteSignificandBigEndian(TSelf x, Span destination, out int bytesWritten) => x.TryWriteSignificandBigEndian(destination, out bytesWritten); - public static bool TryWriteSignificandLittleEndian(TSelf x, Span destination, out int bytesWritten) => x.TryWriteSignificandLittleEndian(destination, out bytesWritten); - public static int WriteExponentBigEndian(TSelf x, byte[] destination) => x.WriteExponentBigEndian(destination); - public static int WriteExponentBigEndian(TSelf x, byte[] destination, int startIndex) => x.WriteExponentBigEndian(destination, startIndex); - public static int WriteExponentBigEndian(TSelf x, Span destination) => x.WriteExponentBigEndian(destination); - public static int WriteExponentLittleEndian(TSelf x, byte[] destination) => x.WriteExponentLittleEndian(destination); - public static int WriteExponentLittleEndian(TSelf x, byte[] destination, int startIndex) => x.WriteExponentLittleEndian(destination, startIndex); - public static int WriteExponentLittleEndian(TSelf x, Span destination) => x.WriteExponentLittleEndian(destination); - public static int WriteSignificandBigEndian(TSelf x, byte[] destination) => x.WriteSignificandBigEndian(destination); - public static int WriteSignificandBigEndian(TSelf x, byte[] destination, int startIndex) => x.WriteSignificandBigEndian(destination, startIndex); - public static int WriteSignificandBigEndian(TSelf x, Span destination) => x.WriteSignificandBigEndian(destination); - public static int WriteSignificandLittleEndian(TSelf x, byte[] destination) => x.WriteSignificandLittleEndian(destination); - public static int WriteSignificandLittleEndian(TSelf x, byte[] destination, int startIndex) => x.WriteSignificandLittleEndian(destination, startIndex); - public static int WriteSignificandLittleEndian(TSelf x, Span destination) => x.WriteSignificandLittleEndian(destination); - } -} diff --git a/src/MissingValues.Tests.Old/Helpers/FloatingPointIeee754.cs b/src/MissingValues.Tests.Old/Helpers/FloatingPointIeee754.cs deleted file mode 100644 index 60a45d9..0000000 --- a/src/MissingValues.Tests.Old/Helpers/FloatingPointIeee754.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; - -namespace MissingValues.Tests.Helpers -{ - internal static class FloatingPointIeee754 - where TSelf : IFloatingPointIeee754 - { - public static TSelf Epsilon => TSelf.Epsilon; - public static TSelf NaN => TSelf.NaN; - public static TSelf NegativeInfinity => TSelf.NegativeInfinity; - public static TSelf NegativeZero => TSelf.NegativeZero; - public static TSelf PositiveInfinity => TSelf.PositiveInfinity; - public static TSelf Atan2(TSelf y, TSelf x) => TSelf.Atan2(y, x); - public static TSelf Atan2Pi(TSelf y, TSelf x) => TSelf.Atan2Pi(y, x); - public static TSelf BitDecrement(TSelf x) => TSelf.BitDecrement(x); - public static TSelf BitIncrement(TSelf x) => TSelf.BitIncrement(x); - public static TSelf FusedMultiplyAdd(TSelf left, TSelf right, TSelf addend) => TSelf.FusedMultiplyAdd(left, right, addend); - public static TSelf Ieee754Remainder(TSelf left, TSelf right) => TSelf.Ieee754Remainder(left, right); - public static int ILogB(TSelf x) => TSelf.ILogB(x); - public static TSelf ReciprocalEstimate(TSelf x) => TSelf.ReciprocalEstimate(x); - public static TSelf ReciprocalSqrtEstimate(TSelf x) => TSelf.ReciprocalSqrtEstimate(x); - public static TSelf ScaleB(TSelf x, int n) => TSelf.ScaleB(x, n); - } -} diff --git a/src/MissingValues.Tests.Old/Helpers/FluentAssertionsExtensions.cs b/src/MissingValues.Tests.Old/Helpers/FluentAssertionsExtensions.cs deleted file mode 100644 index 5c2c878..0000000 --- a/src/MissingValues.Tests.Old/Helpers/FluentAssertionsExtensions.cs +++ /dev/null @@ -1,247 +0,0 @@ -using FluentAssertions.Execution; -using FluentAssertions.Numeric; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.Versioning; -using System.Text; -using System.Threading.Tasks; - -namespace MissingValues.Tests.Helpers -{ - public static class FluentAssertionsExtensions - { - private class QuadAssertions : NumericAssertions - { - internal QuadAssertions(Quad value) - : base(value) - { - } - } - private class NullableQuadAssertions : NullableNumericAssertions - { - internal NullableQuadAssertions(Quad? value) - : base(value) - { - } - } - private class OctoAssertions : NumericAssertions - { - internal OctoAssertions(Octo value) - : base(value) - { - } - } - private class NullableOctoAssertions : NullableNumericAssertions - { - internal NullableOctoAssertions(Octo? value) - : base(value) - { - } - } - - public static NumericAssertions Should(this Quad actualValue) - { - return new QuadAssertions(actualValue); - } - public static NullableNumericAssertions Should(this Quad? actualValue) - { - return new NullableQuadAssertions(actualValue); - } - public static NumericAssertions Should(this Octo actualValue) - { - return new OctoAssertions(actualValue); - } - public static NullableNumericAssertions Should(this Octo? actualValue) - { - return new NullableOctoAssertions(actualValue); - } - - public static AndConstraint> BeApproximately(this NumericAssertions parent, Quad expectedValue, Quad precision, string because = "", params object[] becauseArgs) - { - if (Quad.IsNaN(expectedValue)) - { - throw new ArgumentException("Cannot determine approximation of a Quad to NaN", nameof(expectedValue)); - } - if (Quad.IsNegative(precision)) - { - throw new ArgumentException("Cannot determine precision of a Quad if its negative", nameof(expectedValue)); - } - - if (Quad.IsPositiveInfinity(expectedValue)) - { - FailIfDifferenceOutsidePrecision(Quad.IsPositiveInfinity(parent.Subject.Value), parent, expectedValue, precision, - Quad.NaN, because, becauseArgs); - } - else if (Quad.IsNegativeInfinity(expectedValue)) - { - FailIfDifferenceOutsidePrecision(Quad.IsNegativeInfinity(parent.Subject.Value), parent, expectedValue, precision, - Quad.NaN, because, becauseArgs); - } - else - { - Quad actualDifference = Quad.Abs(expectedValue - parent.Subject.Value); - - FailIfDifferenceOutsidePrecision(actualDifference <= precision, parent, expectedValue, precision, actualDifference, because, becauseArgs); - } - - return new AndConstraint>(parent); - } - public static AndConstraint> BeApproximately(this NumericAssertions parent, Octo expectedValue, Octo precision, string because = "", params object[] becauseArgs) - { - if (Octo.IsNaN(expectedValue)) - { - throw new ArgumentException("Cannot determine approximation of a Quad to NaN", nameof(expectedValue)); - } - if (Octo.IsNegative(precision)) - { - throw new ArgumentException("Cannot determine precision of a Quad if its negative", nameof(expectedValue)); - } - - if (Octo.IsPositiveInfinity(expectedValue)) - { - FailIfDifferenceOutsidePrecision(Octo.IsPositiveInfinity(parent.Subject.Value), parent, expectedValue, precision, - Octo.NaN, because, becauseArgs); - } - else if (Octo.IsNegativeInfinity(expectedValue)) - { - FailIfDifferenceOutsidePrecision(Octo.IsNegativeInfinity(parent.Subject.Value), parent, expectedValue, precision, - Octo.NaN, because, becauseArgs); - } - else - { - Octo actualDifference = Octo.Abs(expectedValue - parent.Subject.Value); - - FailIfDifferenceOutsidePrecision(actualDifference <= precision, parent, expectedValue, precision, actualDifference, because, becauseArgs); - } - - return new AndConstraint>(parent); - } - - public static AndConstraint> BeNaN(this NumericAssertions parent, string because = "", params object[] becauseArgs) - { - bool condition = Quad.IsNaN(parent.Subject!.Value); - - Execute.Assertion - .ForCondition(condition) - .BecauseOf(because, becauseArgs) - .FailWith("Expected {context:object} to be {0}.", Quad.NaN); - - return new AndConstraint>(parent); - } - public static AndConstraint> BeNaN(this NumericAssertions parent, string because = "", params object[] becauseArgs) - { - bool condition = Octo.IsNaN(parent.Subject!.Value); - - Execute.Assertion - .ForCondition(condition) - .BecauseOf(because, becauseArgs) - .FailWith("Expected {context:object} to be {0}.", Octo.NaN); - - return new AndConstraint>(parent); - } - - private static void FailIfDifferenceOutsidePrecision( - bool differenceWithinPrecision, - NumericAssertions parent, T expectedValue, T precision, T actualDifference, - string because, object[] becauseArgs) - where T : struct, IComparable - { - Execute.Assertion - .ForCondition(differenceWithinPrecision) - .BecauseOf(because, becauseArgs) - .FailWith("Expected {context:value} to approximate {1} +/- {2}{reason}, but {0} differed by {3}.", - parent.Subject, expectedValue, precision, actualDifference); - } - - public static AndConstraint> BeBitwiseEquivalentTo(this NumericAssertions> assertions, Quad expected, string because = "", params object[] becauseArgs) - { - bool condition; - - Quad actualValue = assertions.Subject is null ? default : (Quad)assertions.Subject; - - if (Quad.IsNaN(actualValue) && Quad.IsNaN(expected)) - { - condition = true; - } - else - { - condition = Equals(Quad.QuadToUInt128Bits(actualValue), Quad.QuadToUInt128Bits(expected)); - } - - Execute.Assertion - .ForCondition(condition) - .BecauseOf(because, becauseArgs) - .FailWith("Expected {context:object} to be equal to {0}{reason}, but found {1}.", expected, assertions.Subject); - - return new AndConstraint>((NumericAssertions)assertions); - } - public static AndConstraint> BeBitwiseEquivalentTo(this NumericAssertions> assertions, Octo expected, string because = "", params object[] becauseArgs) - { - bool condition; - - Octo actualValue = assertions.Subject is null ? default : (Octo)assertions.Subject; - - if (Octo.IsNaN(actualValue) && Octo.IsNaN(expected)) - { - condition = true; - } - else - { - condition = Equals(Octo.OctoToUInt256Bits(actualValue), Octo.OctoToUInt256Bits(expected)); - } - - Execute.Assertion - .ForCondition(condition) - .BecauseOf(because, becauseArgs) - .FailWith("Expected {context:object} to be equal to {0}{reason}, but found {1}.", expected, assertions.Subject); - - return new AndConstraint>((NumericAssertions)assertions); - } - - public static AndConstraint> NotBeBitwiseEquivalentTo(this NumericAssertions> assertions, Quad expected, string because = "", params object[] becauseArgs) - { - bool condition; - - Quad actualValue = assertions.Subject is null ? default : (Quad)assertions.Subject; - - if (Quad.IsNaN(actualValue) && Quad.IsNaN(expected)) - { - condition = true; - } - else - { - condition = Equals(Quad.QuadToUInt128Bits(actualValue), Quad.QuadToUInt128Bits(expected)); - } - - Execute.Assertion - .ForCondition(!condition) - .BecauseOf(because, becauseArgs) - .FailWith("Expected {context:object} to be equal to {0}{reason}, but found {1}.", expected, assertions.Subject); - - return new AndConstraint>((NumericAssertions)assertions); - } - public static AndConstraint> NotBeBitwiseEquivalentTo(this NumericAssertions> assertions, Octo expected, string because = "", params object[] becauseArgs) - { - bool condition; - - Octo actualValue = assertions.Subject is null ? default : (Octo)assertions.Subject; - - if (Octo.IsNaN(actualValue) && Octo.IsNaN(expected)) - { - condition = true; - } - else - { - condition = Equals(Octo.OctoToUInt256Bits(actualValue), Octo.OctoToUInt256Bits(expected)); - } - - Execute.Assertion - .ForCondition(!condition) - .BecauseOf(because, becauseArgs) - .FailWith("Expected {context:object} to be equal to {0}{reason}, but found {1}.", expected, assertions.Subject); - - return new AndConstraint>((NumericAssertions)assertions); - } - } -} diff --git a/src/MissingValues.Tests.Old/Helpers/GenericFloatingPointFunctions.cs b/src/MissingValues.Tests.Old/Helpers/GenericFloatingPointFunctions.cs deleted file mode 100644 index 7477cbf..0000000 --- a/src/MissingValues.Tests.Old/Helpers/GenericFloatingPointFunctions.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; - -namespace MissingValues.Tests.Helpers -{ - internal static class GenericFloatingPointFunctions - { - public static T Acos(T x) where T : ITrigonometricFunctions => T.Acos(x); - public static T Acosh(T x) where T : IHyperbolicFunctions => T.Acosh(x); - public static T AcosPi(T x) where T : ITrigonometricFunctions => T.AcosPi(x); - public static T Asin(T x) where T : ITrigonometricFunctions => T.Asin(x); - public static T Asinh(T x) where T : IHyperbolicFunctions => T.Asinh(x); - public static T AsinPi(T x) where T : ITrigonometricFunctions => T.AsinPi(x); - public static T Atan(T x) where T : ITrigonometricFunctions => T.Atan(x); - public static T AtanPi(T x) where T : ITrigonometricFunctions => T.AtanPi(x); - public static T Atanh(T x) where T : IHyperbolicFunctions => T.Atanh(x); - public static T Cbrt(T x) where T : IRootFunctions => T.Cbrt(x); - public static T Cos(T x) where T : ITrigonometricFunctions => T.Cos(x); - public static T Cosh(T x) where T : IHyperbolicFunctions => T.Cosh(x); - public static T CosPi(T x) where T : ITrigonometricFunctions => T.CosPi(x); - public static T Exp(T x) where T : IExponentialFunctions => T.Exp(x); - public static T ExpM1(T x) where T : IExponentialFunctions => T.ExpM1(x); - public static T Exp2(T x) where T : IExponentialFunctions => T.Exp2(x); - public static T Exp2M1(T x) where T : IExponentialFunctions => T.Exp2M1(x); - public static T Exp10(T x) where T : IExponentialFunctions => T.Exp10(x); - public static T Exp10M1(T x) where T : IExponentialFunctions => T.Exp10M1(x); - public static T Hypot(T x, T y) where T : IRootFunctions => T.Hypot(x, y); - public static T Log(T x) where T : ILogarithmicFunctions => T.Log(x); - public static T Log(T x, T newBase) where T : ILogarithmicFunctions => T.Log(x, newBase); - public static T LogP1(T x) where T : ILogarithmicFunctions => T.LogP1(x); - public static T Log2(T x) where T : ILogarithmicFunctions => T.Log2(x); - public static T Log2P1(T x) where T : ILogarithmicFunctions => T.Log2P1(x); - public static T Log10(T x) where T : ILogarithmicFunctions => T.Log10(x); - public static T Log10P1(T x) where T : ILogarithmicFunctions => T.Log10P1(x); - public static T Pow(T x, T y) where T : IPowerFunctions => T.Pow(x, y); - public static T RootN(T x, int y) where T : IRootFunctions => T.RootN(x, y); - public static T Sin(T x) where T : ITrigonometricFunctions => T.Sin(x); - public static (T Sin, T Cos) SinCos(T x) where T : ITrigonometricFunctions => T.SinCos(x); - public static (T Sin, T Cos) SinCosPi(T x) where T : ITrigonometricFunctions => T.SinCosPi(x); - public static T Sinh(T x) where T : IHyperbolicFunctions => T.Sinh(x); - public static T SinPi(T x) where T : ITrigonometricFunctions => T.SinPi(x); - public static T Sqrt(T x) where T : IRootFunctions => T.Sqrt(x); - public static T Tan(T x) where T : ITrigonometricFunctions => T.Tan(x); - public static T Tanh(T x) where T : IHyperbolicFunctions => T.Tanh(x); - public static T TanPi(T x) where T : ITrigonometricFunctions => T.TanPi(x); - } -} diff --git a/src/MissingValues.Tests.Old/Helpers/GenericMathOperatorsHelper.cs b/src/MissingValues.Tests.Old/Helpers/GenericMathOperatorsHelper.cs deleted file mode 100644 index 3d49662..0000000 --- a/src/MissingValues.Tests.Old/Helpers/GenericMathOperatorsHelper.cs +++ /dev/null @@ -1,198 +0,0 @@ -using Microsoft.VisualStudio.TestPlatform.ObjectModel; -using System; -using System.Collections.Generic; -using System.Diagnostics.Contracts; -using System.Linq; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; - -namespace MissingValues.Tests.Helpers -{ - internal static class MathOperatorsHelper - { - public static TResult AdditionOperation(TSelf left, TOther right) - where TSelf : IAdditionOperators - { - return left + right; - } - public static TResult CheckedAdditionOperation(TSelf left, TOther right) - where TSelf : IAdditionOperators - { - return checked(left + right); - } - - public static TSelf IncrementOperation(TSelf value) - where TSelf : IIncrementOperators - { - return ++value; - } - public static TSelf CheckedIncrementOperation(TSelf value) - where TSelf : IIncrementOperators - { - return checked(++value); - } - - public static TResult UnaryPlusOperation(TSelf value) - where TSelf : IUnaryPlusOperators - { - return +value; - } - public static TResult CheckedUnaryPlusOperation(TSelf value) - where TSelf : IUnaryPlusOperators - { - return checked(+value); - } - - public static TResult UnaryNegationOperation(TSelf value) - where TSelf : IUnaryNegationOperators - { - return -value; - } - public static TResult CheckedUnaryNegationOperation(TSelf value) - where TSelf : IUnaryNegationOperators - { - return checked(-value); - } - - public static TResult SubtractionOperation(TSelf left, TOther right) - where TSelf : ISubtractionOperators - { - return left - right; - } - public static TResult CheckedSubtractionOperation(TSelf left, TOther right) - where TSelf : ISubtractionOperators - { - return checked(left - right); - } - - public static TSelf DecrementOperation(TSelf value) - where TSelf : IDecrementOperators - { - return --value; - } - public static TSelf CheckedDecrementOperation(TSelf value) - where TSelf : IDecrementOperators - { - return checked(--value); - } - - public static TResult MultiplicationOperation(TSelf left, TOther right) - where TSelf : IMultiplyOperators - { - return left * right; - } - public static TResult CheckedMultiplicationOperation(TSelf left, TOther right) - where TSelf : IMultiplyOperators - { - return checked(left * right); - } - - public static TResult DivisionOperation(TSelf left, TOther right) - where TSelf : IDivisionOperators - { - return left / right; - } - public static TResult CheckedDivisionOperation(TSelf left, TOther right) - where TSelf : IDivisionOperators - { - return checked(left / right); - } - - public static TResult ModulusOperation(TSelf left, TOther right) - where TSelf : IModulusOperators - { - return left % right; - } - } - - internal static class ComparisonOperatorsHelper - where TSelf : IComparisonOperators - { - public static TResult GreaterThanOperation(TSelf left, TOther right) - { - return left > right; - } - public static TResult GreaterThanOrEqualOperation(TSelf left, TOther right) - { - return left >= right; - } - public static TResult LessThanOperation(TSelf left, TOther right) - { - return left < right; - } - public static TResult LessThanOrEqualOperation(TSelf left, TOther right) - { - return left <= right; - } - } - - internal static class EqualityOperatorsHelper - where TSelf : IEqualityOperators - { - public static TResult EqualityOperation(TSelf left, TOther right) - { - return left == right; - } - public static TResult InequalityOperation(TSelf left, TOther right) - { - return left != right; - } - } - - internal static class BitwiseOperatorsHelper - where TSelf : IBitwiseOperators - { - public static TResult BitwiseAndOperation(TSelf left, TOther right) - { - return left & right; - } - public static TResult BitwiseOrOperation(TSelf left, TOther right) - { - return left | right; - } - public static TResult ExclusiveOrOperation(TSelf left, TOther right) - { - return left ^ right; - } - public static TResult OnesComplementOperation(TSelf value) - { - return ~value; - } - } - internal static class ShiftOperatorsHelper - where TSelf : IShiftOperators - { - public static TResult LeftShiftOperation(TSelf value, TOther shiftAmount) - { - return value << shiftAmount; - } - public static TResult RightShiftOperation(TSelf value, TOther shiftAmount) - { - return value >> shiftAmount; - } - public static TResult UnsignedRightShiftOperation(TSelf value, TOther shiftAmount) - { - return value >>> shiftAmount; - } - } - - internal static class UnaryOperatorsHelper - { - public static TResult UnaryPlusOperation(TSelf value) - where TSelf : IUnaryPlusOperators - { - return +value; - } - public static TResult UnaryNegationOperation(TSelf value) - where TSelf : IUnaryNegationOperators - { - return -value; - } - public static TResult CheckedUnaryNegationOperation(TSelf value) - where TSelf : IUnaryNegationOperators - { - return checked(-value); - } - } -} diff --git a/src/MissingValues.Tests.Old/Helpers/MathConstantsHelper.cs b/src/MissingValues.Tests.Old/Helpers/MathConstantsHelper.cs deleted file mode 100644 index f9e9a7f..0000000 --- a/src/MissingValues.Tests.Old/Helpers/MathConstantsHelper.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; - -namespace MissingValues.Tests.Helpers -{ - internal static class MathConstantsHelper - { - /// - public static TResult AdditiveIdentityHelper() - where TSelf : IAdditiveIdentity - { - return TSelf.AdditiveIdentity; - } - /// - public static TResult MultiplicativeIdentityHelper() - where TSelf : IMultiplicativeIdentity - { - return TSelf.MultiplicativeIdentity; - } - /// - public static TSelf MaxValue() - where TSelf : IMinMaxValue - { - return TSelf.MaxValue; - } - /// - public static TSelf MinValue() - where TSelf : IMinMaxValue - { - return TSelf.MinValue; - } - /// - public static TSelf NegativeOne() - where TSelf : ISignedNumber - { - return TSelf.NegativeOne; - } - public static TSelf Pi() - where TSelf : IFloatingPointConstants - { - return TSelf.Pi; - } - public static TSelf Tau() - where TSelf : IFloatingPointConstants - { - return TSelf.Tau; - } - public static TSelf E() - where TSelf : IFloatingPointConstants - { - return TSelf.E; - } - public static TSelf PositiveInfinity() - where TSelf : IFloatingPointIeee754 - { - return TSelf.PositiveInfinity; - } - public static TSelf NegativeInfinity() - where TSelf : IFloatingPointIeee754 - { - return TSelf.NegativeInfinity; - } - public static TSelf NaN() - where TSelf : IFloatingPointIeee754 - { - return TSelf.NaN; - } - } -} diff --git a/src/MissingValues.Tests.Old/Helpers/NumberBaseHelper.cs b/src/MissingValues.Tests.Old/Helpers/NumberBaseHelper.cs deleted file mode 100644 index ebe5241..0000000 --- a/src/MissingValues.Tests.Old/Helpers/NumberBaseHelper.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Globalization; -using System.Linq; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; - -namespace MissingValues.Tests.Helpers -{ - internal static class NumberBaseHelper - where TSelf : INumberBase - { - public static TSelf One => TSelf.One; - public static int Radix => TSelf.Radix; - public static TSelf Zero => TSelf.Zero; - public static TSelf Abs(TSelf value) => TSelf.Abs(value); - - public static TSelf CreateChecked(TOther value) - where TOther : INumberBase => TSelf.CreateChecked(value); - public static TSelf CreateSaturating(TOther value) - where TOther : INumberBase => TSelf.CreateSaturating(value); - public static TSelf CreateTruncating(TOther value) - where TOther : INumberBase => TSelf.CreateTruncating(value); - - public static bool IsCanonical(TSelf value) => TSelf.IsCanonical(value); - public static bool IsComplexNumber(TSelf value) => TSelf.IsComplexNumber(value); - public static bool IsEvenInteger(TSelf value) => TSelf.IsEvenInteger(value); - public static bool IsFinite(TSelf value) => TSelf.IsFinite(value); - public static bool IsImaginaryNumber(TSelf value) => TSelf.IsImaginaryNumber(value); - public static bool IsInfinity(TSelf value) => TSelf.IsInfinity(value); - public static bool IsInteger(TSelf value) => TSelf.IsInteger(value); - public static bool IsNaN(TSelf value) => TSelf.IsNaN(value); - public static bool IsNegative(TSelf value) => TSelf.IsNegative(value); - public static bool IsNegativeInfinity(TSelf value) => TSelf.IsNegativeInfinity(value); - public static bool IsNormal(TSelf value) => TSelf.IsNormal(value); - public static bool IsOddInteger(TSelf value) => TSelf.IsOddInteger(value); - public static bool IsPositive(TSelf value) => TSelf.IsPositive(value); - public static bool IsPositiveInfinity(TSelf value) => TSelf.IsPositiveInfinity(value); - public static bool IsRealNumber(TSelf value) => TSelf.IsRealNumber(value); - public static bool IsSubnormal(TSelf value) => TSelf.IsSubnormal(value); - public static bool IsZero(TSelf value) => TSelf.IsZero(value); - - public static TSelf MaxMagnitude(TSelf x, TSelf y) => TSelf.MaxMagnitude(x, y); - public static TSelf MaxMagnitudeNumber(TSelf x, TSelf y) => TSelf.MaxMagnitudeNumber(x, y); - public static TSelf MinMagnitude(TSelf x, TSelf y) => TSelf.MinMagnitude(x, y); - public static TSelf MinMagnitudeNumber(TSelf x, TSelf y) => TSelf.MinMagnitudeNumber(x, y); - - public static TSelf Parse(string s, NumberStyles style, IFormatProvider? provider) => TSelf.Parse(s, style, provider); - public static TSelf Parse(ReadOnlySpan s, NumberStyles style, IFormatProvider? provider) => TSelf.Parse(s, style, provider); - public static TSelf Parse(ReadOnlySpan utf8Text, NumberStyles style, IFormatProvider? provider) => TSelf.Parse(utf8Text, style, provider); - - public static bool TryParse([NotNullWhen(true)] string? s, NumberStyles style, IFormatProvider? provider, [MaybeNullWhen(false)] out TSelf result) => TSelf.TryParse(s, style, provider, out result); - public static bool TryParse(ReadOnlySpan s, NumberStyles style, IFormatProvider? provider, [MaybeNullWhen(false)] out TSelf result) => TSelf.TryParse(s, style, provider, out result); - public static bool TryParse(ReadOnlySpan utf8Text, NumberStyles style, IFormatProvider? provider, [MaybeNullWhen(false)] out TSelf result) => TSelf.TryParse(utf8Text, style, provider, out result); - } -} diff --git a/src/MissingValues.Tests.Old/Helpers/NumberHelper.cs b/src/MissingValues.Tests.Old/Helpers/NumberHelper.cs deleted file mode 100644 index f31d15d..0000000 --- a/src/MissingValues.Tests.Old/Helpers/NumberHelper.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; - -namespace MissingValues.Tests.Helpers -{ - internal static class NumberHelper - where TSelf : INumber - { - /// - public static TSelf Clamp(TSelf value, TSelf min, TSelf max) => TSelf.Clamp(value, min, max); - /// - public static TSelf CopySign(TSelf value, TSelf sign) => TSelf.CopySign(value, sign); - /// - public static TSelf Max(TSelf x, TSelf y) => TSelf.Max(x, y); - /// - public static TSelf MaxNumber(TSelf x, TSelf y) => TSelf.MaxNumber(x, y); - /// - public static TSelf Min(TSelf x, TSelf y) => TSelf.Min(x, y); - /// - public static TSelf MinNumber(TSelf x, TSelf y) => TSelf.MinNumber(x, y); - /// - public static int Sign(TSelf value) => TSelf.Sign(value); - } -} diff --git a/src/MissingValues.Tests.Old/Helpers/TheoryDataTypes.cs b/src/MissingValues.Tests.Old/Helpers/TheoryDataTypes.cs deleted file mode 100644 index 29ef7b8..0000000 --- a/src/MissingValues.Tests.Old/Helpers/TheoryDataTypes.cs +++ /dev/null @@ -1,145 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.Contracts; -using System.Globalization; -using System.Linq; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using static System.Runtime.InteropServices.JavaScript.JSType; - -namespace MissingValues.Tests.Helpers -{ - public class NumberTheoryData : TheoryData - where TSelf : INumberBase - { - public NumberTheoryData(IEnumerable data) - { - Contract.Assert(data is not null && data.Any()); - - foreach (var dat in data) - { - Add(dat); - } - } - } - - public class OperationTheoryData : TheoryData - { - public OperationTheoryData(IEnumerable<(TSelf, TOther, TResult)> data) - { - Contract.Assert(data is not null && data.Any()); - - foreach (var dat in data) - { - Add(dat.Item1, dat.Item2, dat.Item3); - } - } - } - - public class FusedMultiplyAddTheoryData : TheoryData - where TSelf : IFloatingPointIeee754 - { - public FusedMultiplyAddTheoryData(IEnumerable<(TSelf, TSelf, TSelf, TSelf)> data) - { - Contract.Assert(data is not null && data.Any()); - - foreach (var dat in data) - { - Add(dat.Item1, dat.Item2, dat.Item3, dat.Item4); - } - } - } - - public class RoundTheoryData : TheoryData - { - public RoundTheoryData(IEnumerable<(TFloat, int, MidpointRounding, TFloat)> data) - { - Contract.Assert(data is not null && data.Any()); - - foreach (var dat in data) - { - Add(dat.Item1, dat.Item2, dat.Item3, dat.Item4); - } - } - } - - public class UnaryTheoryData : TheoryData - { - public UnaryTheoryData(IEnumerable<(TSelf, TResult)> data) - { - Contract.Assert(data is not null && data.Any()); - - foreach (var dat in data) - { - Add(dat.Item1, dat.Item2); - } - } - } - - public class CastingTheoryData : TheoryData - { - public CastingTheoryData(IEnumerable<(TFrom, TTo)> data) - { - Contract.Assert(data is not null && data.Any()); - - foreach (var dat in data) - { - Add(dat.Item1, dat.Item2); - } - } - } - - public class ComparisonOperatorsTheoryData : TheoryData - { - public ComparisonOperatorsTheoryData(IEnumerable<(TSelf, TOther, bool)> data) - { - Contract.Assert(data is not null && data.Any()); - - foreach (var dat in data) - { - Add(dat.Item1, dat.Item2, dat.Item3); - } - } - } - - public class TryParseTheoryData : TheoryData - where T : IParsable - { - public TryParseTheoryData(IEnumerable<(string, bool, T)> data) - { - Contract.Assert(data is not null && data.Any()); - - foreach (var dat in data) - { - Add(dat.Item1, dat.Item2, dat.Item3); - } - } - } - - public class FormatStringTheoryData : TheoryData - { - public FormatStringTheoryData(IEnumerable<(IFormattable, string, NumberFormatInfo?, string)> data) - { - Contract.Assert(data is not null && data.Any()); - - foreach (var dat in data) - { - Add(dat.Item1, dat.Item2, dat.Item3, dat.Item4); - } - } - } - public class FormatParsingTheoryData : TheoryData - where TNumber : INumber - { - public FormatParsingTheoryData(IEnumerable<(string, NumberStyles, NumberFormatInfo?, TNumber, bool)> data) - { - Contract.Assert(data is not null && data.Any()); - - foreach (var dat in data) - { - Add(dat.Item1, dat.Item2, dat.Item3, dat.Item4, dat.Item5); - } - } - } -} diff --git a/src/MissingValues.Tests.Old/Helpers/Values.cs b/src/MissingValues.Tests.Old/Helpers/Values.cs deleted file mode 100644 index 82df81d..0000000 --- a/src/MissingValues.Tests.Old/Helpers/Values.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; - -namespace MissingValues.Tests.Helpers -{ - internal static class Values - { - public static TFloat CreateFloat(params ulong[] bits) - where TFloat : unmanaged, IBinaryFloatingPointIeee754 - { - if (typeof(TFloat) == typeof(Quad) && bits.Length == 2) - { - return (TFloat)(object)Quad.UInt128BitsToQuad(new UInt128(bits[0], bits[1])); - } - else if (typeof(TFloat) == typeof(Octo) && bits.Length == 4) - { - return (TFloat)(object)Octo.UInt256BitsToOcto(new UInt256(bits[0], bits[1], bits[2], bits[3])); - } - else - { - throw new InvalidOperationException($"{typeof(TFloat)} does not match the bits({bits.Length}): {StringifyBits(bits)}"); - } - - static string StringifyBits(ReadOnlySpan bits) - { - StringBuilder sb = new StringBuilder(); - - sb.Append($"0x{bits[0]:X16}"); - for (int i = 1; i < bits.Length; i++) - { - sb.Append($"_{bits[i]:X16}"); - } - - return sb.ToString(); - } - } - } -} diff --git a/src/MissingValues.Tests.Old/MissingValues.Tests.Old.csproj b/src/MissingValues.Tests.Old/MissingValues.Tests.Old.csproj deleted file mode 100644 index 5a178aa..0000000 --- a/src/MissingValues.Tests.Old/MissingValues.Tests.Old.csproj +++ /dev/null @@ -1,30 +0,0 @@ - - - - net9.0 - enable - enable - - false - true - - - - - - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - - - - - - diff --git a/src/MissingValues.Tests.Old/Usings.cs b/src/MissingValues.Tests.Old/Usings.cs deleted file mode 100644 index 261e222..0000000 --- a/src/MissingValues.Tests.Old/Usings.cs +++ /dev/null @@ -1,4 +0,0 @@ -global using Xunit; -global using FluentAssertions; -global using MissingValues; -global using MissingValues.Tests.Helpers; \ No newline at end of file From d00ea3f5d35b3c24b11d3c31433e2cdd9cfd4a96 Mon Sep 17 00:00:00 2001 From: crookseta Date: Wed, 26 Nov 2025 11:50:46 -0500 Subject: [PATCH 27/74] -Added Max, Min, IsPow2, Log2, ReadBigEndian, ReadLittleEndian, GetByteCount and GetShortestBitLength UInt512 test data. --- .../Data/UInt512DataSources.cs | 95 +++++++++++++++++-- 1 file changed, 87 insertions(+), 8 deletions(-) diff --git a/src/MissingValues.Tests/Data/UInt512DataSources.cs b/src/MissingValues.Tests/Data/UInt512DataSources.cs index 9ac2070..5ca7b79 100644 --- a/src/MissingValues.Tests/Data/UInt512DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt512DataSources.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; +using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; @@ -772,7 +773,13 @@ public class UInt512DataSources public static IEnumerable> MaxTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, UInt512.One, UInt512.One); + yield return () => (UInt512.MinValue, UInt512.MaxValue, UInt512.MaxValue); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue), UInt512.MaxValue, UInt512.MaxValue); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, ulong.MaxValue, ulong.MaxValue), new UInt512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue), new UInt512(0, 0, 0, 0, 0, 0, ulong.MaxValue, ulong.MaxValue)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 1, ulong.MaxValue, ulong.MaxValue), new UInt512(0, 0, 0, 0, 0, 0, ulong.MaxValue, ulong.MaxValue), new UInt512(0, 0, 0, 0, 0, 1, ulong.MaxValue, ulong.MaxValue)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 1, 0, 0), new UInt512(0, 0, 0, 0, 0, 0, ulong.MaxValue, ulong.MaxValue), new UInt512(0, 0, 0, 0, 0, 1, 0, 0)); + yield return () => (new UInt512(1, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new UInt512(0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new UInt512(1, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); } public static IEnumerable> MaxNumberTestData() @@ -782,7 +789,13 @@ public class UInt512DataSources public static IEnumerable> MinTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, UInt512.One, UInt512.One); + yield return () => (UInt512.MinValue, UInt512.MaxValue, UInt512.MinValue); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue), UInt512.MaxValue, new UInt512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, ulong.MaxValue, ulong.MaxValue), new UInt512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue), new UInt512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 1, ulong.MaxValue, ulong.MaxValue), new UInt512(0, 0, 0, 0, 0, 0, ulong.MaxValue, ulong.MaxValue), new UInt512(0, 0, 0, 0, 0, 0, ulong.MaxValue, ulong.MaxValue)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 1, 0, 0), new UInt512(0, 0, 0, 0, 0, 0, ulong.MaxValue, ulong.MaxValue), new UInt512(0, 0, 0, 0, 0, 0, ulong.MaxValue, ulong.MaxValue)); + yield return () => (new UInt512(1, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new UInt512(0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new UInt512(0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); } public static IEnumerable> MinNumberTestData() @@ -798,12 +811,32 @@ public class UInt512DataSources public static IEnumerable> IsPow2TestData() { - throw new NotImplementedException(); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 1), true); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 2), true); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 4), true); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 8), true); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 16), true); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 1UL << 63), true); + yield return () => (new UInt512(0, 0, 0, 0, 1UL << 63, 0, 0, 0), true); + yield return () => (new UInt512(1UL << 63, 0, 0, 0, 0, 0, 0, 0), true); + yield return () => (UInt512.Zero, false); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 3), false); + yield return () => (UInt512.MaxValue, false); } public static IEnumerable> Log2TestData() { - throw new NotImplementedException(); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 1), new UInt512(0, 0, 0, 0, 0, 0, 0, 0)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 2), new UInt512(0, 0, 0, 0, 0, 0, 0, 1)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 4), new UInt512(0, 0, 0, 0, 0, 0, 0, 2)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 8), new UInt512(0, 0, 0, 0, 0, 0, 0, 3)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 1UL << 63), new UInt512(0, 0, 0, 0, 0, 0, 0, 63)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 1UL << 5, 0), new UInt512(0, 0, 0, 0, 0, 0, 0, 69)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 1UL << 42, 0, 0), new UInt512(0, 0, 0, 0, 0, 0, 0, 170)); + yield return () => (new UInt512(0, 0, 0, 0, 1UL << 13, 0, 0, 0), new UInt512(0, 0, 0, 0, 0, 0, 0, 205)); + yield return () => (new UInt512(0, 0, 0, 0, 1UL << 63, 0, 0, 0), new UInt512(0, 0, 0, 0, 0, 0, 0, 255)); + yield return () => (new UInt512(1UL << 63, 0, 0, 0, 0, 0, 0, 0), new UInt512(0, 0, 0, 0, 0, 0, 0, 511)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 0), new UInt512(0, 0, 0, 0, 0, 0, 0, 0)); } public static IEnumerable> DivRemTestData() @@ -823,12 +856,54 @@ public class UInt512DataSources public static IEnumerable> ReadBigEndianTestData() { - throw new NotImplementedException(); + yield return () => ([], true, UInt512.Zero); + yield return () => ([0x01], true, UInt512.One); + yield return () => + { + byte[] array = new byte[64]; + Array.Fill(array, byte.MaxValue); + return (array, true, UInt512.MaxValue); + }; + yield return () => + { + byte[] array = new byte[67]; + for (int i = 3; i < 67; i++) + array[i] = byte.MaxValue; + return (array, true, UInt512.MaxValue); + }; + yield return () => ([0x12, 0x34], true, new UInt512(0, 0, 0, 0, 0, 0, 0, 0x1234)); + yield return () => + { + byte[] array = new byte[64]; + array[0] = 0x80; + return (array, true, new UInt512(1UL << 63, 0, 0, 0, 0, 0, 0, 0)); + }; } public static IEnumerable> ReadLittleEndianTestData() { - throw new NotImplementedException(); + yield return () => ([], true, UInt512.Zero); + yield return () => ([0x01], true, UInt512.One); + yield return () => + { + byte[] array = new byte[64]; + Array.Fill(array, byte.MaxValue); + return (array, true, UInt512.MaxValue); + }; + yield return () => + { + byte[] array = new byte[67]; + for (int i = 0; i < 64; i++) + array[i] = byte.MaxValue; + return (array, true, UInt512.MaxValue); + }; + yield return () => ([0x34, 0x12], true, new UInt512(0, 0, 0, 0, 0, 0, 0, 0x1234)); + yield return () => + { + byte[] array = new byte[64]; + array[63] = 0x80; + return (array, true, new UInt512(1UL << 63, 0, 0, 0, 0, 0, 0, 0)); + }; } public static IEnumerable> RotateLeftTestData() @@ -848,12 +923,16 @@ public class UInt512DataSources public static IEnumerable> GetByteCountTestData() { - throw new NotImplementedException(); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 0), Unsafe.SizeOf()); } public static IEnumerable> GetShortestBitLengthTestData() { - throw new NotImplementedException(); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 0), 0); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 1), 1); + yield return () => (new UInt512(0, 0, 0, 0, 1, 0, 0, 0), 193); + yield return () => (new UInt512(1, 0, 0, 0, 0, 0, 0, 0), 449); + yield return () => (UInt512.MaxValue, 512); } public static IEnumerable> WriteBigEndianTestData() From 9e52f198f34cdede76a84e94b1ef481a3e445bb3 Mon Sep 17 00:00:00 2001 From: crookseta Date: Thu, 27 Nov 2025 15:12:00 -0500 Subject: [PATCH 28/74] -Added PopCount, WriteBigEndian and WriteLittleEndian UInt512 test data. --- .../Data/UInt512DataSources.cs | 51 +++++++++++++++++-- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/src/MissingValues.Tests/Data/UInt512DataSources.cs b/src/MissingValues.Tests/Data/UInt512DataSources.cs index 5ca7b79..64769d1 100644 --- a/src/MissingValues.Tests/Data/UInt512DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt512DataSources.cs @@ -851,7 +851,13 @@ public class UInt512DataSources public static IEnumerable> PopCountTestData() { - throw new NotImplementedException(); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 0), new UInt512(0, 0, 0, 0, 0, 0, 0, 0)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 1), new UInt512(0, 0, 0, 0, 0, 0, 0, 1)); + yield return () => (UInt512.MaxValue, new UInt512(0, 0, 0, 0, 0, 0, 0, 512)); + yield return () => (new UInt512(ulong.MaxValue, 0, 0, 0, 0, 0, 0, 0), new UInt512(0, 0, 0, 0, 0, 0, 0, 64)); + yield return () => (new UInt512(0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA), new UInt512(0, 0, 0, 0, 0, 0, 0, 256)); + yield return () => (new UInt512(0, 0, 0, 0, 1UL << 63, 1UL << 62, 1UL << 61, 1UL << 60), new UInt512(0, 0, 0, 0, 0, 0, 0, 4)); + yield return () => (new UInt512(1UL << 63, 1UL << 62, 1UL << 61, 1UL << 60, 1UL << 59, 1UL << 58, 1UL << 57, 1UL << 56), new UInt512(0, 0, 0, 0, 0, 0, 0, 8)); } public static IEnumerable> ReadBigEndianTestData() @@ -937,12 +943,51 @@ public class UInt512DataSources public static IEnumerable> WriteBigEndianTestData() { - throw new NotImplementedException(); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 0), new byte[64], Unsafe.SizeOf()); + yield return () => + { + var buffer = new byte[64]; + + for (int i = 0; i < 63; i++) + buffer[i] = 0; + + buffer[63] = 1; + + return (new UInt512(0, 0, 0, 0, 0, 0, 0, 1), buffer, Unsafe.SizeOf()); + }; + yield return () => + { + var buffer = new byte[64]; + + for (int i = 0; i < 64; i++) + buffer[i] = 0xFF; + + return (UInt512.MaxValue, buffer, Unsafe.SizeOf()); + }; } public static IEnumerable> WriteLittleEndianTestData() { - throw new NotImplementedException(); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 0), new byte[64], Unsafe.SizeOf()); + yield return () => + { + var buffer = new byte[64]; + + buffer[0] = 1; + for (int i = 1; i < 64; i++) + buffer[i] = 0; + + return (new UInt512(0, 0, 0, 0, 0, 0, 0, 1), buffer, Unsafe.SizeOf()); + }; + yield return () => + { + var buffer = new byte[64]; + + for (int i = 0; i < 64; i++) + buffer[i] = 0xFF; + + return (UInt512.MaxValue, buffer, Unsafe.SizeOf()); + }; } public static IEnumerable> ConvertToCheckedByteTestData() From e0e5ed7ab0720b59d3cf0372ba96ecad3f7b0729 Mon Sep 17 00:00:00 2001 From: crookseta Date: Fri, 5 Dec 2025 12:42:28 -0500 Subject: [PATCH 29/74] -Added RotateLeft, RotateRight and TrailingZeroCount UInt512 test data. --- .../Data/UInt512DataSources.cs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/MissingValues.Tests/Data/UInt512DataSources.cs b/src/MissingValues.Tests/Data/UInt512DataSources.cs index 64769d1..41fe77c 100644 --- a/src/MissingValues.Tests/Data/UInt512DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt512DataSources.cs @@ -914,17 +914,30 @@ public class UInt512DataSources public static IEnumerable> RotateLeftTestData() { - throw new NotImplementedException(); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), 0, new UInt512(1, 2, 3, 4, 5, 6, 7, 8)); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), 512, new UInt512(1, 2, 3, 4, 5, 6, 7, 8)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0x8000_0000_0000_0000, 0), 64, new UInt512(0, 0, 0, 0, 0, 0x8000_0000_0000_0000, 0, 0)); + yield return () => (new UInt512(0x8000_0000_0000_0000, 0, 0, 0, 0, 0, 0, 0), 64, new UInt512(0, 0, 0, 0, 0, 0, 0, 0x8000_0000_0000_0000)); + yield return () => (new UInt512(0, 0, 0, 0, 0x8000_0000_0000_0000, 0, 0, 0), 128, new UInt512(0, 0, 0x8000_0000_0000_0000, 0, 0, 0, 0, 0)); } public static IEnumerable> RotateRightTestData() { - throw new NotImplementedException(); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), 0, new UInt512(1, 2, 3, 4, 5, 6, 7, 8)); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), 512, new UInt512(1, 2, 3, 4, 5, 6, 7, 8)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0x8000_0000_0000_0000, 0), 64, new UInt512(0, 0, 0, 0, 0, 0, 0, 0x8000_0000_0000_0000)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 0x8000_0000_0000_0000), 64, new UInt512(0x8000_0000_0000_0000, 0, 0, 0, 0, 0, 0, 0)); + yield return () => (new UInt512(0, 0, 0, 0, 0x8000_0000_0000_0000, 0, 0, 0), 128, new UInt512(0, 0, 0, 0, 0, 0, 0x8000_0000_0000_0000, 0)); } public static IEnumerable> TrailingZeroCountTestData() { - throw new NotImplementedException(); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 0), new UInt512(0, 0, 0, 0, 0, 0, 0, 512)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 1), new UInt512(0, 0, 0, 0, 0, 0, 0, 0)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 1, 0), new UInt512(0, 0, 0, 0, 0, 0, 0, 64)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 1UL << 36, 0), new UInt512(0, 0, 0, 0, 0, 0, 0, 100)); + yield return () => (new UInt512(0, 0, 0, 1, 0, 0, 0, 0), new UInt512(0, 0, 0, 0, 0, 0, 0, 256)); + yield return () => (new UInt512(1UL << 63, 0, 0, 0, 0, 0, 0, 0), new UInt512(0, 0, 0, 0, 0, 0, 0, 511)); } public static IEnumerable> GetByteCountTestData() From 11a295bf2fb0f1c89c46cc0e7756578201f6557c Mon Sep 17 00:00:00 2001 From: crookseta Date: Fri, 5 Dec 2025 16:27:44 -0500 Subject: [PATCH 30/74] -Added LeadingZeroCount UInt512 test data. --- src/MissingValues.Tests/Data/UInt512DataSources.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/MissingValues.Tests/Data/UInt512DataSources.cs b/src/MissingValues.Tests/Data/UInt512DataSources.cs index 41fe77c..3882983 100644 --- a/src/MissingValues.Tests/Data/UInt512DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt512DataSources.cs @@ -846,7 +846,12 @@ public class UInt512DataSources public static IEnumerable> LeadingZeroCountTestData() { - throw new NotImplementedException(); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 0), new UInt512(0, 0, 0, 0, 0, 0, 0, 512)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 1), new UInt512(0, 0, 0, 0, 0, 0, 0, 511)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 1, 0), new UInt512(0, 0, 0, 0, 0, 0, 0, 447)); + yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 1UL << 36, 0), new UInt512(0, 0, 0, 0, 0, 0, 0, 411)); + yield return () => (new UInt512(0, 0, 0, 1, 0, 0, 0, 0), new UInt512(0, 0, 0, 0, 0, 0, 0, 255)); + yield return () => (new UInt512(1UL << 63, 0, 0, 0, 0, 0, 0, 0), new UInt512(0, 0, 0, 0, 0, 0, 0, 0)); } public static IEnumerable> PopCountTestData() From c3efb467b0174c26f495529620ee43889049a5ad Mon Sep 17 00:00:00 2001 From: crookseta Date: Sat, 6 Dec 2025 09:53:21 -0500 Subject: [PATCH 31/74] -Added DivRem UInt512 test data. --- src/MissingValues.Tests/Data/UInt512DataSources.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/MissingValues.Tests/Data/UInt512DataSources.cs b/src/MissingValues.Tests/Data/UInt512DataSources.cs index 3882983..f16b531 100644 --- a/src/MissingValues.Tests/Data/UInt512DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt512DataSources.cs @@ -841,7 +841,12 @@ public class UInt512DataSources public static IEnumerable> DivRemTestData() { - throw new NotImplementedException(); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(0, 0, 0, 0, 0, 0, 0, 1), (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(0, 0, 0, 0, 0, 0, 0, 0))); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), (new UInt512(0, 0, 0, 0, 0, 0, 0, 1), new UInt512(0, 0, 0, 0, 0, 0, 0, 0))); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), (new UInt512(0, 0, 0, 0, 0, 0, 0, 1), new UInt512(0, 0, 0, 0, 0, 0, 0, 0))); + yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 9), (new UInt512(0, 0, 0, 0, 0, 0, 0, 0), new UInt512(1, 2, 3, 4, 5, 6, 7, 8))); + yield return () => (UInt512.MaxValue, UInt256.MaxValue, (UInt512.Parse("115792089237316195423570985008687907853269984665640564039457584007913129639937"), UInt512.Zero)); + yield return () => (UInt512.MaxValue, new UInt512(0, 0, 0, 1, 0, 0, 0, 0), (UInt512.Parse("115792089237316195423570985008687907853269984665640564039457584007913129639935"), UInt512.Parse("115792089237316195423570985008687907853269984665640564039457584007913129639935"))); } public static IEnumerable> LeadingZeroCountTestData() From 3dcf9fee1828e7efb2f343e72e7a9a03ca649acb Mon Sep 17 00:00:00 2001 From: crookseta Date: Thu, 11 Dec 2025 09:10:44 -0500 Subject: [PATCH 32/74] -Use CultureInfo.InvariantInfo for floating point parsing. --- .../Data/QuadDataSources.cs | 174 +++++++++--------- 1 file changed, 87 insertions(+), 87 deletions(-) diff --git a/src/MissingValues.Tests/Data/QuadDataSources.cs b/src/MissingValues.Tests/Data/QuadDataSources.cs index 21c7736..4858328 100644 --- a/src/MissingValues.Tests/Data/QuadDataSources.cs +++ b/src/MissingValues.Tests/Data/QuadDataSources.cs @@ -242,113 +242,113 @@ public class QuadDataSources public static IEnumerable> ParseTestData() { - yield return () => ("2,0", NumberStyles.Float, CultureInfo.CurrentCulture, Quad.Two); - yield return () => ("-2", NumberStyles.Float, CultureInfo.CurrentCulture, -Quad.Two); - yield return () => ("0", NumberStyles.Float, CultureInfo.CurrentCulture, Quad.Zero); - yield return () => (NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol, NumberStyles.Float, CultureInfo.CurrentCulture, Quad.PositiveInfinity); - yield return () => (NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol, NumberStyles.Float, CultureInfo.CurrentCulture, Quad.NegativeInfinity); - yield return () => (NumberFormatInfo.CurrentInfo.NaNSymbol, NumberStyles.Float, CultureInfo.CurrentCulture, Quad.NaN); - yield return () => ("256,4995", NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x4007_007F_DF3B_645A, 0x1CAC_0831_26E9_78D5)); - yield return () => ("471581881", NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x401B_C1BC_4B90_0000, 0x0000_0000_0000_0000)); - yield return () => ("1,93561113", NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x3FFF_EF84_3605_1FA4, 0x8B0F_3D34_BECE_8762)); - yield return () => ("9715574,2", NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x4016_287E_EC66_6666, 0x6666_6666_6666_6666)); - yield return () => ("0,51438427732005011792", NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x3FFE_075D_6041_5519, 0x72D0_0AD3_7DB4_57E9)); - yield return () => ("0,04201133209656899095", NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x3FFA_5828_262D_512C, 0x8840_B3B3_D424_5947)); - yield return () => ("7,7E777", NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x4A17_0F28_5D1D_4C84, 0xA11F_6899_101B_A9A4)); - yield return () => ("-7,7E-777", NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0xB5EC_BFCE_3AF6_4E08, 0x42C8_5750_BEBD_A572)); + yield return () => ("2.0", NumberStyles.Float, CultureInfo.InvariantCulture, Quad.Two); + yield return () => ("-2", NumberStyles.Float, CultureInfo.InvariantCulture, -Quad.Two); + yield return () => ("0", NumberStyles.Float, CultureInfo.InvariantCulture, Quad.Zero); + yield return () => (NumberFormatInfo.InvariantInfo.PositiveInfinitySymbol, NumberStyles.Float, CultureInfo.InvariantCulture, Quad.PositiveInfinity); + yield return () => (NumberFormatInfo.InvariantInfo.NegativeInfinitySymbol, NumberStyles.Float, CultureInfo.InvariantCulture, Quad.NegativeInfinity); + yield return () => (NumberFormatInfo.InvariantInfo.NaNSymbol, NumberStyles.Float, CultureInfo.InvariantCulture, Quad.NaN); + yield return () => ("256.4995", NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0x4007_007F_DF3B_645A, 0x1CAC_0831_26E9_78D5)); + yield return () => ("471581881", NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0x401B_C1BC_4B90_0000, 0x0000_0000_0000_0000)); + yield return () => ("1.93561113", NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0x3FFF_EF84_3605_1FA4, 0x8B0F_3D34_BECE_8762)); + yield return () => ("9715574.2", NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0x4016_287E_EC66_6666, 0x6666_6666_6666_6666)); + yield return () => ("0.51438427732005011792", NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0x3FFE_075D_6041_5519, 0x72D0_0AD3_7DB4_57E9)); + yield return () => ("0.04201133209656899095", NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0x3FFA_5828_262D_512C, 0x8840_B3B3_D424_5947)); + yield return () => ("7.7E777", NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0x4A17_0F28_5D1D_4C84, 0xA11F_6899_101B_A9A4)); + yield return () => ("-7.7E-777", NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0xB5EC_BFCE_3AF6_4E08, 0x42C8_5750_BEBD_A572)); } public static IEnumerable> ParseSpanTestData() { - yield return () => ("2,0".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Quad.Two); - yield return () => ("-2".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, -Quad.Two); - yield return () => ("0".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Quad.Zero); - yield return () => (NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol.ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Quad.PositiveInfinity); - yield return () => (NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol.ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Quad.NegativeInfinity); - yield return () => (NumberFormatInfo.CurrentInfo.NaNSymbol.ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Quad.NaN); - yield return () => ("256,4995".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x4007_007F_DF3B_645A, 0x1CAC_0831_26E9_78D5)); - yield return () => ("471581881".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x401B_C1BC_4B90_0000, 0x0000_0000_0000_0000)); - yield return () => ("1,93561113".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x3FFF_EF84_3605_1FA4, 0x8B0F_3D34_BECE_8762)); - yield return () => ("9715574,2".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x4016_287E_EC66_6666, 0x6666_6666_6666_6666)); - yield return () => ("0,51438427732005011792".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x3FFE_075D_6041_5519, 0x72D0_0AD3_7DB4_57E9)); - yield return () => ("0,04201133209656899095".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x3FFA_5828_262D_512C, 0x8840_B3B3_D424_5947)); - yield return () => ("7,7E777".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x4A17_0F28_5D1D_4C84, 0xA11F_6899_101B_A9A4)); - yield return () => ("-7,7E-777".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0xB5EC_BFCE_3AF6_4E08, 0x42C8_5750_BEBD_A572)); + yield return () => ("2.0".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Quad.Two); + yield return () => ("-2".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, -Quad.Two); + yield return () => ("0".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Quad.Zero); + yield return () => (NumberFormatInfo.InvariantInfo.PositiveInfinitySymbol.ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Quad.PositiveInfinity); + yield return () => (NumberFormatInfo.InvariantInfo.NegativeInfinitySymbol.ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Quad.NegativeInfinity); + yield return () => (NumberFormatInfo.InvariantInfo.NaNSymbol.ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Quad.NaN); + yield return () => ("256.4995".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0x4007_007F_DF3B_645A, 0x1CAC_0831_26E9_78D5)); + yield return () => ("471581881".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0x401B_C1BC_4B90_0000, 0x0000_0000_0000_0000)); + yield return () => ("1.93561113".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0x3FFF_EF84_3605_1FA4, 0x8B0F_3D34_BECE_8762)); + yield return () => ("9715574.2".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0x4016_287E_EC66_6666, 0x6666_6666_6666_6666)); + yield return () => ("0.51438427732005011792".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0x3FFE_075D_6041_5519, 0x72D0_0AD3_7DB4_57E9)); + yield return () => ("0.04201133209656899095".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0x3FFA_5828_262D_512C, 0x8840_B3B3_D424_5947)); + yield return () => ("7.7E777".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0x4A17_0F28_5D1D_4C84, 0xA11F_6899_101B_A9A4)); + yield return () => ("-7.7E-777".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0xB5EC_BFCE_3AF6_4E08, 0x42C8_5750_BEBD_A572)); } public static IEnumerable> ParseUtf8TestData() { - yield return () => ("2,0"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Quad.Two); - yield return () => ("-2"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, -Quad.Two); - yield return () => ("0"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Quad.Zero); - yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol), NumberStyles.Float, CultureInfo.CurrentCulture, Quad.PositiveInfinity); - yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol), NumberStyles.Float, CultureInfo.CurrentCulture, Quad.NegativeInfinity); - yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.CurrentInfo.NaNSymbol), NumberStyles.Float, CultureInfo.CurrentCulture, Quad.NaN); - yield return () => ("256,4995"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x4007_007F_DF3B_645A, 0x1CAC_0831_26E9_78D5)); - yield return () => ("471581881"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x401B_C1BC_4B90_0000, 0x0000_0000_0000_0000)); - yield return () => ("1,93561113"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x3FFF_EF84_3605_1FA4, 0x8B0F_3D34_BECE_8762)); - yield return () => ("9715574,2"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x4016_287E_EC66_6666, 0x6666_6666_6666_6666)); - yield return () => ("0,51438427732005011792"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x3FFE_075D_6041_5519, 0x72D0_0AD3_7DB4_57E9)); - yield return () => ("0,04201133209656899095"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x3FFA_5828_262D_512C, 0x8840_B3B3_D424_5947)); - yield return () => ("7,7E777"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0x4A17_0F28_5D1D_4C84, 0xA11F_6899_101B_A9A4)); - yield return () => ("-7,7E-777"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, Values.CreateFloat(0xB5EC_BFCE_3AF6_4E08, 0x42C8_5750_BEBD_A572)); + yield return () => ("2.0"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Quad.Two); + yield return () => ("-2"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, -Quad.Two); + yield return () => ("0"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Quad.Zero); + yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.InvariantInfo.PositiveInfinitySymbol), NumberStyles.Float, CultureInfo.InvariantCulture, Quad.PositiveInfinity); + yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.InvariantInfo.NegativeInfinitySymbol), NumberStyles.Float, CultureInfo.InvariantCulture, Quad.NegativeInfinity); + yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.InvariantInfo.NaNSymbol), NumberStyles.Float, CultureInfo.InvariantCulture, Quad.NaN); + yield return () => ("256.4995"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0x4007_007F_DF3B_645A, 0x1CAC_0831_26E9_78D5)); + yield return () => ("471581881"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0x401B_C1BC_4B90_0000, 0x0000_0000_0000_0000)); + yield return () => ("1.93561113"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0x3FFF_EF84_3605_1FA4, 0x8B0F_3D34_BECE_8762)); + yield return () => ("9715574.2"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0x4016_287E_EC66_6666, 0x6666_6666_6666_6666)); + yield return () => ("0.51438427732005011792"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0x3FFE_075D_6041_5519, 0x72D0_0AD3_7DB4_57E9)); + yield return () => ("0.04201133209656899095"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0x3FFA_5828_262D_512C, 0x8840_B3B3_D424_5947)); + yield return () => ("7.7E777"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0x4A17_0F28_5D1D_4C84, 0xA11F_6899_101B_A9A4)); + yield return () => ("-7.7E-777"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0xB5EC_BFCE_3AF6_4E08, 0x42C8_5750_BEBD_A572)); } public static IEnumerable> TryParseTestData() { - yield return () => ("2,0", NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.Two); - yield return () => ("-2", NumberStyles.Float, CultureInfo.CurrentCulture, true, -Quad.Two); - yield return () => ("0", NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.Zero); - yield return () => (NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol, NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.PositiveInfinity); - yield return () => (NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol, NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.NegativeInfinity); - yield return () => (NumberFormatInfo.CurrentInfo.NaNSymbol, NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.NaN); - yield return () => ("256,4995", NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x4007_007F_DF3B_645A, 0x1CAC_0831_26E9_78D5)); - yield return () => ("471581881", NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x401B_C1BC_4B90_0000, 0x0000_0000_0000_0000)); - yield return () => ("1,93561113", NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x3FFF_EF84_3605_1FA4, 0x8B0F_3D34_BECE_8762)); - yield return () => ("9715574,2", NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x4016_287E_EC66_6666, 0x6666_6666_6666_6666)); - yield return () => ("0,51438427732005011792", NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x3FFE_075D_6041_5519, 0x72D0_0AD3_7DB4_57E9)); - yield return () => ("0,04201133209656899095", NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x3FFA_5828_262D_512C, 0x8840_B3B3_D424_5947)); - yield return () => ("7,7E777", NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x4A17_0F28_5D1D_4C84, 0xA11F_6899_101B_A9A4)); - yield return () => ("-7,7E-777", NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0xB5EC_BFCE_3AF6_4E08, 0x42C8_5750_BEBD_A572)); - yield return () => ("1A", NumberStyles.Float, CultureInfo.CurrentCulture, false, default); + yield return () => ("2.0", NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.Two); + yield return () => ("-2", NumberStyles.Float, CultureInfo.InvariantCulture, true, -Quad.Two); + yield return () => ("0", NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.Zero); + yield return () => (NumberFormatInfo.InvariantInfo.PositiveInfinitySymbol, NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.PositiveInfinity); + yield return () => (NumberFormatInfo.InvariantInfo.NegativeInfinitySymbol, NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.NegativeInfinity); + yield return () => (NumberFormatInfo.InvariantInfo.NaNSymbol, NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.NaN); + yield return () => ("256.4995", NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0x4007_007F_DF3B_645A, 0x1CAC_0831_26E9_78D5)); + yield return () => ("471581881", NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0x401B_C1BC_4B90_0000, 0x0000_0000_0000_0000)); + yield return () => ("1.93561113", NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0x3FFF_EF84_3605_1FA4, 0x8B0F_3D34_BECE_8762)); + yield return () => ("9715574.2", NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0x4016_287E_EC66_6666, 0x6666_6666_6666_6666)); + yield return () => ("0.51438427732005011792", NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0x3FFE_075D_6041_5519, 0x72D0_0AD3_7DB4_57E9)); + yield return () => ("0.04201133209656899095", NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0x3FFA_5828_262D_512C, 0x8840_B3B3_D424_5947)); + yield return () => ("7.7E777", NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0x4A17_0F28_5D1D_4C84, 0xA11F_6899_101B_A9A4)); + yield return () => ("-7.7E-777", NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0xB5EC_BFCE_3AF6_4E08, 0x42C8_5750_BEBD_A572)); + yield return () => ("1A", NumberStyles.Float, CultureInfo.InvariantCulture, false, default); } public static IEnumerable> TryParseSpanTestData() { - yield return () => ("2,0".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.Two); - yield return () => ("-2".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, -Quad.Two); - yield return () => ("0".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.Zero); - yield return () => (NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol.ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.PositiveInfinity); - yield return () => (NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol.ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.NegativeInfinity); - yield return () => (NumberFormatInfo.CurrentInfo.NaNSymbol.ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.NaN); - yield return () => ("256,4995".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x4007_007F_DF3B_645A, 0x1CAC_0831_26E9_78D5)); - yield return () => ("471581881".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x401B_C1BC_4B90_0000, 0x0000_0000_0000_0000)); - yield return () => ("1,93561113".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x3FFF_EF84_3605_1FA4, 0x8B0F_3D34_BECE_8762)); - yield return () => ("9715574,2".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x4016_287E_EC66_6666, 0x6666_6666_6666_6666)); - yield return () => ("0,51438427732005011792".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x3FFE_075D_6041_5519, 0x72D0_0AD3_7DB4_57E9)); - yield return () => ("0,04201133209656899095".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x3FFA_5828_262D_512C, 0x8840_B3B3_D424_5947)); - yield return () => ("7,7E777".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x4A17_0F28_5D1D_4C84, 0xA11F_6899_101B_A9A4)); - yield return () => ("-7,7E-777".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0xB5EC_BFCE_3AF6_4E08, 0x42C8_5750_BEBD_A572)); - yield return () => ("1A".ToCharArray(), NumberStyles.Float, CultureInfo.CurrentCulture, false, default); + yield return () => ("2.0".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.Two); + yield return () => ("-2".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, -Quad.Two); + yield return () => ("0".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.Zero); + yield return () => (NumberFormatInfo.InvariantInfo.PositiveInfinitySymbol.ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.PositiveInfinity); + yield return () => (NumberFormatInfo.InvariantInfo.NegativeInfinitySymbol.ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.NegativeInfinity); + yield return () => (NumberFormatInfo.InvariantInfo.NaNSymbol.ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.NaN); + yield return () => ("256.4995".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0x4007_007F_DF3B_645A, 0x1CAC_0831_26E9_78D5)); + yield return () => ("471581881".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0x401B_C1BC_4B90_0000, 0x0000_0000_0000_0000)); + yield return () => ("1.93561113".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0x3FFF_EF84_3605_1FA4, 0x8B0F_3D34_BECE_8762)); + yield return () => ("9715574.2".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0x4016_287E_EC66_6666, 0x6666_6666_6666_6666)); + yield return () => ("0.51438427732005011792".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0x3FFE_075D_6041_5519, 0x72D0_0AD3_7DB4_57E9)); + yield return () => ("0.04201133209656899095".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0x3FFA_5828_262D_512C, 0x8840_B3B3_D424_5947)); + yield return () => ("7.7E777".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0x4A17_0F28_5D1D_4C84, 0xA11F_6899_101B_A9A4)); + yield return () => ("-7.7E-777".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0xB5EC_BFCE_3AF6_4E08, 0x42C8_5750_BEBD_A572)); + yield return () => ("1A".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, false, default); } public static IEnumerable> TryParseUtf8TestData() { - yield return () => ("2,0"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.Two); - yield return () => ("-2"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, -Quad.Two); - yield return () => ("0"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.Zero); - yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol), NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.PositiveInfinity); - yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol), NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.NegativeInfinity); - yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.CurrentInfo.NaNSymbol), NumberStyles.Float, CultureInfo.CurrentCulture, true, Quad.NaN); - yield return () => ("256,4995"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x4007_007F_DF3B_645A, 0x1CAC_0831_26E9_78D5)); - yield return () => ("471581881"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x401B_C1BC_4B90_0000, 0x0000_0000_0000_0000)); - yield return () => ("1,93561113"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x3FFF_EF84_3605_1FA4, 0x8B0F_3D34_BECE_8762)); - yield return () => ("9715574,2"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x4016_287E_EC66_6666, 0x6666_6666_6666_6666)); - yield return () => ("0,51438427732005011792"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x3FFE_075D_6041_5519, 0x72D0_0AD3_7DB4_57E9)); - yield return () => ("0,04201133209656899095"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x3FFA_5828_262D_512C, 0x8840_B3B3_D424_5947)); - yield return () => ("7,7E777"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0x4A17_0F28_5D1D_4C84, 0xA11F_6899_101B_A9A4)); - yield return () => ("-7,7E-777"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, true, Values.CreateFloat(0xB5EC_BFCE_3AF6_4E08, 0x42C8_5750_BEBD_A572)); - yield return () => ("1A"u8.ToArray(), NumberStyles.Float, CultureInfo.CurrentCulture, false, default); + yield return () => ("2.0"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.Two); + yield return () => ("-2"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, -Quad.Two); + yield return () => ("0"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.Zero); + yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.InvariantInfo.PositiveInfinitySymbol), NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.PositiveInfinity); + yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.InvariantInfo.NegativeInfinitySymbol), NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.NegativeInfinity); + yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.InvariantInfo.NaNSymbol), NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.NaN); + yield return () => ("256.4995"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0x4007_007F_DF3B_645A, 0x1CAC_0831_26E9_78D5)); + yield return () => ("471581881"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0x401B_C1BC_4B90_0000, 0x0000_0000_0000_0000)); + yield return () => ("1.93561113"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0x3FFF_EF84_3605_1FA4, 0x8B0F_3D34_BECE_8762)); + yield return () => ("9715574.2"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0x4016_287E_EC66_6666, 0x6666_6666_6666_6666)); + yield return () => ("0.51438427732005011792"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0x3FFE_075D_6041_5519, 0x72D0_0AD3_7DB4_57E9)); + yield return () => ("0.04201133209656899095"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0x3FFA_5828_262D_512C, 0x8840_B3B3_D424_5947)); + yield return () => ("7.7E777"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0x4A17_0F28_5D1D_4C84, 0xA11F_6899_101B_A9A4)); + yield return () => ("-7.7E-777"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0xB5EC_BFCE_3AF6_4E08, 0x42C8_5750_BEBD_A572)); + yield return () => ("1A"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, false, default); } public static IEnumerable> ClampTestData() From 7b3d06c6b4e0ce017481a4316e61d0c3ca913bc0 Mon Sep 17 00:00:00 2001 From: crookseta Date: Fri, 19 Dec 2025 11:19:35 -0500 Subject: [PATCH 33/74] -Added Tests for Int512 methods: op_AdditionTestData, op_CheckedAdditionTestData, op_SubtractionTestData and op_CheckedSubtractionTestData. --- .../Data/Int256DataSources.cs | 4 +- .../Data/Int512DataSources.cs | 83 ++++++++++++++++++- 2 files changed, 81 insertions(+), 6 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int256DataSources.cs b/src/MissingValues.Tests/Data/Int256DataSources.cs index 74b4b62..3f914aa 100644 --- a/src/MissingValues.Tests/Data/Int256DataSources.cs +++ b/src/MissingValues.Tests/Data/Int256DataSources.cs @@ -168,9 +168,9 @@ public class Int256DataSources yield return () => (Int256.One, Int256.Zero, Int256.One); yield return () => (Int256.One, Int256.One, Int256.Zero); yield return () => (Int256.Zero, Int256.One, Int256.NegativeOne); - yield return () => (Int256.MaxValue,Int256.One, Int256.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819966")); + yield return () => (Int256.MaxValue,Int256.One, new Int256(ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue - 1)); yield return () => (Int256.MinValue,Int256.One,Int256.MaxValue); - yield return () => (Int256.MinValue,Int256.NegativeOne, Int256.Parse("-57896044618658097711785492504343953926634992332820282019728792003956564819967")); + yield return () => (Int256.MinValue,Int256.NegativeOne, new Int256(unchecked((ulong)-1), ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); yield return () => (new Int256(1, 2, 3, 4),new Int256(0, 1, 2, 3),new Int256(1, 1, 1, 1)); yield return () => (new Int256(0, 0, 0, 0),new Int256(0, 0, 0, 1),new Int256(unchecked((ulong)-1), ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); } diff --git a/src/MissingValues.Tests/Data/Int512DataSources.cs b/src/MissingValues.Tests/Data/Int512DataSources.cs index f1cba94..7f1758f 100644 --- a/src/MissingValues.Tests/Data/Int512DataSources.cs +++ b/src/MissingValues.Tests/Data/Int512DataSources.cs @@ -16,12 +16,48 @@ public class Int512DataSources { public static IEnumerable> op_AdditionTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, Int512.Zero, Int512.Zero); + yield return () => (Int512.One, Int512.Zero, Int512.One); + yield return () => (Int512.One, Int512.One, new Int512(0, 0, 0, 0, 0, 0, 0, 2)); + yield return () => ( + new Int512(0, 0, 0, 0, 0, 0, 1, ulong.MaxValue), + new Int512(0, 0, 0, 0, 0, 0, 1, 1), + new Int512(0, 0, 0, 0, 0, 0, 3, 0)); + yield return () => ( + new Int512(0, 0, 0, 1, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), + new Int512(0, 0, 0, 1, 1, 1, 1, 1), + new Int512(0, 0, 0, 3, 1, 1, 1, 0)); + yield return () => ( + new Int512(1, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), + new Int512(1, 1, 1, 1, 1, 1, 1, 1), + new Int512(3, 1, 1, 1, 1, 1, 1, 0)); + yield return () => (Int512.MaxValue, Int512.One, Int512.MinValue); + yield return () => (Int512.NegativeOne, Int512.One, Int512.Zero); } public static IEnumerable> op_CheckedAdditionTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, Int512.Zero, Int512.Zero, false); + yield return () => (Int512.One, Int512.Zero, Int512.One, false); + yield return () => (Int512.One, Int512.One, new Int512(0, 0, 0, 0, 0, 0, 0, 2), false); + yield return () => ( + new Int512(0, 0, 0, 0, 0, 0, 1, ulong.MaxValue), + new Int512(0, 0, 0, 0, 0, 0, 1, 1), + new Int512(0, 0, 0, 0, 0, 0, 3, 0), + false); + yield return () => ( + new Int512(0, 0, 0, 1, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), + new Int512(0, 0, 0, 1, 1, 1, 1, 1), + new Int512(0, 0, 0, 3, 1, 1, 1, 0), + false); + yield return () => ( + new Int512(1, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), + new Int512(1, 1, 1, 1, 1, 1, 1, 1), + new Int512(3, 1, 1, 1, 1, 1, 1, 0), + false); + yield return () => (Int512.MaxValue, Int512.One, Int512.MinValue, true); + yield return () => (Int512.NegativeOne, Int512.One, Int512.Zero, false); + yield return () => (Int512.MinValue, Int512.NegativeOne, Int512.MaxValue, true); } public static IEnumerable> op_CheckedDecrementTestData() @@ -41,7 +77,26 @@ public class Int512DataSources public static IEnumerable> op_CheckedSubtractionTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, Int512.Zero, Int512.Zero, false); + yield return () => (Int512.One, Int512.Zero, Int512.One, false); + yield return () => (Int512.One, Int512.One, Int512.Zero, false); + yield return () => ( + new Int512(0, 0, 0, 0, 0, 0, 0, 2), + Int512.One, + Int512.One, + false); + yield return () => ( + new Int512(0, 0, 0, 0, 0, 0, 1, 0), + new Int512(0, 0, 0, 0, 0, 0, 0, 1), + new Int512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue), + false); + yield return () => ( + new Int512(0, 0, 0, 1, 0, 0, 0, 0), + new Int512(0, 0, 0, 0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), + new Int512(0, 0, 0, 0, 0, 0, 0, 1), + false); + yield return () => (Int512.MinValue, Int512.One, Int512.MaxValue, true); + yield return () => (Int512.MaxValue, Int512.NegativeOne, Int512.MinValue, true); } public static IEnumerable> op_DecrementTestData() @@ -71,7 +126,27 @@ public class Int512DataSources public static IEnumerable> op_SubtractionTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, Int512.Zero, Int512.Zero); + yield return () => (Int512.One, Int512.Zero, Int512.One); + yield return () => (Int512.One, Int512.One, Int512.Zero); + yield return () => (Int512.Zero, Int512.One, Int512.NegativeOne); + yield return () => ( + Int512.MaxValue, + Int512.One, + new Int512(long.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue - 1)); + yield return () => (Int512.MinValue, Int512.One, Int512.MaxValue); + yield return () => ( + Int512.MinValue, + Int512.NegativeOne, + new Int512(unchecked((ulong)long.MinValue), 0, 0, 0, 0, 0, 0, 1)); + yield return () => ( + new Int512(1, 2, 3, 4, 5, 6, 7, 8), + new Int512(0, 1, 2, 3, 4, 5, 6, 7), + new Int512(1, 1, 1, 1, 1, 1, 1, 1)); + yield return () => ( + new Int512(0, 0, 0, 0, 0, 0, 0, 0), + new Int512(0, 0, 0, 0, 0, 0, 0, 1), + new Int512(unchecked((ulong)-1), ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); } public static IEnumerable> op_ShiftLeftTestData() From a1f449c6aee24eefbff6a43e0d12cc7b756ccec0 Mon Sep 17 00:00:00 2001 From: crookseta Date: Tue, 23 Dec 2025 09:27:21 -0500 Subject: [PATCH 34/74] -Added Tests for Int512 methods: op_IncrementTestData, op_CheckedIncrementTestData, op_DecrementTestData and op_CheckedDecrementTestData. --- .../Data/Int512DataSources.cs | 65 +++++++++++++++++-- 1 file changed, 61 insertions(+), 4 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int512DataSources.cs b/src/MissingValues.Tests/Data/Int512DataSources.cs index 7f1758f..b304d67 100644 --- a/src/MissingValues.Tests/Data/Int512DataSources.cs +++ b/src/MissingValues.Tests/Data/Int512DataSources.cs @@ -62,12 +62,53 @@ public class Int512DataSources public static IEnumerable> op_CheckedDecrementTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, Int512.NegativeOne, false); + yield return () => (Int512.One, Int512.Zero, false); + yield return () => ( + new Int512(0, 0, 0, 0, 0, 0, 0, 2), + new Int512(0, 0, 0, 0, 0, 0, 0, 1), + false); + yield return () => ( + new Int512(0, 0, 0, 0, 0, 0, 1, 0), + new Int512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue), + false); + yield return () => ( + new Int512(0, 0, 0, 0, 1, 0, 0, 0), + new Int512(0, 0, 0, 0, 0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), + false); + yield return () => ( + new Int512(0, 0, 0, 1, 0, 0, 0, 0), + new Int512(0, 0, 0, 0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), + false); + yield return () => ( + new Int512(1, 0, 0, 0, 0, 0, 0, 0), + new Int512(0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), + false); + yield return () => (Int512.MinValue, Int512.MaxValue, true); } public static IEnumerable> op_CheckedIncrementTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, Int512.One, false); + yield return () => (Int512.One, new Int512(0, 0, 0, 0, 0, 0, 0, 2), false); + yield return () => (Int512.MaxValue, Int512.Zero, true); + yield return () => (Int512.NegativeOne, Int512.Zero, false); + yield return () => ( + new Int512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue), + new Int512(0, 0, 0, 0, 0, 0, 1, 0), + false); + yield return () => ( + new Int512(0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), + new Int512(1, 0, 0, 0, 0, 0, 0, 0), + false); + yield return () => ( + new Int512(0, 0, 0, 0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), + new Int512(0, 0, 0, 1, 0, 0, 0, 0), + false); + yield return () => ( + new Int512(unchecked((ulong)-123456789), 987654321, 555555555, 444444444, 333333333, 222222222, 111111111, 999999999), + new Int512(unchecked((ulong)-123456789), 987654321, 555555555, 444444444, 333333333, 222222222, 111111111, 1000000000), + false); } public static IEnumerable> op_CheckedMultiplyTestData() @@ -101,7 +142,14 @@ public class Int512DataSources public static IEnumerable> op_DecrementTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, Int512.NegativeOne); + yield return () => (Int512.One, Int512.Zero); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 2), new Int512(0, 0, 0, 0, 0, 0, 0, 1)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 1, 0), new Int512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue)); + yield return () => (new Int512(0, 0, 0, 0, 0, 1, 0, 0), new Int512(0, 0, 0, 0, 0, 0, ulong.MaxValue, ulong.MaxValue)); + yield return () => (new Int512(0, 0, 0, 0, 1, 0, 0, 0), new Int512(0, 0, 0, 0, 0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); + yield return () => (new Int512(1, 0, 0, 0, 0, 0, 0, 0), new Int512(0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); + yield return () => (Int512.MinValue, Int512.MaxValue); } public static IEnumerable> op_DivisionTestData() @@ -111,7 +159,16 @@ public class Int512DataSources public static IEnumerable> op_IncrementTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, Int512.One); + yield return () => (Int512.One, new Int512(0, 0, 0, 0, 0, 0, 0, 2)); + yield return () => (Int512.MaxValue, Int512.MinValue); + yield return () => (Int512.NegativeOne, Int512.Zero); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue), new Int512(0, 0, 0, 0, 0, 0, 1, 0)); + yield return () => (new Int512(0, 0, 0, 0, 0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new Int512(0, 0, 0, 0, 1, 0, 0, 0)); + yield return () => ( + new Int512(unchecked((ulong)-123456789), 987654321, 555555555, 444444444, 333333333, 222222222, 111111111, 999999999), + new Int512(unchecked((ulong)-123456789), 987654321, 555555555, 444444444, 333333333, 222222222, 111111111, 1000000000)); + yield return () => (new Int512(0, 0, 0, 0, 0x8000000000000000, 0, 0, 0),new Int512(0, 0, 0, 0, 0x8000000000000000, 0, 0, 1)); } public static IEnumerable> op_ModulusTestData() From 3cd609de53d16e9cddab46bd465dc104c2d08b61 Mon Sep 17 00:00:00 2001 From: crookseta Date: Thu, 25 Dec 2025 12:49:54 -0500 Subject: [PATCH 35/74] Replace parsing with constructor. --- .../Data/Int256DataSources.cs | 31 ++++++++++--------- .../Data/UInt512DataSources.cs | 6 ++-- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int256DataSources.cs b/src/MissingValues.Tests/Data/Int256DataSources.cs index 3f914aa..4be3d0b 100644 --- a/src/MissingValues.Tests/Data/Int256DataSources.cs +++ b/src/MissingValues.Tests/Data/Int256DataSources.cs @@ -72,8 +72,8 @@ public class Int256DataSources yield return () => (Int256.MaxValue, Int256.One, Int256.MaxValue, false); yield return () => (Int256.MaxValue, new Int256(0, 0, 0, 2), default, true); yield return () => (Int256.MinValue, Int256.NegativeOne, default, true); - yield return () => (new Int256(0, 0, 0, ulong.MaxValue), new Int256(0, 0, 0, ulong.MaxValue), Int256.Parse("340282366920938463426481119284349108225"), false); - yield return () => (new Int256(ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new Int256(2, 0, 0, 0), Int256.Parse("-12554203470773361527671578846415332832204710888928069025792"), false); + yield return () => (new Int256(0, 0, 0, ulong.MaxValue), new Int256(0, 0, 0, ulong.MaxValue), new Int256(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFE, 0x0000_0000_0000_0001), false); + yield return () => (new Int256(ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new Int256(2, 0, 0, 0), new Int256(0xFFFF_FFFF_FFFF_FFFE, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), false); yield return () => (new Int256(long.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new Int256(2, 0, 0, 0), default, true); } @@ -113,14 +113,14 @@ public class Int256DataSources yield return () => (Int256.MaxValue, Int256.MaxValue, Int256.One); yield return () => (Int256.MinValue, Int256.MinValue, Int256.One); yield return () => (new Int256(0, 0, 1, 0), new Int256(0, 1, 0, 0), Int256.Zero); - yield return () => (Int256.Parse("340282366920938463463374607431768211456"), Int256.Parse("18446744073709551616"), Int256.Parse("18446744073709551616")); - yield return () => (Int256.Parse("340282366920938463463374607431768211456"), Int256.Parse("-18446744073709551616"), Int256.Parse("-18446744073709551616")); - yield return () => (Int256.Parse("-340282366920938463463374607431768211456"), Int256.Parse("18446744073709551616"), Int256.Parse("-18446744073709551616")); - yield return () => (Int256.Parse("-340282366920938463463374607431768211456"), Int256.Parse("-18446744073709551616"), Int256.Parse("18446744073709551616")); - yield return () => (Int256.Parse("-340282366920938463463374607431768211456"), Int256.Parse("-18446744073709551616"), Int256.Parse("18446744073709551616")); - yield return () => (Int256.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968"), new Int256(0, 0, 0, 10), Int256.Parse("5789604461865809771178549250434395392663499233282028201972879200395656481996")); - yield return () => (Int256.Parse("170141183460469231731687303715884105728"), new Int256(0, 0, 0, 10), Int256.Parse("17014118346046923173168730371588410572")); - yield return () => (Int256.Parse("-170141183460469231731687303715884105728"), new Int256(0, 0, 0, 10), Int256.Parse("-17014118346046923173168730371588410572")); + yield return () => (new Int256(0x0000_0000_0000_0000, 0x0000_0000_0000_0001, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new Int256(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001, 0x0000_0000_0000_0000), new Int256(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001, 0x0000_0000_0000_0000)); + yield return () => (new Int256(0x0000_0000_0000_0000, 0x0000_0000_0000_0001, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new Int256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x0000_0000_0000_0000), new Int256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x0000_0000_0000_0000)); + yield return () => (new Int256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new Int256(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001, 0x0000_0000_0000_0000), new Int256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x0000_0000_0000_0000)); + yield return () => (new Int256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new Int256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x0000_0000_0000_0000), new Int256(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001, 0x0000_0000_0000_0000)); + yield return () => (new Int256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new Int256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x0000_0000_0000_0000), new Int256(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001, 0x0000_0000_0000_0000)); + yield return () => (new Int256(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0, 0, 0, 10), new Int256(0x0CCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC)); + yield return () => (new Int256(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x8000_0000_0000_0000, 0x0000_0000_0000_0000), new Int256(0, 0, 0, 10), new Int256(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0CCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC)); + yield return () => (new Int256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000, 0x0000_0000_0000_0000), new Int256(0, 0, 0, 10), new Int256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xF333_3333_3333_3333, 0x3333_3333_3333_3334)); } public static IEnumerable> op_IncrementTestData() @@ -147,7 +147,7 @@ public class Int256DataSources yield return () => (Int256.NegativeOne, new Int256(0, 0, 0, 2), Int256.NegativeOne); yield return () => (new Int256(0, 0, 0, 7), Int256.NegativeOne, Int256.Zero); yield return () => (Int256.MaxValue, new Int256(0, 0, 0, 123456789), new Int256(0, 0, 0, 77645365)); - yield return () => (Int256.Parse("401734511064747568885490523085290650630550748445698208825344"), Int256.Parse("100000000000000000000000000000000000000000000000000000000000"), Int256.Parse("1734511064747568885490523085290650630550748445698208825344")); + yield return () => (new Int256(0x0000_0000_0000_0040, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new Int256(0x0000_0000_0000_000F, 0xEE50_B702_5C36_A080, 0x2F23_6D04_753D_5B48, 0xE800_0000_0000_0000), new Int256(0x0000_0000_0000_0000, 0x46BD_23F6_8F25_7DFF, 0x4372_4BEE_2B0A_92DC, 0x6000_0000_0000_0000)); } public static IEnumerable> op_MultiplyTestData() @@ -159,7 +159,8 @@ public class Int256DataSources yield return () => (Int256.NegativeOne, Int256.NegativeOne, Int256.One); yield return () => (new Int256(0, 0, 0, 2), new Int256(0, 0, 0, 3), new Int256(0, 0, 0, 6)); yield return () => (new Int256(0, 0, 0, ulong.MaxValue), new Int256(0, 0, 0, 2), new Int256(0, 0, 1, ulong.MaxValue - 1)); - yield return () => (new Int256(0, 0, 0, ulong.MaxValue), new Int256(0, 0, 0, ulong.MaxValue), Int256.Parse("340282366920938463426481119284349108225")); + yield return () => (new Int256(0, 0, 0, ulong.MaxValue), new Int256(0, 0, 0, ulong.MaxValue), new Int256(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFE, 0x0000_0000_0000_0001)); + yield return () => (new Int256(0, 0, 1, 0), new Int256(0, 0, 1, 0), new Int256(0x0000_0000_0000_0000, 0x0000_0000_0000_0001, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); } public static IEnumerable> op_SubtractionTestData() @@ -919,9 +920,9 @@ public class Int256DataSources yield return () => (new Int256(0, 0, 0, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0, 0, 0, 10), (new Int256(0, 0, 0, 0xFFFF_FFFF_FFFF_FFFF / 10), new Int256(0, 0, 0, 0xFFFF_FFFF_FFFF_FFFF % 10))); yield return () => (new Int256(0, 0, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0, 0, 0, 10), (new Int256(0, new UInt128(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF) / 10), new Int256(0, new UInt128(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF) % 10))); yield return () => (new Int256(0, 0, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0, 0, 1, 0), (new Int256(0, new UInt128(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF) / new UInt128(1, 0)), new Int256(0, new UInt128(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF) % new UInt128(1, 0)))); - yield return () => (new Int256(0, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0, 0, 0, 10), (Int256.Parse("627710173538668076383578942320766641610235544446403451289"), new Int256(0, 0, 0, 5))); - yield return () => (new Int256(0, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0, 0, 1, 0), (Int256.Parse("340282366920938463463374607431768211455"), Int256.Parse("18446744073709551615"))); - yield return () => (new Int256(0, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0, 1, 0, 0), (Int256.Parse("18446744073709551615"), Int256.Parse("340282366920938463463374607431768211455"))); + yield return () => (new Int256(0, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0, 0, 0, 10), (new Int256(0x0000_0000_0000_0000, 0x1999_9999_9999_9999, 0x9999_9999_9999_9999, 0x9999_9999_9999_9999), new Int256(0, 0, 0, 5))); + yield return () => (new Int256(0, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0, 0, 1, 0), (new Int256(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF))); + yield return () => (new Int256(0, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0, 1, 0, 0), (new Int256(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF))); } public static IEnumerable> LeadingZeroCountTestData() diff --git a/src/MissingValues.Tests/Data/UInt512DataSources.cs b/src/MissingValues.Tests/Data/UInt512DataSources.cs index f16b531..5728709 100644 --- a/src/MissingValues.Tests/Data/UInt512DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt512DataSources.cs @@ -122,7 +122,7 @@ public class UInt512DataSources new UInt512(0, 0, 0, 0, 0, 0, 0, 3) ); yield return () => (UInt512.MaxValue, UInt512.One, UInt512.MaxValue); - yield return () => (UInt512.MaxValue, new UInt512(0, 0, 0, 0, 0, 1, 0, 0), UInt512.Parse("39402006196394479212279040100143613805079739270465446667948293404245721771497210611414266254884915640806627990306815")); + yield return () => (UInt512.MaxValue, new UInt512(0, 0, 0, 0, 0, 1, 0, 0), new UInt512(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); yield return () => ( new UInt512(0, 0, 0, 0, 0, 0, 1, ulong.MaxValue - 1), new UInt512(0, 0, 0, 0, 0, 0, 0, 2), @@ -845,8 +845,8 @@ public class UInt512DataSources yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), (new UInt512(0, 0, 0, 0, 0, 0, 0, 1), new UInt512(0, 0, 0, 0, 0, 0, 0, 0))); yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), (new UInt512(0, 0, 0, 0, 0, 0, 0, 1), new UInt512(0, 0, 0, 0, 0, 0, 0, 0))); yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 9), (new UInt512(0, 0, 0, 0, 0, 0, 0, 0), new UInt512(1, 2, 3, 4, 5, 6, 7, 8))); - yield return () => (UInt512.MaxValue, UInt256.MaxValue, (UInt512.Parse("115792089237316195423570985008687907853269984665640564039457584007913129639937"), UInt512.Zero)); - yield return () => (UInt512.MaxValue, new UInt512(0, 0, 0, 1, 0, 0, 0, 0), (UInt512.Parse("115792089237316195423570985008687907853269984665640564039457584007913129639935"), UInt512.Parse("115792089237316195423570985008687907853269984665640564039457584007913129639935"))); + yield return () => (UInt512.MaxValue, UInt256.MaxValue, (new UInt512(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001), UInt512.Zero)); + yield return () => (UInt512.MaxValue, new UInt512(0, 0, 0, 1, 0, 0, 0, 0), (new UInt512(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new UInt512(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF))); } public static IEnumerable> LeadingZeroCountTestData() From 1b743d3dfa83ecb624addbd7922b072a9b2fc8a1 Mon Sep 17 00:00:00 2001 From: crookseta Date: Thu, 25 Dec 2025 12:54:34 -0500 Subject: [PATCH 36/74] Added Tests for Int512 methods: op_MultiplyTestData, op_CheckedMultiplyTestData, op_DivisionTestData and op_ModulusTestData --- .../Data/Int512DataSources.cs | 84 ++++++++++++++++++- 1 file changed, 80 insertions(+), 4 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int512DataSources.cs b/src/MissingValues.Tests/Data/Int512DataSources.cs index b304d67..c2d42e2 100644 --- a/src/MissingValues.Tests/Data/Int512DataSources.cs +++ b/src/MissingValues.Tests/Data/Int512DataSources.cs @@ -113,7 +113,37 @@ public class Int512DataSources public static IEnumerable> op_CheckedMultiplyTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, Int512.Zero, Int512.Zero, false); + yield return () => (Int512.Zero, Int512.One, Int512.Zero, false); + yield return () => (Int512.One, Int512.One, Int512.One, false); + yield return () => (Int512.One, Int512.NegativeOne, Int512.NegativeOne, false); + yield return () => (Int512.NegativeOne, Int512.NegativeOne, Int512.One, false); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 2), new Int512(0, 0, 0, 0, 0, 0, 0, 3), new Int512(0, 0, 0, 0, 0, 0, 0, 6), false); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue), new Int256(0, 0, 0, 2), new Int256(0, 0, 1, ulong.MaxValue - 1), false); + yield return () => ( + new Int512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue), + new Int512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue), + new Int512(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFE, 0x0000_0000_0000_0001), + false + ); + yield return () => ( + new Int512(0, 0, 0, 0, 0, 0, 1, 0), + new Int512(0, 0, 0, 0, 0, 0, 1, 0), + new Int512(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), + false + ); + yield return () => ( + new Int512(0, 0, 0, 0, 0, 1, 0, 0), + new Int512(0, 0, 0, 0, 0, 1, 0, 0), + new Int512(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), + false + ); + yield return () => ( + Int512.MaxValue, + new Int512(0, 0, 0, 0, 0, 0, 0, 1), + default, + true + ); } public static IEnumerable> op_CheckedSubtractionTestData() @@ -154,7 +184,22 @@ public class Int512DataSources public static IEnumerable> op_DivisionTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, Int512.One, Int512.Zero); + yield return () => (Int512.One, Int512.One, Int512.One); + yield return () => (Int512.One, Int512.NegativeOne, Int512.NegativeOne); + yield return () => (Int512.NegativeOne, Int512.One, Int512.NegativeOne); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 4), new Int512(0, 0, 0, 0, 0, 0, 0, 2), new Int512(0, 0, 0, 0, 0, 0, 0, 2)); + yield return () => (Int512.MaxValue, Int512.One, Int512.MaxValue); + yield return () => (Int512.MinValue, Int512.One, Int512.MinValue); + yield return () => (Int512.Zero, Int512.MaxValue, Int256.Zero); + yield return () => (Int512.MaxValue, Int512.MaxValue, Int512.One); + yield return () => (Int512.MinValue, Int512.MinValue, Int512.One); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 1, 0), new Int512(0, 0, 0, 0, 0, 1, 0, 0), Int512.Zero); + yield return () => ( + new Int512(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), + new Int512(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001, 0x0000_0000_0000_0000), + new Int512(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001, 0x0000_0000_0000_0000) + ); } public static IEnumerable> op_IncrementTestData() @@ -173,12 +218,43 @@ public class Int512DataSources public static IEnumerable> op_ModulusTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, Int512.One, Int512.Zero); + yield return () => (Int512.One, Int512.One, Int512.Zero); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 123456789), Int512.One, Int512.Zero); + yield return () => (Int512.MaxValue, Int512.MaxValue, Int512.Zero); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 1, 0), new Int512(0, 0, 0, 0, 0, 1, 0, 0), new Int512(0, 0, 0, 0, 0, 0, 1, 0)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 10), new Int512(0, 0, 0, 0, 0, 0, 0, 3), new Int512(0, 0, 0, 0, 0, 0, 0, 1)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 15), new Int512(0, 0, 0, 0, 0, 0, 0, 5), Int512.Zero); + yield return () => (Int512.NegativeOne, new Int512(0, 0, 0, 0, 0, 0, 0, 2), Int512.NegativeOne); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 7), Int512.NegativeOne, Int512.Zero); + yield return () => (Int512.MaxValue, new Int512(0, 0, 0, 0, 0, 0, 0, 123456789), new Int512(0, 0, 0, 0, 0, 0, 0, 77645365)); + yield return () => (new Int512(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0040, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new Int512(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_000F, 0xEE50_B702_5C36_A080, 0x2F23_6D04_753D_5B48, 0xE800_0000_0000_0000), new Int512(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x46BD_23F6_8F25_7DFF, 0x4372_4BEE_2B0A_92DC, 0x6000_0000_0000_0000)); } public static IEnumerable> op_MultiplyTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, Int512.Zero, Int512.Zero); + yield return () => (Int512.Zero, Int512.One, Int512.Zero); + yield return () => (Int512.One, Int512.One, Int512.One); + yield return () => (Int512.One, Int512.NegativeOne, Int512.NegativeOne); + yield return () => (Int512.NegativeOne, Int512.NegativeOne, Int512.One); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 2), new Int512(0, 0, 0, 0, 0, 0, 0, 3), new Int512(0, 0, 0, 0, 0, 0, 0, 6)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue), new Int256(0, 0, 0, 2), new Int256(0, 0, 1, ulong.MaxValue - 1)); + yield return () => ( + new Int512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue), + new Int512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue), + new Int512(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFE, 0x0000_0000_0000_0001) + ); + yield return () => ( + new Int512(0, 0, 0, 0, 0, 0, 1, 0), + new Int512(0, 0, 0, 0, 0, 0, 1, 0), + new Int512(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000) + ); + yield return () => ( + new Int512(0, 0, 0, 0, 0, 1, 0, 0), + new Int512(0, 0, 0, 0, 0, 1, 0, 0), + new Int512(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000) + ); } public static IEnumerable> op_SubtractionTestData() From f5005af1e0ed4e589f08a53ec4dc07a1fac700ec Mon Sep 17 00:00:00 2001 From: crookseta Date: Sat, 24 Jan 2026 16:09:14 -0500 Subject: [PATCH 37/74] -Data for previously buggy values on casting. --- .../Data/Int256DataSources.cs | 17 ++++++++++--- .../Data/Int512DataSources.cs | 25 ++++++++++++++++--- .../Data/UInt256DataSources.cs | 9 ++++--- .../Data/UInt512DataSources.cs | 15 ++++++++--- 4 files changed, 53 insertions(+), 13 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int256DataSources.cs b/src/MissingValues.Tests/Data/Int256DataSources.cs index 4be3d0b..034c625 100644 --- a/src/MissingValues.Tests/Data/Int256DataSources.cs +++ b/src/MissingValues.Tests/Data/Int256DataSources.cs @@ -1276,7 +1276,7 @@ public class Int256DataSources public static IEnumerable> ConvertToCheckedInt512TestData() { - throw new NotImplementedException(); + yield return () => (Int256.Parse("-465182250000"), Int512.Parse("-465182250000")); } public static IEnumerable> ConvertToSaturatingInt512TestData() @@ -1321,17 +1321,26 @@ public class Int256DataSources public static IEnumerable> ConvertToCheckedDoubleTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Parse("781377183594418599030564404241984000000000000000000"), + 781377183594418599030564404241984000000000000000000.0d); + yield return () => (Int256.Parse("-781377183594418599030564404241984000000000000000000"), + -781377183594418599030564404241984000000000000000000.0d); } public static IEnumerable> ConvertToSaturatingDoubleTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Parse("781377183594418599030564404241984000000000000000000"), + 781377183594418599030564404241984000000000000000000.0d); + yield return () => (Int256.Parse("-781377183594418599030564404241984000000000000000000"), + -781377183594418599030564404241984000000000000000000.0d); } public static IEnumerable> ConvertToTruncatingDoubleTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Parse("781377183594418599030564404241984000000000000000000"), + 781377183594418599030564404241984000000000000000000.0d); + yield return () => (Int256.Parse("-781377183594418599030564404241984000000000000000000"), + -781377183594418599030564404241984000000000000000000.0d); } public static IEnumerable> ConvertToCheckedQuadTestData() diff --git a/src/MissingValues.Tests/Data/Int512DataSources.cs b/src/MissingValues.Tests/Data/Int512DataSources.cs index c2d42e2..82182c8 100644 --- a/src/MissingValues.Tests/Data/Int512DataSources.cs +++ b/src/MissingValues.Tests/Data/Int512DataSources.cs @@ -824,17 +824,36 @@ public class Int512DataSources public static IEnumerable> ConvertToCheckedDoubleTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Parse("781377183594418599030564404241984000000000000000000"), + 781377183594418599030564404241984000000000000000000.0d); + yield return () => (Int512.Parse("-781377183594418599030564404241984000000000000000000"), + -781377183594418599030564404241984000000000000000000.0d); + yield return () => (Int512.Parse("-693167423530203714894603546035770925859109268843954143792619895153655326951406405759993601526034894524347802740350892957243539455"), + -693167423530203714894603546035770925859109268843954143792619895153655326951406405759993601526034894524347802740350892957243539455.0d); } public static IEnumerable> ConvertToSaturatingDoubleTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Parse("781377183594418599030564404241984000000000000000000"), + 781377183594418599030564404241984000000000000000000.0d); + yield return () => (Int512.Parse("-781377183594418599030564404241984000000000000000000"), + -781377183594418599030564404241984000000000000000000.0d); + yield return () => (Int512.Parse("693167423530203714894603546035770925859109268843954143792619895153655326951406405759993601526034894524347802740350892957243539455"), + 693167423530203714894603546035770925859109268843954143792619895153655326951406405759993601526034894524347802740350892957243539455.0d); + yield return () => (Int512.Parse("-693167423530203714894603546035770925859109268843954143792619895153655326951406405759993601526034894524347802740350892957243539455"), + -693167423530203714894603546035770925859109268843954143792619895153655326951406405759993601526034894524347802740350892957243539455.0d); } public static IEnumerable> ConvertToTruncatingDoubleTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Parse("781377183594418599030564404241984000000000000000000"), + 781377183594418599030564404241984000000000000000000.0d); + yield return () => (Int512.Parse("-781377183594418599030564404241984000000000000000000"), + -781377183594418599030564404241984000000000000000000.0d); + yield return () => (Int512.Parse("693167423530203714894603546035770925859109268843954143792619895153655326951406405759993601526034894524347802740350892957243539455"), + 693167423530203714894603546035770925859109268843954143792619895153655326951406405759993601526034894524347802740350892957243539455.0d); + yield return () => (Int512.Parse("-693167423530203714894603546035770925859109268843954143792619895153655326951406405759993601526034894524347802740350892957243539455"), + -693167423530203714894603546035770925859109268843954143792619895153655326951406405759993601526034894524347802740350892957243539455.0d); } public static IEnumerable> ConvertToCheckedQuadTestData() diff --git a/src/MissingValues.Tests/Data/UInt256DataSources.cs b/src/MissingValues.Tests/Data/UInt256DataSources.cs index 7c44b7b..41a30d7 100644 --- a/src/MissingValues.Tests/Data/UInt256DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt256DataSources.cs @@ -1068,17 +1068,20 @@ public class UInt256DataSources public static IEnumerable> ConvertToCheckedDoubleTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.Parse("781377183594418599030564404241984000000000000000000"), + 781377183594418599030564404241984000000000000000000.0d); } public static IEnumerable> ConvertToSaturatingDoubleTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.Parse("781377183594418599030564404241984000000000000000000"), + 781377183594418599030564404241984000000000000000000.0d); } public static IEnumerable> ConvertToTruncatingDoubleTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.Parse("781377183594418599030564404241984000000000000000000"), + 781377183594418599030564404241984000000000000000000.0d); } public static IEnumerable> ConvertToCheckedQuadTestData() diff --git a/src/MissingValues.Tests/Data/UInt512DataSources.cs b/src/MissingValues.Tests/Data/UInt512DataSources.cs index 5728709..229a3f2 100644 --- a/src/MissingValues.Tests/Data/UInt512DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt512DataSources.cs @@ -1240,17 +1240,26 @@ public class UInt512DataSources public static IEnumerable> ConvertToCheckedDoubleTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Parse("781377183594418599030564404241984000000000000000000"), + 781377183594418599030564404241984000000000000000000.0d); + yield return () => (UInt512.Parse("693167423530203714894603546035770925859109268843954143792619895153655326951406405759993601526034894524347802740350892957243539455"), + 693167423530203714894603546035770925859109268843954143792619895153655326951406405759993601526034894524347802740350892957243539455.0d); } public static IEnumerable> ConvertToSaturatingDoubleTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Parse("781377183594418599030564404241984000000000000000000"), + 781377183594418599030564404241984000000000000000000.0d); + yield return () => (UInt512.Parse("693167423530203714894603546035770925859109268843954143792619895153655326951406405759993601526034894524347802740350892957243539455"), + 693167423530203714894603546035770925859109268843954143792619895153655326951406405759993601526034894524347802740350892957243539455.0d); } public static IEnumerable> ConvertToTruncatingDoubleTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.Parse("781377183594418599030564404241984000000000000000000"), + 781377183594418599030564404241984000000000000000000.0d); + yield return () => (UInt512.Parse("693167423530203714894603546035770925859109268843954143792619895153655326951406405759993601526034894524347802740350892957243539455"), + 693167423530203714894603546035770925859109268843954143792619895153655326951406405759993601526034894524347802740350892957243539455.0d); } public static IEnumerable> ConvertToCheckedQuadTestData() From 70beddc76fd540fd4586756a82d71a29e35b00fd Mon Sep 17 00:00:00 2001 From: crookseta Date: Sun, 8 Mar 2026 18:29:29 -0500 Subject: [PATCH 38/74] Added Tests for Int512 methods: op_ShiftLeftTestData, op_ShiftRightTestData, op_UnsignedShiftRightTestData, op_BitwiseAndTestData, op_BitwiseOrTestData, op_BitwiseXorTestData and op_OnesComplementTestData --- .../Data/Int512DataSources.cs | 50 ++++++++++++++++--- .../MissingValues.Tests.csproj | 2 +- 2 files changed, 44 insertions(+), 8 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int512DataSources.cs b/src/MissingValues.Tests/Data/Int512DataSources.cs index 82182c8..bc510c6 100644 --- a/src/MissingValues.Tests/Data/Int512DataSources.cs +++ b/src/MissingValues.Tests/Data/Int512DataSources.cs @@ -284,37 +284,73 @@ public class Int512DataSources public static IEnumerable> op_ShiftLeftTestData() { - throw new NotImplementedException(); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), 0, new Int512(1, 2, 3, 4, 5, 6, 7, 8)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 1), 1, new Int512(0, 0, 0, 0, 0, 0, 0, 2)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 1), 63, new Int512(0, 0, 0, 0, 0, 0, 0, 0x8000_0000_0000_0000)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 1), 64, new Int512(0, 0, 0, 0, 0, 0, 1, 0)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 1), 128, new Int512(0, 0, 0, 0, 0, 1, 0, 0)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 1), 256, new Int512(0, 0, 0, 1, 0, 0, 0, 0)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 1), 511, new Int512(0x8000_0000_0000_0000, 0, 0, 0, 0, 0, 0, 0)); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), 512, new Int512(1, 2, 3, 4, 5, 6, 7, 8)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 1), 513, new Int512(0, 0, 0, 0, 0, 0, 0, 2)); } public static IEnumerable> op_ShiftRightTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, 100, Int512.Zero); + yield return () => (Int512.One, 0, Int512.One); + yield return () => (new Int512(1, 0, 0, 0, 0, 0, 0, 0), 64, new Int512(0, 1, 0, 0, 0, 0, 0, 0)); + yield return () => (new Int512(1, 0, 0, 0, 0, 0, 0, 0), 128, new Int512(0, 0, 1, 0, 0, 0, 0, 0)); + yield return () => (new Int512(1, 0, 0, 0, 0, 0, 0, 0), 192, new Int512(0, 0, 0, 1, 0, 0, 0, 0)); + yield return () => (new Int512(0b1000000000000000000000000000000000000000000000000000000000000000, 0, 0, 0, 0, 0, 0, 0), 031, new Int512(0b1111111111111111111111111111111100000000000000000000000000000000, 0, 0, 0, 0, 0, 0, 0)); + yield return () => (new Int512(0b1000000000000000000000000000000000000000000000000000000000000000, 0, 0, 0, 0, 0, 0, 0), 127, new Int512(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0, 0, 0, 0, 0, 0)); + yield return () => (new Int512(0b1000000000000000000000000000000000000000000000000000000000000000, 0, 0, 0, 0, 0, 0, 0), 255, new Int512(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0, 0, 0, 0)); + yield return () => (new Int512(0b1000000000000000000000000000000000000000000000000000000000000000, 0, 0, 0, 0, 0, 0, 0), 511, new Int512(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => (Int512.One, 256, Int512.One); } public static IEnumerable> op_UnsignedShiftRightTestData() { - throw new NotImplementedException(); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), 0, new Int512(1, 2, 3, 4, 5, 6, 7, 8)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 2), 1, new Int512(0, 0, 0, 0, 0, 0, 0, 1)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 0x8000_0000_0000_0000), 63, new Int512(0, 0, 0, 0, 0, 0, 0, 1)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 1, 0), 64, new Int512(0, 0, 0, 0, 0, 0, 0, 1)); + yield return () => (new Int512(0, 0, 0, 0, 0, 1, 0, 0), 128, new Int512(0, 0, 0, 0, 0, 0, 0, 1)); + yield return () => (new Int512(0, 0, 0, 1, 0, 0, 0, 0), 256, new Int512(0, 0, 0, 0, 0, 0, 0, 1)); + yield return () => (new Int512(0x8000_0000_0000_0000, 0, 0, 0, 0, 0, 0, 0), 511, new Int512(0, 0, 0, 0, 0, 0, 0, 1)); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), 512, new Int512(1, 2, 3, 4, 5, 6, 7, 8)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 2), 513, new Int512(0, 0, 0, 0, 0, 0, 0, 1)); } public static IEnumerable> op_BitwiseAndTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, Int512.Zero, Int512.Zero); + yield return () => (Int512.Zero, Int512.MaxValue, Int512.Zero); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8)); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), Int512.MaxValue, new Int512(1, 2, 3, 4, 5, 6, 7, 8)); } public static IEnumerable> op_BitwiseOrTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, Int512.Zero, Int512.Zero); + yield return () => (Int512.Zero, Int512.MaxValue, Int512.MaxValue); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8)); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), Int512.MaxValue, Int512.MaxValue); } public static IEnumerable> op_BitwiseXorTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, Int512.Zero, Int512.Zero); + yield return () => (Int512.Zero, Int512.MaxValue, Int512.MaxValue); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), Int512.Zero); } public static IEnumerable> op_OnesComplementTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, Int512.MaxValue); + yield return () => (Int512.MaxValue, Int512.Zero); + yield return () => (new Int512(0xAAAAAAAAAAAAAAAA, 0x5555555555555555, 0xAAAAAAAAAAAAAAAA, 0x5555555555555555, 0xAAAAAAAAAAAAAAAA, 0x5555555555555555, 0xAAAAAAAAAAAAAAAA, 0x5555555555555555), new Int512(0x5555555555555555, 0xAAAAAAAAAAAAAAAA, 0x5555555555555555, 0xAAAAAAAAAAAAAAAA, 0x5555555555555555, 0xAAAAAAAAAAAAAAAA, 0x5555555555555555, 0xAAAAAAAAAAAAAAAA)); + yield return () => (new Int512(0x0123456789ABCDEF, 0xFEDCBA9876543210, 0x0F0F0F0F0F0F0F0F, 0xF0F0F0F0F0F0F0F0, 0x0123456789ABCDEF, 0xFEDCBA9876543210, 0x0F0F0F0F0F0F0F0F, 0xF0F0F0F0F0F0F0F0), new Int512(~0x0123456789ABCDEFU, ~0xFEDCBA9876543210U, ~0x0F0F0F0F0F0F0F0FU, ~0xF0F0F0F0F0F0F0F0U, ~0x0123456789ABCDEFU, ~0xFEDCBA9876543210U, ~0x0F0F0F0F0F0F0F0FU, ~0xF0F0F0F0F0F0F0F0U)); } public static IEnumerable> op_EqualityTestData() diff --git a/src/MissingValues.Tests/MissingValues.Tests.csproj b/src/MissingValues.Tests/MissingValues.Tests.csproj index fe3499c..4b8fcd0 100644 --- a/src/MissingValues.Tests/MissingValues.Tests.csproj +++ b/src/MissingValues.Tests/MissingValues.Tests.csproj @@ -8,7 +8,7 @@ - + From 78a28c50dbf8932e1eb7669f7e84b18875c2fdf5 Mon Sep 17 00:00:00 2001 From: crookseta Date: Wed, 22 Apr 2026 15:01:28 -0500 Subject: [PATCH 39/74] -Added Tests for Int512 methods: op_EqualityTestData, op_InequalityTestData, op_GreaterThanOrEqualTestData, op_GreaterThanTestData, op_LessThanOrEqualTestData, op_LessThanTestData, AbsTestData, IsCanonicalTestData, IsComplexNumberTestData, IsEvenIntegerTestData, IsFiniteTestData, IsImaginaryNumberTestData, IsInfinityTestData, IsIntegerTestData, IsNaNTestData, IsNegativeTestData, IsNegativeInfinityTestData, IsNormalTestData, IsOddIntegerTestData, IsPositiveTestData, IsPositiveInfinityTestData, IsRealNumberTestData, IsSubnormalTestData and IsZeroTestData. --- .../Data/Int512DataSources.cs | 145 +++++++++++++++--- 1 file changed, 121 insertions(+), 24 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int512DataSources.cs b/src/MissingValues.Tests/Data/Int512DataSources.cs index bc510c6..adec2da 100644 --- a/src/MissingValues.Tests/Data/Int512DataSources.cs +++ b/src/MissingValues.Tests/Data/Int512DataSources.cs @@ -355,122 +355,219 @@ public class Int512DataSources public static IEnumerable> op_EqualityTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, Int512.Zero, true); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 9), false); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 6, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 9), new Int512(1, 2, 3, 4, 5, 6, 7, 1), false); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 4, 6, 7, 8), false); + yield return () => (new Int512(1, 2, 2, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(2, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new Int512(1, 1, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), false); } public static IEnumerable> op_InequalityTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, Int512.Zero, false); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 9), true); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 6, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 9), new Int512(1, 2, 3, 4, 5, 6, 7, 1), true); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 4, 6, 7, 8), true); + yield return () => (new Int512(1, 2, 2, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(2, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new Int512(1, 1, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), true); } public static IEnumerable> op_GreaterThanOrEqualTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, Int512.Zero, true); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 9), false); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 6, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 9), new Int512(1, 2, 3, 4, 5, 6, 7, 1), true); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 4, 6, 7, 8), true); + yield return () => (new Int512(1, 2, 2, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(2, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new Int512(1, 1, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), false); } public static IEnumerable> op_GreaterThanTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, Int512.Zero, false); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 9), false); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 6, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 9), new Int512(1, 2, 3, 4, 5, 6, 7, 1), true); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 4, 6, 7, 8), true); + yield return () => (new Int512(1, 2, 2, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(2, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new Int512(1, 1, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), false); } public static IEnumerable> op_LessThanOrEqualTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, Int512.Zero, true); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 9), true); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 6, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 9), new Int512(1, 2, 3, 4, 5, 6, 7, 1), false); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 4, 6, 7, 8), false); + yield return () => (new Int512(1, 2, 2, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(2, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new Int512(1, 1, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), true); } public static IEnumerable> op_LessThanTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, Int512.Zero, false); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), false); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 9), true); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 6, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 9), new Int512(1, 2, 3, 4, 5, 6, 7, 1), false); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 4, 6, 7, 8), false); + yield return () => (new Int512(1, 2, 2, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(2, 2, 3, 4, 5, 6, 7, 8), true); + yield return () => (new Int512(1, 1, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), true); } public static IEnumerable> AbsTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, Int512.Zero); + yield return () => (Int512.One, Int512.One); + yield return () => (Int512.NegativeOne, Int512.One); + yield return () => (Int512.MinValue + Int512.One, Int512.MaxValue); } public static IEnumerable> IsCanonicalTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, true); } public static IEnumerable> IsComplexNumberTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, false); } public static IEnumerable> IsEvenIntegerTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, true); + yield return () => (Int512.One, false); + yield return () => (Int512.NegativeOne, false); + yield return () => (new Int512(0, 0, 0, 2), true); + yield return () => (new Int512(0, 0, 0, 3), false); + yield return () => (new Int512(0, 0, 0, 4), true); + yield return () => (new Int512(0, 0, 0, 6), true); + yield return () => (new Int512(0, 0, 0, 8), true); + yield return () => (new Int512(0, 0, 0, 16), true); + yield return () => (-new Int512(0, 0, 0, 2), true); + yield return () => (-new Int512(0, 0, 0, 3), false); + yield return () => (-new Int512(0, 0, 0, 4), true); + yield return () => (-new Int512(0, 0, 0, 6), true); + yield return () => (-new Int512(0, 0, 0, 8), true); + yield return () => (-new Int512(0, 0, 0, 16), true); } public static IEnumerable> IsFiniteTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, true); } public static IEnumerable> IsImaginaryNumberTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, false); } public static IEnumerable> IsInfinityTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, false); } public static IEnumerable> IsIntegerTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, true); } public static IEnumerable> IsNaNTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, false); } public static IEnumerable> IsNegativeTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, false); + yield return () => (Int512.One, false); + yield return () => (Int512.MaxValue, false); + yield return () => (Int512.NegativeOne, true); + yield return () => (-Int512.One, true); + yield return () => (-Int512.MaxValue, true); + yield return () => (Int512.MinValue, true); } public static IEnumerable> IsNegativeInfinityTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, false); } public static IEnumerable> IsNormalTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, false); + yield return () => (Int512.One, true); + yield return () => (Int512.NegativeOne, true); } public static IEnumerable> IsOddIntegerTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, false); + yield return () => (Int512.One, true); + yield return () => (Int512.NegativeOne, true); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 2), false); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 3), true); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 4), false); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 6), false); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 8), false); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 16), false); + yield return () => (-new Int512(0, 0, 0, 0, 0, 0, 0, 2), false); + yield return () => (-new Int512(0, 0, 0, 0, 0, 0, 0, 3), true); + yield return () => (-new Int512(0, 0, 0, 0, 0, 0, 0, 4), false); + yield return () => (-new Int512(0, 0, 0, 0, 0, 0, 0, 6), false); + yield return () => (-new Int512(0, 0, 0, 0, 0, 0, 0, 8), false); + yield return () => (-new Int512(0, 0, 0, 0, 0, 0, 0, 16), false); } public static IEnumerable> IsPositiveTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, true); + yield return () => (Int512.One, true); + yield return () => (Int512.MaxValue, true); + yield return () => (Int512.NegativeOne, false); + yield return () => (-Int512.One, false); + yield return () => (-Int512.MaxValue, false); + yield return () => (Int512.MinValue, false); } public static IEnumerable> IsPositiveInfinityTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, false); } public static IEnumerable> IsRealNumberTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, true); } public static IEnumerable> IsSubnormalTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, false); } public static IEnumerable> IsZeroTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, true); + yield return () => (Int512.One, false); + yield return () => (Int512.NegativeOne, false); + yield return () => (Int512.MaxValue, false); + yield return () => (Int512.MinValue, false); } public static IEnumerable> MaxMagnitudeTestData() From 492582d147d3c84096df45004a0f3505199744a5 Mon Sep 17 00:00:00 2001 From: crookseta Date: Sat, 25 Apr 2026 12:34:43 -0500 Subject: [PATCH 40/74] Added Tests for Int512 methods: MaxMagnitudeTestData, MaxMagnitudeNumberTestData, MinMagnitudeTestData, MinMagnitudeNumberTestData, MultiplyAddEstimateTestData and ClampTestData. --- .../Data/Int256DataSources.cs | 2 +- .../Data/Int512DataSources.cs | 66 +++++++++++++++++-- .../Data/Sources/IBinaryIntegerDataSource.cs | 2 +- .../Data/UInt256DataSources.cs | 2 +- .../Data/UInt512DataSources.cs | 2 +- .../Numerics/Int256GenericMathTests.cs | 4 +- .../Numerics/Int512GenericMathTests.cs | 4 +- .../Numerics/UInt256GenericMathTests.cs | 4 +- .../Numerics/UInt512GenericMathTests.cs | 4 +- src/MissingValues.Tests/Pair.cs | 9 +++ 10 files changed, 80 insertions(+), 19 deletions(-) create mode 100644 src/MissingValues.Tests/Pair.cs diff --git a/src/MissingValues.Tests/Data/Int256DataSources.cs b/src/MissingValues.Tests/Data/Int256DataSources.cs index 034c625..cc5e803 100644 --- a/src/MissingValues.Tests/Data/Int256DataSources.cs +++ b/src/MissingValues.Tests/Data/Int256DataSources.cs @@ -915,7 +915,7 @@ public class Int256DataSources yield return () => (new Int256(0, 0, 0, 0), new Int256(0, 0, 0, 0)); } - public static IEnumerable> DivRemTestData() + public static IEnumerable)>> DivRemTestData() { yield return () => (new Int256(0, 0, 0, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0, 0, 0, 10), (new Int256(0, 0, 0, 0xFFFF_FFFF_FFFF_FFFF / 10), new Int256(0, 0, 0, 0xFFFF_FFFF_FFFF_FFFF % 10))); yield return () => (new Int256(0, 0, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new Int256(0, 0, 0, 10), (new Int256(0, new UInt128(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF) / 10), new Int256(0, new UInt128(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF) % 10))); diff --git a/src/MissingValues.Tests/Data/Int512DataSources.cs b/src/MissingValues.Tests/Data/Int512DataSources.cs index adec2da..2a0ecd8 100644 --- a/src/MissingValues.Tests/Data/Int512DataSources.cs +++ b/src/MissingValues.Tests/Data/Int512DataSources.cs @@ -572,27 +572,56 @@ public class Int512DataSources public static IEnumerable> MaxMagnitudeTestData() { - throw new NotImplementedException(); + yield return () => (Int512.MaxValue, 5, Int512.MaxValue); + yield return () => (Int512.One, 5, 5); + yield return () => (Int512.One, Int512.NegativeOne, Int512.One); + yield return () => (Int512.One, -2, -2); + yield return () => (Int512.NegativeOne, Int512.MaxValue, Int512.MaxValue); + yield return () => (Int512.MinValue, -2, Int512.MinValue); + yield return () => (Int512.MaxValue, Int512.MinValue, Int512.MinValue); } public static IEnumerable> MaxMagnitudeNumberTestData() { - throw new NotImplementedException(); + yield return () => (Int512.MaxValue, 5, Int512.MaxValue); + yield return () => (Int512.One, 5, 5); + yield return () => (Int512.One, Int512.NegativeOne, Int512.One); + yield return () => (Int512.One, -2, -2); + yield return () => (Int512.NegativeOne, Int512.MaxValue, Int512.MaxValue); + yield return () => (Int512.MinValue, -2, Int512.MinValue); + yield return () => (Int512.MaxValue, Int512.MinValue, Int512.MinValue); } public static IEnumerable> MinMagnitudeTestData() { - throw new NotImplementedException(); + yield return () => (Int512.MaxValue, 5, 5); + yield return () => (Int512.One, 5, Int512.One); + yield return () => (Int512.One, Int512.NegativeOne, Int512.NegativeOne); + yield return () => (Int512.One, -2, Int512.One); + yield return () => (Int512.NegativeOne, Int512.MaxValue, Int512.NegativeOne); + yield return () => (Int512.MinValue, -2, -2); + yield return () => (Int512.MaxValue, Int512.MinValue, Int512.MaxValue); } public static IEnumerable> MinMagnitudeNumberTestData() { - throw new NotImplementedException(); + yield return () => (Int512.MaxValue, 5, 5); + yield return () => (Int512.One, 5, Int512.One); + yield return () => (Int512.One, Int512.NegativeOne, Int512.NegativeOne); + yield return () => (Int512.One, -2, Int512.One); + yield return () => (Int512.NegativeOne, Int512.MaxValue, Int512.NegativeOne); + yield return () => (Int512.MinValue, -2, -2); + yield return () => (Int512.MaxValue, Int512.MinValue, Int512.MaxValue); } public static IEnumerable> MultiplyAddEstimateTestData() { - throw new NotImplementedException(); + yield return () => (Int512.One, Int512.One, Int512.One, 2); + yield return () => (Int512.One, Int512.Zero, Int512.One, Int512.One); + yield return () => (Int512.MaxValue, Int512.NegativeOne, Int512.NegativeOne, Int512.MinValue); + yield return () => (200, 100, 500, 20500); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, ulong.MaxValue, ulong.MaxValue), new Int512(0, 0, 0, 0, 0, 0, ulong.MaxValue, ulong.MaxValue), new Int512(0, 0, 0, 0, 0, 0, ulong.MaxValue, ulong.MaxValue), Int512.Parse("115792089237316195423570985008687907852929702298719625575994209400481361428480")); + yield return () => (new Int512(0, 0, 0, 0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new Int512(0, 0, 0, 0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new Int512(0, 0, 0, 0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue), new Int512(ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, 0, 0, 0, 0)); } public static IEnumerable> ParseTestData() @@ -627,7 +656,30 @@ public class Int512DataSources public static IEnumerable> ClampTestData() { - throw new NotImplementedException(); + yield return () => ( + new Int512(0, 0, 0, 0, 0, 0, 0, 1), + new Int512(0, 0, 0, 0, 0, 0, 0, 2), + new Int512(0, 0, 0, 0, 0, 0, 0, 4), + new Int512(0, 0, 0, 0, 0, 0, 0, 2) + ); + yield return () => ( + new Int512(0, 0, 0, 0, 0, 0, 0, 1), + new Int512(0, 0, 0, 0, 0, 0, 0, 1), + new Int512(0, 0, 0, 0, 0, 0, 0, 4), + new Int512(0, 0, 0, 0, 0, 0, 0, 1) + ); + yield return () => ( + new Int512(0, 0, 0, 0, 0, 1, 0, 0), + new Int512(0, 0, 0, 0, 0, 0, 0, 1), + new Int512(0, 0, 0, 0, 1, 0, 0, 0), + new Int512(0, 0, 0, 0, 0, 1, 0, 0) + ); + yield return () => ( + new Int512(0, 0, 0, 0, 0, 1, 0, 0), + new Int512(0, 0, 0, 0, 0, 0, 0, 1), + new Int512(1, 0, 0, 0, 0, 0, 0, 0), + new Int512(0, 0, 0, 0, 0, 1, 0, 0) + ); } public static IEnumerable> CopySignTestData() @@ -670,7 +722,7 @@ public class Int512DataSources throw new NotImplementedException(); } - public static IEnumerable> DivRemTestData() + public static IEnumerable)>> DivRemTestData() { throw new NotImplementedException(); } diff --git a/src/MissingValues.Tests/Data/Sources/IBinaryIntegerDataSource.cs b/src/MissingValues.Tests/Data/Sources/IBinaryIntegerDataSource.cs index b0bda8f..a44678a 100644 --- a/src/MissingValues.Tests/Data/Sources/IBinaryIntegerDataSource.cs +++ b/src/MissingValues.Tests/Data/Sources/IBinaryIntegerDataSource.cs @@ -5,7 +5,7 @@ namespace MissingValues.Tests.Data.Sources; public interface IBinaryIntegerDataSource where T : IBinaryInteger { - static abstract IEnumerable> DivRemTestData(); + static abstract IEnumerable)>> DivRemTestData(); static abstract IEnumerable> LeadingZeroCountTestData(); static abstract IEnumerable> PopCountTestData(); static abstract IEnumerable> ReadBigEndianTestData(); diff --git a/src/MissingValues.Tests/Data/UInt256DataSources.cs b/src/MissingValues.Tests/Data/UInt256DataSources.cs index 41a30d7..b1a245c 100644 --- a/src/MissingValues.Tests/Data/UInt256DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt256DataSources.cs @@ -664,7 +664,7 @@ public class UInt256DataSources yield return () => (new UInt256(0, 0, 0, 0), new UInt256(0, 0, 0, 0)); } - public static IEnumerable> DivRemTestData() + public static IEnumerable)>> DivRemTestData() { yield return () => (new UInt256(1, 2, 3, 4), UInt256.One, (new UInt256(1, 2, 3, 4), new UInt256(0, 0, 0, 0))); yield return () => (new UInt256(1, 2, 3, 4), new UInt256(1, 2, 3, 4), (new UInt256(0, 0, 0, 1), new UInt256(0, 0, 0, 0))); diff --git a/src/MissingValues.Tests/Data/UInt512DataSources.cs b/src/MissingValues.Tests/Data/UInt512DataSources.cs index 229a3f2..a7dca11 100644 --- a/src/MissingValues.Tests/Data/UInt512DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt512DataSources.cs @@ -839,7 +839,7 @@ public class UInt512DataSources yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 0), new UInt512(0, 0, 0, 0, 0, 0, 0, 0)); } - public static IEnumerable> DivRemTestData() + public static IEnumerable)>> DivRemTestData() { yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(0, 0, 0, 0, 0, 0, 0, 1), (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(0, 0, 0, 0, 0, 0, 0, 0))); yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), new UInt512(1, 2, 3, 4, 5, 6, 7, 8), (new UInt512(0, 0, 0, 0, 0, 0, 0, 1), new UInt512(0, 0, 0, 0, 0, 0, 0, 0))); diff --git a/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs b/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs index f620c5f..a6d5f65 100644 --- a/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs @@ -557,10 +557,10 @@ public async Task Log2Test(Int256 value, Int256 expected) #region IBinaryInteger [Test] [MethodDataSource(typeof(DataSources), nameof(DivRemTestData))] - public async Task DivRemTest(Int256 left, Int256 right, (Int256, Int256) expected) + public async Task DivRemTest(Int256 left, Int256 right, Pair expected) { var result = Helper.DivRem(left, right); - await Assert.That(result).IsEqualTo(expected); + await Assert.That((Pair)result).IsEqualTo(expected); } [Test] [MethodDataSource(typeof(DataSources), nameof(LeadingZeroCountTestData))] diff --git a/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs b/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs index 8d85a28..023a997 100644 --- a/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs @@ -556,10 +556,10 @@ public async Task Log2Test(Int512 value, Int512 expected) #region IBinaryInteger [Test] [MethodDataSource(typeof(DataSources), nameof(DivRemTestData))] - public async Task DivRemTest(Int512 left, Int512 right, (Int512, Int512) expected) + public async Task DivRemTest(Int512 left, Int512 right, Pair expected) { var result = Helper.DivRem(left, right); - await Assert.That(result).IsEqualTo(expected); + await Assert.That((Pair)result).IsEqualTo(expected); } [Test] [MethodDataSource(typeof(DataSources), nameof(LeadingZeroCountTestData))] diff --git a/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs b/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs index 355e51a..6306c9d 100644 --- a/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs @@ -557,10 +557,10 @@ public async Task Log2Test(UInt256 value, UInt256 expected) #region IBinaryInteger [Test] [MethodDataSource(typeof(DataSources), nameof(DivRemTestData))] - public async Task DivRemTest(UInt256 left, UInt256 right, (UInt256, UInt256) expected) + public async Task DivRemTest(UInt256 left, UInt256 right, Pair expected) { var result = Helper.DivRem(left, right); - await Assert.That(result).IsEqualTo(expected); + await Assert.That((Pair)result).IsEqualTo(expected); } [Test] [MethodDataSource(typeof(DataSources), nameof(LeadingZeroCountTestData))] diff --git a/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs b/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs index 4223cae..a814b76 100644 --- a/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs @@ -556,10 +556,10 @@ public async Task Log2Test(UInt512 value, UInt512 expected) #region IBinaryInteger [Test] [MethodDataSource(typeof(DataSources), nameof(DivRemTestData))] - public async Task DivRemTest(UInt512 left, UInt512 right, (UInt512, UInt512) expected) + public async Task DivRemTest(UInt512 left, UInt512 right, Pair expected) { var result = Helper.DivRem(left, right); - await Assert.That(result).IsEqualTo(expected); + await Assert.That((Pair)result).IsEqualTo(expected); } [Test] [MethodDataSource(typeof(DataSources), nameof(LeadingZeroCountTestData))] diff --git a/src/MissingValues.Tests/Pair.cs b/src/MissingValues.Tests/Pair.cs new file mode 100644 index 0000000..3d8307e --- /dev/null +++ b/src/MissingValues.Tests/Pair.cs @@ -0,0 +1,9 @@ +namespace MissingValues.Tests; + +public record struct Pair(T First, T Second) +{ + public static implicit operator Pair((T, T) p) + { + return new Pair(p.Item1, p.Item2); + } +} \ No newline at end of file From c660c1c572eee1d47ba02a5504fac2a08da04ab9 Mon Sep 17 00:00:00 2001 From: crookseta Date: Tue, 12 May 2026 16:18:28 -0500 Subject: [PATCH 41/74] -Added Tests for Int512 methods: CopySignTestData, MaxTestData, MaxNumberTestData, MinTestData, MinNumberTestData and SignTestData. --- .../Data/Int512DataSources.cs | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int512DataSources.cs b/src/MissingValues.Tests/Data/Int512DataSources.cs index 2a0ecd8..fef58aa 100644 --- a/src/MissingValues.Tests/Data/Int512DataSources.cs +++ b/src/MissingValues.Tests/Data/Int512DataSources.cs @@ -684,32 +684,47 @@ public class Int512DataSources public static IEnumerable> CopySignTestData() { - throw new NotImplementedException(); + yield return () => (Int512.One, Int512.One, Int512.One); + yield return () => (Int512.One, Int512.NegativeOne, Int512.NegativeOne); + yield return () => (Int512.NegativeOne, Int512.NegativeOne, Int512.NegativeOne); + yield return () => (Int512.NegativeOne, Int512.One, Int512.One); } public static IEnumerable> MaxTestData() { - throw new NotImplementedException(); + yield return () => (Int512.One, Int512.One, Int512.One); + yield return () => (Int512.One, Int512.NegativeOne, Int512.One); + yield return () => (Int512.MinValue, Int512.NegativeOne, Int512.NegativeOne); + yield return () => (Int512.Zero, Int512.One, Int512.One); + yield return () => (Int512.One, Int512.MaxValue, Int512.MaxValue); } public static IEnumerable> MaxNumberTestData() { - throw new NotImplementedException(); + return MaxTestData(); } public static IEnumerable> MinTestData() { - throw new NotImplementedException(); + yield return () => (Int512.One, Int512.One, Int512.One); + yield return () => (Int512.One, Int512.NegativeOne, Int512.NegativeOne); + yield return () => (Int512.MinValue, Int512.NegativeOne, Int512.MinValue); + yield return () => (Int512.Zero, Int512.One, Int512.Zero); + yield return () => (Int512.One, Int512.MaxValue, Int512.One); } public static IEnumerable> MinNumberTestData() { - throw new NotImplementedException(); + return MinTestData(); } public static IEnumerable> SignTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Zero, 0); + yield return () => (Int512.MaxValue, 1); + yield return () => (Int512.One, 1); + yield return () => (Int512.MinValue, -1); + yield return () => (Int512.NegativeOne, -1); } public static IEnumerable> IsPow2TestData() From 167b2a4d0ad9a98f14ad13636e3bf60a6348235d Mon Sep 17 00:00:00 2001 From: crookseta Date: Tue, 12 May 2026 21:23:25 -0500 Subject: [PATCH 42/74] -Updated TUnit. -Replaced MethodDataSource Attribute to the generic version. --- .../MissingValues.Tests.csproj | 2 +- .../Numerics/Int256GenericMathTests.cs | 150 +++++++++--------- .../Numerics/Int512GenericMathTests.cs | 150 +++++++++--------- .../Numerics/UInt256GenericMathTests.cs | 150 +++++++++--------- .../Numerics/UInt512GenericMathTests.cs | 150 +++++++++--------- 5 files changed, 301 insertions(+), 301 deletions(-) diff --git a/src/MissingValues.Tests/MissingValues.Tests.csproj b/src/MissingValues.Tests/MissingValues.Tests.csproj index 4b8fcd0..abf4ae0 100644 --- a/src/MissingValues.Tests/MissingValues.Tests.csproj +++ b/src/MissingValues.Tests/MissingValues.Tests.csproj @@ -8,7 +8,7 @@ - + diff --git a/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs b/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs index a6d5f65..b6f7d1c 100644 --- a/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs @@ -15,7 +15,7 @@ public class Int256GenericMathTests { #region Operators [Test] - [MethodDataSource(typeof(DataSources), nameof(op_AdditionTestData))] + [MethodDataSource(nameof(op_AdditionTestData))] public async Task op_AdditionTest(Int256 left, Int256 right, Int256 expected) { var result = left + right; @@ -23,7 +23,7 @@ public async Task op_AdditionTest(Int256 left, Int256 right, Int256 expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_CheckedAdditionTestData))] + [MethodDataSource(nameof(op_CheckedAdditionTestData))] public async Task op_CheckedAdditionTest(Int256 left, Int256 right, Int256 expected, bool overflows) { if (overflows) @@ -37,7 +37,7 @@ public async Task op_CheckedAdditionTest(Int256 left, Int256 right, Int256 expec } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_IncrementTestData))] + [MethodDataSource(nameof(op_IncrementTestData))] public async Task op_IncrementTest(Int256 value, Int256 expected) { var result = ++value; @@ -45,7 +45,7 @@ public async Task op_IncrementTest(Int256 value, Int256 expected) await Assert.That(result).IsEqualTo(expected).And.IsEqualTo(value); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_CheckedIncrementTestData))] + [MethodDataSource(nameof(op_CheckedIncrementTestData))] public async Task op_CheckedIncrementTest(Int256 value, Int256 expected, bool overflows) { if (overflows) @@ -59,7 +59,7 @@ public async Task op_CheckedIncrementTest(Int256 value, Int256 expected, bool ov } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_SubtractionTestData))] + [MethodDataSource(nameof(op_SubtractionTestData))] public async Task op_SubtractionTest(Int256 left, Int256 right, Int256 expected) { var result = left - right; @@ -67,7 +67,7 @@ public async Task op_SubtractionTest(Int256 left, Int256 right, Int256 expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_CheckedSubtractionTestData))] + [MethodDataSource(nameof(op_CheckedSubtractionTestData))] public async Task op_CheckedSubtractionTest(Int256 left, Int256 right, Int256 expected, bool overflows) { if (overflows) @@ -81,7 +81,7 @@ public async Task op_CheckedSubtractionTest(Int256 left, Int256 right, Int256 ex } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_DecrementTestData))] + [MethodDataSource(nameof(op_DecrementTestData))] public async Task op_DecrementTest(Int256 value, Int256 expected) { var result = --value; @@ -89,7 +89,7 @@ public async Task op_DecrementTest(Int256 value, Int256 expected) await Assert.That(result).IsEqualTo(expected).And.IsEqualTo(value); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_CheckedDecrementTestData))] + [MethodDataSource(nameof(op_CheckedDecrementTestData))] public async Task op_CheckedDecrementTest(Int256 value, Int256 expected, bool overflows) { if (overflows) @@ -103,7 +103,7 @@ public async Task op_CheckedDecrementTest(Int256 value, Int256 expected, bool ov } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_MultiplyTestData))] + [MethodDataSource(nameof(op_MultiplyTestData))] public async Task op_MultiplyTest(Int256 left, Int256 right, Int256 expected) { var result = left * right; @@ -111,7 +111,7 @@ public async Task op_MultiplyTest(Int256 left, Int256 right, Int256 expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_CheckedMultiplyTestData))] + [MethodDataSource(nameof(op_CheckedMultiplyTestData))] public async Task op_CheckedMultiplyTest(Int256 left, Int256 right, Int256 expected, bool overflows) { if (overflows) @@ -125,7 +125,7 @@ public async Task op_CheckedMultiplyTest(Int256 left, Int256 right, Int256 expec } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_DivisionTestData))] + [MethodDataSource(nameof(op_DivisionTestData))] public async Task op_DivisionTest(Int256 left, Int256 right, Int256 expected) { if (right == Int256.Zero) @@ -140,7 +140,7 @@ public async Task op_DivisionTest(Int256 left, Int256 right, Int256 expected) } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_ModulusTestData))] + [MethodDataSource(nameof(op_ModulusTestData))] public async Task op_ModulusTest(Int256 left, Int256 right, Int256 expected) { if (right == Int256.Zero) @@ -155,7 +155,7 @@ public async Task op_ModulusTest(Int256 left, Int256 right, Int256 expected) } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_OnesComplementTestData))] + [MethodDataSource(nameof(op_OnesComplementTestData))] public async Task op_OnesComplementTest(Int256 value, Int256 expected) { var result = ~value; @@ -163,7 +163,7 @@ public async Task op_OnesComplementTest(Int256 value, Int256 expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_BitwiseAndTestData))] + [MethodDataSource(nameof(op_BitwiseAndTestData))] public async Task op_BitwiseAndTest(Int256 left, Int256 right, Int256 expected) { var result = left & right; @@ -171,7 +171,7 @@ public async Task op_BitwiseAndTest(Int256 left, Int256 right, Int256 expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_BitwiseOrTestData))] + [MethodDataSource(nameof(op_BitwiseOrTestData))] public async Task op_BitwiseOrTest(Int256 left, Int256 right, Int256 expected) { var result = left | right; @@ -179,7 +179,7 @@ public async Task op_BitwiseOrTest(Int256 left, Int256 right, Int256 expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_BitwiseXorTestData))] + [MethodDataSource(nameof(op_BitwiseXorTestData))] public async Task op_BitwiseXorTest(Int256 left, Int256 right, Int256 expected) { var result = left ^ right; @@ -187,7 +187,7 @@ public async Task op_BitwiseXorTest(Int256 left, Int256 right, Int256 expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_ShiftLeftTestData))] + [MethodDataSource(nameof(op_ShiftLeftTestData))] public async Task op_ShiftLeftTest(Int256 value, int shiftAmount, Int256 expected) { var result = value << shiftAmount; @@ -195,7 +195,7 @@ public async Task op_ShiftLeftTest(Int256 value, int shiftAmount, Int256 expecte await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_ShiftRightTestData))] + [MethodDataSource(nameof(op_ShiftRightTestData))] public async Task op_ShiftRightTest(Int256 value, int shiftAmount, Int256 expected) { var result = value >> shiftAmount; @@ -203,7 +203,7 @@ public async Task op_ShiftRightTest(Int256 value, int shiftAmount, Int256 expect await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_UnsignedShiftRightTestData))] + [MethodDataSource(nameof(op_UnsignedShiftRightTestData))] public async Task op_UnsignedShiftRightTest(Int256 value, int shiftAmount, Int256 expected) { var result = value >>> shiftAmount; @@ -211,7 +211,7 @@ public async Task op_UnsignedShiftRightTest(Int256 value, int shiftAmount, Int25 await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_EqualityTestData))] + [MethodDataSource(nameof(op_EqualityTestData))] public async Task op_EqualityTest(Int256 left, Int256 right, bool expected) { var result = left == right; @@ -219,7 +219,7 @@ public async Task op_EqualityTest(Int256 left, Int256 right, bool expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_InequalityTestData))] + [MethodDataSource(nameof(op_InequalityTestData))] public async Task op_InequalityTest(Int256 left, Int256 right, bool expected) { var result = left != right; @@ -227,7 +227,7 @@ public async Task op_InequalityTest(Int256 left, Int256 right, bool expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_LessThanTestData))] + [MethodDataSource(nameof(op_LessThanTestData))] public async Task op_LessThanTest(Int256 left, Int256 right, bool expected) { var result = left < right; @@ -235,7 +235,7 @@ public async Task op_LessThanTest(Int256 left, Int256 right, bool expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_LessThanOrEqualTestData))] + [MethodDataSource(nameof(op_LessThanOrEqualTestData))] public async Task op_LessThanOrEqualTest(Int256 left, Int256 right, bool expected) { var result = left <= right; @@ -243,7 +243,7 @@ public async Task op_LessThanOrEqualTest(Int256 left, Int256 right, bool expecte await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_GreaterThanTestData))] + [MethodDataSource(nameof(op_GreaterThanTestData))] public async Task op_GreaterThanTest(Int256 left, Int256 right, bool expected) { var result = left > right; @@ -251,7 +251,7 @@ public async Task op_GreaterThanTest(Int256 left, Int256 right, bool expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_GreaterThanOrEqualTestData))] + [MethodDataSource(nameof(op_GreaterThanOrEqualTestData))] public async Task op_GreaterThanOrEqualTest(Int256 left, Int256 right, bool expected) { var result = left >= right; @@ -262,189 +262,189 @@ public async Task op_GreaterThanOrEqualTest(Int256 left, Int256 right, bool expe #region INumberBase [Test] - [MethodDataSource(typeof(DataSources), nameof(AbsTestData))] + [MethodDataSource(nameof(AbsTestData))] public async Task AbsTest(Int256 value, Int256 expected) { Int256 result = Helper.Abs(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsCanonicalTestData))] + [MethodDataSource(nameof(IsCanonicalTestData))] public async Task IsCanonicalTest(Int256 value, bool expected) { bool result = Helper.IsCanonical(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsComplexNumberTestData))] + [MethodDataSource(nameof(IsComplexNumberTestData))] public async Task IsComplexNumberTest(Int256 value, bool expected) { bool result = Helper.IsComplexNumber(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsEvenIntegerTestData))] + [MethodDataSource(nameof(IsEvenIntegerTestData))] public async Task IsEvenIntegerTest(Int256 value, bool expected) { bool result = Helper.IsEvenInteger(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsFiniteTestData))] + [MethodDataSource(nameof(IsFiniteTestData))] public async Task IsFiniteTest(Int256 value, bool expected) { bool result = Helper.IsFinite(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsImaginaryNumberTestData))] + [MethodDataSource(nameof(IsImaginaryNumberTestData))] public async Task IsImaginaryNumberTest(Int256 value, bool expected) { bool result = Helper.IsImaginaryNumber(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsInfinityTestData))] + [MethodDataSource(nameof(IsInfinityTestData))] public async Task IsInfinityTest(Int256 value, bool expected) { bool result = Helper.IsInfinity(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsIntegerTestData))] + [MethodDataSource(nameof(IsIntegerTestData))] public async Task IsIntegerTest(Int256 value, bool expected) { bool result = Helper.IsInteger(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsNaNTestData))] + [MethodDataSource(nameof(IsNaNTestData))] public async Task IsNaNTest(Int256 value, bool expected) { bool result = Helper.IsNaN(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsNegativeTestData))] + [MethodDataSource(nameof(IsNegativeTestData))] public async Task IsNegativeTest(Int256 value, bool expected) { bool result = Helper.IsNegative(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsNegativeInfinityTestData))] + [MethodDataSource(nameof(IsNegativeInfinityTestData))] public async Task IsNegativeInfinityTest(Int256 value, bool expected) { bool result = Helper.IsNegativeInfinity(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsNormalTestData))] + [MethodDataSource(nameof(IsNormalTestData))] public async Task IsNormalTest(Int256 value, bool expected) { bool result = Helper.IsNormal(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsOddIntegerTestData))] + [MethodDataSource(nameof(IsOddIntegerTestData))] public async Task IsOddIntegerTest(Int256 value, bool expected) { bool result = Helper.IsOddInteger(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsPositiveTestData))] + [MethodDataSource(nameof(IsPositiveTestData))] public async Task IsPositiveTest(Int256 value, bool expected) { bool result = Helper.IsPositive(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsPositiveInfinityTestData))] + [MethodDataSource(nameof(IsPositiveInfinityTestData))] public async Task IsPositiveInfinityTest(Int256 value, bool expected) { bool result = Helper.IsPositiveInfinity(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsRealNumberTestData))] + [MethodDataSource(nameof(IsRealNumberTestData))] public async Task IsRealNumberTest(Int256 value, bool expected) { bool result = Helper.IsRealNumber(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsSubnormalTestData))] + [MethodDataSource(nameof(IsSubnormalTestData))] public async Task IsSubnormalTest(Int256 value, bool expected) { bool result = Helper.IsSubnormal(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsZeroTestData))] + [MethodDataSource(nameof(IsZeroTestData))] public async Task IsZeroTest(Int256 value, bool expected) { bool result = Helper.IsZero(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MaxMagnitudeTestData))] + [MethodDataSource(nameof(MaxMagnitudeTestData))] public async Task MaxMagnitudeTest(Int256 x, Int256 y, Int256 expected) { var result = Helper.MaxMagnitude(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MaxMagnitudeNumberTestData))] + [MethodDataSource(nameof(MaxMagnitudeNumberTestData))] public async Task MaxMagnitudeNumberTest(Int256 x, Int256 y, Int256 expected) { var result = Helper.MaxMagnitudeNumber(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MinMagnitudeTestData))] + [MethodDataSource(nameof(MinMagnitudeTestData))] public async Task MinMagnitudeTest(Int256 x, Int256 y, Int256 expected) { var result = Helper.MinMagnitude(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MinMagnitudeNumberTestData))] + [MethodDataSource(nameof(MinMagnitudeNumberTestData))] public async Task MinMagnitudeNumberTest(Int256 x, Int256 y, Int256 expected) { var result = Helper.MinMagnitudeNumber(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MultiplyAddEstimateTestData))] + [MethodDataSource(nameof(MultiplyAddEstimateTestData))] public async Task MultiplyAddEstimateTest(Int256 left, Int256 right, Int256 addend, Int256 expected) { var result = Helper.MultiplyAddEstimate(left, right, addend); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(ParseTestData))] + [MethodDataSource(nameof(ParseTestData))] public async Task ParseTest(string s, NumberStyles style, IFormatProvider? provider, Int256 expected) { var result = Helper.Parse(s, style, provider); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(ParseSpanTestData))] + [MethodDataSource(nameof(ParseSpanTestData))] public async Task ParseTest(char[] s, NumberStyles style, IFormatProvider? provider, Int256 expected) { var result = Helper.Parse(s, style, provider); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(ParseUtf8TestData))] + [MethodDataSource(nameof(ParseUtf8TestData))] public async Task ParseTest(byte[] utf8Text, NumberStyles style, IFormatProvider? provider, Int256 expected) { var result = Helper.Parse(utf8Text, style, provider); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(TryParseTestData))] + [MethodDataSource(nameof(TryParseTestData))] public async Task TryParseTest(string s, NumberStyles style, IFormatProvider? provider, bool expected, Int256 expectedValue) { var success = Helper.TryParse(s, style, provider, out var result); @@ -455,7 +455,7 @@ public async Task TryParseTest(string s, NumberStyles style, IFormatProvider? pr } } [Test] - [MethodDataSource(typeof(DataSources), nameof(TryParseSpanTestData))] + [MethodDataSource(nameof(TryParseSpanTestData))] public async Task TryParseTest(char[] s, NumberStyles style, IFormatProvider? provider, bool expected, Int256 expectedValue) { var success = Helper.TryParse(s, style, provider, out var result); @@ -466,7 +466,7 @@ public async Task TryParseTest(char[] s, NumberStyles style, IFormatProvider? pr } } [Test] - [MethodDataSource(typeof(DataSources), nameof(TryParseUtf8TestData))] + [MethodDataSource(nameof(TryParseUtf8TestData))] public async Task TryParseTest(byte[] utf8Text, NumberStyles style, IFormatProvider? provider, bool expected, Int256 expectedValue) { var success = Helper.TryParse(utf8Text, style, provider, out var result); @@ -480,7 +480,7 @@ public async Task TryParseTest(byte[] utf8Text, NumberStyles style, IFormatProvi #region INumber [Test] - [MethodDataSource(typeof(DataSources), nameof(ClampTestData))] + [MethodDataSource(nameof(ClampTestData))] public async Task ClampTest(Int256 value, Int256 min, Int256 max, Int256 expected) { if (min > max) @@ -494,42 +494,42 @@ public async Task ClampTest(Int256 value, Int256 min, Int256 max, Int256 expecte } } [Test] - [MethodDataSource(typeof(DataSources), nameof(CopySignTestData))] + [MethodDataSource(nameof(CopySignTestData))] public async Task CopySignTest(Int256 value, Int256 sign, Int256 expected) { var result = Helper.CopySign(value, sign); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MaxTestData))] + [MethodDataSource(nameof(MaxTestData))] public async Task MaxTest(Int256 x, Int256 y, Int256 expected) { var result = Helper.Max(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MaxNumberTestData))] + [MethodDataSource(nameof(MaxNumberTestData))] public async Task MaxNumberTest(Int256 x, Int256 y, Int256 expected) { var result = Helper.MaxNumber(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MinTestData))] + [MethodDataSource(nameof(MinTestData))] public async Task MinTest(Int256 x, Int256 y, Int256 expected) { var result = Helper.Min(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MinNumberTestData))] + [MethodDataSource(nameof(MinNumberTestData))] public async Task MinNumberTest(Int256 x, Int256 y, Int256 expected) { var result = Helper.MinNumber(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(SignTestData))] + [MethodDataSource(nameof(SignTestData))] public async Task SignTest(Int256 value, int expected) { var result = Helper.Sign(value); @@ -539,14 +539,14 @@ public async Task SignTest(Int256 value, int expected) #region IBinaryNumber [Test] - [MethodDataSource(typeof(DataSources), nameof(IsPow2TestData))] + [MethodDataSource(nameof(IsPow2TestData))] public async Task IsPow2Test(Int256 value, bool expected) { var result = Helper.IsPow2(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(Log2TestData))] + [MethodDataSource(nameof(Log2TestData))] public async Task Log2Test(Int256 value, Int256 expected) { var result = Helper.Log2(value); @@ -556,42 +556,42 @@ public async Task Log2Test(Int256 value, Int256 expected) #region IBinaryInteger [Test] - [MethodDataSource(typeof(DataSources), nameof(DivRemTestData))] + [MethodDataSource(nameof(DivRemTestData))] public async Task DivRemTest(Int256 left, Int256 right, Pair expected) { var result = Helper.DivRem(left, right); await Assert.That((Pair)result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(LeadingZeroCountTestData))] + [MethodDataSource(nameof(LeadingZeroCountTestData))] public async Task LeadingZeroCountTest(Int256 value, Int256 expected) { var result = Helper.LeadingZeroCount(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(PopCountTestData))] + [MethodDataSource(nameof(PopCountTestData))] public async Task PopCountTest(Int256 value, Int256 expected) { var result = Helper.PopCount(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(ReadBigEndianTestData))] + [MethodDataSource(nameof(ReadBigEndianTestData))] public async Task ReadBigEndianTest(byte[] source, bool isUnsigned, Int256 expected) { var result = Helper.ReadBigEndian(source, isUnsigned); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(ReadLittleEndianTestData))] + [MethodDataSource(nameof(ReadLittleEndianTestData))] public async Task ReadLittleEndianTest(byte[] source, bool isUnsigned, Int256 expected) { var result = Helper.ReadLittleEndian(source, isUnsigned); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(RotateLeftTestData))] + [MethodDataSource(nameof(RotateLeftTestData))] public async Task RotateLeftTest(Int256 value, int shiftAmount, Int256 expected) { var result = Helper.RotateLeft(value, shiftAmount); @@ -599,7 +599,7 @@ public async Task RotateLeftTest(Int256 value, int shiftAmount, Int256 expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(RotateRightTestData))] + [MethodDataSource(nameof(RotateRightTestData))] public async Task RotateRightTest(Int256 value, int shiftAmount, Int256 expected) { var result = Helper.RotateRight(value, shiftAmount); @@ -607,28 +607,28 @@ public async Task RotateRightTest(Int256 value, int shiftAmount, Int256 expected await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(TrailingZeroCountTestData))] + [MethodDataSource(nameof(TrailingZeroCountTestData))] public async Task TrailingZeroCountTest(Int256 value, Int256 expected) { var result = Helper.TrailingZeroCount(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(GetByteCountTestData))] + [MethodDataSource(nameof(GetByteCountTestData))] public async Task GetByteCountTest(Int256 value, int expected) { var result = Helper.GetByteCount(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(GetShortestBitLengthTestData))] + [MethodDataSource(nameof(GetShortestBitLengthTestData))] public async Task GetShortestBitLengthTest(Int256 value, int expected) { var result = Helper.GetShortestBitLength(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(WriteBigEndianTestData))] + [MethodDataSource(nameof(WriteBigEndianTestData))] public async Task WriteBigEndianTest(Int256 value, byte[] expectedDestination, int expected) { byte[] buffer = new byte[Int256.Size]; @@ -645,7 +645,7 @@ public async Task WriteBigEndianTest(Int256 value, byte[] expectedDestination, i } } [Test] - [MethodDataSource(typeof(DataSources), nameof(WriteLittleEndianTestData))] + [MethodDataSource(nameof(WriteLittleEndianTestData))] public async Task WriteLittleEndianTest(Int256 value, byte[] expectedDestination, int expected) { byte[] buffer = new byte[Int256.Size]; diff --git a/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs b/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs index 023a997..32bf475 100644 --- a/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs @@ -14,7 +14,7 @@ public class Int512GenericMathTests { #region Operators [Test] - [MethodDataSource(typeof(DataSources), nameof(op_AdditionTestData))] + [MethodDataSource(nameof(op_AdditionTestData))] public async Task op_AdditionTest(Int512 left, Int512 right, Int512 expected) { var result = left + right; @@ -22,7 +22,7 @@ public async Task op_AdditionTest(Int512 left, Int512 right, Int512 expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_CheckedAdditionTestData))] + [MethodDataSource(nameof(op_CheckedAdditionTestData))] public async Task op_CheckedAdditionTest(Int512 left, Int512 right, Int512 expected, bool overflows) { if (overflows) @@ -36,7 +36,7 @@ public async Task op_CheckedAdditionTest(Int512 left, Int512 right, Int512 expec } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_IncrementTestData))] + [MethodDataSource(nameof(op_IncrementTestData))] public async Task op_IncrementTest(Int512 value, Int512 expected) { var result = ++value; @@ -44,7 +44,7 @@ public async Task op_IncrementTest(Int512 value, Int512 expected) await Assert.That(result).IsEqualTo(expected).And.IsEqualTo(value); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_CheckedIncrementTestData))] + [MethodDataSource(nameof(op_CheckedIncrementTestData))] public async Task op_CheckedIncrementTest(Int512 value, Int512 expected, bool overflows) { if (overflows) @@ -58,7 +58,7 @@ public async Task op_CheckedIncrementTest(Int512 value, Int512 expected, bool ov } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_SubtractionTestData))] + [MethodDataSource(nameof(op_SubtractionTestData))] public async Task op_SubtractionTest(Int512 left, Int512 right, Int512 expected) { var result = left - right; @@ -66,7 +66,7 @@ public async Task op_SubtractionTest(Int512 left, Int512 right, Int512 expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_CheckedSubtractionTestData))] + [MethodDataSource(nameof(op_CheckedSubtractionTestData))] public async Task op_CheckedSubtractionTest(Int512 left, Int512 right, Int512 expected, bool overflows) { if (overflows) @@ -80,7 +80,7 @@ public async Task op_CheckedSubtractionTest(Int512 left, Int512 right, Int512 ex } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_DecrementTestData))] + [MethodDataSource(nameof(op_DecrementTestData))] public async Task op_DecrementTest(Int512 value, Int512 expected) { var result = --value; @@ -88,7 +88,7 @@ public async Task op_DecrementTest(Int512 value, Int512 expected) await Assert.That(result).IsEqualTo(expected).And.IsEqualTo(value); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_CheckedDecrementTestData))] + [MethodDataSource(nameof(op_CheckedDecrementTestData))] public async Task op_CheckedDecrementTest(Int512 value, Int512 expected, bool overflows) { if (overflows) @@ -102,7 +102,7 @@ public async Task op_CheckedDecrementTest(Int512 value, Int512 expected, bool ov } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_MultiplyTestData))] + [MethodDataSource(nameof(op_MultiplyTestData))] public async Task op_MultiplyTest(Int512 left, Int512 right, Int512 expected) { var result = left * right; @@ -110,7 +110,7 @@ public async Task op_MultiplyTest(Int512 left, Int512 right, Int512 expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_CheckedMultiplyTestData))] + [MethodDataSource(nameof(op_CheckedMultiplyTestData))] public async Task op_CheckedMultiplyTest(Int512 left, Int512 right, Int512 expected, bool overflows) { if (overflows) @@ -124,7 +124,7 @@ public async Task op_CheckedMultiplyTest(Int512 left, Int512 right, Int512 expec } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_DivisionTestData))] + [MethodDataSource(nameof(op_DivisionTestData))] public async Task op_DivisionTest(Int512 left, Int512 right, Int512 expected) { if (right == Int512.Zero) @@ -139,7 +139,7 @@ public async Task op_DivisionTest(Int512 left, Int512 right, Int512 expected) } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_ModulusTestData))] + [MethodDataSource(nameof(op_ModulusTestData))] public async Task op_ModulusTest(Int512 left, Int512 right, Int512 expected) { if (right == Int512.Zero) @@ -154,7 +154,7 @@ public async Task op_ModulusTest(Int512 left, Int512 right, Int512 expected) } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_OnesComplementTestData))] + [MethodDataSource(nameof(op_OnesComplementTestData))] public async Task op_OnesComplementTest(Int512 value, Int512 expected) { var result = ~value; @@ -162,7 +162,7 @@ public async Task op_OnesComplementTest(Int512 value, Int512 expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_BitwiseAndTestData))] + [MethodDataSource(nameof(op_BitwiseAndTestData))] public async Task op_BitwiseAndTest(Int512 left, Int512 right, Int512 expected) { var result = left & right; @@ -170,7 +170,7 @@ public async Task op_BitwiseAndTest(Int512 left, Int512 right, Int512 expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_BitwiseOrTestData))] + [MethodDataSource(nameof(op_BitwiseOrTestData))] public async Task op_BitwiseOrTest(Int512 left, Int512 right, Int512 expected) { var result = left | right; @@ -178,7 +178,7 @@ public async Task op_BitwiseOrTest(Int512 left, Int512 right, Int512 expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_BitwiseXorTestData))] + [MethodDataSource(nameof(op_BitwiseXorTestData))] public async Task op_BitwiseXorTest(Int512 left, Int512 right, Int512 expected) { var result = left ^ right; @@ -186,7 +186,7 @@ public async Task op_BitwiseXorTest(Int512 left, Int512 right, Int512 expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_ShiftLeftTestData))] + [MethodDataSource(nameof(op_ShiftLeftTestData))] public async Task op_ShiftLeftTest(Int512 value, int shiftAmount, Int512 expected) { var result = value << shiftAmount; @@ -194,7 +194,7 @@ public async Task op_ShiftLeftTest(Int512 value, int shiftAmount, Int512 expecte await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_ShiftRightTestData))] + [MethodDataSource(nameof(op_ShiftRightTestData))] public async Task op_ShiftRightTest(Int512 value, int shiftAmount, Int512 expected) { var result = value >> shiftAmount; @@ -202,7 +202,7 @@ public async Task op_ShiftRightTest(Int512 value, int shiftAmount, Int512 expect await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_UnsignedShiftRightTestData))] + [MethodDataSource(nameof(op_UnsignedShiftRightTestData))] public async Task op_UnsignedShiftRightTest(Int512 value, int shiftAmount, Int512 expected) { var result = value >>> shiftAmount; @@ -210,7 +210,7 @@ public async Task op_UnsignedShiftRightTest(Int512 value, int shiftAmount, Int51 await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_EqualityTestData))] + [MethodDataSource(nameof(op_EqualityTestData))] public async Task op_EqualityTest(Int512 left, Int512 right, bool expected) { var result = left == right; @@ -218,7 +218,7 @@ public async Task op_EqualityTest(Int512 left, Int512 right, bool expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_InequalityTestData))] + [MethodDataSource(nameof(op_InequalityTestData))] public async Task op_InequalityTest(Int512 left, Int512 right, bool expected) { var result = left != right; @@ -226,7 +226,7 @@ public async Task op_InequalityTest(Int512 left, Int512 right, bool expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_LessThanTestData))] + [MethodDataSource(nameof(op_LessThanTestData))] public async Task op_LessThanTest(Int512 left, Int512 right, bool expected) { var result = left < right; @@ -234,7 +234,7 @@ public async Task op_LessThanTest(Int512 left, Int512 right, bool expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_LessThanOrEqualTestData))] + [MethodDataSource(nameof(op_LessThanOrEqualTestData))] public async Task op_LessThanOrEqualTest(Int512 left, Int512 right, bool expected) { var result = left <= right; @@ -242,7 +242,7 @@ public async Task op_LessThanOrEqualTest(Int512 left, Int512 right, bool expecte await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_GreaterThanTestData))] + [MethodDataSource(nameof(op_GreaterThanTestData))] public async Task op_GreaterThanTest(Int512 left, Int512 right, bool expected) { var result = left > right; @@ -250,7 +250,7 @@ public async Task op_GreaterThanTest(Int512 left, Int512 right, bool expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_GreaterThanOrEqualTestData))] + [MethodDataSource(nameof(op_GreaterThanOrEqualTestData))] public async Task op_GreaterThanOrEqualTest(Int512 left, Int512 right, bool expected) { var result = left >= right; @@ -261,189 +261,189 @@ public async Task op_GreaterThanOrEqualTest(Int512 left, Int512 right, bool expe #region INumberBase [Test] - [MethodDataSource(typeof(DataSources), nameof(AbsTestData))] + [MethodDataSource(nameof(AbsTestData))] public async Task AbsTest(Int512 value, Int512 expected) { Int512 result = Helper.Abs(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsCanonicalTestData))] + [MethodDataSource(nameof(IsCanonicalTestData))] public async Task IsCanonicalTest(Int512 value, bool expected) { bool result = Helper.IsCanonical(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsComplexNumberTestData))] + [MethodDataSource(nameof(IsComplexNumberTestData))] public async Task IsComplexNumberTest(Int512 value, bool expected) { bool result = Helper.IsComplexNumber(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsEvenIntegerTestData))] + [MethodDataSource(nameof(IsEvenIntegerTestData))] public async Task IsEvenIntegerTest(Int512 value, bool expected) { bool result = Helper.IsEvenInteger(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsFiniteTestData))] + [MethodDataSource(nameof(IsFiniteTestData))] public async Task IsFiniteTest(Int512 value, bool expected) { bool result = Helper.IsFinite(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsImaginaryNumberTestData))] + [MethodDataSource(nameof(IsImaginaryNumberTestData))] public async Task IsImaginaryNumberTest(Int512 value, bool expected) { bool result = Helper.IsImaginaryNumber(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsInfinityTestData))] + [MethodDataSource(nameof(IsInfinityTestData))] public async Task IsInfinityTest(Int512 value, bool expected) { bool result = Helper.IsInfinity(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsIntegerTestData))] + [MethodDataSource(nameof(IsIntegerTestData))] public async Task IsIntegerTest(Int512 value, bool expected) { bool result = Helper.IsInteger(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsNaNTestData))] + [MethodDataSource(nameof(IsNaNTestData))] public async Task IsNaNTest(Int512 value, bool expected) { bool result = Helper.IsNaN(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsNegativeTestData))] + [MethodDataSource(nameof(IsNegativeTestData))] public async Task IsNegativeTest(Int512 value, bool expected) { bool result = Helper.IsNegative(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsNegativeInfinityTestData))] + [MethodDataSource(nameof(IsNegativeInfinityTestData))] public async Task IsNegativeInfinityTest(Int512 value, bool expected) { bool result = Helper.IsNegativeInfinity(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsNormalTestData))] + [MethodDataSource(nameof(IsNormalTestData))] public async Task IsNormalTest(Int512 value, bool expected) { bool result = Helper.IsNormal(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsOddIntegerTestData))] + [MethodDataSource(nameof(IsOddIntegerTestData))] public async Task IsOddIntegerTest(Int512 value, bool expected) { bool result = Helper.IsOddInteger(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsPositiveTestData))] + [MethodDataSource(nameof(IsPositiveTestData))] public async Task IsPositiveTest(Int512 value, bool expected) { bool result = Helper.IsPositive(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsPositiveInfinityTestData))] + [MethodDataSource(nameof(IsPositiveInfinityTestData))] public async Task IsPositiveInfinityTest(Int512 value, bool expected) { bool result = Helper.IsPositiveInfinity(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsRealNumberTestData))] + [MethodDataSource(nameof(IsRealNumberTestData))] public async Task IsRealNumberTest(Int512 value, bool expected) { bool result = Helper.IsRealNumber(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsSubnormalTestData))] + [MethodDataSource(nameof(IsSubnormalTestData))] public async Task IsSubnormalTest(Int512 value, bool expected) { bool result = Helper.IsSubnormal(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsZeroTestData))] + [MethodDataSource(nameof(IsZeroTestData))] public async Task IsZeroTest(Int512 value, bool expected) { bool result = Helper.IsZero(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MaxMagnitudeTestData))] + [MethodDataSource(nameof(MaxMagnitudeTestData))] public async Task MaxMagnitudeTest(Int512 x, Int512 y, Int512 expected) { var result = Helper.MaxMagnitude(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MaxMagnitudeNumberTestData))] + [MethodDataSource(nameof(MaxMagnitudeNumberTestData))] public async Task MaxMagnitudeNumberTest(Int512 x, Int512 y, Int512 expected) { var result = Helper.MaxMagnitudeNumber(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MinMagnitudeTestData))] + [MethodDataSource(nameof(MinMagnitudeTestData))] public async Task MinMagnitudeTest(Int512 x, Int512 y, Int512 expected) { var result = Helper.MinMagnitude(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MinMagnitudeNumberTestData))] + [MethodDataSource(nameof(MinMagnitudeNumberTestData))] public async Task MinMagnitudeNumberTest(Int512 x, Int512 y, Int512 expected) { var result = Helper.MinMagnitudeNumber(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MultiplyAddEstimateTestData))] + [MethodDataSource(nameof(MultiplyAddEstimateTestData))] public async Task MultiplyAddEstimateTest(Int512 left, Int512 right, Int512 addend, Int512 expected) { var result = Helper.MultiplyAddEstimate(left, right, addend); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(ParseTestData))] + [MethodDataSource(nameof(ParseTestData))] public async Task ParseTest(string s, NumberStyles style, IFormatProvider? provider, Int512 expected) { var result = Helper.Parse(s, style, provider); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(ParseSpanTestData))] + [MethodDataSource(nameof(ParseSpanTestData))] public async Task ParseTest(char[] s, NumberStyles style, IFormatProvider? provider, Int512 expected) { var result = Helper.Parse(s, style, provider); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(ParseUtf8TestData))] + [MethodDataSource(nameof(ParseUtf8TestData))] public async Task ParseTest(byte[] utf8Text, NumberStyles style, IFormatProvider? provider, Int512 expected) { var result = Helper.Parse(utf8Text, style, provider); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(TryParseTestData))] + [MethodDataSource(nameof(TryParseTestData))] public async Task TryParseTest(string s, NumberStyles style, IFormatProvider? provider, bool expected, Int512 expectedValue) { var success = Helper.TryParse(s, style, provider, out var result); @@ -454,7 +454,7 @@ public async Task TryParseTest(string s, NumberStyles style, IFormatProvider? pr } } [Test] - [MethodDataSource(typeof(DataSources), nameof(TryParseSpanTestData))] + [MethodDataSource(nameof(TryParseSpanTestData))] public async Task TryParseTest(char[] s, NumberStyles style, IFormatProvider? provider, bool expected, Int512 expectedValue) { var success = Helper.TryParse(s, style, provider, out var result); @@ -465,7 +465,7 @@ public async Task TryParseTest(char[] s, NumberStyles style, IFormatProvider? pr } } [Test] - [MethodDataSource(typeof(DataSources), nameof(TryParseUtf8TestData))] + [MethodDataSource(nameof(TryParseUtf8TestData))] public async Task TryParseTest(byte[] utf8Text, NumberStyles style, IFormatProvider? provider, bool expected, Int512 expectedValue) { var success = Helper.TryParse(utf8Text, style, provider, out var result); @@ -479,7 +479,7 @@ public async Task TryParseTest(byte[] utf8Text, NumberStyles style, IFormatProvi #region INumber [Test] - [MethodDataSource(typeof(DataSources), nameof(ClampTestData))] + [MethodDataSource(nameof(ClampTestData))] public async Task ClampTest(Int512 value, Int512 min, Int512 max, Int512 expected) { if (min > max) @@ -493,42 +493,42 @@ public async Task ClampTest(Int512 value, Int512 min, Int512 max, Int512 expecte } } [Test] - [MethodDataSource(typeof(DataSources), nameof(CopySignTestData))] + [MethodDataSource(nameof(CopySignTestData))] public async Task CopySignTest(Int512 value, Int512 sign, Int512 expected) { var result = Helper.CopySign(value, sign); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MaxTestData))] + [MethodDataSource(nameof(MaxTestData))] public async Task MaxTest(Int512 x, Int512 y, Int512 expected) { var result = Helper.Max(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MaxNumberTestData))] + [MethodDataSource(nameof(MaxNumberTestData))] public async Task MaxNumberTest(Int512 x, Int512 y, Int512 expected) { var result = Helper.MaxNumber(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MinTestData))] + [MethodDataSource(nameof(MinTestData))] public async Task MinTest(Int512 x, Int512 y, Int512 expected) { var result = Helper.Min(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MinNumberTestData))] + [MethodDataSource(nameof(MinNumberTestData))] public async Task MinNumberTest(Int512 x, Int512 y, Int512 expected) { var result = Helper.MinNumber(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(SignTestData))] + [MethodDataSource(nameof(SignTestData))] public async Task SignTest(Int512 value, int expected) { var result = Helper.Sign(value); @@ -538,14 +538,14 @@ public async Task SignTest(Int512 value, int expected) #region IBinaryNumber [Test] - [MethodDataSource(typeof(DataSources), nameof(IsPow2TestData))] + [MethodDataSource(nameof(IsPow2TestData))] public async Task IsPow2Test(Int512 value, bool expected) { var result = Helper.IsPow2(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(Log2TestData))] + [MethodDataSource(nameof(Log2TestData))] public async Task Log2Test(Int512 value, Int512 expected) { var result = Helper.Log2(value); @@ -555,42 +555,42 @@ public async Task Log2Test(Int512 value, Int512 expected) #region IBinaryInteger [Test] - [MethodDataSource(typeof(DataSources), nameof(DivRemTestData))] + [MethodDataSource(nameof(DivRemTestData))] public async Task DivRemTest(Int512 left, Int512 right, Pair expected) { var result = Helper.DivRem(left, right); await Assert.That((Pair)result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(LeadingZeroCountTestData))] + [MethodDataSource(nameof(LeadingZeroCountTestData))] public async Task LeadingZeroCountTest(Int512 value, Int512 expected) { var result = Helper.LeadingZeroCount(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(PopCountTestData))] + [MethodDataSource(nameof(PopCountTestData))] public async Task PopCountTest(Int512 value, Int512 expected) { var result = Helper.PopCount(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(ReadBigEndianTestData))] + [MethodDataSource(nameof(ReadBigEndianTestData))] public async Task ReadBigEndianTest(byte[] source, bool isUnsigned, Int512 expected) { var result = Helper.ReadBigEndian(source, isUnsigned); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(ReadLittleEndianTestData))] + [MethodDataSource(nameof(ReadLittleEndianTestData))] public async Task ReadLittleEndianTest(byte[] source, bool isUnsigned, Int512 expected) { var result = Helper.ReadLittleEndian(source, isUnsigned); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(RotateLeftTestData))] + [MethodDataSource(nameof(RotateLeftTestData))] public async Task RotateLeftTest(Int512 value, int shiftAmount, Int512 expected) { var result = Helper.RotateLeft(value, shiftAmount); @@ -598,7 +598,7 @@ public async Task RotateLeftTest(Int512 value, int shiftAmount, Int512 expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(RotateRightTestData))] + [MethodDataSource(nameof(RotateRightTestData))] public async Task RotateRightTest(Int512 value, int shiftAmount, Int512 expected) { var result = Helper.RotateRight(value, shiftAmount); @@ -606,28 +606,28 @@ public async Task RotateRightTest(Int512 value, int shiftAmount, Int512 expected await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(TrailingZeroCountTestData))] + [MethodDataSource(nameof(TrailingZeroCountTestData))] public async Task TrailingZeroCountTest(Int512 value, Int512 expected) { var result = Helper.TrailingZeroCount(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(GetByteCountTestData))] + [MethodDataSource(nameof(GetByteCountTestData))] public async Task GetByteCountTest(Int512 value, int expected) { var result = Helper.GetByteCount(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(GetShortestBitLengthTestData))] + [MethodDataSource(nameof(GetShortestBitLengthTestData))] public async Task GetShortestBitLengthTest(Int512 value, int expected) { var result = Helper.GetShortestBitLength(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(WriteBigEndianTestData))] + [MethodDataSource(nameof(WriteBigEndianTestData))] public async Task WriteBigEndianTest(Int512 value, byte[] expectedDestination, int expected) { byte[] buffer = new byte[Int512.Size]; @@ -644,7 +644,7 @@ public async Task WriteBigEndianTest(Int512 value, byte[] expectedDestination, i } } [Test] - [MethodDataSource(typeof(DataSources), nameof(WriteLittleEndianTestData))] + [MethodDataSource(nameof(WriteLittleEndianTestData))] public async Task WriteLittleEndianTest(Int512 value, byte[] expectedDestination, int expected) { byte[] buffer = new byte[Int512.Size]; diff --git a/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs b/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs index 6306c9d..8773e92 100644 --- a/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs @@ -15,7 +15,7 @@ public class UInt256GenericMathTests { #region Operators [Test] - [MethodDataSource(typeof(DataSources), nameof(op_AdditionTestData))] + [MethodDataSource(nameof(op_AdditionTestData))] public async Task op_AdditionTest(UInt256 left, UInt256 right, UInt256 expected) { var result = left + right; @@ -23,7 +23,7 @@ public async Task op_AdditionTest(UInt256 left, UInt256 right, UInt256 expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_CheckedAdditionTestData))] + [MethodDataSource(nameof(op_CheckedAdditionTestData))] public async Task op_CheckedAdditionTest(UInt256 left, UInt256 right, UInt256 expected, bool overflows) { if (overflows) @@ -37,7 +37,7 @@ public async Task op_CheckedAdditionTest(UInt256 left, UInt256 right, UInt256 ex } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_IncrementTestData))] + [MethodDataSource(nameof(op_IncrementTestData))] public async Task op_IncrementTest(UInt256 value, UInt256 expected) { var result = ++value; @@ -45,7 +45,7 @@ public async Task op_IncrementTest(UInt256 value, UInt256 expected) await Assert.That(result).IsEqualTo(expected).And.IsEqualTo(value); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_CheckedIncrementTestData))] + [MethodDataSource(nameof(op_CheckedIncrementTestData))] public async Task op_CheckedIncrementTest(UInt256 value, UInt256 expected, bool overflows) { if (overflows) @@ -59,7 +59,7 @@ public async Task op_CheckedIncrementTest(UInt256 value, UInt256 expected, bool } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_SubtractionTestData))] + [MethodDataSource(nameof(op_SubtractionTestData))] public async Task op_SubtractionTest(UInt256 left, UInt256 right, UInt256 expected) { var result = left - right; @@ -67,7 +67,7 @@ public async Task op_SubtractionTest(UInt256 left, UInt256 right, UInt256 expect await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_CheckedSubtractionTestData))] + [MethodDataSource(nameof(op_CheckedSubtractionTestData))] public async Task op_CheckedSubtractionTest(UInt256 left, UInt256 right, UInt256 expected, bool overflows) { if (overflows) @@ -81,7 +81,7 @@ public async Task op_CheckedSubtractionTest(UInt256 left, UInt256 right, UInt256 } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_DecrementTestData))] + [MethodDataSource(nameof(op_DecrementTestData))] public async Task op_DecrementTest(UInt256 value, UInt256 expected) { var result = --value; @@ -89,7 +89,7 @@ public async Task op_DecrementTest(UInt256 value, UInt256 expected) await Assert.That(result).IsEqualTo(expected).And.IsEqualTo(value); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_CheckedDecrementTestData))] + [MethodDataSource(nameof(op_CheckedDecrementTestData))] public async Task op_CheckedDecrementTest(UInt256 value, UInt256 expected, bool overflows) { if (overflows) @@ -103,7 +103,7 @@ public async Task op_CheckedDecrementTest(UInt256 value, UInt256 expected, bool } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_MultiplyTestData))] + [MethodDataSource(nameof(op_MultiplyTestData))] public async Task op_MultiplyTest(UInt256 left, UInt256 right, UInt256 expected) { var result = left * right; @@ -111,7 +111,7 @@ public async Task op_MultiplyTest(UInt256 left, UInt256 right, UInt256 expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_CheckedMultiplyTestData))] + [MethodDataSource(nameof(op_CheckedMultiplyTestData))] public async Task op_CheckedMultiplyTest(UInt256 left, UInt256 right, UInt256 expected, bool overflows) { if (overflows) @@ -125,7 +125,7 @@ public async Task op_CheckedMultiplyTest(UInt256 left, UInt256 right, UInt256 ex } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_DivisionTestData))] + [MethodDataSource(nameof(op_DivisionTestData))] public async Task op_DivisionTest(UInt256 left, UInt256 right, UInt256 expected) { if (right == UInt256.Zero) @@ -140,7 +140,7 @@ public async Task op_DivisionTest(UInt256 left, UInt256 right, UInt256 expected) } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_ModulusTestData))] + [MethodDataSource(nameof(op_ModulusTestData))] public async Task op_ModulusTest(UInt256 left, UInt256 right, UInt256 expected) { if (right == UInt256.Zero) @@ -155,7 +155,7 @@ public async Task op_ModulusTest(UInt256 left, UInt256 right, UInt256 expected) } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_OnesComplementTestData))] + [MethodDataSource(nameof(op_OnesComplementTestData))] public async Task op_OnesComplementTest(UInt256 value, UInt256 expected) { var result = ~value; @@ -163,7 +163,7 @@ public async Task op_OnesComplementTest(UInt256 value, UInt256 expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_BitwiseAndTestData))] + [MethodDataSource(nameof(op_BitwiseAndTestData))] public async Task op_BitwiseAndTest(UInt256 left, UInt256 right, UInt256 expected) { var result = left & right; @@ -171,7 +171,7 @@ public async Task op_BitwiseAndTest(UInt256 left, UInt256 right, UInt256 expecte await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_BitwiseOrTestData))] + [MethodDataSource(nameof(op_BitwiseOrTestData))] public async Task op_BitwiseOrTest(UInt256 left, UInt256 right, UInt256 expected) { var result = left | right; @@ -179,7 +179,7 @@ public async Task op_BitwiseOrTest(UInt256 left, UInt256 right, UInt256 expected await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_BitwiseXorTestData))] + [MethodDataSource(nameof(op_BitwiseXorTestData))] public async Task op_BitwiseXorTest(UInt256 left, UInt256 right, UInt256 expected) { var result = left ^ right; @@ -187,7 +187,7 @@ public async Task op_BitwiseXorTest(UInt256 left, UInt256 right, UInt256 expecte await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_ShiftLeftTestData))] + [MethodDataSource(nameof(op_ShiftLeftTestData))] public async Task op_ShiftLeftTest(UInt256 value, int shiftAmount, UInt256 expected) { var result = value << shiftAmount; @@ -195,7 +195,7 @@ public async Task op_ShiftLeftTest(UInt256 value, int shiftAmount, UInt256 expec await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_ShiftRightTestData))] + [MethodDataSource(nameof(op_ShiftRightTestData))] public async Task op_ShiftRightTest(UInt256 value, int shiftAmount, UInt256 expected) { var result = value >> shiftAmount; @@ -203,7 +203,7 @@ public async Task op_ShiftRightTest(UInt256 value, int shiftAmount, UInt256 expe await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_UnsignedShiftRightTestData))] + [MethodDataSource(nameof(op_UnsignedShiftRightTestData))] public async Task op_UnsignedShiftRightTest(UInt256 value, int shiftAmount, UInt256 expected) { var result = value >>> shiftAmount; @@ -211,7 +211,7 @@ public async Task op_UnsignedShiftRightTest(UInt256 value, int shiftAmount, UInt await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_EqualityTestData))] + [MethodDataSource(nameof(op_EqualityTestData))] public async Task op_EqualityTest(UInt256 left, UInt256 right, bool expected) { var result = left == right; @@ -219,7 +219,7 @@ public async Task op_EqualityTest(UInt256 left, UInt256 right, bool expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_InequalityTestData))] + [MethodDataSource(nameof(op_InequalityTestData))] public async Task op_InequalityTest(UInt256 left, UInt256 right, bool expected) { var result = left != right; @@ -227,7 +227,7 @@ public async Task op_InequalityTest(UInt256 left, UInt256 right, bool expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_LessThanTestData))] + [MethodDataSource(nameof(op_LessThanTestData))] public async Task op_LessThanTest(UInt256 left, UInt256 right, bool expected) { var result = left < right; @@ -235,7 +235,7 @@ public async Task op_LessThanTest(UInt256 left, UInt256 right, bool expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_LessThanOrEqualTestData))] + [MethodDataSource(nameof(op_LessThanOrEqualTestData))] public async Task op_LessThanOrEqualTest(UInt256 left, UInt256 right, bool expected) { var result = left <= right; @@ -243,7 +243,7 @@ public async Task op_LessThanOrEqualTest(UInt256 left, UInt256 right, bool expec await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_GreaterThanTestData))] + [MethodDataSource(nameof(op_GreaterThanTestData))] public async Task op_GreaterThanTest(UInt256 left, UInt256 right, bool expected) { var result = left > right; @@ -251,7 +251,7 @@ public async Task op_GreaterThanTest(UInt256 left, UInt256 right, bool expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_GreaterThanOrEqualTestData))] + [MethodDataSource(nameof(op_GreaterThanOrEqualTestData))] public async Task op_GreaterThanOrEqualTest(UInt256 left, UInt256 right, bool expected) { var result = left >= right; @@ -262,189 +262,189 @@ public async Task op_GreaterThanOrEqualTest(UInt256 left, UInt256 right, bool ex #region INumberBase [Test] - [MethodDataSource(typeof(DataSources), nameof(AbsTestData))] + [MethodDataSource(nameof(AbsTestData))] public async Task AbsTest(UInt256 value, UInt256 expected) { UInt256 result = Helper.Abs(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsCanonicalTestData))] + [MethodDataSource(nameof(IsCanonicalTestData))] public async Task IsCanonicalTest(UInt256 value, bool expected) { bool result = Helper.IsCanonical(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsComplexNumberTestData))] + [MethodDataSource(nameof(IsComplexNumberTestData))] public async Task IsComplexNumberTest(UInt256 value, bool expected) { bool result = Helper.IsComplexNumber(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsEvenIntegerTestData))] + [MethodDataSource(nameof(IsEvenIntegerTestData))] public async Task IsEvenIntegerTest(UInt256 value, bool expected) { bool result = Helper.IsEvenInteger(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsFiniteTestData))] + [MethodDataSource(nameof(IsFiniteTestData))] public async Task IsFiniteTest(UInt256 value, bool expected) { bool result = Helper.IsFinite(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsImaginaryNumberTestData))] + [MethodDataSource(nameof(IsImaginaryNumberTestData))] public async Task IsImaginaryNumberTest(UInt256 value, bool expected) { bool result = Helper.IsImaginaryNumber(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsInfinityTestData))] + [MethodDataSource(nameof(IsInfinityTestData))] public async Task IsInfinityTest(UInt256 value, bool expected) { bool result = Helper.IsInfinity(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsIntegerTestData))] + [MethodDataSource(nameof(IsIntegerTestData))] public async Task IsIntegerTest(UInt256 value, bool expected) { bool result = Helper.IsInteger(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsNaNTestData))] + [MethodDataSource(nameof(IsNaNTestData))] public async Task IsNaNTest(UInt256 value, bool expected) { bool result = Helper.IsNaN(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsNegativeTestData))] + [MethodDataSource(nameof(IsNegativeTestData))] public async Task IsNegativeTest(UInt256 value, bool expected) { bool result = Helper.IsNegative(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsNegativeInfinityTestData))] + [MethodDataSource(nameof(IsNegativeInfinityTestData))] public async Task IsNegativeInfinityTest(UInt256 value, bool expected) { bool result = Helper.IsNegativeInfinity(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsNormalTestData))] + [MethodDataSource(nameof(IsNormalTestData))] public async Task IsNormalTest(UInt256 value, bool expected) { bool result = Helper.IsNormal(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsOddIntegerTestData))] + [MethodDataSource(nameof(IsOddIntegerTestData))] public async Task IsOddIntegerTest(UInt256 value, bool expected) { bool result = Helper.IsOddInteger(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsPositiveTestData))] + [MethodDataSource(nameof(IsPositiveTestData))] public async Task IsPositiveTest(UInt256 value, bool expected) { bool result = Helper.IsPositive(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsPositiveInfinityTestData))] + [MethodDataSource(nameof(IsPositiveInfinityTestData))] public async Task IsPositiveInfinityTest(UInt256 value, bool expected) { bool result = Helper.IsPositiveInfinity(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsRealNumberTestData))] + [MethodDataSource(nameof(IsRealNumberTestData))] public async Task IsRealNumberTest(UInt256 value, bool expected) { bool result = Helper.IsRealNumber(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsSubnormalTestData))] + [MethodDataSource(nameof(IsSubnormalTestData))] public async Task IsSubnormalTest(UInt256 value, bool expected) { bool result = Helper.IsSubnormal(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsZeroTestData))] + [MethodDataSource(nameof(IsZeroTestData))] public async Task IsZeroTest(UInt256 value, bool expected) { bool result = Helper.IsZero(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MaxMagnitudeTestData))] + [MethodDataSource(nameof(MaxMagnitudeTestData))] public async Task MaxMagnitudeTest(UInt256 x, UInt256 y, UInt256 expected) { var result = Helper.MaxMagnitude(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MaxMagnitudeNumberTestData))] + [MethodDataSource(nameof(MaxMagnitudeNumberTestData))] public async Task MaxMagnitudeNumberTest(UInt256 x, UInt256 y, UInt256 expected) { var result = Helper.MaxMagnitudeNumber(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MinMagnitudeTestData))] + [MethodDataSource(nameof(MinMagnitudeTestData))] public async Task MinMagnitudeTest(UInt256 x, UInt256 y, UInt256 expected) { var result = Helper.MinMagnitude(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MinMagnitudeNumberTestData))] + [MethodDataSource(nameof(MinMagnitudeNumberTestData))] public async Task MinMagnitudeNumberTest(UInt256 x, UInt256 y, UInt256 expected) { var result = Helper.MinMagnitudeNumber(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MultiplyAddEstimateTestData))] + [MethodDataSource(nameof(MultiplyAddEstimateTestData))] public async Task MultiplyAddEstimateTest(UInt256 left, UInt256 right, UInt256 addend, UInt256 expected) { var result = Helper.MultiplyAddEstimate(left, right, addend); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(ParseTestData))] + [MethodDataSource(nameof(ParseTestData))] public async Task ParseTest(string s, NumberStyles style, IFormatProvider? provider, UInt256 expected) { var result = Helper.Parse(s, style, provider); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(ParseSpanTestData))] + [MethodDataSource(nameof(ParseSpanTestData))] public async Task ParseTest(char[] s, NumberStyles style, IFormatProvider? provider, UInt256 expected) { var result = Helper.Parse(s, style, provider); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(ParseUtf8TestData))] + [MethodDataSource(nameof(ParseUtf8TestData))] public async Task ParseTest(byte[] utf8Text, NumberStyles style, IFormatProvider? provider, UInt256 expected) { var result = Helper.Parse(utf8Text, style, provider); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(TryParseTestData))] + [MethodDataSource(nameof(TryParseTestData))] public async Task TryParseTest(string s, NumberStyles style, IFormatProvider? provider, bool expected, UInt256 expectedValue) { var success = Helper.TryParse(s, style, provider, out var result); @@ -455,7 +455,7 @@ public async Task TryParseTest(string s, NumberStyles style, IFormatProvider? pr } } [Test] - [MethodDataSource(typeof(DataSources), nameof(TryParseSpanTestData))] + [MethodDataSource(nameof(TryParseSpanTestData))] public async Task TryParseTest(char[] s, NumberStyles style, IFormatProvider? provider, bool expected, UInt256 expectedValue) { var success = Helper.TryParse(s, style, provider, out var result); @@ -466,7 +466,7 @@ public async Task TryParseTest(char[] s, NumberStyles style, IFormatProvider? pr } } [Test] - [MethodDataSource(typeof(DataSources), nameof(TryParseUtf8TestData))] + [MethodDataSource(nameof(TryParseUtf8TestData))] public async Task TryParseTest(byte[] utf8Text, NumberStyles style, IFormatProvider? provider, bool expected, UInt256 expectedValue) { var success = Helper.TryParse(utf8Text, style, provider, out var result); @@ -480,7 +480,7 @@ public async Task TryParseTest(byte[] utf8Text, NumberStyles style, IFormatProvi #region INumber [Test] - [MethodDataSource(typeof(DataSources), nameof(ClampTestData))] + [MethodDataSource(nameof(ClampTestData))] public async Task ClampTest(UInt256 value, UInt256 min, UInt256 max, UInt256 expected) { if (min > max) @@ -494,42 +494,42 @@ public async Task ClampTest(UInt256 value, UInt256 min, UInt256 max, UInt256 exp } } [Test] - [MethodDataSource(typeof(DataSources), nameof(CopySignTestData))] + [MethodDataSource(nameof(CopySignTestData))] public async Task CopySignTest(UInt256 value, UInt256 sign, UInt256 expected) { var result = Helper.CopySign(value, sign); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MaxTestData))] + [MethodDataSource(nameof(MaxTestData))] public async Task MaxTest(UInt256 x, UInt256 y, UInt256 expected) { var result = Helper.Max(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MaxNumberTestData))] + [MethodDataSource(nameof(MaxNumberTestData))] public async Task MaxNumberTest(UInt256 x, UInt256 y, UInt256 expected) { var result = Helper.MaxNumber(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MinTestData))] + [MethodDataSource(nameof(MinTestData))] public async Task MinTest(UInt256 x, UInt256 y, UInt256 expected) { var result = Helper.Min(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MinNumberTestData))] + [MethodDataSource(nameof(MinNumberTestData))] public async Task MinNumberTest(UInt256 x, UInt256 y, UInt256 expected) { var result = Helper.MinNumber(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(SignTestData))] + [MethodDataSource(nameof(SignTestData))] public async Task SignTest(UInt256 value, int expected) { var result = Helper.Sign(value); @@ -539,14 +539,14 @@ public async Task SignTest(UInt256 value, int expected) #region IBinaryNumber [Test] - [MethodDataSource(typeof(DataSources), nameof(IsPow2TestData))] + [MethodDataSource(nameof(IsPow2TestData))] public async Task IsPow2Test(UInt256 value, bool expected) { var result = Helper.IsPow2(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(Log2TestData))] + [MethodDataSource(nameof(Log2TestData))] public async Task Log2Test(UInt256 value, UInt256 expected) { var result = Helper.Log2(value); @@ -556,42 +556,42 @@ public async Task Log2Test(UInt256 value, UInt256 expected) #region IBinaryInteger [Test] - [MethodDataSource(typeof(DataSources), nameof(DivRemTestData))] + [MethodDataSource(nameof(DivRemTestData))] public async Task DivRemTest(UInt256 left, UInt256 right, Pair expected) { var result = Helper.DivRem(left, right); await Assert.That((Pair)result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(LeadingZeroCountTestData))] + [MethodDataSource(nameof(LeadingZeroCountTestData))] public async Task LeadingZeroCountTest(UInt256 value, UInt256 expected) { var result = Helper.LeadingZeroCount(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(PopCountTestData))] + [MethodDataSource(nameof(PopCountTestData))] public async Task PopCountTest(UInt256 value, UInt256 expected) { var result = Helper.PopCount(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(ReadBigEndianTestData))] + [MethodDataSource(nameof(ReadBigEndianTestData))] public async Task ReadBigEndianTest(byte[] source, bool isUnsigned, UInt256 expected) { var result = Helper.ReadBigEndian(source, isUnsigned); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(ReadLittleEndianTestData))] + [MethodDataSource(nameof(ReadLittleEndianTestData))] public async Task ReadLittleEndianTest(byte[] source, bool isUnsigned, UInt256 expected) { var result = Helper.ReadLittleEndian(source, isUnsigned); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(RotateLeftTestData))] + [MethodDataSource(nameof(RotateLeftTestData))] public async Task RotateLeftTest(UInt256 value, int shiftAmount, UInt256 expected) { var result = Helper.RotateLeft(value, shiftAmount); @@ -599,7 +599,7 @@ public async Task RotateLeftTest(UInt256 value, int shiftAmount, UInt256 expecte await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(RotateRightTestData))] + [MethodDataSource(nameof(RotateRightTestData))] public async Task RotateRightTest(UInt256 value, int shiftAmount, UInt256 expected) { var result = Helper.RotateRight(value, shiftAmount); @@ -607,28 +607,28 @@ public async Task RotateRightTest(UInt256 value, int shiftAmount, UInt256 expect await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(TrailingZeroCountTestData))] + [MethodDataSource(nameof(TrailingZeroCountTestData))] public async Task TrailingZeroCountTest(UInt256 value, UInt256 expected) { var result = Helper.TrailingZeroCount(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(GetByteCountTestData))] + [MethodDataSource(nameof(GetByteCountTestData))] public async Task GetByteCountTest(UInt256 value, int expected) { var result = Helper.GetByteCount(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(GetShortestBitLengthTestData))] + [MethodDataSource(nameof(GetShortestBitLengthTestData))] public async Task GetShortestBitLengthTest(UInt256 value, int expected) { var result = Helper.GetShortestBitLength(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(WriteBigEndianTestData))] + [MethodDataSource(nameof(WriteBigEndianTestData))] public async Task WriteBigEndianTest(UInt256 value, byte[] expectedDestination, int expected) { byte[] buffer = new byte[UInt256.Size]; @@ -645,7 +645,7 @@ public async Task WriteBigEndianTest(UInt256 value, byte[] expectedDestination, } } [Test] - [MethodDataSource(typeof(DataSources), nameof(WriteLittleEndianTestData))] + [MethodDataSource(nameof(WriteLittleEndianTestData))] public async Task WriteLittleEndianTest(UInt256 value, byte[] expectedDestination, int expected) { byte[] buffer = new byte[UInt256.Size]; diff --git a/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs b/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs index a814b76..e21ae17 100644 --- a/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs @@ -14,7 +14,7 @@ public class UInt512GenericMathTests { #region Operators [Test] - [MethodDataSource(typeof(DataSources), nameof(op_AdditionTestData))] + [MethodDataSource(nameof(op_AdditionTestData))] public async Task op_AdditionTest(UInt512 left, UInt512 right, UInt512 expected) { var result = left + right; @@ -22,7 +22,7 @@ public async Task op_AdditionTest(UInt512 left, UInt512 right, UInt512 expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_CheckedAdditionTestData))] + [MethodDataSource(nameof(op_CheckedAdditionTestData))] public async Task op_CheckedAdditionTest(UInt512 left, UInt512 right, UInt512 expected, bool overflows) { if (overflows) @@ -36,7 +36,7 @@ public async Task op_CheckedAdditionTest(UInt512 left, UInt512 right, UInt512 ex } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_IncrementTestData))] + [MethodDataSource(nameof(op_IncrementTestData))] public async Task op_IncrementTest(UInt512 value, UInt512 expected) { var result = ++value; @@ -44,7 +44,7 @@ public async Task op_IncrementTest(UInt512 value, UInt512 expected) await Assert.That(result).IsEqualTo(expected).And.IsEqualTo(value); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_CheckedIncrementTestData))] + [MethodDataSource(nameof(op_CheckedIncrementTestData))] public async Task op_CheckedIncrementTest(UInt512 value, UInt512 expected, bool overflows) { if (overflows) @@ -58,7 +58,7 @@ public async Task op_CheckedIncrementTest(UInt512 value, UInt512 expected, bool } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_SubtractionTestData))] + [MethodDataSource(nameof(op_SubtractionTestData))] public async Task op_SubtractionTest(UInt512 left, UInt512 right, UInt512 expected) { var result = left - right; @@ -66,7 +66,7 @@ public async Task op_SubtractionTest(UInt512 left, UInt512 right, UInt512 expect await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_CheckedSubtractionTestData))] + [MethodDataSource(nameof(op_CheckedSubtractionTestData))] public async Task op_CheckedSubtractionTest(UInt512 left, UInt512 right, UInt512 expected, bool overflows) { if (overflows) @@ -80,7 +80,7 @@ public async Task op_CheckedSubtractionTest(UInt512 left, UInt512 right, UInt512 } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_DecrementTestData))] + [MethodDataSource(nameof(op_DecrementTestData))] public async Task op_DecrementTest(UInt512 value, UInt512 expected) { var result = --value; @@ -88,7 +88,7 @@ public async Task op_DecrementTest(UInt512 value, UInt512 expected) await Assert.That(result).IsEqualTo(expected).And.IsEqualTo(value); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_CheckedDecrementTestData))] + [MethodDataSource(nameof(op_CheckedDecrementTestData))] public async Task op_CheckedDecrementTest(UInt512 value, UInt512 expected, bool overflows) { if (overflows) @@ -102,7 +102,7 @@ public async Task op_CheckedDecrementTest(UInt512 value, UInt512 expected, bool } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_MultiplyTestData))] + [MethodDataSource(nameof(op_MultiplyTestData))] public async Task op_MultiplyTest(UInt512 left, UInt512 right, UInt512 expected) { var result = left * right; @@ -110,7 +110,7 @@ public async Task op_MultiplyTest(UInt512 left, UInt512 right, UInt512 expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_CheckedMultiplyTestData))] + [MethodDataSource(nameof(op_CheckedMultiplyTestData))] public async Task op_CheckedMultiplyTest(UInt512 left, UInt512 right, UInt512 expected, bool overflows) { if (overflows) @@ -124,7 +124,7 @@ public async Task op_CheckedMultiplyTest(UInt512 left, UInt512 right, UInt512 ex } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_DivisionTestData))] + [MethodDataSource(nameof(op_DivisionTestData))] public async Task op_DivisionTest(UInt512 left, UInt512 right, UInt512 expected) { if (right == UInt512.Zero) @@ -139,7 +139,7 @@ public async Task op_DivisionTest(UInt512 left, UInt512 right, UInt512 expected) } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_ModulusTestData))] + [MethodDataSource(nameof(op_ModulusTestData))] public async Task op_ModulusTest(UInt512 left, UInt512 right, UInt512 expected) { if (right == UInt512.Zero) @@ -154,7 +154,7 @@ public async Task op_ModulusTest(UInt512 left, UInt512 right, UInt512 expected) } } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_OnesComplementTestData))] + [MethodDataSource(nameof(op_OnesComplementTestData))] public async Task op_OnesComplementTest(UInt512 value, UInt512 expected) { var result = ~value; @@ -162,7 +162,7 @@ public async Task op_OnesComplementTest(UInt512 value, UInt512 expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_BitwiseAndTestData))] + [MethodDataSource(nameof(op_BitwiseAndTestData))] public async Task op_BitwiseAndTest(UInt512 left, UInt512 right, UInt512 expected) { var result = left & right; @@ -170,7 +170,7 @@ public async Task op_BitwiseAndTest(UInt512 left, UInt512 right, UInt512 expecte await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_BitwiseOrTestData))] + [MethodDataSource(nameof(op_BitwiseOrTestData))] public async Task op_BitwiseOrTest(UInt512 left, UInt512 right, UInt512 expected) { var result = left | right; @@ -178,7 +178,7 @@ public async Task op_BitwiseOrTest(UInt512 left, UInt512 right, UInt512 expected await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_BitwiseXorTestData))] + [MethodDataSource(nameof(op_BitwiseXorTestData))] public async Task op_BitwiseXorTest(UInt512 left, UInt512 right, UInt512 expected) { var result = left ^ right; @@ -186,7 +186,7 @@ public async Task op_BitwiseXorTest(UInt512 left, UInt512 right, UInt512 expecte await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_ShiftLeftTestData))] + [MethodDataSource(nameof(op_ShiftLeftTestData))] public async Task op_ShiftLeftTest(UInt512 value, int shiftAmount, UInt512 expected) { var result = value << shiftAmount; @@ -194,7 +194,7 @@ public async Task op_ShiftLeftTest(UInt512 value, int shiftAmount, UInt512 expec await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_ShiftRightTestData))] + [MethodDataSource(nameof(op_ShiftRightTestData))] public async Task op_ShiftRightTest(UInt512 value, int shiftAmount, UInt512 expected) { var result = value >> shiftAmount; @@ -202,7 +202,7 @@ public async Task op_ShiftRightTest(UInt512 value, int shiftAmount, UInt512 expe await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_UnsignedShiftRightTestData))] + [MethodDataSource(nameof(op_UnsignedShiftRightTestData))] public async Task op_UnsignedShiftRightTest(UInt512 value, int shiftAmount, UInt512 expected) { var result = value >>> shiftAmount; @@ -210,7 +210,7 @@ public async Task op_UnsignedShiftRightTest(UInt512 value, int shiftAmount, UInt await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_EqualityTestData))] + [MethodDataSource(nameof(op_EqualityTestData))] public async Task op_EqualityTest(UInt512 left, UInt512 right, bool expected) { var result = left == right; @@ -218,7 +218,7 @@ public async Task op_EqualityTest(UInt512 left, UInt512 right, bool expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_InequalityTestData))] + [MethodDataSource(nameof(op_InequalityTestData))] public async Task op_InequalityTest(UInt512 left, UInt512 right, bool expected) { var result = left != right; @@ -226,7 +226,7 @@ public async Task op_InequalityTest(UInt512 left, UInt512 right, bool expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_LessThanTestData))] + [MethodDataSource(nameof(op_LessThanTestData))] public async Task op_LessThanTest(UInt512 left, UInt512 right, bool expected) { var result = left < right; @@ -234,7 +234,7 @@ public async Task op_LessThanTest(UInt512 left, UInt512 right, bool expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_LessThanOrEqualTestData))] + [MethodDataSource(nameof(op_LessThanOrEqualTestData))] public async Task op_LessThanOrEqualTest(UInt512 left, UInt512 right, bool expected) { var result = left <= right; @@ -242,7 +242,7 @@ public async Task op_LessThanOrEqualTest(UInt512 left, UInt512 right, bool expec await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_GreaterThanTestData))] + [MethodDataSource(nameof(op_GreaterThanTestData))] public async Task op_GreaterThanTest(UInt512 left, UInt512 right, bool expected) { var result = left > right; @@ -250,7 +250,7 @@ public async Task op_GreaterThanTest(UInt512 left, UInt512 right, bool expected) await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(op_GreaterThanOrEqualTestData))] + [MethodDataSource(nameof(op_GreaterThanOrEqualTestData))] public async Task op_GreaterThanOrEqualTest(UInt512 left, UInt512 right, bool expected) { var result = left >= right; @@ -261,189 +261,189 @@ public async Task op_GreaterThanOrEqualTest(UInt512 left, UInt512 right, bool ex #region INumberBase [Test] - [MethodDataSource(typeof(DataSources), nameof(AbsTestData))] + [MethodDataSource(nameof(AbsTestData))] public async Task AbsTest(UInt512 value, UInt512 expected) { UInt512 result = Helper.Abs(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsCanonicalTestData))] + [MethodDataSource(nameof(IsCanonicalTestData))] public async Task IsCanonicalTest(UInt512 value, bool expected) { bool result = Helper.IsCanonical(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsComplexNumberTestData))] + [MethodDataSource(nameof(IsComplexNumberTestData))] public async Task IsComplexNumberTest(UInt512 value, bool expected) { bool result = Helper.IsComplexNumber(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsEvenIntegerTestData))] + [MethodDataSource(nameof(IsEvenIntegerTestData))] public async Task IsEvenIntegerTest(UInt512 value, bool expected) { bool result = Helper.IsEvenInteger(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsFiniteTestData))] + [MethodDataSource(nameof(IsFiniteTestData))] public async Task IsFiniteTest(UInt512 value, bool expected) { bool result = Helper.IsFinite(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsImaginaryNumberTestData))] + [MethodDataSource(nameof(IsImaginaryNumberTestData))] public async Task IsImaginaryNumberTest(UInt512 value, bool expected) { bool result = Helper.IsImaginaryNumber(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsInfinityTestData))] + [MethodDataSource(nameof(IsInfinityTestData))] public async Task IsInfinityTest(UInt512 value, bool expected) { bool result = Helper.IsInfinity(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsIntegerTestData))] + [MethodDataSource(nameof(IsIntegerTestData))] public async Task IsIntegerTest(UInt512 value, bool expected) { bool result = Helper.IsInteger(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsNaNTestData))] + [MethodDataSource(nameof(IsNaNTestData))] public async Task IsNaNTest(UInt512 value, bool expected) { bool result = Helper.IsNaN(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsNegativeTestData))] + [MethodDataSource(nameof(IsNegativeTestData))] public async Task IsNegativeTest(UInt512 value, bool expected) { bool result = Helper.IsNegative(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsNegativeInfinityTestData))] + [MethodDataSource(nameof(IsNegativeInfinityTestData))] public async Task IsNegativeInfinityTest(UInt512 value, bool expected) { bool result = Helper.IsNegativeInfinity(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsNormalTestData))] + [MethodDataSource(nameof(IsNormalTestData))] public async Task IsNormalTest(UInt512 value, bool expected) { bool result = Helper.IsNormal(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsOddIntegerTestData))] + [MethodDataSource(nameof(IsOddIntegerTestData))] public async Task IsOddIntegerTest(UInt512 value, bool expected) { bool result = Helper.IsOddInteger(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsPositiveTestData))] + [MethodDataSource(nameof(IsPositiveTestData))] public async Task IsPositiveTest(UInt512 value, bool expected) { bool result = Helper.IsPositive(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsPositiveInfinityTestData))] + [MethodDataSource(nameof(IsPositiveInfinityTestData))] public async Task IsPositiveInfinityTest(UInt512 value, bool expected) { bool result = Helper.IsPositiveInfinity(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsRealNumberTestData))] + [MethodDataSource(nameof(IsRealNumberTestData))] public async Task IsRealNumberTest(UInt512 value, bool expected) { bool result = Helper.IsRealNumber(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsSubnormalTestData))] + [MethodDataSource(nameof(IsSubnormalTestData))] public async Task IsSubnormalTest(UInt512 value, bool expected) { bool result = Helper.IsSubnormal(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(IsZeroTestData))] + [MethodDataSource(nameof(IsZeroTestData))] public async Task IsZeroTest(UInt512 value, bool expected) { bool result = Helper.IsZero(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MaxMagnitudeTestData))] + [MethodDataSource(nameof(MaxMagnitudeTestData))] public async Task MaxMagnitudeTest(UInt512 x, UInt512 y, UInt512 expected) { var result = Helper.MaxMagnitude(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MaxMagnitudeNumberTestData))] + [MethodDataSource(nameof(MaxMagnitudeNumberTestData))] public async Task MaxMagnitudeNumberTest(UInt512 x, UInt512 y, UInt512 expected) { var result = Helper.MaxMagnitudeNumber(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MinMagnitudeTestData))] + [MethodDataSource(nameof(MinMagnitudeTestData))] public async Task MinMagnitudeTest(UInt512 x, UInt512 y, UInt512 expected) { var result = Helper.MinMagnitude(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MinMagnitudeNumberTestData))] + [MethodDataSource(nameof(MinMagnitudeNumberTestData))] public async Task MinMagnitudeNumberTest(UInt512 x, UInt512 y, UInt512 expected) { var result = Helper.MinMagnitudeNumber(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MultiplyAddEstimateTestData))] + [MethodDataSource(nameof(MultiplyAddEstimateTestData))] public async Task MultiplyAddEstimateTest(UInt512 left, UInt512 right, UInt512 addend, UInt512 expected) { var result = Helper.MultiplyAddEstimate(left, right, addend); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(ParseTestData))] + [MethodDataSource(nameof(ParseTestData))] public async Task ParseTest(string s, NumberStyles style, IFormatProvider? provider, UInt512 expected) { var result = Helper.Parse(s, style, provider); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(ParseSpanTestData))] + [MethodDataSource(nameof(ParseSpanTestData))] public async Task ParseTest(char[] s, NumberStyles style, IFormatProvider? provider, UInt512 expected) { var result = Helper.Parse(s, style, provider); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(ParseUtf8TestData))] + [MethodDataSource(nameof(ParseUtf8TestData))] public async Task ParseTest(byte[] utf8Text, NumberStyles style, IFormatProvider? provider, UInt512 expected) { var result = Helper.Parse(utf8Text, style, provider); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(TryParseTestData))] + [MethodDataSource(nameof(TryParseTestData))] public async Task TryParseTest(string s, NumberStyles style, IFormatProvider? provider, bool expected, UInt512 expectedValue) { var success = Helper.TryParse(s, style, provider, out var result); @@ -454,7 +454,7 @@ public async Task TryParseTest(string s, NumberStyles style, IFormatProvider? pr } } [Test] - [MethodDataSource(typeof(DataSources), nameof(TryParseSpanTestData))] + [MethodDataSource(nameof(TryParseSpanTestData))] public async Task TryParseTest(char[] s, NumberStyles style, IFormatProvider? provider, bool expected, UInt512 expectedValue) { var success = Helper.TryParse(s, style, provider, out var result); @@ -465,7 +465,7 @@ public async Task TryParseTest(char[] s, NumberStyles style, IFormatProvider? pr } } [Test] - [MethodDataSource(typeof(DataSources), nameof(TryParseUtf8TestData))] + [MethodDataSource(nameof(TryParseUtf8TestData))] public async Task TryParseTest(byte[] utf8Text, NumberStyles style, IFormatProvider? provider, bool expected, UInt512 expectedValue) { var success = Helper.TryParse(utf8Text, style, provider, out var result); @@ -479,7 +479,7 @@ public async Task TryParseTest(byte[] utf8Text, NumberStyles style, IFormatProvi #region INumber [Test] - [MethodDataSource(typeof(DataSources), nameof(ClampTestData))] + [MethodDataSource(nameof(ClampTestData))] public async Task ClampTest(UInt512 value, UInt512 min, UInt512 max, UInt512 expected) { if (min > max) @@ -493,42 +493,42 @@ public async Task ClampTest(UInt512 value, UInt512 min, UInt512 max, UInt512 exp } } [Test] - [MethodDataSource(typeof(DataSources), nameof(CopySignTestData))] + [MethodDataSource(nameof(CopySignTestData))] public async Task CopySignTest(UInt512 value, UInt512 sign, UInt512 expected) { var result = Helper.CopySign(value, sign); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MaxTestData))] + [MethodDataSource(nameof(MaxTestData))] public async Task MaxTest(UInt512 x, UInt512 y, UInt512 expected) { var result = Helper.Max(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MaxNumberTestData))] + [MethodDataSource(nameof(MaxNumberTestData))] public async Task MaxNumberTest(UInt512 x, UInt512 y, UInt512 expected) { var result = Helper.MaxNumber(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MinTestData))] + [MethodDataSource(nameof(MinTestData))] public async Task MinTest(UInt512 x, UInt512 y, UInt512 expected) { var result = Helper.Min(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(MinNumberTestData))] + [MethodDataSource(nameof(MinNumberTestData))] public async Task MinNumberTest(UInt512 x, UInt512 y, UInt512 expected) { var result = Helper.MinNumber(x, y); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(SignTestData))] + [MethodDataSource(nameof(SignTestData))] public async Task SignTest(UInt512 value, int expected) { var result = Helper.Sign(value); @@ -538,14 +538,14 @@ public async Task SignTest(UInt512 value, int expected) #region IBinaryNumber [Test] - [MethodDataSource(typeof(DataSources), nameof(IsPow2TestData))] + [MethodDataSource(nameof(IsPow2TestData))] public async Task IsPow2Test(UInt512 value, bool expected) { var result = Helper.IsPow2(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(Log2TestData))] + [MethodDataSource(nameof(Log2TestData))] public async Task Log2Test(UInt512 value, UInt512 expected) { var result = Helper.Log2(value); @@ -555,42 +555,42 @@ public async Task Log2Test(UInt512 value, UInt512 expected) #region IBinaryInteger [Test] - [MethodDataSource(typeof(DataSources), nameof(DivRemTestData))] + [MethodDataSource(nameof(DivRemTestData))] public async Task DivRemTest(UInt512 left, UInt512 right, Pair expected) { var result = Helper.DivRem(left, right); await Assert.That((Pair)result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(LeadingZeroCountTestData))] + [MethodDataSource(nameof(LeadingZeroCountTestData))] public async Task LeadingZeroCountTest(UInt512 value, UInt512 expected) { var result = Helper.LeadingZeroCount(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(PopCountTestData))] + [MethodDataSource(nameof(PopCountTestData))] public async Task PopCountTest(UInt512 value, UInt512 expected) { var result = Helper.PopCount(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(ReadBigEndianTestData))] + [MethodDataSource(nameof(ReadBigEndianTestData))] public async Task ReadBigEndianTest(byte[] source, bool isUnsigned, UInt512 expected) { var result = Helper.ReadBigEndian(source, isUnsigned); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(ReadLittleEndianTestData))] + [MethodDataSource(nameof(ReadLittleEndianTestData))] public async Task ReadLittleEndianTest(byte[] source, bool isUnsigned, UInt512 expected) { var result = Helper.ReadLittleEndian(source, isUnsigned); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(RotateLeftTestData))] + [MethodDataSource(nameof(RotateLeftTestData))] public async Task RotateLeftTest(UInt512 value, int shiftAmount, UInt512 expected) { var result = Helper.RotateLeft(value, shiftAmount); @@ -598,7 +598,7 @@ public async Task RotateLeftTest(UInt512 value, int shiftAmount, UInt512 expecte await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(RotateRightTestData))] + [MethodDataSource(nameof(RotateRightTestData))] public async Task RotateRightTest(UInt512 value, int shiftAmount, UInt512 expected) { var result = Helper.RotateRight(value, shiftAmount); @@ -606,28 +606,28 @@ public async Task RotateRightTest(UInt512 value, int shiftAmount, UInt512 expect await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(TrailingZeroCountTestData))] + [MethodDataSource(nameof(TrailingZeroCountTestData))] public async Task TrailingZeroCountTest(UInt512 value, UInt512 expected) { var result = Helper.TrailingZeroCount(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(GetByteCountTestData))] + [MethodDataSource(nameof(GetByteCountTestData))] public async Task GetByteCountTest(UInt512 value, int expected) { var result = Helper.GetByteCount(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(GetShortestBitLengthTestData))] + [MethodDataSource(nameof(GetShortestBitLengthTestData))] public async Task GetShortestBitLengthTest(UInt512 value, int expected) { var result = Helper.GetShortestBitLength(value); await Assert.That(result).IsEqualTo(expected); } [Test] - [MethodDataSource(typeof(DataSources), nameof(WriteBigEndianTestData))] + [MethodDataSource(nameof(WriteBigEndianTestData))] public async Task WriteBigEndianTest(UInt512 value, byte[] expectedDestination, int expected) { byte[] buffer = new byte[UInt512.Size]; @@ -644,7 +644,7 @@ public async Task WriteBigEndianTest(UInt512 value, byte[] expectedDestination, } } [Test] - [MethodDataSource(typeof(DataSources), nameof(WriteLittleEndianTestData))] + [MethodDataSource(nameof(WriteLittleEndianTestData))] public async Task WriteLittleEndianTest(UInt512 value, byte[] expectedDestination, int expected) { byte[] buffer = new byte[UInt512.Size]; From e2ad0ab780bcb62f578c93475ce556f2945eb678 Mon Sep 17 00:00:00 2001 From: crookseta Date: Tue, 12 May 2026 21:25:28 -0500 Subject: [PATCH 43/74] Added Tests for Int512 methods: ParseTestData, ParseSpanTestData, ParseUtf8TestData, TryParseTestData, TryParseSpanTestData, TryParseUtf8TestData and PopCountTestData. --- .../Data/Int512DataSources.cs | 380 +++++++++++++++++- 1 file changed, 373 insertions(+), 7 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int512DataSources.cs b/src/MissingValues.Tests/Data/Int512DataSources.cs index fef58aa..54a438d 100644 --- a/src/MissingValues.Tests/Data/Int512DataSources.cs +++ b/src/MissingValues.Tests/Data/Int512DataSources.cs @@ -626,32 +626,392 @@ public class Int512DataSources public static IEnumerable> ParseTestData() { - throw new NotImplementedException(); + yield return () => ("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048", NumberStyles.Integer, CultureInfo.InvariantCulture, Int512.MinValue); + yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968", NumberStyles.Integer, CultureInfo.InvariantCulture, Int256.MinValue); + yield return () => ("-170141183460469231731687303715884105728", NumberStyles.Integer, CultureInfo.InvariantCulture, Int128.MinValue); + yield return () => ("-9223372036854775808", NumberStyles.Integer, CultureInfo.InvariantCulture, long.MinValue); + yield return () => ("-1", NumberStyles.Integer, CultureInfo.InvariantCulture, Int512.NegativeOne); + yield return () => ("0", NumberStyles.Integer, CultureInfo.InvariantCulture, Int512.Zero); + yield return () => ("1", NumberStyles.Integer, CultureInfo.InvariantCulture, Int512.One); + yield return () => ("4294967296", NumberStyles.Integer, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 4294967296)); + yield return () => ("18446744073709551616", NumberStyles.Integer, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 1, 0)); + yield return () => ("340282366920938463463374607431768211456", NumberStyles.Integer, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 1, 0, 0)); + yield return () => ("6277101735386680763835789423207666416102355444464034512896", NumberStyles.Integer, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 1, 0, 0, 0)); + yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639936", NumberStyles.Integer, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 1, 0, 0, 0, 0)); + yield return () => ("2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086936576", NumberStyles.Integer, CultureInfo.InvariantCulture, new Int512(0, 0, 1, 0, 0, 0, 0, 0)); + yield return () => ("39402006196394479212279040100143613805079739270465446667948293404245721771497210611414266254884915640806627990306816", NumberStyles.Integer, CultureInfo.InvariantCulture, new Int512(0, 1, 0, 0, 0, 0, 0, 0)); + yield return () => ("726838724295606890549323807888004534353641360687318060281490199180639288113397923326191050713763565560762521606266177933534601628614656", NumberStyles.Integer, CultureInfo.InvariantCulture, new Int512(1, 0, 0, 0, 0, 0, 0, 0)); + yield return () => ("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047", NumberStyles.Integer, CultureInfo.InvariantCulture, Int512.MaxValue); + + yield return () => ("123456789ABCDEF0", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0x123456789ABCDEF0)); + yield return () => ("FF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0xFF)); + yield return () => ("FFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0xFFFF)); + yield return () => ("FFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0xFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0x0000000000000000, 0x0000000000000000, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0xFFFFFFFFFFFFFFFF, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0xFFFFFFFFFFFFFFFF)); + + yield return () => ("1010101010101010", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0b1010101010101010)); + yield return () => ("11111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0b11111111)); + yield return () => ("1111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0b1111111111111111)); + yield return () => ("11111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0b11111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); } public static IEnumerable> ParseSpanTestData() { - throw new NotImplementedException(); + yield return () => ("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int512.MinValue); + yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int256.MinValue); + yield return () => ("-170141183460469231731687303715884105728".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int128.MinValue); + yield return () => ("-9223372036854775808".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, long.MinValue); + yield return () => ("-1".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int512.NegativeOne); + yield return () => ("0".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int512.Zero); + yield return () => ("1".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int512.One); + yield return () => ("4294967296".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 4294967296)); + yield return () => ("18446744073709551616".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 1, 0)); + yield return () => ("340282366920938463463374607431768211456".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 1, 0, 0)); + yield return () => ("6277101735386680763835789423207666416102355444464034512896".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 1, 0, 0, 0)); + yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639936".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 1, 0, 0, 0, 0)); + yield return () => ("2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086936576".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new Int512(0, 0, 1, 0, 0, 0, 0, 0)); + yield return () => ("39402006196394479212279040100143613805079739270465446667948293404245721771497210611414266254884915640806627990306816".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new Int512(0, 1, 0, 0, 0, 0, 0, 0)); + yield return () => ("726838724295606890549323807888004534353641360687318060281490199180639288113397923326191050713763565560762521606266177933534601628614656".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new Int512(1, 0, 0, 0, 0, 0, 0, 0)); + yield return () => ("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int512.MaxValue); + + yield return () => ("123456789ABCDEF0".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0x123456789ABCDEF0)); + yield return () => ("FF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0xFF)); + yield return () => ("FFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0xFFFF)); + yield return () => ("FFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0xFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0x0000000000000000, 0x0000000000000000, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0xFFFFFFFFFFFFFFFF, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0xFFFFFFFFFFFFFFFF)); + + yield return () => ("1010101010101010".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0b1010101010101010)); + yield return () => ("11111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0b11111111)); + yield return () => ("1111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0b1111111111111111)); + yield return () => ("11111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0b11111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); } public static IEnumerable> ParseUtf8TestData() { - throw new NotImplementedException(); + yield return () => ("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int512.MinValue); + yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int256.MinValue); + yield return () => ("-170141183460469231731687303715884105728"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int128.MinValue); + yield return () => ("-9223372036854775808"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, long.MinValue); + yield return () => ("-1"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int512.NegativeOne); + yield return () => ("0"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int512.Zero); + yield return () => ("1"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int512.One); + yield return () => ("4294967296"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 4294967296)); + yield return () => ("18446744073709551616"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 1, 0)); + yield return () => ("340282366920938463463374607431768211456"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 1, 0, 0)); + yield return () => ("6277101735386680763835789423207666416102355444464034512896"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 1, 0, 0, 0)); + yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639936"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 1, 0, 0, 0, 0)); + yield return () => ("2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086936576"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new Int512(0, 0, 1, 0, 0, 0, 0, 0)); + yield return () => ("39402006196394479212279040100143613805079739270465446667948293404245721771497210611414266254884915640806627990306816"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new Int512(0, 1, 0, 0, 0, 0, 0, 0)); + yield return () => ("726838724295606890549323807888004534353641360687318060281490199180639288113397923326191050713763565560762521606266177933534601628614656"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, new Int512(1, 0, 0, 0, 0, 0, 0, 0)); + yield return () => ("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int512.MaxValue); + + yield return () => ("123456789ABCDEF0"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0x123456789ABCDEF0)); + yield return () => ("FF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0xFF)); + yield return () => ("FFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0xFFFF)); + yield return () => ("FFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0xFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0x0000000000000000, 0x0000000000000000, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, new Int512(0xFFFFFFFFFFFFFFFF, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0xFFFFFFFFFFFFFFFF)); + + yield return () => ("1010101010101010"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0b1010101010101010)); + yield return () => ("11111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0b11111111)); + yield return () => ("1111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0b1111111111111111)); + yield return () => ("11111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0b11111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); } public static IEnumerable> TryParseTestData() { - throw new NotImplementedException(); + yield return () => ("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042049", NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + yield return () => ("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048", NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int512.MinValue); + yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968", NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int256.MinValue); + yield return () => ("-170141183460469231731687303715884105728", NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int128.MinValue); + yield return () => ("-9223372036854775808", NumberStyles.Integer, CultureInfo.InvariantCulture, true, long.MinValue); + yield return () => ("-1", NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int512.NegativeOne); + yield return () => ("0", NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int512.Zero); + yield return () => ("1", NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int512.One); + yield return () => ("4294967296", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 4294967296)); + yield return () => ("18446744073709551616", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 1, 0)); + yield return () => ("340282366920938463463374607431768211456", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 1, 0, 0)); + yield return () => ("6277101735386680763835789423207666416102355444464034512896", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 1, 0, 0, 0)); + yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639936", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 1, 0, 0, 0, 0)); + yield return () => ("2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086936576", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int512(0, 0, 1, 0, 0, 0, 0, 0)); + yield return () => ("39402006196394479212279040100143613805079739270465446667948293404245721771497210611414266254884915640806627990306816", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int512(0, 1, 0, 0, 0, 0, 0, 0)); + yield return () => ("726838724295606890549323807888004534353641360687318060281490199180639288113397923326191050713763565560762521606266177933534601628614656", NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int512(1, 0, 0, 0, 0, 0, 0, 0)); + yield return () => ("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047", NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int512.MaxValue); + yield return () => ("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048", NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + + yield return () => ("123456789ABCDEF0", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0x123456789ABCDEF0)); + yield return () => ("FF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0xFF)); + yield return () => ("FFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0xFFFF)); + yield return () => ("FFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0xFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0x0000000000000000, 0x0000000000000000, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0xFFFFFFFFFFFFFFFF, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0", + NumberStyles.HexNumber, CultureInfo.InvariantCulture, false, default); + + yield return () => ("1010101010101010", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0b1010101010101010)); + yield return () => ("11111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0b11111111)); + yield return () => ("1111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0b1111111111111111)); + yield return () => ("11111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0b11111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, false, default); } public static IEnumerable> TryParseSpanTestData() { - throw new NotImplementedException(); + yield return () => ("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042049".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + yield return () => ("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int512.MinValue); + yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int256.MinValue); + yield return () => ("-170141183460469231731687303715884105728".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int128.MinValue); + yield return () => ("-9223372036854775808".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, long.MinValue); + yield return () => ("-1".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int512.NegativeOne); + yield return () => ("0".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int512.Zero); + yield return () => ("1".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int512.One); + yield return () => ("4294967296".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 4294967296)); + yield return () => ("18446744073709551616".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 1, 0)); + yield return () => ("340282366920938463463374607431768211456".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 1, 0, 0)); + yield return () => ("6277101735386680763835789423207666416102355444464034512896".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 1, 0, 0, 0)); + yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639936".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 1, 0, 0, 0, 0)); + yield return () => ("2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086936576".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int512(0, 0, 1, 0, 0, 0, 0, 0)); + yield return () => ("39402006196394479212279040100143613805079739270465446667948293404245721771497210611414266254884915640806627990306816".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int512(0, 1, 0, 0, 0, 0, 0, 0)); + yield return () => ("726838724295606890549323807888004534353641360687318060281490199180639288113397923326191050713763565560762521606266177933534601628614656".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int512(1, 0, 0, 0, 0, 0, 0, 0)); + yield return () => ("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int512.MaxValue); + yield return () => ("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + + yield return () => ("123456789ABCDEF0".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0x123456789ABCDEF0)); + yield return () => ("FF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0xFF)); + yield return () => ("FFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0xFFFF)); + yield return () => ("FFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0xFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0x0000000000000000, 0x0000000000000000, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0xFFFFFFFFFFFFFFFF, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0".ToCharArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, false, default); + + yield return () => ("1010101010101010".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0b1010101010101010)); + yield return () => ("11111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0b11111111)); + yield return () => ("1111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0b1111111111111111)); + yield return () => ("11111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0b11111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, false, default); } public static IEnumerable> TryParseUtf8TestData() { - throw new NotImplementedException(); + yield return () => ("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042049"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + yield return () => ("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int512.MinValue); + yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int256.MinValue); + yield return () => ("-170141183460469231731687303715884105728"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int128.MinValue); + yield return () => ("-9223372036854775808"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, long.MinValue); + yield return () => ("-1"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int512.NegativeOne); + yield return () => ("0"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int512.Zero); + yield return () => ("1"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int512.One); + yield return () => ("4294967296"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 4294967296)); + yield return () => ("18446744073709551616"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 1, 0)); + yield return () => ("340282366920938463463374607431768211456"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 1, 0, 0)); + yield return () => ("6277101735386680763835789423207666416102355444464034512896"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 1, 0, 0, 0)); + yield return () => ("115792089237316195423570985008687907853269984665640564039457584007913129639936"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 1, 0, 0, 0, 0)); + yield return () => ("2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086936576"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int512(0, 0, 1, 0, 0, 0, 0, 0)); + yield return () => ("39402006196394479212279040100143613805079739270465446667948293404245721771497210611414266254884915640806627990306816"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int512(0, 1, 0, 0, 0, 0, 0, 0)); + yield return () => ("726838724295606890549323807888004534353641360687318060281490199180639288113397923326191050713763565560762521606266177933534601628614656"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, new Int512(1, 0, 0, 0, 0, 0, 0, 0)); + yield return () => ("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int512.MaxValue); + yield return () => ("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); + + yield return () => ("123456789ABCDEF0"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0x123456789ABCDEF0)); + yield return () => ("FF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0xFF)); + yield return () => ("FFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0xFFFF)); + yield return () => ("FFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0xFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0x0000000000000000, 0x0000000000000000, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, true, new Int512(0xFFFFFFFFFFFFFFFF, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0xFFFFFFFFFFFFFFFF)); + yield return () => ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0"u8.ToArray(), + NumberStyles.HexNumber, CultureInfo.InvariantCulture, false, default); + + yield return () => ("1010101010101010"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0b1010101010101010)); + yield return () => ("11111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0b11111111)); + yield return () => ("1111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0b1111111111111111)); + yield return () => ("11111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0b11111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + yield return () => ("111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), + NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, false, default); } public static IEnumerable> ClampTestData() @@ -749,7 +1109,13 @@ public class Int512DataSources public static IEnumerable> PopCountTestData() { - throw new NotImplementedException(); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 0), new Int512(0, 0, 0, 0, 0, 0, 0, 0)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 1), new Int512(0, 0, 0, 0, 0, 0, 0, 1)); + yield return () => (Int512.MaxValue, new Int512(0, 0, 0, 0, 0, 0, 0, 512)); + yield return () => (new Int512(ulong.MaxValue, 0, 0, 0, 0, 0, 0, 0), new Int512(0, 0, 0, 0, 0, 0, 0, 64)); + yield return () => (new Int512(0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA), new Int512(0, 0, 0, 0, 0, 0, 0, 256)); + yield return () => (new Int512(0, 0, 0, 0, 1UL << 63, 1UL << 62, 1UL << 61, 1UL << 60), new Int512(0, 0, 0, 0, 0, 0, 0, 4)); + yield return () => (new Int512(1UL << 63, 1UL << 62, 1UL << 61, 1UL << 60, 1UL << 59, 1UL << 58, 1UL << 57, 1UL << 56), new Int512(0, 0, 0, 0, 0, 0, 0, 8)); } public static IEnumerable> ReadBigEndianTestData() From 44b7a009701a805e3d00e98a50299ea9243f085c Mon Sep 17 00:00:00 2001 From: crookseta Date: Wed, 13 May 2026 21:44:41 -0500 Subject: [PATCH 44/74] -Fixed some Int512 tests -Added Tests for Int512 methods: IsPow2TestData, Log2TestData, DivRemTestData, LeadingZeroCountTestData, ReadBigEndianTestData, ReadLittleEndianTestData, RotateLeftTestData, RotateRightTestData, GetByteCountTestData, GetShortestBitLengthTestData, WriteBigEndianTestData and WriteLittleEndianTestData. --- .../Data/Int512DataSources.cs | 172 ++++++++++++++++-- 1 file changed, 154 insertions(+), 18 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int512DataSources.cs b/src/MissingValues.Tests/Data/Int512DataSources.cs index 54a438d..b45cded 100644 --- a/src/MissingValues.Tests/Data/Int512DataSources.cs +++ b/src/MissingValues.Tests/Data/Int512DataSources.cs @@ -1,4 +1,5 @@ using System.Globalization; +using System.Runtime.CompilerServices; using MissingValues.Tests.Data.Sources; namespace MissingValues.Tests.Data; @@ -141,6 +142,12 @@ public class Int512DataSources yield return () => ( Int512.MaxValue, new Int512(0, 0, 0, 0, 0, 0, 0, 1), + Int512.MaxValue, + false + ); + yield return () => ( + Int512.MaxValue, + new Int512(0, 0, 0, 0, 0, 0, 0, 2), default, true ); @@ -227,7 +234,7 @@ public class Int512DataSources yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 15), new Int512(0, 0, 0, 0, 0, 0, 0, 5), Int512.Zero); yield return () => (Int512.NegativeOne, new Int512(0, 0, 0, 0, 0, 0, 0, 2), Int512.NegativeOne); yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 7), Int512.NegativeOne, Int512.Zero); - yield return () => (Int512.MaxValue, new Int512(0, 0, 0, 0, 0, 0, 0, 123456789), new Int512(0, 0, 0, 0, 0, 0, 0, 77645365)); + yield return () => (Int512.MaxValue, new Int512(0, 0, 0, 0, 0, 0, 0, 123456789), new Int512(0, 0, 0, 0, 0, 0, 0, 29802988)); yield return () => (new Int512(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0040, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new Int512(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_000F, 0xEE50_B702_5C36_A080, 0x2F23_6D04_753D_5B48, 0xE800_0000_0000_0000), new Int512(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x46BD_23F6_8F25_7DFF, 0x4372_4BEE_2B0A_92DC, 0x6000_0000_0000_0000)); } @@ -306,7 +313,7 @@ public class Int512DataSources yield return () => (new Int512(0b1000000000000000000000000000000000000000000000000000000000000000, 0, 0, 0, 0, 0, 0, 0), 127, new Int512(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0, 0, 0, 0, 0, 0)); yield return () => (new Int512(0b1000000000000000000000000000000000000000000000000000000000000000, 0, 0, 0, 0, 0, 0, 0), 255, new Int512(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0, 0, 0, 0)); yield return () => (new Int512(0b1000000000000000000000000000000000000000000000000000000000000000, 0, 0, 0, 0, 0, 0, 0), 511, new Int512(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); - yield return () => (Int512.One, 256, Int512.One); + yield return () => (Int512.One, 512, Int512.One); } public static IEnumerable> op_UnsignedShiftRightTestData() @@ -347,8 +354,8 @@ public class Int512DataSources public static IEnumerable> op_OnesComplementTestData() { - yield return () => (Int512.Zero, Int512.MaxValue); - yield return () => (Int512.MaxValue, Int512.Zero); + yield return () => (Int512.Zero, new Int512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); + yield return () => (Int512.MaxValue, new Int512(0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); yield return () => (new Int512(0xAAAAAAAAAAAAAAAA, 0x5555555555555555, 0xAAAAAAAAAAAAAAAA, 0x5555555555555555, 0xAAAAAAAAAAAAAAAA, 0x5555555555555555, 0xAAAAAAAAAAAAAAAA, 0x5555555555555555), new Int512(0x5555555555555555, 0xAAAAAAAAAAAAAAAA, 0x5555555555555555, 0xAAAAAAAAAAAAAAAA, 0x5555555555555555, 0xAAAAAAAAAAAAAAAA, 0x5555555555555555, 0xAAAAAAAAAAAAAAAA)); yield return () => (new Int512(0x0123456789ABCDEF, 0xFEDCBA9876543210, 0x0F0F0F0F0F0F0F0F, 0xF0F0F0F0F0F0F0F0, 0x0123456789ABCDEF, 0xFEDCBA9876543210, 0x0F0F0F0F0F0F0F0F, 0xF0F0F0F0F0F0F0F0), new Int512(~0x0123456789ABCDEFU, ~0xFEDCBA9876543210U, ~0x0F0F0F0F0F0F0F0FU, ~0xF0F0F0F0F0F0F0F0U, ~0x0123456789ABCDEFU, ~0xFEDCBA9876543210U, ~0x0F0F0F0F0F0F0F0FU, ~0xF0F0F0F0F0F0F0F0U)); } @@ -1089,29 +1096,59 @@ public class Int512DataSources public static IEnumerable> IsPow2TestData() { - throw new NotImplementedException(); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 1), true); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 2), true); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 4), true); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 8), true); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 16), true); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 1UL << 63), true); + yield return () => (new Int512(0, 0, 0, 0, 1UL << 63, 0, 0, 0), true); + yield return () => (new Int512(1UL << 63, 0, 0, 0, 0, 0, 0, 0), false); + yield return () => (Int512.Zero, false); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 3), false); + yield return () => (Int512.MaxValue, false); } public static IEnumerable> Log2TestData() { - throw new NotImplementedException(); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 1), new Int512(0, 0, 0, 0, 0, 0, 0, 0)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 2), new Int512(0, 0, 0, 0, 0, 0, 0, 1)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 4), new Int512(0, 0, 0, 0, 0, 0, 0, 2)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 8), new Int512(0, 0, 0, 0, 0, 0, 0, 3)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 1UL << 63), new Int512(0, 0, 0, 0, 0, 0, 0, 63)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 1UL << 5, 0), new Int512(0, 0, 0, 0, 0, 0, 0, 69)); + yield return () => (new Int512(0, 0, 0, 0, 0, 1UL << 42, 0, 0), new Int512(0, 0, 0, 0, 0, 0, 0, 170)); + yield return () => (new Int512(0, 0, 0, 0, 1UL << 13, 0, 0, 0), new Int512(0, 0, 0, 0, 0, 0, 0, 205)); + yield return () => (new Int512(0, 0, 0, 0, 1UL << 63, 0, 0, 0), new Int512(0, 0, 0, 0, 0, 0, 0, 255)); + yield return () => (new Int512(1UL << 62, 0, 0, 0, 0, 0, 0, 0), new Int512(0, 0, 0, 0, 0, 0, 0, 511)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 0), new Int512(0, 0, 0, 0, 0, 0, 0, 0)); } public static IEnumerable)>> DivRemTestData() { - throw new NotImplementedException(); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(0, 0, 0, 0, 0, 0, 0, 1), (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(0, 0, 0, 0, 0, 0, 0, 0))); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), (new Int512(0, 0, 0, 0, 0, 0, 0, 1), new Int512(0, 0, 0, 0, 0, 0, 0, 0))); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 8), (new Int512(0, 0, 0, 0, 0, 0, 0, 1), new Int512(0, 0, 0, 0, 0, 0, 0, 0))); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), new Int512(1, 2, 3, 4, 5, 6, 7, 9), (new Int512(0, 0, 0, 0, 0, 0, 0, 0), new Int512(1, 2, 3, 4, 5, 6, 7, 8))); + yield return () => (Int512.MaxValue, new Int512(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), (new Int512(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), new Int512(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF))); + yield return () => (Int512.MaxValue, new Int512(0, 0, 0, 1, 0, 0, 0, 0), (new Int512(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), new Int512(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF))); } public static IEnumerable> LeadingZeroCountTestData() { - throw new NotImplementedException(); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 0), new Int512(0, 0, 0, 0, 0, 0, 0, 512)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 1), new Int512(0, 0, 0, 0, 0, 0, 0, 511)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 1, 0), new Int512(0, 0, 0, 0, 0, 0, 0, 447)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 1UL << 36, 0), new Int512(0, 0, 0, 0, 0, 0, 0, 411)); + yield return () => (new Int512(0, 0, 0, 1, 0, 0, 0, 0), new Int512(0, 0, 0, 0, 0, 0, 0, 255)); + yield return () => (new Int512(1UL << 63, 0, 0, 0, 0, 0, 0, 0), new Int512(0, 0, 0, 0, 0, 0, 0, 0)); } public static IEnumerable> PopCountTestData() { yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 0), new Int512(0, 0, 0, 0, 0, 0, 0, 0)); yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 1), new Int512(0, 0, 0, 0, 0, 0, 0, 1)); - yield return () => (Int512.MaxValue, new Int512(0, 0, 0, 0, 0, 0, 0, 512)); + yield return () => (Int512.MaxValue, new Int512(0, 0, 0, 0, 0, 0, 0, 511)); yield return () => (new Int512(ulong.MaxValue, 0, 0, 0, 0, 0, 0, 0), new Int512(0, 0, 0, 0, 0, 0, 0, 64)); yield return () => (new Int512(0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA, 0xAAAAAAAAAAAAAAAA), new Int512(0, 0, 0, 0, 0, 0, 0, 256)); yield return () => (new Int512(0, 0, 0, 0, 1UL << 63, 1UL << 62, 1UL << 61, 1UL << 60), new Int512(0, 0, 0, 0, 0, 0, 0, 4)); @@ -1120,47 +1157,146 @@ public class Int512DataSources public static IEnumerable> ReadBigEndianTestData() { - throw new NotImplementedException(); + yield return () => ([], true, Int512.Zero); + yield return () => ([0x01], true, Int512.One); + yield return () => + { + byte[] array = new byte[64]; + Array.Fill(array, byte.MaxValue); + return (array, true, new Int512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); + }; + yield return () => + { + byte[] array = new byte[67]; + for (int i = 3; i < 67; i++) + array[i] = byte.MaxValue; + return (array, true, new Int512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); + }; + yield return () => ([0x12, 0x34], true, new Int512(0, 0, 0, 0, 0, 0, 0, 0x1234)); + yield return () => + { + byte[] array = new byte[64]; + array[0] = 0x80; + return (array, true, new Int512(1UL << 63, 0, 0, 0, 0, 0, 0, 0)); + }; } public static IEnumerable> ReadLittleEndianTestData() { - throw new NotImplementedException(); + yield return () => ([], true, Int512.Zero); + yield return () => ([0x01], true, Int512.One); + yield return () => + { + byte[] array = new byte[64]; + Array.Fill(array, byte.MaxValue); + return (array, true, new Int512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); + }; + yield return () => + { + byte[] array = new byte[67]; + for (int i = 0; i < 64; i++) + array[i] = byte.MaxValue; + return (array, true, new Int512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); + }; + yield return () => ([0x34, 0x12], true, new Int512(0, 0, 0, 0, 0, 0, 0, 0x1234)); + yield return () => + { + byte[] array = new byte[64]; + array[63] = 0x80; + return (array, true, new Int512(1UL << 63, 0, 0, 0, 0, 0, 0, 0)); + }; } public static IEnumerable> RotateLeftTestData() { - throw new NotImplementedException(); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), 0, new Int512(1, 2, 3, 4, 5, 6, 7, 8)); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), 512, new Int512(1, 2, 3, 4, 5, 6, 7, 8)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0x8000_0000_0000_0000, 0), 64, new Int512(0, 0, 0, 0, 0, 0x8000_0000_0000_0000, 0, 0)); + yield return () => (new Int512(0x8000_0000_0000_0000, 0, 0, 0, 0, 0, 0, 0), 64, new Int512(0, 0, 0, 0, 0, 0, 0, 0x8000_0000_0000_0000)); + yield return () => (new Int512(0, 0, 0, 0, 0x8000_0000_0000_0000, 0, 0, 0), 128, new Int512(0, 0, 0x8000_0000_0000_0000, 0, 0, 0, 0, 0)); } public static IEnumerable> RotateRightTestData() { - throw new NotImplementedException(); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), 0, new Int512(1, 2, 3, 4, 5, 6, 7, 8)); + yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), 512, new Int512(1, 2, 3, 4, 5, 6, 7, 8)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0x8000_0000_0000_0000, 0), 64, new Int512(0, 0, 0, 0, 0, 0, 0, 0x8000_0000_0000_0000)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 0x8000_0000_0000_0000), 64, new Int512(0x8000_0000_0000_0000, 0, 0, 0, 0, 0, 0, 0)); + yield return () => (new Int512(0, 0, 0, 0, 0x8000_0000_0000_0000, 0, 0, 0), 128, new Int512(0, 0, 0, 0, 0, 0, 0x8000_0000_0000_0000, 0)); } public static IEnumerable> TrailingZeroCountTestData() { - throw new NotImplementedException(); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 0), new Int512(0, 0, 0, 0, 0, 0, 0, 512)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 1), new Int512(0, 0, 0, 0, 0, 0, 0, 0)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 1, 0), new Int512(0, 0, 0, 0, 0, 0, 0, 64)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 1UL << 36, 0), new Int512(0, 0, 0, 0, 0, 0, 0, 100)); + yield return () => (new Int512(0, 0, 0, 1, 0, 0, 0, 0), new Int512(0, 0, 0, 0, 0, 0, 0, 256)); + yield return () => (new Int512(1UL << 63, 0, 0, 0, 0, 0, 0, 0), new Int512(0, 0, 0, 0, 0, 0, 0, 511)); } public static IEnumerable> GetByteCountTestData() { - throw new NotImplementedException(); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 0), Unsafe.SizeOf()); } public static IEnumerable> GetShortestBitLengthTestData() { - throw new NotImplementedException(); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 0), 0); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 1), 1); + yield return () => (new Int512(0, 0, 0, 0, 1, 0, 0, 0), 193); + yield return () => (new Int512(1, 0, 0, 0, 0, 0, 0, 0), 449); + yield return () => (Int512.MaxValue, 511); + yield return () => (new Int512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), 1); } public static IEnumerable> WriteBigEndianTestData() { - throw new NotImplementedException(); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 0), new byte[64], Unsafe.SizeOf()); + yield return () => + { + var buffer = new byte[64]; + + for (int i = 0; i < 63; i++) + buffer[i] = 0; + + buffer[63] = 1; + + return (new Int512(0, 0, 0, 0, 0, 0, 0, 1), buffer, Unsafe.SizeOf()); + }; + yield return () => + { + var buffer = new byte[64]; + + for (int i = 0; i < 64; i++) + buffer[i] = 0xFF; + + return (new Int512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), buffer, Unsafe.SizeOf()); + }; } public static IEnumerable> WriteLittleEndianTestData() { - throw new NotImplementedException(); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 0), new byte[64], Unsafe.SizeOf()); + yield return () => + { + var buffer = new byte[64]; + + buffer[0] = 1; + for (int i = 1; i < 64; i++) + buffer[i] = 0; + + return (new Int512(0, 0, 0, 0, 0, 0, 0, 1), buffer, Unsafe.SizeOf()); + }; + yield return () => + { + var buffer = new byte[64]; + + for (int i = 0; i < 64; i++) + buffer[i] = 0xFF; + + return (new Int512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), buffer, Unsafe.SizeOf()); + }; } public static IEnumerable> ConvertToCheckedByteTestData() From 4f7ac3bc98e3f4e2eac31cb34aefcf745ad1d1c0 Mon Sep 17 00:00:00 2001 From: crookseta Date: Thu, 14 May 2026 20:52:10 -0500 Subject: [PATCH 45/74] -Fixed some Int512 tests. --- .../Data/Int256DataSources.cs | 5 ++--- .../Data/Int512DataSources.cs | 18 +++++++++--------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int256DataSources.cs b/src/MissingValues.Tests/Data/Int256DataSources.cs index cc5e803..0d9e3e7 100644 --- a/src/MissingValues.Tests/Data/Int256DataSources.cs +++ b/src/MissingValues.Tests/Data/Int256DataSources.cs @@ -169,9 +169,9 @@ public class Int256DataSources yield return () => (Int256.One, Int256.Zero, Int256.One); yield return () => (Int256.One, Int256.One, Int256.Zero); yield return () => (Int256.Zero, Int256.One, Int256.NegativeOne); - yield return () => (Int256.MaxValue,Int256.One, new Int256(ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue - 1)); + yield return () => (Int256.MaxValue,Int256.One, new Int256(0x7FFF_FFFF_FFFF_FFFF, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue - 1)); yield return () => (Int256.MinValue,Int256.One,Int256.MaxValue); - yield return () => (Int256.MinValue,Int256.NegativeOne, new Int256(unchecked((ulong)-1), ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); + yield return () => (Int256.MinValue,Int256.NegativeOne, new Int256(0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001)); yield return () => (new Int256(1, 2, 3, 4),new Int256(0, 1, 2, 3),new Int256(1, 1, 1, 1)); yield return () => (new Int256(0, 0, 0, 0),new Int256(0, 0, 0, 1),new Int256(unchecked((ulong)-1), ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); } @@ -504,7 +504,6 @@ public class Int256DataSources yield return () => (Int256.One, Int256.Zero, Int256.One, Int256.One); yield return () => (Int256.MaxValue, Int256.NegativeOne, Int256.NegativeOne, Int256.MinValue); yield return () => (200, 100, 500, 20500); - yield return () => (new Int256(0, 0, ulong.MaxValue, ulong.MaxValue), new Int256(0, 0, ulong.MaxValue, ulong.MaxValue), new Int256(0, 0, ulong.MaxValue, ulong.MaxValue), Int256.Parse("115792089237316195423570985008687907852929702298719625575994209400481361428480")); } public static IEnumerable> ParseTestData() diff --git a/src/MissingValues.Tests/Data/Int512DataSources.cs b/src/MissingValues.Tests/Data/Int512DataSources.cs index b45cded..33841d7 100644 --- a/src/MissingValues.Tests/Data/Int512DataSources.cs +++ b/src/MissingValues.Tests/Data/Int512DataSources.cs @@ -1120,7 +1120,7 @@ public class Int512DataSources yield return () => (new Int512(0, 0, 0, 0, 0, 1UL << 42, 0, 0), new Int512(0, 0, 0, 0, 0, 0, 0, 170)); yield return () => (new Int512(0, 0, 0, 0, 1UL << 13, 0, 0, 0), new Int512(0, 0, 0, 0, 0, 0, 0, 205)); yield return () => (new Int512(0, 0, 0, 0, 1UL << 63, 0, 0, 0), new Int512(0, 0, 0, 0, 0, 0, 0, 255)); - yield return () => (new Int512(1UL << 62, 0, 0, 0, 0, 0, 0, 0), new Int512(0, 0, 0, 0, 0, 0, 0, 511)); + yield return () => (new Int512(1UL << 62, 0, 0, 0, 0, 0, 0, 0), new Int512(0, 0, 0, 0, 0, 0, 0, 510)); yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 0), new Int512(0, 0, 0, 0, 0, 0, 0, 0)); } @@ -1163,21 +1163,21 @@ public class Int512DataSources { byte[] array = new byte[64]; Array.Fill(array, byte.MaxValue); - return (array, true, new Int512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); + return (array, false, new Int512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); }; yield return () => { byte[] array = new byte[67]; - for (int i = 3; i < 67; i++) + for (int i = 0; i < 67; i++) array[i] = byte.MaxValue; - return (array, true, new Int512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); + return (array, false, new Int512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); }; yield return () => ([0x12, 0x34], true, new Int512(0, 0, 0, 0, 0, 0, 0, 0x1234)); yield return () => { byte[] array = new byte[64]; array[0] = 0x80; - return (array, true, new Int512(1UL << 63, 0, 0, 0, 0, 0, 0, 0)); + return (array, false, new Int512(1UL << 63, 0, 0, 0, 0, 0, 0, 0)); }; } @@ -1189,21 +1189,21 @@ public class Int512DataSources { byte[] array = new byte[64]; Array.Fill(array, byte.MaxValue); - return (array, true, new Int512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); + return (array, false, new Int512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); }; yield return () => { byte[] array = new byte[67]; - for (int i = 0; i < 64; i++) + for (int i = 0; i < 67; i++) array[i] = byte.MaxValue; - return (array, true, new Int512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); + return (array, false, new Int512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); }; yield return () => ([0x34, 0x12], true, new Int512(0, 0, 0, 0, 0, 0, 0, 0x1234)); yield return () => { byte[] array = new byte[64]; array[63] = 0x80; - return (array, true, new Int512(1UL << 63, 0, 0, 0, 0, 0, 0, 0)); + return (array, false, new Int512(1UL << 63, 0, 0, 0, 0, 0, 0, 0)); }; } From 1bfd349ea0c7d9fcb88bbef6c190586d3092038d Mon Sep 17 00:00:00 2001 From: crookseta Date: Thu, 11 Jun 2026 10:18:14 -0500 Subject: [PATCH 46/74] Added UnaryNegation test data. --- .../Data/Int256DataSources.cs | 10 ++++ .../Data/Int512DataSources.cs | 10 ++++ .../Data/OctoDataSources.cs | 10 ++++ .../Data/QuadDataSources.cs | 11 ++++ .../Data/Sources/IMathOperators.cs | 2 + .../Data/UInt256DataSources.cs | 10 ++++ .../Data/UInt512DataSources.cs | 10 ++++ .../Extensions/NumberExtensions.cs | 53 +++++++++++++++++++ 8 files changed, 116 insertions(+) create mode 100644 src/MissingValues.Tests/Extensions/NumberExtensions.cs diff --git a/src/MissingValues.Tests/Data/Int256DataSources.cs b/src/MissingValues.Tests/Data/Int256DataSources.cs index 0d9e3e7..72fd53f 100644 --- a/src/MissingValues.Tests/Data/Int256DataSources.cs +++ b/src/MissingValues.Tests/Data/Int256DataSources.cs @@ -176,6 +176,16 @@ public class Int256DataSources yield return () => (new Int256(0, 0, 0, 0),new Int256(0, 0, 0, 1),new Int256(unchecked((ulong)-1), ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); } + public static IEnumerable> op_UnaryNegationTestData() + { + yield return () => (Int256.Zero, Int256.Zero); + } + + public static IEnumerable> op_CheckedUnaryNegationTestData() + { + yield return () => (Int256.Zero, Int256.Zero, false); + } + public static IEnumerable> op_ShiftLeftTestData() { yield return () => (Int256.Zero, 100, Int256.Zero); diff --git a/src/MissingValues.Tests/Data/Int512DataSources.cs b/src/MissingValues.Tests/Data/Int512DataSources.cs index 33841d7..5238be7 100644 --- a/src/MissingValues.Tests/Data/Int512DataSources.cs +++ b/src/MissingValues.Tests/Data/Int512DataSources.cs @@ -289,6 +289,16 @@ public class Int512DataSources new Int512(unchecked((ulong)-1), ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); } + public static IEnumerable> op_UnaryNegationTestData() + { + yield return () => (Int512.Zero, Int512.Zero); + } + + public static IEnumerable> op_CheckedUnaryNegationTestData() + { + yield return () => (Int512.Zero, Int512.Zero, false); + } + public static IEnumerable> op_ShiftLeftTestData() { yield return () => (new Int512(1, 2, 3, 4, 5, 6, 7, 8), 0, new Int512(1, 2, 3, 4, 5, 6, 7, 8)); diff --git a/src/MissingValues.Tests/Data/OctoDataSources.cs b/src/MissingValues.Tests/Data/OctoDataSources.cs index b2565ad..e95aaf7 100644 --- a/src/MissingValues.Tests/Data/OctoDataSources.cs +++ b/src/MissingValues.Tests/Data/OctoDataSources.cs @@ -74,6 +74,16 @@ public class OctoDataSources throw new NotImplementedException(); } + public static IEnumerable> op_UnaryNegationTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_CheckedUnaryNegationTestData() + { + throw new NotImplementedException(); + } + public static IEnumerable> op_BitwiseAndTestData() { throw new NotImplementedException(); diff --git a/src/MissingValues.Tests/Data/QuadDataSources.cs b/src/MissingValues.Tests/Data/QuadDataSources.cs index 4858328..d730a4b 100644 --- a/src/MissingValues.Tests/Data/QuadDataSources.cs +++ b/src/MissingValues.Tests/Data/QuadDataSources.cs @@ -1,6 +1,7 @@ using System.Globalization; using System.Text; using MissingValues.Tests.Data.Sources; +using MissingValues.Tests.Extensions; namespace MissingValues.Tests.Data; @@ -75,6 +76,16 @@ public class QuadDataSources throw new NotImplementedException(); } + public static IEnumerable> op_UnaryNegationTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> op_CheckedUnaryNegationTestData() + { + throw new NotImplementedException(); + } + public static IEnumerable> op_BitwiseAndTestData() { throw new NotImplementedException(); diff --git a/src/MissingValues.Tests/Data/Sources/IMathOperators.cs b/src/MissingValues.Tests/Data/Sources/IMathOperators.cs index 512debc..dada976 100644 --- a/src/MissingValues.Tests/Data/Sources/IMathOperators.cs +++ b/src/MissingValues.Tests/Data/Sources/IMathOperators.cs @@ -25,4 +25,6 @@ where T static abstract IEnumerable> op_ModulusTestData(); static abstract IEnumerable> op_MultiplyTestData(); static abstract IEnumerable> op_SubtractionTestData(); + static abstract IEnumerable> op_UnaryNegationTestData(); + static abstract IEnumerable> op_CheckedUnaryNegationTestData(); } \ No newline at end of file diff --git a/src/MissingValues.Tests/Data/UInt256DataSources.cs b/src/MissingValues.Tests/Data/UInt256DataSources.cs index b1a245c..2460ee7 100644 --- a/src/MissingValues.Tests/Data/UInt256DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt256DataSources.cs @@ -58,6 +58,16 @@ public class UInt256DataSources yield return () => (new UInt256(1, 0, 0, 0), UInt256.One, new UInt256(0, ulong.MaxValue, ulong.MaxValue, ulong.MaxValue)); yield return () => (UInt256.Zero, UInt256.One, UInt256.MaxValue); } + + public static IEnumerable> op_UnaryNegationTestData() + { + yield return () => (UInt256.Zero, UInt256.Zero); + } + public static IEnumerable> op_CheckedUnaryNegationTestData() + { + yield return () => (UInt256.Zero, UInt256.Zero, false); + } + public static IEnumerable> op_CheckedSubtractionTestData() { yield return () => (UInt256.Zero, UInt256.Zero, UInt256.Zero, false); diff --git a/src/MissingValues.Tests/Data/UInt512DataSources.cs b/src/MissingValues.Tests/Data/UInt512DataSources.cs index a7dca11..0cba985 100644 --- a/src/MissingValues.Tests/Data/UInt512DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt512DataSources.cs @@ -206,6 +206,16 @@ public class UInt512DataSources ); } + public static IEnumerable> op_UnaryNegationTestData() + { + yield return () => (UInt512.Zero, UInt512.Zero); + } + + public static IEnumerable> op_CheckedUnaryNegationTestData() + { + yield return () => (UInt512.Zero, UInt512.Zero, false); + } + public static IEnumerable> op_ShiftLeftTestData() { yield return () => (new UInt512(1, 2, 3, 4, 5, 6, 7, 8), 0, new UInt512(1, 2, 3, 4, 5, 6, 7, 8)); diff --git a/src/MissingValues.Tests/Extensions/NumberExtensions.cs b/src/MissingValues.Tests/Extensions/NumberExtensions.cs new file mode 100644 index 0000000..1c0cc67 --- /dev/null +++ b/src/MissingValues.Tests/Extensions/NumberExtensions.cs @@ -0,0 +1,53 @@ +namespace MissingValues.Tests.Extensions; + +public static class NumberExtensions +{ + extension(Quad) + { + public static Quad NegativeThousand => Values.CreateFloat(0xC008_F400_0000_0000, 0x0000_0000_0000_0000); + public static Quad NegativeHundred => Values.CreateFloat(0xC005_9000_0000_0000, 0x0000_0000_0000_0000); + public static Quad NegativeTen => Values.CreateFloat(0xC002_4000_0000_0000, 0x0000_0000_0000_0000); + public static Quad NegativeSix => Values.CreateFloat(0xC001_8000_0000_0000, 0x0000_0000_0000_0000); + public static Quad NegativeFive => Values.CreateFloat(0xC001_4000_0000_0000, 0x0000_0000_0000_0000); + public static Quad NegativeFour => Values.CreateFloat(0xC001_0000_0000_0000, 0x0000_0000_0000_0000); + public static Quad NegativeThree => Values.CreateFloat(0xC000_8000_0000_0000, 0x0000_0000_0000_0000); + public static Quad NegativeTwo => Values.CreateFloat(0xC000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Quad NegativeHalf => Values.CreateFloat(0xBFFE_0000_0000_0000, 0x0000_0000_0000_0000); + public static Quad NegativeQuarter => Values.CreateFloat(0xBFFD_0000_0000_0000, 0x0000_0000_0000_0000); + public static Quad Quarter => Values.CreateFloat(0x3FFD_0000_0000_0000, 0x0000_0000_0000_0000); + public static Quad Half => Values.CreateFloat(0x3FFE_0000_0000_0000, 0x0000_0000_0000_0000); + public static Quad Two => Values.CreateFloat(0x4000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Quad Three => Values.CreateFloat(0x4000_8000_0000_0000, 0x0000_0000_0000_0000); + public static Quad Four => Values.CreateFloat(0x4001_0000_0000_0000, 0x0000_0000_0000_0000); + public static Quad Five => Values.CreateFloat(0x4001_4000_0000_0000, 0x0000_0000_0000_0000); + public static Quad Six => Values.CreateFloat(0x4001_8000_0000_0000, 0x0000_0000_0000_0000); + public static Quad Ten => Values.CreateFloat(0x4002_4000_0000_0000, 0x0000_0000_0000_0000); + public static Quad Hundred => Values.CreateFloat(0x4005_9000_0000_0000, 0x0000_0000_0000_0000); + public static Quad Thousand => Values.CreateFloat(0x4008_F400_0000_0000, 0x0000_0000_0000_0000); + + public static Quad GreaterThanOneSmallest => Values.CreateFloat(0x3FFF_0000_0000_0000, 0x0000_0000_0000_0001); + public static Quad LessThanOneLargest => Values.CreateFloat(0x3FFE_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); + + public static Quad SmallestSubnormal => Values.CreateFloat(0x0000_0000_0000_0000, 0x0000_0000_0000_0001); + public static Quad GreatestSubnormal => Values.CreateFloat(0x0000_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); + + public static Quad ByteMaxValue => Values.CreateFloat(0x4006_FE00_0000_0000, 0x0000_0000_0000_0000); + public static Quad UInt16MaxValue => Values.CreateFloat(0x400E_FFFE_0000_0000, 0x0000_0000_0000_0000); + public static Quad UInt32MaxValue => Values.CreateFloat(0x401E_FFFF_FFFE_0000, 0x0000_0000_0000_0000); + public static Quad UInt64MaxValue => Values.CreateFloat(0x403E_FFFF_FFFF_FFFF, 0xFFFE_0000_0000_0000); + public static Quad TwoOver127 => Values.CreateFloat(0x407E_0000_0000_0000, 0x0000_0000_0000_0000); + public static Quad TwoOver255 => Values.CreateFloat(0x40FE_0000_0000_0000, 0x0000_0000_0000_0000); + public static Quad TwoOver511 => Values.CreateFloat(0x41FE_0000_0000_0000, 0x0000_0000_0000_0000); + + public static Quad SByteMaxValue => Values.CreateFloat(0x4005_FC00_0000_0000, 0x0000_0000_0000_0000); + public static Quad SByteMinValue => Values.CreateFloat(0xC006_0000_0000_0000, 0x0000_0000_0000_0000); + public static Quad Int16MaxValue => Values.CreateFloat(0x400D_FFFC_0000_0000, 0x0000_0000_0000_0000); + public static Quad Int16MinValue => Values.CreateFloat(0xC00E_0000_0000_0000, 0x0000_0000_0000_0000); + public static Quad Int32MaxValue => Values.CreateFloat(0x401D_FFFF_FFFC_0000, 0x0000_0000_0000_0000); + public static Quad Int32MinValue => Values.CreateFloat(0xC01E_0000_0000_0000, 0x0000_0000_0000_0000); + public static Quad Int64MaxValue => Values.CreateFloat(0x403D_FFFF_FFFF_FFFF, 0xFFFC_0000_0000_0000); + public static Quad Int64MinValue => Values.CreateFloat(0xC03E_0000_0000_0000, 0x0000_0000_0000_0000); + + public static Quad Delta => Values.CreateFloat(0x406F_0000_0000_0000, 0x0000_0000_0000_0000); + } +} \ No newline at end of file From 9b287e4fb8a3bdd92a9091b51ea7aa3e4d65723f Mon Sep 17 00:00:00 2001 From: crookseta Date: Sat, 13 Jun 2026 12:23:30 -0500 Subject: [PATCH 47/74] Use extensions for frequent constant values (1). --- .../Extensions/Int256Extensions.cs | 37 ++++++++ .../Extensions/Int512Extensions.cs | 86 +++++++++++++++++++ .../Extensions/OctoExtensions.cs | 53 ++++++++++++ ...{NumberExtensions.cs => QuadExtensions.cs} | 2 +- .../Extensions/UInt256Extensions.cs | 18 ++++ .../Extensions/UInt512Extensions.cs | 39 +++++++++ 6 files changed, 234 insertions(+), 1 deletion(-) create mode 100644 src/MissingValues.Tests/Extensions/Int256Extensions.cs create mode 100644 src/MissingValues.Tests/Extensions/Int512Extensions.cs create mode 100644 src/MissingValues.Tests/Extensions/OctoExtensions.cs rename src/MissingValues.Tests/Extensions/{NumberExtensions.cs => QuadExtensions.cs} (99%) create mode 100644 src/MissingValues.Tests/Extensions/UInt256Extensions.cs create mode 100644 src/MissingValues.Tests/Extensions/UInt512Extensions.cs diff --git a/src/MissingValues.Tests/Extensions/Int256Extensions.cs b/src/MissingValues.Tests/Extensions/Int256Extensions.cs new file mode 100644 index 0000000..399e325 --- /dev/null +++ b/src/MissingValues.Tests/Extensions/Int256Extensions.cs @@ -0,0 +1,37 @@ +namespace MissingValues.Tests.Extensions; + +public static class Int256Extensions +{ + extension(Int256) + { + private static Int256 SByteMaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_007F); + private static Int256 SByteMinValue => new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF80); + + private static Int256 ByteMaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_00FF); + + private static Int256 Int16MaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_7FFF); + private static Int256 Int16MinValue => new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_8000); + + private static Int256 UInt16MaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_FFFF); + + private static Int256 Int32MaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_7FFF_FFFF); + private static Int256 Int32MinValue => new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_8000_0000); + + private static Int256 UInt32MaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_FFFF_FFFF); + + private static Int256 Int64MaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x7FFF_FFFF_FFFF_FFFF); + private static Int256 Int64MinValue => new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000); + + private static Int256 UInt64MaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF); + + private static Int256 Int128MaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); + private static Int256 Int128MinValue => new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000, 0x0000_0000_0000_0000); + + private static Int256 UInt128MaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); + + private static Int256 NegativeTwo => new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE); + private static Int256 Two => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0002); + private static Int256 MaxValueMinusOne => new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE); + private static Int256 MinValuePlusOne => new(0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001); + } +} \ No newline at end of file diff --git a/src/MissingValues.Tests/Extensions/Int512Extensions.cs b/src/MissingValues.Tests/Extensions/Int512Extensions.cs new file mode 100644 index 0000000..f4caab6 --- /dev/null +++ b/src/MissingValues.Tests/Extensions/Int512Extensions.cs @@ -0,0 +1,86 @@ +namespace MissingValues.Tests.Extensions; + +public static class Int512Extensions +{ + extension(Int512) + { + private static Int512 SByteMaxValue => new( + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_007F); + private static Int512 SByteMinValue => new( + 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, + 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF80); + + private static Int512 ByteMaxValue => new( + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_00FF); + + private static Int512 Int16MaxValue => new( + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_7FFF); + private static Int512 Int16MinValue => new( + 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, + 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_8000); + + private static Int512 UInt16MaxValue => new( + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_FFFF); + + private static Int512 Int32MaxValue => new( + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_7FFF_FFFF); + private static Int512 Int32MinValue => new( + 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, + 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_8000_0000); + + private static Int512 UInt32MaxValue => new( + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_FFFF_FFFF); + + private static Int512 Int64MaxValue => new( + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x7FFF_FFFF_FFFF_FFFF); + private static Int512 Int64MinValue => new( + 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, + 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000); + + private static Int512 UInt64MaxValue => new( + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF); + + private static Int512 Int128MaxValue => new( + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); + private static Int512 Int128MinValue => new( + 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, + 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000, 0x0000_0000_0000_0000); + + private static Int512 UInt128MaxValue => new( + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); + + private static Int512 Int256MaxValue => new( + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, + 0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); + private static Int512 Int256MinValue => new( + 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, + 0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + + private static Int512 UInt256MaxValue => new( + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, + 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); + + private static Int512 NegativeTwo => new( + 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, + 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE); + private static Int512 Two => new( + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0002); + private static Int512 MaxValueMinusOne => new( + 0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, + 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE); + private static Int512 MinValuePlusOne => new( + 0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000,0x0000_0000_0000_0000, 0x0000_0000_0000_0001); + } +} \ No newline at end of file diff --git a/src/MissingValues.Tests/Extensions/OctoExtensions.cs b/src/MissingValues.Tests/Extensions/OctoExtensions.cs new file mode 100644 index 0000000..a87a100 --- /dev/null +++ b/src/MissingValues.Tests/Extensions/OctoExtensions.cs @@ -0,0 +1,53 @@ +namespace MissingValues.Tests.Extensions; + +public static class OctoExtensions +{ + extension(Octo) + { + public static Octo NegativeThousand => Values.CreateFloat(0xC000_8F40_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo NegativeHundred => Values.CreateFloat(0xC000_5900_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo NegativeTen => Values.CreateFloat(0xC000_2400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo NegativeFive => Values.CreateFloat(0xC000_1400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo NegativeFour => Values.CreateFloat(0xC000_1000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo NegativeThree => Values.CreateFloat(0xC000_0800_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo NegativeTwo => Values.CreateFloat(0xC000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo NegativeHalf => Values.CreateFloat(0xBFFF_E000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo NegativeQuarter => Values.CreateFloat(0xBFFF_D000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo Quarter => Values.CreateFloat(0x3FFF_D000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo Half => Values.CreateFloat(0x3FFF_E000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo Two => Values.CreateFloat(0x4000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo Three => Values.CreateFloat(0x4000_0800_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo Four => Values.CreateFloat(0x4000_1000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo Five => Values.CreateFloat(0x4000_1400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo Ten => Values.CreateFloat(0x4000_2400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo Hundred => Values.CreateFloat(0x4000_5900_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo Thousand => Values.CreateFloat(0x4000_8F40_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + + public static Octo GreaterThanOneSmallest => Values.CreateFloat(0x3FFF_F000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001); + public static Octo LessThanOneLargest => Values.CreateFloat(0x3FFF_EFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); + + public static Octo SmallestSubnormal => Values.CreateFloat(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001); + public static Octo GreatestSubnormal => Values.CreateFloat(0x0000_0FFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); + + public static Octo ByteMaxValue => Values.CreateFloat(0x4000_6FE0_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo UInt16MaxValue => Values.CreateFloat(0x4000_EFFF_E000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo UInt32MaxValue => Values.CreateFloat(0x4001_EFFF_FFFF_E000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo UInt64MaxValue => Values.CreateFloat(0x4003_EFFF_FFFF_FFFF, 0xFFFF_E000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo UInt128MaxValue => Values.CreateFloat(0x4007_EFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_E000_0000_0000, 0x0000_0000_0000_0000); + public static Octo TwoOver255 => Values.CreateFloat(0x400F_E000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo TwoOver511 => Values.CreateFloat(0x401F_E000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + + public static Octo SByteMaxValue => Values.CreateFloat(0x4000_5FC0_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo SByteMinValue => Values.CreateFloat(0xC000_6000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo Int16MaxValue => Values.CreateFloat(0x4000_DFFF_C000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo Int16MinValue => Values.CreateFloat(0xC000_E000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo Int32MaxValue => Values.CreateFloat(0x4001_DFFF_FFFF_C000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo Int32MinValue => Values.CreateFloat(0xC001_E000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo Int64MaxValue => Values.CreateFloat(0x4003_DFFF_FFFF_FFFF, 0xFFFF_C000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo Int64MinValue => Values.CreateFloat(0xC003_E000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Octo Int128MaxValue => Values.CreateFloat(0x4007_DFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_C000_0000_0000, 0x0000_0000_0000_0000); + public static Octo Int128MinValue => Values.CreateFloat(0xC007_E000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + + public static Octo Delta => Values.CreateFloat(0x400E_B000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); + } +} \ No newline at end of file diff --git a/src/MissingValues.Tests/Extensions/NumberExtensions.cs b/src/MissingValues.Tests/Extensions/QuadExtensions.cs similarity index 99% rename from src/MissingValues.Tests/Extensions/NumberExtensions.cs rename to src/MissingValues.Tests/Extensions/QuadExtensions.cs index 1c0cc67..e8ad497 100644 --- a/src/MissingValues.Tests/Extensions/NumberExtensions.cs +++ b/src/MissingValues.Tests/Extensions/QuadExtensions.cs @@ -1,6 +1,6 @@ namespace MissingValues.Tests.Extensions; -public static class NumberExtensions +public static class QuadExtensions { extension(Quad) { diff --git a/src/MissingValues.Tests/Extensions/UInt256Extensions.cs b/src/MissingValues.Tests/Extensions/UInt256Extensions.cs new file mode 100644 index 0000000..3d4d6c0 --- /dev/null +++ b/src/MissingValues.Tests/Extensions/UInt256Extensions.cs @@ -0,0 +1,18 @@ +namespace MissingValues.Tests.Extensions; + +public static class UInt256Extensions +{ + extension(UInt256) + { + private static UInt256 ByteMaxValue => new(0, 0, 0x0000_0000_0000_0000, 0x0000_0000_0000_00FF); + private static UInt256 UInt16MaxValue => new(0, 0, 0x0000_0000_0000_0000, 0x0000_0000_0000_FFFF); + private static UInt256 UInt32MaxValue => new(0, 0, 0x0000_0000_0000_0000, 0x0000_0000_FFFF_FFFF); + private static UInt256 UInt64MaxValue => new(0, 0, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF); + private static UInt256 UInt128MaxValue => new(0, 0, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); + + private static UInt256 Two => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0002); + private static UInt256 MaxValueMinusOne => new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE); + private static UInt256 MaxValueMinusTwo => new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFD); + private static UInt256 HalfMaxValue => new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); + } +} \ No newline at end of file diff --git a/src/MissingValues.Tests/Extensions/UInt512Extensions.cs b/src/MissingValues.Tests/Extensions/UInt512Extensions.cs new file mode 100644 index 0000000..5ee9de9 --- /dev/null +++ b/src/MissingValues.Tests/Extensions/UInt512Extensions.cs @@ -0,0 +1,39 @@ +namespace MissingValues.Tests.Extensions; + +public static class UInt512Extensions +{ + extension(UInt512) + { + private static UInt512 ByteMaxValue => new( + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_00FF); + private static UInt512 UInt16MaxValue => new( + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_FFFF); + private static UInt512 UInt32MaxValue => new( + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_FFFF_FFFF); + private static UInt512 UInt64MaxValue => new( + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF); + private static UInt512 UInt128MaxValue => new( + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); + private static UInt512 UInt256MaxValue => new( + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, + 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); + + private static UInt512 Two => new( + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0002); + private static UInt512 MaxValueMinusOne => new( + 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, + 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE); + private static UInt512 MaxValueMinusTwo => new( + 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, + 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFD); + private static UInt512 HalfMaxValue => new( + 0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, + 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); + } +} \ No newline at end of file From eae858aa2cddcd6af8a69186346566cb044ab925 Mon Sep 17 00:00:00 2001 From: crookseta Date: Sun, 28 Jun 2026 12:14:30 -0500 Subject: [PATCH 48/74] -Added most tests for Quad. --- .../Data/QuadDataSources.cs | 324 ++++++- .../NumberBaseAssertionExtensions.cs | 13 +- src/MissingValues.Tests/Helper.cs | 20 + .../Numerics/QuadGenericMathTests.cs | 908 +++++++++++++++++- 4 files changed, 1218 insertions(+), 47 deletions(-) diff --git a/src/MissingValues.Tests/Data/QuadDataSources.cs b/src/MissingValues.Tests/Data/QuadDataSources.cs index d730a4b..d1d67b1 100644 --- a/src/MissingValues.Tests/Data/QuadDataSources.cs +++ b/src/MissingValues.Tests/Data/QuadDataSources.cs @@ -18,7 +18,16 @@ public class QuadDataSources { public static IEnumerable> op_AdditionTestData() { - throw new NotImplementedException(); + yield return () => (Quad.One, Quad.One, Quad.Two); + yield return () => (Quad.One, Quad.NegativeOne, Quad.Zero); + yield return () => (Quad.One, Quad.NegativeTwo, Quad.NegativeOne); + yield return () => (Quad.One, Quad.Four, Quad.Five); + yield return () => (Quad.Three, Quad.Two, Quad.Five); + yield return () => (Quad.SmallestSubnormal, Quad.GreatestSubnormal, Values.CreateFloat(0x0001_0000_0000_0000, 0x0000_0000_0000_0000)); + yield return () => (Quad.PositiveInfinity, Quad.One, Quad.PositiveInfinity); + yield return () => (Quad.NegativeInfinity, Quad.One, Quad.NegativeInfinity); + yield return () => (Quad.PositiveInfinity, Quad.PositiveInfinity, Quad.PositiveInfinity); + yield return () => (Quad.NegativeInfinity, Quad.NegativeInfinity, Quad.NegativeInfinity); } public static IEnumerable> op_CheckedAdditionTestData() @@ -48,17 +57,30 @@ public class QuadDataSources public static IEnumerable> op_DecrementTestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeOne, Quad.NegativeTwo); + yield return () => (Quad.Zero, Quad.NegativeOne); + yield return () => (Quad.One, Quad.Zero); + yield return () => (Quad.Two, Quad.One); } public static IEnumerable> op_DivisionTestData() { - throw new NotImplementedException(); + yield return () => (Quad.Ten, Quad.Ten, Quad.One); + yield return () => (Quad.Hundred, Quad.Ten, Quad.Ten); + yield return () => (Quad.NegativeThousand, Quad.Ten, Quad.NegativeHundred); + yield return () => (Quad.Zero, Quad.Zero, Quad.NaN); + yield return () => (Quad.One, Quad.Zero, Quad.PositiveInfinity); + yield return () => (Quad.NegativeOne, Quad.Zero, Quad.NegativeInfinity); + yield return () => (Quad.PositiveInfinity, Quad.PositiveInfinity, Quad.NaN); + yield return () => (Quad.NegativeInfinity, Quad.NegativeInfinity, Quad.NaN); } public static IEnumerable> op_IncrementTestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeTwo, Quad.NegativeOne); + yield return () => (Quad.NegativeOne, Quad.Zero); + yield return () => (Quad.Zero, Quad.One); + yield return () => (Quad.One, Quad.Two); } public static IEnumerable> op_ModulusTestData() @@ -68,17 +90,36 @@ public class QuadDataSources public static IEnumerable> op_MultiplyTestData() { - throw new NotImplementedException(); + yield return () => (Quad.One, Quad.One, Quad.One); + yield return () => (Quad.One, Quad.NegativeOne, Quad.NegativeOne); + yield return () => (Quad.Ten, Quad.Ten, Quad.Hundred); + yield return () => (Quad.NegativeHundred, Quad.Ten, Quad.NegativeThousand); + yield return () => (Quad.NegativeTen, Quad.Hundred, Quad.NegativeThousand); + yield return () => (Quad.Zero, Quad.NegativeThousand, Quad.NegativeZero); + yield return () => (Quad.Zero, Quad.PositiveInfinity, Quad.NaN); + yield return () => (Quad.NegativeZero, Quad.NegativeInfinity, Quad.NaN); + yield return () => (Quad.PositiveInfinity, Quad.Zero, Quad.NaN); + yield return () => (Quad.NegativeInfinity, Quad.NegativeZero, Quad.NaN); } public static IEnumerable> op_SubtractionTestData() { - throw new NotImplementedException(); + yield return () => (Quad.One, Quad.One, Quad.Zero); + yield return () => (Quad.One, Quad.NegativeOne, Quad.Two); + yield return () => (Quad.One, Quad.Two, Quad.NegativeOne); + yield return () => (Quad.SmallestSubnormal, Quad.GreatestSubnormal, Values.CreateFloat(0x8000_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE)); + yield return () => (Quad.PositiveInfinity, Quad.PositiveInfinity, Quad.NaN); + yield return () => (Quad.NegativeInfinity, Quad.NegativeInfinity, Quad.NaN); } public static IEnumerable> op_UnaryNegationTestData() { - throw new NotImplementedException(); + yield return () => (Quad.Zero, Quad.NegativeZero); + yield return () => (Quad.One, Quad.NegativeOne); + yield return () => (Quad.Two, Quad.NegativeTwo); + yield return () => (Quad.Ten, Quad.NegativeTen); + yield return () => (Quad.Hundred, Quad.NegativeHundred); + yield return () => (Quad.Thousand, Quad.NegativeThousand); } public static IEnumerable> op_CheckedUnaryNegationTestData() @@ -108,12 +149,18 @@ public class QuadDataSources public static IEnumerable> op_EqualityTestData() { - throw new NotImplementedException(); + yield return () => (Quad.One, Quad.One, true); + yield return () => (Quad.Two, Quad.Two, true); + yield return () => (Quad.NaN, Quad.NaN, false); + yield return () => (Quad.GreatestSubnormal, Quad.GreatestSubnormal, true); } public static IEnumerable> op_InequalityTestData() { - throw new NotImplementedException(); + yield return () => (Quad.One, Quad.One, false); + yield return () => (Quad.NaN, Quad.NaN, true); + yield return () => (Quad.NegativeTwo, Quad.Two, true); + yield return () => (Quad.SmallestSubnormal, Quad.GreatestSubnormal, true); } public static IEnumerable> op_GreaterThanOrEqualTestData() @@ -123,7 +170,12 @@ public class QuadDataSources public static IEnumerable> op_GreaterThanTestData() { - throw new NotImplementedException(); + yield return () => (Quad.Two, Quad.One, true); + yield return () => (Quad.Thousand, Quad.NegativeThousand, true); + yield return () => (Quad.NegativeQuarter, Quad.NegativeHalf, true); + yield return () => (Quad.Quarter, Quad.Half, false); + yield return () => (Quad.Ten, Quad.Hundred, false); + yield return () => (Quad.GreaterThanOneSmallest, Quad.One, true); } public static IEnumerable> op_LessThanOrEqualTestData() @@ -133,122 +185,257 @@ public class QuadDataSources public static IEnumerable> op_LessThanTestData() { - throw new NotImplementedException(); + yield return () => (Quad.Zero, Quad.One, true); + yield return () => (Quad.Zero, Quad.Quarter, true); + yield return () => (Quad.NegativeThousand, Quad.Thousand, true); + yield return () => (Quad.NegativeOne, Quad.NegativeThree, false); + yield return () => (Quad.Hundred, Quad.Two, false); + yield return () => (Quad.LessThanOneLargest, Quad.One, true); } public static IEnumerable> AbsTestData() { - throw new NotImplementedException(); + yield return () => (Quad.One, Quad.One); + yield return () => (Quad.NegativeOne, Quad.One); + yield return () => (Quad.NegativeHalf, Quad.Half); + yield return () => (Quad.NegativeQuarter, Quad.Quarter); + yield return () => (Quad.NegativeZero, Quad.Zero); + yield return () => (Quad.NegativeInfinity, Quad.PositiveInfinity); } public static IEnumerable> IsCanonicalTestData() { - throw new NotImplementedException(); + yield return () => (Quad.One, true); } public static IEnumerable> IsComplexNumberTestData() { - throw new NotImplementedException(); + yield return () => (Quad.One, false); } public static IEnumerable> IsEvenIntegerTestData() { - throw new NotImplementedException(); + yield return () => (Quad.Half, false); + yield return () => (Quad.One, false); + yield return () => (Quad.Two, true); + yield return () => (Quad.Three, false); + yield return () => (Quad.Four, true); + yield return () => (Quad.NegativeOne, false); + yield return () => (Quad.NegativeTwo, true); + yield return () => (Quad.NegativeThree, false); + yield return () => (Quad.NegativeFour, true); } public static IEnumerable> IsFiniteTestData() { - throw new NotImplementedException(); + yield return () => (Quad.One, true); + yield return () => (Quad.NegativeOne, true); + yield return () => (Quad.NaN, false); + yield return () => (Quad.PositiveInfinity, false); + yield return () => (Quad.NegativeInfinity, false); } public static IEnumerable> IsImaginaryNumberTestData() { - throw new NotImplementedException(); + yield return () => (Quad.One, false); } public static IEnumerable> IsInfinityTestData() { - throw new NotImplementedException(); + yield return () => (Quad.One, true); + yield return () => (Quad.NegativeOne, true); + yield return () => (Quad.NaN, false); + yield return () => (Quad.PositiveInfinity, false); + yield return () => (Quad.NegativeInfinity, false); } public static IEnumerable> IsIntegerTestData() { - throw new NotImplementedException(); + yield return () => (Quad.Quarter, false); + yield return () => (Quad.Half, false); + yield return () => (Quad.Thousand, true); + yield return () => (Quad.One, true); + yield return () => (Quad.GreaterThanOneSmallest, false); + yield return () => (Quad.SmallestSubnormal, false); + yield return () => (Quad.NegativeOne, true); + yield return () => (Quad.NegativeThousand, true); + yield return () => (Quad.NegativeHalf, false); + yield return () => (Quad.NegativeQuarter, false); + yield return () => (Quad.NaN, false); + yield return () => (Quad.PositiveInfinity, false); + yield return () => (Quad.NegativeInfinity, false); } public static IEnumerable> IsNaNTestData() { - throw new NotImplementedException(); + yield return () => (Quad.One, false); + yield return () => (Quad.NegativeOne, false); + yield return () => (Quad.NaN, true); + yield return () => (Quad.PositiveInfinity, false); + yield return () => (Quad.NegativeInfinity, false); } public static IEnumerable> IsNegativeTestData() { - throw new NotImplementedException(); + yield return () => (Quad.One, false); + yield return () => (Quad.GreatestSubnormal, false); + yield return () => (Quad.PositiveInfinity, false); + yield return () => (Quad.NaN, true); + yield return () => (Quad.NegativeOne, true); + yield return () => (Quad.NegativeInfinity, true); } public static IEnumerable> IsNegativeInfinityTestData() { - throw new NotImplementedException(); + yield return () => (Quad.One, false); + yield return () => (Quad.NegativeOne, false); + yield return () => (Quad.NaN, false); + yield return () => (Quad.PositiveInfinity, false); + yield return () => (Quad.NegativeInfinity, true); } public static IEnumerable> IsNormalTestData() { - throw new NotImplementedException(); + yield return () => (Quad.GreatestSubnormal, false); + yield return () => (Quad.SmallestSubnormal, false); + yield return () => (Quad.MaxValue, true); + yield return () => (Quad.MinValue, true); + yield return () => (Quad.One, true); } public static IEnumerable> IsOddIntegerTestData() { - throw new NotImplementedException(); + yield return () => (Quad.Half, false); + yield return () => (Quad.One, true); + yield return () => (Quad.Two, false); + yield return () => (Quad.Three, true); + yield return () => (Quad.Four, false); + yield return () => (Quad.NegativeOne, true); + yield return () => (Quad.NegativeTwo, false); + yield return () => (Quad.NegativeThree, true); + yield return () => (Quad.NegativeFour, false); } public static IEnumerable> IsPositiveTestData() { - throw new NotImplementedException(); + yield return () => (Quad.One, true); + yield return () => (Quad.GreatestSubnormal, true); + yield return () => (Quad.PositiveInfinity, true); + yield return () => (Quad.NaN, false); + yield return () => (Quad.NegativeOne, false); + yield return () => (Quad.NegativeInfinity, false); } public static IEnumerable> IsPositiveInfinityTestData() { - throw new NotImplementedException(); + yield return () => (Quad.One, false); + yield return () => (Quad.NegativeOne, false); + yield return () => (Quad.NaN, false); + yield return () => (Quad.PositiveInfinity, true); + yield return () => (Quad.NegativeInfinity, false); } public static IEnumerable> IsRealNumberTestData() { - throw new NotImplementedException(); + yield return () => (Quad.GreatestSubnormal, true); + yield return () => (Quad.MaxValue, true); + yield return () => (Quad.NegativeThousand, true); + yield return () => (Quad.PositiveInfinity, true); + yield return () => (Quad.NegativeInfinity, true); + yield return () => (Quad.NaN, false); } public static IEnumerable> IsSubnormalTestData() { - throw new NotImplementedException(); + yield return () => (Quad.GreatestSubnormal, true); + yield return () => (Quad.SmallestSubnormal, true); + yield return () => (Quad.MaxValue, false); + yield return () => (Quad.MinValue, false); + yield return () => (Quad.One, false); } public static IEnumerable> IsZeroTestData() { - throw new NotImplementedException(); + yield return () => (Quad.One, false); + yield return () => (Quad.Epsilon, false); + yield return () => (Quad.Zero, true); + yield return () => (Quad.NegativeZero, true); } public static IEnumerable> MaxMagnitudeTestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeInfinity, Quad.One, Quad.NegativeInfinity); + yield return () => (Quad.MinValue, Quad.One, Quad.MinValue); + yield return () => (Quad.NegativeOne, Quad.One, Quad.One); + yield return () => (-Quad.GreatestSubnormal, Quad.One, Quad.One); + yield return () => (-Quad.Epsilon, Quad.One, Quad.One); + yield return () => (Quad.NegativeZero, Quad.One, Quad.One); + yield return () => (Quad.NaN, Quad.One, Quad.NaN); + yield return () => (Quad.Zero, Quad.One, Quad.One); + yield return () => (Quad.Epsilon, Quad.One, Quad.One); + yield return () => (Quad.GreatestSubnormal, Quad.One, Quad.One); + yield return () => (Quad.One, Quad.One, Quad.One); + yield return () => (Quad.MaxValue, Quad.One, Quad.MaxValue); + yield return () => (Quad.PositiveInfinity, Quad.One, Quad.PositiveInfinity); } public static IEnumerable> MaxMagnitudeNumberTestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeInfinity, Quad.One, Quad.NegativeInfinity); + yield return () => (Quad.MinValue, Quad.One, Quad.MinValue); + yield return () => (Quad.NegativeOne, Quad.One, Quad.One); + yield return () => (-Quad.GreatestSubnormal, Quad.One, Quad.One); + yield return () => (-Quad.Epsilon, Quad.One, Quad.One); + yield return () => (Quad.NegativeZero, Quad.One, Quad.One); + yield return () => (Quad.NaN, Quad.One, Quad.One); + yield return () => (Quad.Zero, Quad.One, Quad.One); + yield return () => (Quad.Epsilon, Quad.One, Quad.One); + yield return () => (Quad.GreatestSubnormal, Quad.One, Quad.One); + yield return () => (Quad.One, Quad.One, Quad.One); + yield return () => (Quad.MaxValue, Quad.One, Quad.MaxValue); + yield return () => (Quad.PositiveInfinity, Quad.One, Quad.PositiveInfinity); } public static IEnumerable> MinMagnitudeTestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeInfinity, Quad.One, Quad.One); + yield return () => (Quad.MinValue, Quad.One, Quad.One); + yield return () => (Quad.NegativeOne, Quad.One, Quad.NegativeOne); + yield return () => (-Quad.GreatestSubnormal, Quad.One, -Quad.GreatestSubnormal); + yield return () => (-Quad.Epsilon, Quad.One, -Quad.Epsilon); + yield return () => (Quad.NegativeZero, Quad.One, Quad.NegativeZero); + yield return () => (Quad.NaN, Quad.One, Quad.NaN); + yield return () => (Quad.Zero, Quad.One, Quad.Zero); + yield return () => (Quad.Epsilon, Quad.One, Quad.Epsilon); + yield return () => (Quad.GreatestSubnormal, Quad.One, Quad.GreatestSubnormal); + yield return () => (Quad.One, Quad.One, Quad.One); + yield return () => (Quad.MaxValue, Quad.One, Quad.One); + yield return () => (Quad.PositiveInfinity, Quad.One, Quad.One); } public static IEnumerable> MinMagnitudeNumberTestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeInfinity, Quad.One, Quad.One); + yield return () => (Quad.MinValue, Quad.One, Quad.One); + yield return () => (Quad.NegativeOne, Quad.One, Quad.NegativeOne); + yield return () => (-Quad.GreatestSubnormal, Quad.One, -Quad.GreatestSubnormal); + yield return () => (-Quad.Epsilon, Quad.One, -Quad.Epsilon); + yield return () => (Quad.NegativeZero, Quad.One, Quad.NegativeZero); + yield return () => (Quad.NaN, Quad.One, Quad.One); + yield return () => (Quad.Zero, Quad.One, Quad.Zero); + yield return () => (Quad.Epsilon, Quad.One, Quad.Epsilon); + yield return () => (Quad.GreatestSubnormal, Quad.One, Quad.GreatestSubnormal); + yield return () => (Quad.One, Quad.One, Quad.One); + yield return () => (Quad.MaxValue, Quad.One, Quad.One); + yield return () => (Quad.PositiveInfinity, Quad.One, Quad.One); } public static IEnumerable> MultiplyAddEstimateTestData() { - throw new NotImplementedException(); + yield return () => (Quad.One, Quad.One, Quad.One, Quad.Two); + yield return () => (Quad.Ten, Quad.Ten, Quad.Zero, Quad.Hundred); + yield return () => (Quad.Five, Quad.Zero, Quad.Five, Quad.Five); + yield return () => (Values.CreateFloat(0xBFFF_4000_0000_0000, 0), Quad.One, Quad.Two, Values.CreateFloat(0x3FFE_8000_0000_0000, 0)); } public static IEnumerable> ParseTestData() @@ -364,7 +551,18 @@ public class QuadDataSources public static IEnumerable> ClampTestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeInfinity, Quad.One, Quad.Thousand, Quad.One); + yield return () => (Quad.MinValue, Quad.One, Quad.Thousand, Quad.One); + yield return () => (Quad.NegativeOne, Quad.One, Quad.Thousand, Quad.One); + yield return () => (-Quad.GreatestSubnormal, Quad.One, Quad.Thousand, Quad.One); + yield return () => (-Quad.Epsilon, Quad.One, Quad.Thousand, Quad.One); + yield return () => (Quad.NaN, Quad.One, Quad.Thousand, Quad.NaN); + yield return () => (Quad.Zero, Quad.One, Quad.Thousand, Quad.One); + yield return () => (Quad.Epsilon, Quad.One, Quad.Thousand, Quad.One); + yield return () => (Quad.GreatestSubnormal, Quad.One, Quad.Thousand, Quad.One); + yield return () => (Quad.One, Quad.One, Quad.Thousand, Quad.One); + yield return () => (Quad.MaxValue, Quad.One, Quad.Thousand, Quad.Thousand); + yield return () => (Quad.PositiveInfinity, Quad.One, Quad.Thousand, Quad.Thousand); } public static IEnumerable> CopySignTestData() @@ -419,7 +617,50 @@ public class QuadDataSources public static IEnumerable> RoundTestData() { - throw new NotImplementedException(); + yield return () => (Values.CreateFloat(0x4000_C000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.AwayFromZero, Quad.Four); + yield return () => (Values.CreateFloat(0x4000_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.AwayFromZero, Quad.Three); + yield return () => (Values.CreateFloat(0x4000_4000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.AwayFromZero, Quad.Three); + yield return () => (Values.CreateFloat(0x4000_0CCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.AwayFromZero, Quad.Two); + yield return () => (Values.CreateFloat(0xC000_0CCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.AwayFromZero, Quad.NegativeTwo); + yield return () => (Values.CreateFloat(0xC000_4000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.AwayFromZero, Quad.NegativeThree); + yield return () => (Values.CreateFloat(0xC000_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.AwayFromZero, Quad.NegativeThree); + yield return () => (Values.CreateFloat(0xC000_C000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.AwayFromZero, Quad.NegativeFour); + + yield return () => (Values.CreateFloat(0x4000_C000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToEven, Quad.Four); + yield return () => (Values.CreateFloat(0x4000_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToEven, Quad.Three); + yield return () => (Values.CreateFloat(0x4000_4000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToEven, Quad.Two); + yield return () => (Values.CreateFloat(0x4000_0CCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToEven, Quad.Two); + yield return () => (Values.CreateFloat(0xC000_0CCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToEven, Quad.NegativeTwo); + yield return () => (Values.CreateFloat(0xC000_4000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToEven, Quad.NegativeTwo); + yield return () => (Values.CreateFloat(0xC000_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToEven, Quad.NegativeThree); + yield return () => (Values.CreateFloat(0xC000_C000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToEven, Quad.NegativeFour); + + yield return () => (Values.CreateFloat(0x4000_C000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToNegativeInfinity, Quad.Three); + yield return () => (Values.CreateFloat(0x4000_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToNegativeInfinity, Quad.Two); + yield return () => (Values.CreateFloat(0x4000_4000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToNegativeInfinity, Quad.Two); + yield return () => (Values.CreateFloat(0x4000_0CCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToNegativeInfinity, Quad.Two); + yield return () => (Values.CreateFloat(0xC000_0CCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToNegativeInfinity, Quad.NegativeThree); + yield return () => (Values.CreateFloat(0xC000_4000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToNegativeInfinity, Quad.NegativeThree); + yield return () => (Values.CreateFloat(0xC000_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToNegativeInfinity, Quad.NegativeThree); + yield return () => (Values.CreateFloat(0xC000_C000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToNegativeInfinity, Quad.NegativeFour); + + yield return () => (Values.CreateFloat(0x4000_C000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToPositiveInfinity, Quad.Four); + yield return () => (Values.CreateFloat(0x4000_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToPositiveInfinity, Quad.Three); + yield return () => (Values.CreateFloat(0x4000_4000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToPositiveInfinity, Quad.Three); + yield return () => (Values.CreateFloat(0x4000_0CCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToPositiveInfinity, Quad.Three); + yield return () => (Values.CreateFloat(0xC000_0CCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToPositiveInfinity, Quad.NegativeTwo); + yield return () => (Values.CreateFloat(0xC000_4000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToPositiveInfinity, Quad.NegativeTwo); + yield return () => (Values.CreateFloat(0xC000_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToPositiveInfinity, Quad.NegativeTwo); + yield return () => (Values.CreateFloat(0xC000_C000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToPositiveInfinity, Quad.NegativeThree); + + yield return () => (Values.CreateFloat(0x4000_C000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToZero, Quad.Three); + yield return () => (Values.CreateFloat(0x4000_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToZero, Quad.Two); + yield return () => (Values.CreateFloat(0x4000_4000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToZero, Quad.Two); + yield return () => (Values.CreateFloat(0x4000_0CCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToZero, Quad.Two); + yield return () => (Values.CreateFloat(0xC000_0CCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToZero, Quad.NegativeTwo); + yield return () => (Values.CreateFloat(0xC000_4000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToZero, Quad.NegativeTwo); + yield return () => (Values.CreateFloat(0xC000_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToZero, Quad.NegativeTwo); + yield return () => (Values.CreateFloat(0xC000_C000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToZero, Quad.NegativeThree); } public static IEnumerable> TruncateTestData() @@ -489,12 +730,19 @@ public class QuadDataSources public static IEnumerable> FusedMultiplyAddTestData() { - throw new NotImplementedException(); + yield return () => (Quad.One, Quad.One, Quad.One, Quad.Two); + yield return () => (Quad.Ten, Quad.Ten, Quad.Zero, Quad.Hundred); + yield return () => (Quad.Five, Quad.Zero, Quad.Five, Quad.Five); + yield return () => (Values.CreateFloat(0xBFFF_4000_0000_0000, 0), Quad.One, Quad.Two, Values.CreateFloat(0x3FFE_8000_0000_0000, 0)); } public static IEnumerable> Ieee754RemainderTestData() { - throw new NotImplementedException(); + yield return () => (Quad.Ten, Quad.Three, Quad.One); + yield return () => (Quad.Ten, Quad.Two, Quad.Zero); + yield return () => (Quad.NegativeTen, Quad.Three, Quad.NegativeOne); + yield return () => (Quad.NegativeTen, Quad.Two, Quad.Zero); + yield return () => (Quad.NegativeTen, Quad.Zero, Quad.NaN); } public static IEnumerable> ILogBTestData() diff --git a/src/MissingValues.Tests/Extensions/NumberBaseAssertionExtensions.cs b/src/MissingValues.Tests/Extensions/NumberBaseAssertionExtensions.cs index 4db9fc3..6a7e0aa 100644 --- a/src/MissingValues.Tests/Extensions/NumberBaseAssertionExtensions.cs +++ b/src/MissingValues.Tests/Extensions/NumberBaseAssertionExtensions.cs @@ -11,11 +11,18 @@ public static class NumberBaseAssertionExtensions { [EditorBrowsable(EditorBrowsableState.Never)] [GenerateAssertion(ExpectationMessage = "to be bitwise equivalent to {other}")] - public static bool IsBitwiseEquivalentTo(this T1 value, T2 other) + public static bool IsBitwiseEquivalentTo(this T1 value, T1 other) where T1 : struct, IFloatingPointIeee754 - where T2 : struct, IBinaryInteger { - return Unsafe.SizeOf() == Unsafe.SizeOf() && Unsafe.BitCast(value) == other; + switch (Unsafe.SizeOf()) + { + case 16: + return Unsafe.BitCast(value) == Unsafe.BitCast(other); + case UInt256.Size: + return Unsafe.BitCast(value) == Unsafe.BitCast(other); + default: + return false; + } } [EditorBrowsable(EditorBrowsableState.Never)] [GenerateAssertion(ExpectationMessage = "to be approximately equal to {precision}")] diff --git a/src/MissingValues.Tests/Helper.cs b/src/MissingValues.Tests/Helper.cs index d7315ae..0f3b82c 100644 --- a/src/MissingValues.Tests/Helper.cs +++ b/src/MissingValues.Tests/Helper.cs @@ -255,4 +255,24 @@ public static int WriteLittleEndian(TSelf value, Span destination) { return value.WriteLittleEndian(destination); } + public static TSelf OnesComplement(TSelf value) + where TSelf : IBitwiseOperators + { + return ~value; + } + public static TSelf And(TSelf left, TSelf right) + where TSelf : IBitwiseOperators + { + return left & right; + } + public static TSelf Or(TSelf left, TSelf right) + where TSelf : IBitwiseOperators + { + return left | right; + } + public static TSelf Xor(TSelf left, TSelf right) + where TSelf : IBitwiseOperators + { + return left ^ right; + } } \ No newline at end of file diff --git a/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs b/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs index c8146e1..6e92c65 100644 --- a/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs @@ -1,15 +1,911 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - +using System.Globalization; +using MissingValues.Tests.Extensions; using static MissingValues.Tests.Data.QuadDataSources; +using Float = MissingValues.Quad; using DataSources = MissingValues.Tests.Data.QuadDataSources; namespace MissingValues.Tests.Numerics; public class QuadGenericMathTests { + #region Operators + [Test] + [MethodDataSource(nameof(op_AdditionTestData))] + public async Task op_AdditionTest(Float left, Float right, Float expected) + { + var result = left + right; + + await Assert.That(result).IsEqualTo(expected).And.IsBitwiseEquivalentTo(expected); + } + [Test] + [MethodDataSource(nameof(op_IncrementTestData))] + public async Task op_IncrementTest(Float value, Float expected) + { + var result = ++value; + + using (Assert.Multiple()) + { + await Assert.That(result).IsEqualTo(expected).And.IsBitwiseEquivalentTo(expected); + await Assert.That(result).IsEqualTo(value).And.IsBitwiseEquivalentTo(value); + } + } + [Test] + [MethodDataSource(nameof(op_SubtractionTestData))] + public async Task op_SubtractionTest(Float left, Float right, Float expected) + { + var result = left - right; + + await Assert.That(result).IsEqualTo(expected).And.IsBitwiseEquivalentTo(expected); + } + [Test] + [MethodDataSource(nameof(op_DecrementTestData))] + public async Task op_DecrementTest(Float value, Float expected) + { + var result = --value; + + using (Assert.Multiple()) + { + await Assert.That(result).IsEqualTo(expected).And.IsBitwiseEquivalentTo(expected); + await Assert.That(result).IsEqualTo(value).And.IsBitwiseEquivalentTo(value); + } + } + [Test] + [MethodDataSource(nameof(op_MultiplyTestData))] + public async Task op_MultiplyTest(Float left, Float right, Float expected) + { + var result = left * right; + + await Assert.That(result).IsEqualTo(expected).And.IsBitwiseEquivalentTo(expected); + } + [Test] + [MethodDataSource(nameof(op_DivisionTestData))] + public async Task op_DivisionTest(Float left, Float right, Float expected) + { + var result = left / right; + + await Assert.That(result).IsEqualTo(expected).And.IsBitwiseEquivalentTo(expected); + } + [Test] + [MethodDataSource(nameof(op_ModulusTestData))] + public async Task op_ModulusTest(Float left, Float right, Float expected) + { + var result = left % right; + + await Assert.That(result).IsEqualTo(expected).And.IsBitwiseEquivalentTo(expected); + } + [Test] + [MethodDataSource(nameof(op_OnesComplementTestData))] + public async Task op_OnesComplementTest(Float value, Float expected) + { + var result = Helper.OnesComplement(value); + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(op_BitwiseAndTestData))] + public async Task op_BitwiseAndTest(Float left, Float right, Float expected) + { + var result = Helper.And(left, right); + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(op_BitwiseOrTestData))] + public async Task op_BitwiseOrTest(Float left, Float right, Float expected) + { + var result = Helper.Or(left, right); + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(op_BitwiseXorTestData))] + public async Task op_BitwiseXorTest(Float left, Float right, Float expected) + { + var result = Helper.Xor(left, right); + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(op_EqualityTestData))] + public async Task op_EqualityTest(Float left, Float right, bool expected) + { + var result = left == right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(op_InequalityTestData))] + public async Task op_InequalityTest(Float left, Float right, bool expected) + { + var result = left != right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(op_LessThanTestData))] + public async Task op_LessThanTest(Float left, Float right, bool expected) + { + var result = left < right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(op_LessThanOrEqualTestData))] + public async Task op_LessThanOrEqualTest(Float left, Float right, bool expected) + { + var result = left <= right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(op_GreaterThanTestData))] + public async Task op_GreaterThanTest(Float left, Float right, bool expected) + { + var result = left > right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(op_GreaterThanOrEqualTestData))] + public async Task op_GreaterThanOrEqualTest(Float left, Float right, bool expected) + { + var result = left >= right; + + await Assert.That(result).IsEqualTo(expected); + } + #endregion + + #region INumberBase + [Test] + [MethodDataSource(nameof(AbsTestData))] + public async Task AbsTest(Float value, Float expected) + { + Float result = Helper.Abs(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsCanonicalTestData))] + public async Task IsCanonicalTest(Float value, bool expected) + { + bool result = Helper.IsCanonical(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsComplexNumberTestData))] + public async Task IsComplexNumberTest(Float value, bool expected) + { + bool result = Helper.IsComplexNumber(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsEvenIntegerTestData))] + public async Task IsEvenIntegerTest(Float value, bool expected) + { + bool result = Helper.IsEvenInteger(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsFiniteTestData))] + public async Task IsFiniteTest(Float value, bool expected) + { + bool result = Helper.IsFinite(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsImaginaryNumberTestData))] + public async Task IsImaginaryNumberTest(Float value, bool expected) + { + bool result = Helper.IsImaginaryNumber(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsInfinityTestData))] + public async Task IsInfinityTest(Float value, bool expected) + { + bool result = Helper.IsInfinity(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsIntegerTestData))] + public async Task IsIntegerTest(Float value, bool expected) + { + bool result = Helper.IsInteger(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsNaNTestData))] + public async Task IsNaNTest(Float value, bool expected) + { + bool result = Helper.IsNaN(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsNegativeTestData))] + public async Task IsNegativeTest(Float value, bool expected) + { + bool result = Helper.IsNegative(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsNegativeInfinityTestData))] + public async Task IsNegativeInfinityTest(Float value, bool expected) + { + bool result = Helper.IsNegativeInfinity(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsNormalTestData))] + public async Task IsNormalTest(Float value, bool expected) + { + bool result = Helper.IsNormal(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsOddIntegerTestData))] + public async Task IsOddIntegerTest(Float value, bool expected) + { + bool result = Helper.IsOddInteger(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsPositiveTestData))] + public async Task IsPositiveTest(Float value, bool expected) + { + bool result = Helper.IsPositive(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsPositiveInfinityTestData))] + public async Task IsPositiveInfinityTest(Float value, bool expected) + { + bool result = Helper.IsPositiveInfinity(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsRealNumberTestData))] + public async Task IsRealNumberTest(Float value, bool expected) + { + bool result = Helper.IsRealNumber(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsSubnormalTestData))] + public async Task IsSubnormalTest(Float value, bool expected) + { + bool result = Helper.IsSubnormal(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsZeroTestData))] + public async Task IsZeroTest(Float value, bool expected) + { + bool result = Helper.IsZero(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(MaxMagnitudeTestData))] + public async Task MaxMagnitudeTest(Float x, Float y, Float expected) + { + var result = Helper.MaxMagnitude(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(MaxMagnitudeNumberTestData))] + public async Task MaxMagnitudeNumberTest(Float x, Float y, Float expected) + { + var result = Helper.MaxMagnitudeNumber(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(MinMagnitudeTestData))] + public async Task MinMagnitudeTest(Float x, Float y, Float expected) + { + var result = Helper.MinMagnitude(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(MinMagnitudeNumberTestData))] + public async Task MinMagnitudeNumberTest(Float x, Float y, Float expected) + { + var result = Helper.MinMagnitudeNumber(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(MultiplyAddEstimateTestData))] + public async Task MultiplyAddEstimateTest(Float left, Float right, Float addend, Float expected) + { + var result = Helper.MultiplyAddEstimate(left, right, addend); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(ParseTestData))] + public async Task ParseTest(string s, NumberStyles style, IFormatProvider? provider, Float expected) + { + var result = Helper.Parse(s, style, provider); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(ParseSpanTestData))] + public async Task ParseTest(char[] s, NumberStyles style, IFormatProvider? provider, Float expected) + { + var result = Helper.Parse(s, style, provider); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(ParseUtf8TestData))] + public async Task ParseTest(byte[] utf8Text, NumberStyles style, IFormatProvider? provider, Float expected) + { + var result = Helper.Parse(utf8Text, style, provider); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(TryParseTestData))] + public async Task TryParseTest(string s, NumberStyles style, IFormatProvider? provider, bool expected, Float expectedValue) + { + var success = Helper.TryParse(s, style, provider, out var result); + using (Assert.Multiple()) + { + await Assert.That(success).IsEqualTo(expected); + await Assert.That(result).IsEqualTo(expectedValue); + } + } + [Test] + [MethodDataSource(nameof(TryParseSpanTestData))] + public async Task TryParseTest(char[] s, NumberStyles style, IFormatProvider? provider, bool expected, Float expectedValue) + { + var success = Helper.TryParse(s, style, provider, out var result); + using (Assert.Multiple()) + { + await Assert.That(success).IsEqualTo(expected); + await Assert.That(result).IsEqualTo(expectedValue); + } + } + [Test] + [MethodDataSource(nameof(TryParseUtf8TestData))] + public async Task TryParseTest(byte[] utf8Text, NumberStyles style, IFormatProvider? provider, bool expected, Float expectedValue) + { + var success = Helper.TryParse(utf8Text, style, provider, out var result); + using (Assert.Multiple()) + { + await Assert.That(success).IsEqualTo(expected); + await Assert.That(result).IsEqualTo(expectedValue); + } + } + #endregion + + #region INumber + [Test] + [MethodDataSource(nameof(ClampTestData))] + public async Task ClampTest(Float value, Float min, Float max, Float expected) + { + if (min > max) + { + await Assert.That(() => Helper.Clamp(value, min, max)).Throws(); + } + else + { + var result = Helper.Clamp(value, min, max); + await Assert.That(result).IsEqualTo(expected); + } + } + [Test] + [MethodDataSource(nameof(CopySignTestData))] + public async Task CopySignTest(Float value, Float sign, Float expected) + { + var result = Helper.CopySign(value, sign); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(MaxTestData))] + public async Task MaxTest(Float x, Float y, Float expected) + { + var result = Helper.Max(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(MaxNumberTestData))] + public async Task MaxNumberTest(Float x, Float y, Float expected) + { + var result = Helper.MaxNumber(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(MinTestData))] + public async Task MinTest(Float x, Float y, Float expected) + { + var result = Helper.Min(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(MinNumberTestData))] + public async Task MinNumberTest(Float x, Float y, Float expected) + { + var result = Helper.MinNumber(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(SignTestData))] + public async Task SignTest(Float value, int expected) + { + var result = Helper.Sign(value); + await Assert.That(result).IsEqualTo(expected); + } + #endregion + + #region IBinaryNumber + [Test] + [MethodDataSource(nameof(IsPow2TestData))] + public async Task IsPow2Test(Float value, bool expected) + { + var result = Helper.IsPow2(value); + await Assert.That(result).IsEqualTo(expected); + } + #endregion + + #region IFloatingPoint + [Test] + [MethodDataSource(nameof(RoundTestData))] + public async Task RoundTest(Float value, int digits, MidpointRounding midpointRounding, Float expected) + { + var result = Float.Round(value, digits, midpointRounding); + await Assert.That(result).IsEqualTo(expected); + } + #endregion + + #region IFloatingPointIeee754 + [Test] + public async Task AcosTest() + { + await Assert.That(Float.Acos(Float.NaN)).IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Acos(Float.Two)).IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Acos(Float.NegativeTwo)).IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Acos(Float.Half)) + .IsApproximately(Float.Pi / Float.Three, Float.Delta); + await Assert.That(Float.Acos(Float.One)) + .IsApproximately(Float.Zero, Float.Delta); + await Assert.That(Float.Acos(Float.NegativeOne)) + .IsApproximately(Float.Pi, Float.Delta); + } + [Test] + public async Task AcoshTest() + { + await Assert.That(Float.Acosh(Float.Two)) + .IsApproximately(Values.CreateFloat(0x3FFF_5124_2719_8043, 0x49BE_684B_D018_8D53), Float.Delta); + await Assert.That(Float.Acos(Float.Half)).IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Acos(Float.Zero)).IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Acos(Float.NegativeOne)).IsBitwiseEquivalentTo(Float.NaN); + } + [Test] + public async Task AsinTest() + { + await Assert.That(Float.Asin(Float.Half)) + .IsApproximately(Values.CreateFloat(0x3FFE_0C15_2382_D736, 0x5846_5BB3_2E0F_567B), Float.Delta) + .And.IsApproximately(Float.Pi / Float.Six, Float.Delta); + await Assert.That(Float.Asin(Float.Two)).IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Asin(Float.One)) + .IsApproximately(Float.Pi / Float.Two, Float.Delta); + await Assert.That(Float.Asin(Float.NegativeOne)) + .IsApproximately(-Float.Pi / Float.Two, Float.Delta); + } + [Test] + public async Task AsinhTest() + { + await Assert.That(Float.Asinh(Float.Two)) + .IsApproximately(Values.CreateFloat(0x3FFF_7192_1831_3D08, 0x72F8_E831_837F_0E95), Float.Delta); + await Assert.That(Float.Asinh(Float.Zero)) + .IsApproximately(Float.Zero, Float.Delta); + await Assert.That(Float.Asinh(Values.CreateFloat(0xBFFF_8000_0000_0000, 0x0000_0000_0000_0000))) + .IsApproximately(Values.CreateFloat(0x3FFF_31DC_0090_B63D, 0x8682_7E4B_AAAD_1909), Float.Delta); + } + [Test] + public async Task AtanTest() + { + await Assert.That(Float.Atan(Float.Half)) + .IsApproximately(Values.CreateFloat(0x3FFD_DAC6_7056_1BB4, 0xF1DE_7924_87B0_F0F3), Float.Delta); + await Assert.That(Float.Atan(Float.Zero)) + .IsApproximately(Float.Zero, Float.Delta); + await Assert.That(Float.Atan(Float.PositiveInfinity)) + .IsApproximately(Float.Pi / Float.Two, Float.Delta); + await Assert.That(Float.Atan(Float.Two)) + .IsApproximately(Values.CreateFloat(0x3FFF_1B6E_192E_BBE4, 0x3F5A_7D44_566B_01A8), Float.Delta); + } + [Test] + public async Task Atan2Test() + { + await Assert.That(Float.Atan2(Float.Zero, Float.Two)) + .IsApproximately(Float.Zero, Float.Delta); + await Assert.That(Float.Atan2(Float.Zero, Float.Zero)) + .IsApproximately(Float.Zero, Float.Delta); + await Assert.That(Float.Atan2(Float.Zero, Float.NegativeTwo)) + .IsApproximately(Float.Pi, Float.Delta); + await Assert.That(Float.Atan2(Float.One, Float.Two)) + .IsApproximately(Values.CreateFloat(0x3FFD_DAC6_7056_1BB4, 0xF1DE_7924_87B0_F0F3), Float.Delta); + await Assert.That(Float.Atan2(Float.NegativeOne, Float.Two)) + .IsApproximately(Values.CreateFloat(0xBFFD_DAC6_7056_1BB4, 0xF1DE_7924_87B0_F0F3), Float.Delta); + await Assert.That(Float.Atan2(Float.One, Float.NegativeTwo)) + .IsApproximately(Values.CreateFloat(0x4000_56C6_E739_7F5A, 0xE130_A2BB_E272_574C), Float.Delta); + } + [Test] + public async Task AtanhTest() + { + await Assert.That(Float.Atanh(Float.Two)) + .IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Atanh(Float.NegativeFour)) + .IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Atanh(Float.Zero)) + .IsApproximately(Float.Zero, Float.Delta); + await Assert.That(Float.Atanh(Float.Half)) + .IsApproximately(Values.CreateFloat(0x3FFE_193E_A7AA_D030, 0xA976_BA8D_B53A_D6E3), Float.Delta); + } + [Test] + public async Task BitDecrementTest() + { + await Assert.That(Float.BitDecrement(Float.One)) + .IsEqualTo(Values.CreateFloat(0x3FFEFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + await Assert.That(Float.BitDecrement(Float.NegativeOne)) + .IsEqualTo(Values.CreateFloat(0xBFFF000000000000, 0x0000000000000001)); + await Assert.That(Float.BitDecrement(Float.Zero)) + .IsEqualTo(-Float.Epsilon); + await Assert.That(Float.BitDecrement(Float.NegativeInfinity)) + .IsEqualTo(Float.NegativeInfinity); + await Assert.That(Float.BitDecrement(Float.PositiveInfinity)) + .IsEqualTo(Float.MaxValue); + } + [Test] + public async Task BitIncrementTest() + { + await Assert.That(Float.BitIncrement(Float.One)) + .IsEqualTo(Values.CreateFloat(0x3FFF000000000000, 0x0000000000000001)); + await Assert.That(Float.BitIncrement(Float.NegativeOne)) + .IsEqualTo(Values.CreateFloat(0xBFFEFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + await Assert.That(Float.BitIncrement(Float.NegativeZero)) + .IsEqualTo(Float.Epsilon); + await Assert.That(Float.BitIncrement(Float.NegativeInfinity)) + .IsEqualTo(Float.MinValue); + await Assert.That(Float.BitIncrement(Float.PositiveInfinity)) + .IsEqualTo(Float.PositiveInfinity); + } + [Test] + public async Task CbrtTest() + { + await Assert.That(Float.Cbrt(Values.CreateFloat(0x4005_0000_0000_0000, 0x0000_0000_0000_0000))) + .IsEqualTo(Float.Four); + await Assert.That(Float.Cbrt(Float.Zero)) + .IsEqualTo(Float.Zero); + await Assert.That(Float.Cbrt(Float.NegativeZero)) + .IsEqualTo(Float.NegativeZero); + await Assert.That(Float.Cbrt(Float.NegativeFour)) + .IsApproximately(Values.CreateFloat(0xBFFF_965F_EA53_D6E3, 0xC82B_0599_9AB4_3DC5), Float.Delta); + await Assert.That(Float.Cbrt(Float.NaN)).IsBitwiseEquivalentTo(Float.NaN); + } + [Test] + public async Task CosTest() + { + await Assert.That(Float.Cos(Float.Zero)) + .IsApproximately(Float.One, Float.Delta); + await Assert.That(Float.Cos(Float.Pi / Float.Two)) + .IsApproximately(Float.Zero, Float.Delta); + await Assert.That(Float.Cos(Float.Pi)) + .IsApproximately(Float.NegativeOne, Float.Delta); + await Assert.That(Float.Cos(Float.Pi * Float.Two)) + .IsApproximately(Float.One, Float.Delta); + await Assert.That(Float.Cos(Float.NaN)) + .IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Cos(Float.PositiveInfinity)) + .IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Cos(Float.NegativeInfinity)) + .IsBitwiseEquivalentTo(Float.NaN); + } + [Test] + public async Task CoshTest() + { + await Assert.That(Float.Cosh(Float.Zero)) + .IsBitwiseEquivalentTo(Float.One); + await Assert.That(Float.Cosh(Float.Two)) + .IsApproximately(Values.CreateFloat(0x4000_E18F_A0DF_2D9B, 0xC293_27F7_1777_4D0C), Float.Delta); + await Assert.That(Float.Cosh(Float.Five)) + .IsApproximately(Values.CreateFloat(0x4005_28D6_FCBE_FF3A, 0x9C65_3333_916C_7D52), Float.Delta); + await Assert.That(Float.Cosh(Float.NegativeFive)) + .IsApproximately(Values.CreateFloat(0x4005_28D6_FCBE_FF3A, 0x9C65_3333_916C_7D52), Float.Delta); + } + [Test] + public async Task ExpTest() + { + await Assert.That(Float.Exp(Float.Two)) + .IsApproximately(Values.CreateFloat(0x4001_D8E6_4B8D_4DDA, 0xDCC3_3A3B_A206_B68B), Float.Delta); + await Assert.That(Float.Exp(Float.NegativeHalf)) + .IsApproximately(Values.CreateFloat(0x3FFE_368B_2FC6_F960, 0x9FE7_ACEB_46AA_619C), Float.Delta); + await Assert.That(Float.Exp(Values.CreateFloat(0x400C_7700_0000_0000, 0x0000_0000_0000_0000))) + .IsEqualTo(Float.PositiveInfinity); + await Assert.That(Float.Exp(Values.CreateFloat(0xC00C_7700_0000_0000, 0x0000_0000_0000_0000))) + .IsEqualTo(Float.Zero); + await Assert.That(Float.Exp(Float.Zero)) + .IsEqualTo(Float.One); + await Assert.That(Float.Exp(Float.PositiveInfinity)) + .IsEqualTo(Float.PositiveInfinity); + await Assert.That(Float.Exp(Float.NaN)) + .IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Exp(Float.NegativeInfinity)) + .IsEqualTo(Float.Zero); + } + [Test] + public async Task ExpM1Test() + { + await Assert.That(Float.ExpM1(Float.Two)) + .IsApproximately(Float.Exp(Float.Two) - Float.One, Float.Delta);; + await Assert.That(Float.ExpM1(Float.NegativeHalf)) + .IsApproximately(Float.Exp(Float.NegativeHalf) - Float.One, Float.Delta); + } + [Test] + public async Task Exp10Test() + { + await Assert.That(Float.Exp10(Float.Two)) + .IsEqualTo(Float.Hundred); + await Assert.That(Float.Exp10(Float.Zero)) + .IsEqualTo(Float.One); + await Assert.That(Float.Exp10(Float.PositiveInfinity)) + .IsEqualTo(Float.PositiveInfinity); + await Assert.That(Float.Exp10(Float.NaN)) + .IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Exp10(Float.NegativeInfinity)) + .IsEqualTo(Float.Zero); + } + [Test] + public async Task Exp2Test() + { + await Assert.That(Float.Exp2(Float.Two)) + .IsEqualTo(Float.Four); + await Assert.That(Float.Exp2(Float.Zero)) + .IsEqualTo(Float.One); + await Assert.That(Float.Exp2(Float.PositiveInfinity)) + .IsEqualTo(Float.PositiveInfinity); + await Assert.That(Float.Exp2(Float.NaN)) + .IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Exp2(Float.NegativeInfinity)) + .IsEqualTo(Float.Zero); + } + [Test] + [MethodDataSource(nameof(FusedMultiplyAddTestData))] + public async Task FusedMultiplyAddTest(Float left, Float right, Float addend, Float result) + { + await Assert.That(Float.FusedMultiplyAdd(left, right, addend)) + .IsEqualTo(result).And + .IsBitwiseEquivalentTo(result); + } + [Test] + public async Task HypotTest() + { + await Assert.That(Float.Hypot(Float.Hundred, Float.Ten)) + .IsApproximately(Values.CreateFloat(0x4005_91FE_B9F2_BF46, 0xC3A7_08A3_1212_49E7), Float.Delta); + await Assert.That(Float.Hypot(Float.PositiveInfinity, Float.NegativeInfinity)) + .IsBitwiseEquivalentTo(Float.PositiveInfinity); + await Assert.That(Float.Hypot(Float.NaN, Float.NaN)) + .IsBitwiseEquivalentTo(Float.NaN); + } + [Test] + [MethodDataSource(nameof(Ieee754RemainderTestData))] + public async Task IeeeRemainderTest(Float left, Float right, Float result) + { + await Assert.That(Float.Ieee754Remainder(left, right)) + .IsBitwiseEquivalentTo(result); + } + [Test] + public async Task ILogBTest() + { + await Assert.That(Float.ILogB(Values.CreateFloat(0x4009_0000_0000_0000, 0x0000_0000_0000_0000))) + .IsEqualTo(10); + await Assert.That(Float.ILogB(Values.CreateFloat(0x403F_0000_0000_0000, 0x0000_0000_0000_0000))) + .IsEqualTo(64); + await Assert.That(Float.ILogB(Values.CreateFloat(0xC03F_0000_0000_0000, 0x0000_0000_0000_0000))) + .IsEqualTo(64); + await Assert.That(Float.ILogB(Float.Zero)) + .IsEqualTo(int.MinValue); + } + [Test] + public async Task LogTest() + { + await Assert.That(Float.Log(Float.Hundred)) + .IsApproximately(Values.CreateFloat(0x4001_26BB_1BBB_5551, 0x582D_D4AD_AC57_05A6), Float.Delta); + await Assert.That(Float.Log(Float.One)) + .IsEqualTo(Float.Zero); + await Assert.That(Float.Log(Float.Zero)) + .IsEqualTo(Float.NegativeInfinity); + await Assert.That(Float.Log(Float.NegativeFive)) + .IsBitwiseEquivalentTo(Float.NaN); + } + [Test] + public async Task LogP1Test() + { + await Assert.That(Float.LogP1(Float.One)) + .IsBitwiseEquivalentTo(Float.Log(Float.Two)) + .And.IsApproximately(Values.CreateFloat(0x3FFE_62E4_2FEF_A39E, 0xF357_93C7_6730_07E6), Float.Delta); + await Assert.That(Float.LogP1(Float.Zero)) + .IsBitwiseEquivalentTo(Float.Zero); + await Assert.That(Float.LogP1(Float.NegativeOne)) + .IsBitwiseEquivalentTo(Float.NegativeInfinity); + await Assert.That(Float.LogP1(Float.NegativeFive)) + .IsBitwiseEquivalentTo(Float.NaN); + } + [Test] + public async Task Log2Test() + { + await Assert.That(Helper.Log2(Float.Four)).IsApproximately(Float.Two, Float.Delta); + await Assert.That(Helper.Log2(Float.One)).IsEqualTo(Float.Zero); + await Assert.That(Helper.Log2(Float.Zero)).IsEqualTo(Float.NegativeInfinity); + await Assert.That(Helper.Log2(Float.NegativeFive)).IsBitwiseEquivalentTo(Float.NaN); + } + [Test] + public async Task Log10Test() + { + await Assert.That(Float.Log10(Float.Thousand)) + .IsApproximately(Float.Three, Float.Delta); + await Assert.That(Float.Log10(Float.One)) + .IsEqualTo(Float.Zero); + await Assert.That(Float.Log10(Float.Zero)) + .IsEqualTo(Float.NegativeInfinity); + await Assert.That(Float.Log10(Float.NegativeFive)) + .IsBitwiseEquivalentTo(Float.NaN); + } + + [Test] + public async Task PowTest() + { + await Assert.That(Float.Pow(Float.Three, Float.Ten)) + .IsApproximately(Values.CreateFloat(0x400E_CD52_0000_0000, 0x0000_0000_0000_0000), Float.Delta); + await Assert.That(Float.Pow(Float.Two, Float.NegativeFour)) + .IsApproximately(Values.CreateFloat(0x3FFB_0000_0000_0000, 0x0000_0000_0000_0000), Float.Delta); + + Float anything = 8, oddInt = 7, nonInt = 7.5d, greaterThanOne = Float.GreaterThanOneSmallest, lessThanOne = Float.LessThanOneLargest; + + await Assert.That(Float.Pow(anything, Float.Zero)).IsBitwiseEquivalentTo(Float.One); + await Assert.That(Float.Pow(anything, Float.One)).IsBitwiseEquivalentTo(anything); + await Assert.That(Float.Pow(anything, Float.NaN)).IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Pow(Float.One, Float.NaN)).IsBitwiseEquivalentTo(Float.One); + await Assert.That(Float.Pow(Float.NaN, anything)).IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Pow(greaterThanOne, Float.PositiveInfinity)).IsBitwiseEquivalentTo(Float.PositiveInfinity); + await Assert.That(Float.Pow(greaterThanOne, Float.NegativeInfinity)).IsBitwiseEquivalentTo(Float.Zero); + await Assert.That(Float.Pow(lessThanOne, Float.PositiveInfinity)).IsBitwiseEquivalentTo(Float.Zero); + await Assert.That(Float.Pow(lessThanOne, Float.NegativeInfinity)).IsBitwiseEquivalentTo(Float.PositiveInfinity); + await Assert.That(Float.Pow(Float.One, Float.PositiveInfinity)).IsBitwiseEquivalentTo(Float.One); + await Assert.That(Float.Pow(Float.One, Float.NegativeInfinity)).IsBitwiseEquivalentTo(Float.One); + await Assert.That(Float.Pow(Float.NegativeOne, Float.PositiveInfinity)).IsBitwiseEquivalentTo(Float.One); + await Assert.That(Float.Pow(Float.NegativeOne, Float.NegativeInfinity)).IsBitwiseEquivalentTo(Float.One); + await Assert.That(Float.Pow(Float.Zero, anything)).IsBitwiseEquivalentTo(Float.Zero); + await Assert.That(Float.Pow(Float.NegativeZero, anything)).IsBitwiseEquivalentTo(Float.Zero); + await Assert.That(Float.Pow(Float.Zero, -anything)).IsBitwiseEquivalentTo(Float.PositiveInfinity); + await Assert.That(Float.Pow(Float.NegativeZero, -anything)).IsBitwiseEquivalentTo(Float.PositiveInfinity); + + await Assert.That(Float.Pow(Float.NegativeZero, oddInt)) + .IsBitwiseEquivalentTo(-(Float.Pow(Float.Zero, oddInt))); + await Assert.That(Float.Pow(Float.PositiveInfinity, anything)).IsBitwiseEquivalentTo(Float.PositiveInfinity); + await Assert.That(Float.Pow(Float.PositiveInfinity, -anything)).IsBitwiseEquivalentTo(Float.Zero); + await Assert.That(Float.Pow(Float.NegativeInfinity, anything)) + .IsBitwiseEquivalentTo(Float.Pow(Float.NegativeZero, -anything)); + await Assert.That(Float.Pow(-anything, oddInt)) + .IsBitwiseEquivalentTo(Float.Pow(Float.NegativeOne, oddInt) * Float.Pow(+anything, oddInt)); + await Assert.That(Float.Pow(-anything, nonInt)).IsBitwiseEquivalentTo(Float.NaN); + } + [Test] + public async Task ReciprocalEstimateTest() + { + await Assert.That(Float.ReciprocalEstimate(Float.Two)).IsEqualTo(Float.Half); + await Assert.That(Float.ReciprocalEstimate(Float.Three)) + .IsApproximately(Values.CreateFloat(0x3FFD_5555_5555_5555, 0x5555_165E_5289_24A5), Float.Delta); + await Assert.That(Float.ReciprocalEstimate(Float.Four)) + .IsApproximately(Values.CreateFloat(0x3FFD_0000_0000_0000, 0x0000_0000_0000_0000), Float.Delta); + } + [Test] + public async Task RootNTest() + { + await Assert.That(Float.RootN(Values.CreateFloat(0x4005_4400_0000_0000, 0x0000_0000_0000_0000), 4)) + .IsBitwiseEquivalentTo(Float.Three); + await Assert.That(Float.RootN(Values.CreateFloat(0x4005_0000_0000_0000, 0x0000_0000_0000_0000), 3)) + .IsEqualTo(Float.Four) + .And.IsEqualTo(Float.Cbrt(Values.CreateFloat(0x4005_0000_0000_0000, 0x0000_0000_0000_0000))); + await Assert.That(Float.RootN(Float.Hundred, 2)) + .IsBitwiseEquivalentTo(Float.Ten) + .And.IsEqualTo(Float.Sqrt(Float.Hundred)); + await Assert.That(Float.RootN(Float.Zero, 2)) + .IsBitwiseEquivalentTo(Float.Zero); + await Assert.That(Float.RootN(Float.NegativeZero, 2)) + .IsBitwiseEquivalentTo(Float.NegativeZero); + await Assert.That(Float.RootN(Float.PositiveInfinity, 2)) + .IsBitwiseEquivalentTo(Float.PositiveInfinity); + await Assert.That(Float.RootN(Float.NegativeFour, 2)) + .IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.RootN(Float.NaN, 2)) + .IsBitwiseEquivalentTo(Float.NaN); + } + [Test] + public async Task ScaleBTest() + { + await Assert.That(Float.ScaleB(Float.Two, 3)) + .IsBitwiseEquivalentTo(Values.CreateFloat(0x4003_0000_0000_0000, 0x0000_0000_0000_0000)); + await Assert.That(Float.ScaleB(Float.NegativeTwo, 3)) + .IsBitwiseEquivalentTo(Values.CreateFloat(0xC003_0000_0000_0000, 0x0000_0000_0000_0000)); + await Assert.That(Float.ScaleB(Float.Zero, 6)) + .IsBitwiseEquivalentTo(Float.Zero); + await Assert.That(Float.ScaleB(Float.Two, 30000)) + .IsBitwiseEquivalentTo(Float.PositiveInfinity); + await Assert.That(Float.ScaleB(Float.Two, -30000)) + .IsBitwiseEquivalentTo(Float.Zero); + } + [Test] + public async Task SinTest() + { + await Assert.That(Float.Sin(Float.NaN)) + .IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Sin(Float.PositiveInfinity)) + .IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Sin(Float.NegativeInfinity)) + .IsBitwiseEquivalentTo(Float.NaN); + } + [Test] + public async Task SinCosTest() + { + Float sin, cos; + (sin, cos) = Float.SinCos(Float.Zero); + await Assert.That(sin).IsApproximately(Float.Zero, Float.Delta); + await Assert.That(cos).IsApproximately(Float.One, Float.Delta); + + (sin, cos) = Float.SinCos(Float.Pi); + await Assert.That(sin).IsApproximately(Float.Zero, Float.Delta); + await Assert.That(cos).IsApproximately(Float.NegativeOne, Float.Delta); + + (sin, cos) = Float.SinCos(Float.Pi / Float.Two); + await Assert.That(sin).IsApproximately(Float.One, Float.Delta); + await Assert.That(cos).IsApproximately(Float.Zero, Float.Delta); + + (sin, cos) = Float.SinCos(Float.Pi * Float.Two); + await Assert.That(sin).IsApproximately(Float.Zero, Float.Delta); + await Assert.That(cos).IsApproximately(Float.One, Float.Delta); + } + [Test] + public async Task SinhTest() + { + await Assert.That(Float.Sinh(Float.Two)) + .IsApproximately(Values.CreateFloat(0x4000_D03C_F63B_6E19, 0xF6F3_4C80_2C96_2009), Float.Delta); + await Assert.That(Float.Sinh(Float.Zero)) + .IsBitwiseEquivalentTo(Float.Zero); + } + [Test] + public async Task SqrtTest() + { + await Assert.That(Float.Sqrt(Float.Ten)) + .IsApproximately(Values.CreateFloat(0x4000_94C5_83AD_A5B5, 0x2920_4A2B_C830_CD9C), Float.Delta); + await Assert.That(Float.Sqrt(Float.Hundred)) + .IsApproximately(Float.Ten, Float.Delta); + await Assert.That(Float.Sqrt(Float.Zero)) + .IsBitwiseEquivalentTo(Float.Zero); + await Assert.That(Float.Sqrt(-Float.NegativeZero)) + .IsBitwiseEquivalentTo(-Float.NegativeZero); + await Assert.That(Float.Sqrt(Float.PositiveInfinity)) + .IsBitwiseEquivalentTo(Float.PositiveInfinity); + await Assert.That(Float.Sqrt(Float.NegativeFour)) + .IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Sqrt(Float.NaN)) + .IsBitwiseEquivalentTo(Float.NaN); + } + [Test] + public async Task TanTest() + { + await Assert.That(Float.Tan(Float.NaN)). + IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Tan(Float.PositiveInfinity)). + IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Tan(Float.NegativeInfinity)). + IsBitwiseEquivalentTo(Float.NaN); + } + [Test] + public async Task TanhTest() + { + await Assert.That(Float.Tanh(Float.Two)) + .IsApproximately(Values.CreateFloat(0x3FFE_ED95_05E1_BC3D, 0x3D33_C432_FC3E_8256), Float.Delta); + await Assert.That(Float.Tanh(Float.NaN)). + IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Tanh(Float.Zero)). + IsBitwiseEquivalentTo(Float.Zero); + } + #endregion } \ No newline at end of file From 44a3d7abd928d74503f998c3c28e623dbce030f0 Mon Sep 17 00:00:00 2001 From: crookseta Date: Sat, 4 Jul 2026 10:26:06 -0500 Subject: [PATCH 49/74] -Added remaining unit test methods for Quad. --- .../Core/JsonConverterTests.cs | 5 +- .../Data/QuadDataSources.cs | 152 ++++++++++++------ .../Data/Sources/IMathOperators.cs | 31 +++- .../NumberBaseAssertionExtensions.cs | 43 ++++- .../Numerics/QuadGenericMathTests.cs | 93 ++++++----- 5 files changed, 221 insertions(+), 103 deletions(-) diff --git a/src/MissingValues.Tests/Core/JsonConverterTests.cs b/src/MissingValues.Tests/Core/JsonConverterTests.cs index ce0a247..70b4f40 100644 --- a/src/MissingValues.Tests/Core/JsonConverterTests.cs +++ b/src/MissingValues.Tests/Core/JsonConverterTests.cs @@ -1,5 +1,6 @@ using System.Globalization; using System.Text.Json; +using MissingValues.Tests.Extensions; namespace MissingValues.Tests.Core; @@ -22,7 +23,7 @@ public async Task JsonReadTest() await Assert.That(JsonSerializer.Deserialize($"[{Int256.MaxValue},{Int256.MinValue}]")).IsEquivalentTo([Int256.MaxValue, Int256.MinValue]); await Assert.That(JsonSerializer.Deserialize(UInt512.MaxValue.ToString())).EqualTo(UInt512.MaxValue); await Assert.That(JsonSerializer.Deserialize($"[{Int512.MaxValue},{Int512.MinValue}]")).IsEquivalentTo([Int512.MaxValue, Int512.MinValue]); - await Assert.That(JsonSerializer.Deserialize(Quad.MaxValue.ToString("G", CultureInfo.InvariantCulture))).EqualTo(Quad.MaxValue); - await Assert.That(JsonSerializer.Deserialize(Octo.MaxValue.ToString("G", CultureInfo.InvariantCulture))).EqualTo(Octo.MaxValue); + await Assert.That(JsonSerializer.Deserialize(Quad.UInt64MaxValue.ToString("G", CultureInfo.InvariantCulture))).EqualTo(Quad.UInt64MaxValue); + await Assert.That(JsonSerializer.Deserialize(Octo.UInt64MaxValue.ToString("G", CultureInfo.InvariantCulture))).EqualTo(Octo.UInt64MaxValue); } } \ No newline at end of file diff --git a/src/MissingValues.Tests/Data/QuadDataSources.cs b/src/MissingValues.Tests/Data/QuadDataSources.cs index d1d67b1..dcb536b 100644 --- a/src/MissingValues.Tests/Data/QuadDataSources.cs +++ b/src/MissingValues.Tests/Data/QuadDataSources.cs @@ -30,31 +30,6 @@ public class QuadDataSources yield return () => (Quad.NegativeInfinity, Quad.NegativeInfinity, Quad.NegativeInfinity); } - public static IEnumerable> op_CheckedAdditionTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> op_CheckedDecrementTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> op_CheckedIncrementTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> op_CheckedMultiplyTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> op_CheckedSubtractionTestData() - { - throw new NotImplementedException(); - } - public static IEnumerable> op_DecrementTestData() { yield return () => (Quad.NegativeOne, Quad.NegativeTwo); @@ -85,7 +60,11 @@ public class QuadDataSources public static IEnumerable> op_ModulusTestData() { - throw new NotImplementedException(); + yield return () => (Quad.Two, Quad.Four, Quad.Two); + yield return () => (Quad.Half, Quad.Four, Quad.Half); + yield return () => (Quad.Four, Quad.Half, Quad.Zero); + yield return () => (Quad.NegativeFour, Quad.Half, Quad.NegativeZero); + yield return () => (Quad.NegativeFour, Quad.Thousand, Quad.NegativeFour); } public static IEnumerable> op_MultiplyTestData() @@ -122,29 +101,32 @@ public class QuadDataSources yield return () => (Quad.Thousand, Quad.NegativeThousand); } - public static IEnumerable> op_CheckedUnaryNegationTestData() - { - throw new NotImplementedException(); - } - public static IEnumerable> op_BitwiseAndTestData() { - throw new NotImplementedException(); + yield return () => (Quad.Zero, Quad.One, Quad.Zero); + yield return () => (Quad.One, Quad.One, Quad.One); + yield return () => (Values.CreateFloat(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), Values.CreateFloat(0x0000_0000_0000_0000, 0x0000_0000_0000_0001), Values.CreateFloat(0x0000_0000_0000_0000, 0x0000_0000_0000_0001)); } public static IEnumerable> op_BitwiseOrTestData() { - throw new NotImplementedException(); + yield return () => (Quad.Zero, Quad.One, Quad.One); + yield return () => (Quad.One, Quad.One, Quad.One); + yield return () => (Values.CreateFloat(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), Values.CreateFloat(0x0000_0000_0000_0000, 0x0000_0000_0000_0001), Values.CreateFloat(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); } public static IEnumerable> op_BitwiseXorTestData() { - throw new NotImplementedException(); + yield return () => (Quad.Zero, Quad.One, Quad.One); + yield return () => (Quad.One, Quad.One, Quad.Zero); + yield return () => (Values.CreateFloat(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), Values.CreateFloat(0x0000_0000_0000_0000, 0x0000_0000_0000_0001), Values.CreateFloat(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE)); } public static IEnumerable> op_OnesComplementTestData() { - throw new NotImplementedException(); + yield return () => (Quad.Zero, Values.CreateFloat(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); + yield return () => (Values.CreateFloat(0x0000_0000_0000_0000, 0x0000_0000_0000_0001), Values.CreateFloat(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE)); + yield return () => (Values.CreateFloat(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), Quad.Zero); } public static IEnumerable> op_EqualityTestData() @@ -159,13 +141,22 @@ public class QuadDataSources { yield return () => (Quad.One, Quad.One, false); yield return () => (Quad.NaN, Quad.NaN, true); - yield return () => (Quad.NegativeTwo, Quad.Two, true); + yield return () => (Quad.NegativeTwo, Quad.Two, true); yield return () => (Quad.SmallestSubnormal, Quad.GreatestSubnormal, true); } public static IEnumerable> op_GreaterThanOrEqualTestData() { - throw new NotImplementedException(); + yield return () => (Quad.One, Quad.One, true); + yield return () => (Quad.Two, Quad.Two, true); + yield return () => (Quad.NaN, Quad.NaN, false); + yield return () => (Quad.GreatestSubnormal, Quad.GreatestSubnormal, true); + yield return () => (Quad.Two, Quad.One, true); + yield return () => (Quad.Thousand, Quad.NegativeThousand, true); + yield return () => (Quad.NegativeQuarter, Quad.NegativeHalf, true); + yield return () => (Quad.Quarter, Quad.Half, false); + yield return () => (Quad.Ten, Quad.Hundred, false); + yield return () => (Quad.GreaterThanOneSmallest, Quad.One, true); } public static IEnumerable> op_GreaterThanTestData() @@ -180,7 +171,16 @@ public class QuadDataSources public static IEnumerable> op_LessThanOrEqualTestData() { - throw new NotImplementedException(); + yield return () => (Quad.One, Quad.One, true); + yield return () => (Quad.Two, Quad.Two, true); + yield return () => (Quad.NaN, Quad.NaN, false); + yield return () => (Quad.GreatestSubnormal, Quad.GreatestSubnormal, true); + yield return () => (Quad.Zero, Quad.One, true); + yield return () => (Quad.Zero, Quad.Quarter, true); + yield return () => (Quad.NegativeThousand, Quad.Thousand, true); + yield return () => (Quad.NegativeOne, Quad.NegativeThree, false); + yield return () => (Quad.Hundred, Quad.Two, false); + yield return () => (Quad.LessThanOneLargest, Quad.One, true); } public static IEnumerable> op_LessThanTestData() @@ -242,11 +242,11 @@ public class QuadDataSources public static IEnumerable> IsInfinityTestData() { - yield return () => (Quad.One, true); - yield return () => (Quad.NegativeOne, true); + yield return () => (Quad.One, false); + yield return () => (Quad.NegativeOne, false); yield return () => (Quad.NaN, false); - yield return () => (Quad.PositiveInfinity, false); - yield return () => (Quad.NegativeInfinity, false); + yield return () => (Quad.PositiveInfinity, true); + yield return () => (Quad.NegativeInfinity, true); } public static IEnumerable> IsIntegerTestData() @@ -567,37 +567,89 @@ public class QuadDataSources public static IEnumerable> CopySignTestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeOne, Quad.One, Quad.One); + yield return () => (Quad.One, Quad.NegativeOne, Quad.NegativeOne); + yield return () => (Quad.Thousand, Quad.NegativeOne, Quad.NegativeThousand); + yield return () => (Quad.NegativeHundred, Quad.NegativeOne, Quad.NegativeHundred); } public static IEnumerable> MaxTestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeInfinity, Quad.One, Quad.One); + yield return () => (Quad.MinValue, Quad.One, Quad.One); + yield return () => (Quad.NegativeOne, Quad.One, Quad.One); + yield return () => (-Quad.GreatestSubnormal, Quad.One, Quad.One); + yield return () => (-Quad.Epsilon, Quad.One, Quad.One); + yield return () => (Quad.NegativeZero, Quad.One, Quad.One); + yield return () => (Quad.NaN, Quad.One, Quad.NaN); + yield return () => (Quad.Zero, Quad.One, Quad.One); + yield return () => (Quad.One, Quad.One, Quad.One); + yield return () => (Quad.MaxValue, Quad.One, Quad.MaxValue); + yield return () => (Quad.PositiveInfinity, Quad.One, Quad.PositiveInfinity); } public static IEnumerable> MaxNumberTestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeInfinity, Quad.One, Quad.One); + yield return () => (Quad.MinValue, Quad.One, Quad.One); + yield return () => (Quad.NegativeOne, Quad.One, Quad.One); + yield return () => (-Quad.GreatestSubnormal, Quad.One, Quad.One); + yield return () => (-Quad.Epsilon, Quad.One, Quad.One); + yield return () => (Quad.NegativeZero, Quad.One, Quad.One); + yield return () => (Quad.NaN, Quad.One, Quad.One); + yield return () => (Quad.Zero, Quad.One, Quad.One); + yield return () => (Quad.One, Quad.One, Quad.One); + yield return () => (Quad.MaxValue, Quad.One, Quad.MaxValue); + yield return () => (Quad.PositiveInfinity, Quad.One, Quad.PositiveInfinity); } public static IEnumerable> MinTestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeInfinity, Quad.One, Quad.NegativeInfinity); + yield return () => (Quad.MinValue, Quad.One, Quad.MinValue); + yield return () => (Quad.NegativeOne, Quad.One, Quad.NegativeOne); + yield return () => (-Quad.GreatestSubnormal, Quad.One, -Quad.GreatestSubnormal); + yield return () => (-Quad.Epsilon, Quad.One, -Quad.Epsilon); + yield return () => (Quad.NegativeZero, Quad.One, Quad.NegativeZero); + yield return () => (Quad.NaN, Quad.One, Quad.NaN); + yield return () => (Quad.Zero, Quad.One, Quad.Zero); + yield return () => (Quad.One, Quad.One, Quad.One); + yield return () => (Quad.MaxValue, Quad.One, Quad.One); + yield return () => (Quad.PositiveInfinity, Quad.One, Quad.One); } public static IEnumerable> MinNumberTestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeInfinity, Quad.One, Quad.NegativeInfinity); + yield return () => (Quad.MinValue, Quad.One, Quad.MinValue); + yield return () => (Quad.NegativeOne, Quad.One, Quad.NegativeOne); + yield return () => (-Quad.GreatestSubnormal, Quad.One, -Quad.GreatestSubnormal); + yield return () => (-Quad.Epsilon, Quad.One, -Quad.Epsilon); + yield return () => (Quad.NegativeZero, Quad.One, Quad.NegativeZero); + yield return () => (Quad.NaN, Quad.One, Quad.One); + yield return () => (Quad.Zero, Quad.One, Quad.Zero); + yield return () => (Quad.One, Quad.One, Quad.One); + yield return () => (Quad.MaxValue, Quad.One, Quad.One); + yield return () => (Quad.PositiveInfinity, Quad.One, Quad.One); } public static IEnumerable> SignTestData() { - throw new NotImplementedException(); + yield return () => (Quad.One, 1); + yield return () => (Quad.NegativeOne, -1); + yield return () => (Quad.Ten, 1); + yield return () => (Quad.NegativeTen, -1); + yield return () => (Quad.Zero, 0); + yield return () => (Quad.NegativeZero, 0); } public static IEnumerable> IsPow2TestData() { - throw new NotImplementedException(); + yield return () => (Quad.Half, true); + yield return () => (Quad.One, true); + yield return () => (Quad.Two, true); + yield return () => (Quad.Three, false); + yield return () => (Quad.NegativeTwo, false); } public static IEnumerable> Log2TestData() @@ -741,7 +793,7 @@ public class QuadDataSources yield return () => (Quad.Ten, Quad.Three, Quad.One); yield return () => (Quad.Ten, Quad.Two, Quad.Zero); yield return () => (Quad.NegativeTen, Quad.Three, Quad.NegativeOne); - yield return () => (Quad.NegativeTen, Quad.Two, Quad.Zero); + yield return () => (Quad.NegativeTen, Quad.Two, Quad.NegativeZero); yield return () => (Quad.NegativeTen, Quad.Zero, Quad.NaN); } diff --git a/src/MissingValues.Tests/Data/Sources/IMathOperators.cs b/src/MissingValues.Tests/Data/Sources/IMathOperators.cs index dada976..f29ff9b 100644 --- a/src/MissingValues.Tests/Data/Sources/IMathOperators.cs +++ b/src/MissingValues.Tests/Data/Sources/IMathOperators.cs @@ -14,11 +14,27 @@ where T IModulusOperators { static abstract IEnumerable> op_AdditionTestData(); - static abstract IEnumerable> op_CheckedAdditionTestData(); - static abstract IEnumerable> op_CheckedDecrementTestData(); - static abstract IEnumerable> op_CheckedIncrementTestData(); - static abstract IEnumerable> op_CheckedMultiplyTestData(); - static abstract IEnumerable> op_CheckedSubtractionTestData(); + + static virtual IEnumerable> op_CheckedAdditionTestData() + { + throw new NotSupportedException(); + } + static virtual IEnumerable> op_CheckedDecrementTestData() + { + throw new NotSupportedException(); + } + static virtual IEnumerable> op_CheckedIncrementTestData() + { + throw new NotSupportedException(); + } + static virtual IEnumerable> op_CheckedMultiplyTestData() + { + throw new NotSupportedException(); + } + static virtual IEnumerable> op_CheckedSubtractionTestData() + { + throw new NotSupportedException(); + } static abstract IEnumerable> op_DecrementTestData(); static abstract IEnumerable> op_DivisionTestData(); static abstract IEnumerable> op_IncrementTestData(); @@ -26,5 +42,8 @@ where T static abstract IEnumerable> op_MultiplyTestData(); static abstract IEnumerable> op_SubtractionTestData(); static abstract IEnumerable> op_UnaryNegationTestData(); - static abstract IEnumerable> op_CheckedUnaryNegationTestData(); + static virtual IEnumerable> op_CheckedUnaryNegationTestData() + { + throw new NotSupportedException(); + } } \ No newline at end of file diff --git a/src/MissingValues.Tests/Extensions/NumberBaseAssertionExtensions.cs b/src/MissingValues.Tests/Extensions/NumberBaseAssertionExtensions.cs index 6a7e0aa..f0ffe7c 100644 --- a/src/MissingValues.Tests/Extensions/NumberBaseAssertionExtensions.cs +++ b/src/MissingValues.Tests/Extensions/NumberBaseAssertionExtensions.cs @@ -46,9 +46,48 @@ public static AssertionResult IsApproximately(this T value, T expected, T pre if (actualDifference <= precision) { - return AssertionResult.Failed($"Expected {value} to approximate {expected} +/- {precision}, but {value} differed by {actualDifference}."); + return AssertionResult.Passed; } - return AssertionResult.Passed; + return AssertionResult.Failed($"Expected {value} to approximate {expected} +/- {precision}, but {value} differed by {actualDifference}."); + } + + [EditorBrowsable(EditorBrowsableState.Never)] + [GenerateAssertion(ExpectationMessage = "to be Not a Number")] + public static bool IsNaN(this Quad value) + { + return Quad.IsNaN(value); + } + [EditorBrowsable(EditorBrowsableState.Never)] + [GenerateAssertion(ExpectationMessage = "to be Not a Number")] + public static bool IsNaN(this Octo value) + { + return Octo.IsNaN(value); + } + + [EditorBrowsable(EditorBrowsableState.Never)] + [GenerateAssertion(ExpectationMessage = "to be Negative Infinity")] + public static bool IsNegativeInfinity(this Quad value) + { + return Quad.IsNegativeInfinity(value); + } + [EditorBrowsable(EditorBrowsableState.Never)] + [GenerateAssertion(ExpectationMessage = "to be Negative Infinity")] + public static bool IsNegativeInfinity(this Octo value) + { + return Octo.IsNegativeInfinity(value); + } + + [EditorBrowsable(EditorBrowsableState.Never)] + [GenerateAssertion(ExpectationMessage = "to be Negative Infinity")] + public static bool IsPositiveInfinity(this Quad value) + { + return Quad.IsPositiveInfinity(value); + } + [EditorBrowsable(EditorBrowsableState.Never)] + [GenerateAssertion(ExpectationMessage = "to be Negative Infinity")] + public static bool IsPositiveInfinity(this Octo value) + { + return Octo.IsPositiveInfinity(value); } } \ No newline at end of file diff --git a/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs b/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs index 6e92c65..d4ffb76 100644 --- a/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs @@ -36,7 +36,14 @@ public async Task op_SubtractionTest(Float left, Float right, Float expected) { var result = left - right; - await Assert.That(result).IsEqualTo(expected).And.IsBitwiseEquivalentTo(expected); + if (Float.IsNaN(expected)) + { + await Assert.That(result).IsNaN(); + } + else + { + await Assert.That(result).IsEqualTo(expected).And.IsBitwiseEquivalentTo(expected); + } } [Test] [MethodDataSource(nameof(op_DecrementTestData))] @@ -457,9 +464,9 @@ public async Task RoundTest(Float value, int digits, MidpointRounding midpointRo [Test] public async Task AcosTest() { - await Assert.That(Float.Acos(Float.NaN)).IsBitwiseEquivalentTo(Float.NaN); - await Assert.That(Float.Acos(Float.Two)).IsBitwiseEquivalentTo(Float.NaN); - await Assert.That(Float.Acos(Float.NegativeTwo)).IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Acos(Float.NaN)).IsNaN(); + await Assert.That(Float.Acos(Float.Two)).IsNaN(); + await Assert.That(Float.Acos(Float.NegativeTwo)).IsNaN(); await Assert.That(Float.Acos(Float.Half)) .IsApproximately(Float.Pi / Float.Three, Float.Delta); await Assert.That(Float.Acos(Float.One)) @@ -472,9 +479,9 @@ public async Task AcoshTest() { await Assert.That(Float.Acosh(Float.Two)) .IsApproximately(Values.CreateFloat(0x3FFF_5124_2719_8043, 0x49BE_684B_D018_8D53), Float.Delta); - await Assert.That(Float.Acos(Float.Half)).IsBitwiseEquivalentTo(Float.NaN); - await Assert.That(Float.Acos(Float.Zero)).IsBitwiseEquivalentTo(Float.NaN); - await Assert.That(Float.Acos(Float.NegativeOne)).IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Acosh(Float.Half)).IsNaN(); + await Assert.That(Float.Acosh(Float.Zero)).IsNaN(); + await Assert.That(Float.Acosh(Float.NegativeOne)).IsNaN(); } [Test] public async Task AsinTest() @@ -482,7 +489,7 @@ public async Task AsinTest() await Assert.That(Float.Asin(Float.Half)) .IsApproximately(Values.CreateFloat(0x3FFE_0C15_2382_D736, 0x5846_5BB3_2E0F_567B), Float.Delta) .And.IsApproximately(Float.Pi / Float.Six, Float.Delta); - await Assert.That(Float.Asin(Float.Two)).IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Asin(Float.Two)).IsNaN(); await Assert.That(Float.Asin(Float.One)) .IsApproximately(Float.Pi / Float.Two, Float.Delta); await Assert.That(Float.Asin(Float.NegativeOne)) @@ -530,9 +537,9 @@ await Assert.That(Float.Atan2(Float.One, Float.NegativeTwo)) public async Task AtanhTest() { await Assert.That(Float.Atanh(Float.Two)) - .IsBitwiseEquivalentTo(Float.NaN); + .IsNaN(); await Assert.That(Float.Atanh(Float.NegativeFour)) - .IsBitwiseEquivalentTo(Float.NaN); + .IsNaN(); await Assert.That(Float.Atanh(Float.Zero)) .IsApproximately(Float.Zero, Float.Delta); await Assert.That(Float.Atanh(Float.Half)) @@ -577,7 +584,7 @@ await Assert.That(Float.Cbrt(Float.NegativeZero)) .IsEqualTo(Float.NegativeZero); await Assert.That(Float.Cbrt(Float.NegativeFour)) .IsApproximately(Values.CreateFloat(0xBFFF_965F_EA53_D6E3, 0xC82B_0599_9AB4_3DC5), Float.Delta); - await Assert.That(Float.Cbrt(Float.NaN)).IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Cbrt(Float.NaN)).IsNaN(); } [Test] public async Task CosTest() @@ -591,11 +598,11 @@ await Assert.That(Float.Cos(Float.Pi)) await Assert.That(Float.Cos(Float.Pi * Float.Two)) .IsApproximately(Float.One, Float.Delta); await Assert.That(Float.Cos(Float.NaN)) - .IsBitwiseEquivalentTo(Float.NaN); + .IsNaN(); await Assert.That(Float.Cos(Float.PositiveInfinity)) - .IsBitwiseEquivalentTo(Float.NaN); + .IsNaN(); await Assert.That(Float.Cos(Float.NegativeInfinity)) - .IsBitwiseEquivalentTo(Float.NaN); + .IsNaN(); } [Test] public async Task CoshTest() @@ -625,7 +632,7 @@ await Assert.That(Float.Exp(Float.Zero)) await Assert.That(Float.Exp(Float.PositiveInfinity)) .IsEqualTo(Float.PositiveInfinity); await Assert.That(Float.Exp(Float.NaN)) - .IsBitwiseEquivalentTo(Float.NaN); + .IsNaN(); await Assert.That(Float.Exp(Float.NegativeInfinity)) .IsEqualTo(Float.Zero); } @@ -647,7 +654,7 @@ await Assert.That(Float.Exp10(Float.Zero)) await Assert.That(Float.Exp10(Float.PositiveInfinity)) .IsEqualTo(Float.PositiveInfinity); await Assert.That(Float.Exp10(Float.NaN)) - .IsBitwiseEquivalentTo(Float.NaN); + .IsNaN(); await Assert.That(Float.Exp10(Float.NegativeInfinity)) .IsEqualTo(Float.Zero); } @@ -661,7 +668,7 @@ await Assert.That(Float.Exp2(Float.Zero)) await Assert.That(Float.Exp2(Float.PositiveInfinity)) .IsEqualTo(Float.PositiveInfinity); await Assert.That(Float.Exp2(Float.NaN)) - .IsBitwiseEquivalentTo(Float.NaN); + .IsNaN(); await Assert.That(Float.Exp2(Float.NegativeInfinity)) .IsEqualTo(Float.Zero); } @@ -681,7 +688,7 @@ await Assert.That(Float.Hypot(Float.Hundred, Float.Ten)) await Assert.That(Float.Hypot(Float.PositiveInfinity, Float.NegativeInfinity)) .IsBitwiseEquivalentTo(Float.PositiveInfinity); await Assert.That(Float.Hypot(Float.NaN, Float.NaN)) - .IsBitwiseEquivalentTo(Float.NaN); + .IsNaN(); } [Test] [MethodDataSource(nameof(Ieee754RemainderTestData))] @@ -712,7 +719,7 @@ await Assert.That(Float.Log(Float.One)) await Assert.That(Float.Log(Float.Zero)) .IsEqualTo(Float.NegativeInfinity); await Assert.That(Float.Log(Float.NegativeFive)) - .IsBitwiseEquivalentTo(Float.NaN); + .IsNaN(); } [Test] public async Task LogP1Test() @@ -725,7 +732,7 @@ await Assert.That(Float.LogP1(Float.Zero)) await Assert.That(Float.LogP1(Float.NegativeOne)) .IsBitwiseEquivalentTo(Float.NegativeInfinity); await Assert.That(Float.LogP1(Float.NegativeFive)) - .IsBitwiseEquivalentTo(Float.NaN); + .IsNaN(); } [Test] public async Task Log2Test() @@ -733,7 +740,7 @@ public async Task Log2Test() await Assert.That(Helper.Log2(Float.Four)).IsApproximately(Float.Two, Float.Delta); await Assert.That(Helper.Log2(Float.One)).IsEqualTo(Float.Zero); await Assert.That(Helper.Log2(Float.Zero)).IsEqualTo(Float.NegativeInfinity); - await Assert.That(Helper.Log2(Float.NegativeFive)).IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Helper.Log2(Float.NegativeFive)).IsNaN(); } [Test] public async Task Log10Test() @@ -745,7 +752,7 @@ await Assert.That(Float.Log10(Float.One)) await Assert.That(Float.Log10(Float.Zero)) .IsEqualTo(Float.NegativeInfinity); await Assert.That(Float.Log10(Float.NegativeFive)) - .IsBitwiseEquivalentTo(Float.NaN); + .IsNaN(); } [Test] @@ -760,9 +767,9 @@ await Assert.That(Float.Pow(Float.Two, Float.NegativeFour)) await Assert.That(Float.Pow(anything, Float.Zero)).IsBitwiseEquivalentTo(Float.One); await Assert.That(Float.Pow(anything, Float.One)).IsBitwiseEquivalentTo(anything); - await Assert.That(Float.Pow(anything, Float.NaN)).IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Pow(anything, Float.NaN)).IsNaN(); await Assert.That(Float.Pow(Float.One, Float.NaN)).IsBitwiseEquivalentTo(Float.One); - await Assert.That(Float.Pow(Float.NaN, anything)).IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Pow(Float.NaN, anything)).IsNaN(); await Assert.That(Float.Pow(greaterThanOne, Float.PositiveInfinity)).IsBitwiseEquivalentTo(Float.PositiveInfinity); await Assert.That(Float.Pow(greaterThanOne, Float.NegativeInfinity)).IsBitwiseEquivalentTo(Float.Zero); await Assert.That(Float.Pow(lessThanOne, Float.PositiveInfinity)).IsBitwiseEquivalentTo(Float.Zero); @@ -784,7 +791,7 @@ await Assert.That(Float.Pow(Float.NegativeInfinity, anything)) .IsBitwiseEquivalentTo(Float.Pow(Float.NegativeZero, -anything)); await Assert.That(Float.Pow(-anything, oddInt)) .IsBitwiseEquivalentTo(Float.Pow(Float.NegativeOne, oddInt) * Float.Pow(+anything, oddInt)); - await Assert.That(Float.Pow(-anything, nonInt)).IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Pow(-anything, nonInt)).IsNaN(); } [Test] public async Task ReciprocalEstimateTest() @@ -809,13 +816,13 @@ await Assert.That(Float.RootN(Float.Hundred, 2)) await Assert.That(Float.RootN(Float.Zero, 2)) .IsBitwiseEquivalentTo(Float.Zero); await Assert.That(Float.RootN(Float.NegativeZero, 2)) - .IsBitwiseEquivalentTo(Float.NegativeZero); + .IsBitwiseEquivalentTo(Float.Zero); await Assert.That(Float.RootN(Float.PositiveInfinity, 2)) .IsBitwiseEquivalentTo(Float.PositiveInfinity); await Assert.That(Float.RootN(Float.NegativeFour, 2)) - .IsBitwiseEquivalentTo(Float.NaN); + .IsNaN(); await Assert.That(Float.RootN(Float.NaN, 2)) - .IsBitwiseEquivalentTo(Float.NaN); + .IsNaN(); } [Test] public async Task ScaleBTest() @@ -835,11 +842,11 @@ await Assert.That(Float.ScaleB(Float.Two, -30000)) public async Task SinTest() { await Assert.That(Float.Sin(Float.NaN)) - .IsBitwiseEquivalentTo(Float.NaN); + .IsNaN(); await Assert.That(Float.Sin(Float.PositiveInfinity)) - .IsBitwiseEquivalentTo(Float.NaN); + .IsNaN(); await Assert.That(Float.Sin(Float.NegativeInfinity)) - .IsBitwiseEquivalentTo(Float.NaN); + .IsNaN(); } [Test] public async Task SinCosTest() @@ -883,29 +890,29 @@ await Assert.That(Float.Sqrt(-Float.NegativeZero)) await Assert.That(Float.Sqrt(Float.PositiveInfinity)) .IsBitwiseEquivalentTo(Float.PositiveInfinity); await Assert.That(Float.Sqrt(Float.NegativeFour)) - .IsBitwiseEquivalentTo(Float.NaN); + .IsNaN(); await Assert.That(Float.Sqrt(Float.NaN)) - .IsBitwiseEquivalentTo(Float.NaN); + .IsNaN(); } [Test] public async Task TanTest() { - await Assert.That(Float.Tan(Float.NaN)). - IsBitwiseEquivalentTo(Float.NaN); - await Assert.That(Float.Tan(Float.PositiveInfinity)). - IsBitwiseEquivalentTo(Float.NaN); - await Assert.That(Float.Tan(Float.NegativeInfinity)). - IsBitwiseEquivalentTo(Float.NaN); + await Assert.That(Float.Tan(Float.NaN)) + .IsNaN(); + await Assert.That(Float.Tan(Float.PositiveInfinity)) + .IsNaN(); + await Assert.That(Float.Tan(Float.NegativeInfinity)) + .IsNaN(); } [Test] public async Task TanhTest() { await Assert.That(Float.Tanh(Float.Two)) .IsApproximately(Values.CreateFloat(0x3FFE_ED95_05E1_BC3D, 0x3D33_C432_FC3E_8256), Float.Delta); - await Assert.That(Float.Tanh(Float.NaN)). - IsBitwiseEquivalentTo(Float.NaN); - await Assert.That(Float.Tanh(Float.Zero)). - IsBitwiseEquivalentTo(Float.Zero); + await Assert.That(Float.Tanh(Float.NaN)) + .IsNaN(); + await Assert.That(Float.Tanh(Float.Zero)) + .IsBitwiseEquivalentTo(Float.Zero); } #endregion } \ No newline at end of file From ab4128972ad352296cbd6d15f37a3bd528bde8f9 Mon Sep 17 00:00:00 2001 From: crookseta Date: Sat, 11 Jul 2026 20:09:03 -0500 Subject: [PATCH 50/74] -Added Parsing tests to Octo. -Added MaxValue Test --- .../Data/OctoDataSources.cs | 74 +++++++++++++++++-- .../Data/QuadDataSources.cs | 6 ++ 2 files changed, 74 insertions(+), 6 deletions(-) diff --git a/src/MissingValues.Tests/Data/OctoDataSources.cs b/src/MissingValues.Tests/Data/OctoDataSources.cs index e95aaf7..a6c0fe9 100644 --- a/src/MissingValues.Tests/Data/OctoDataSources.cs +++ b/src/MissingValues.Tests/Data/OctoDataSources.cs @@ -1,5 +1,7 @@ using System.Globalization; +using System.Text; using MissingValues.Tests.Data.Sources; +using MissingValues.Tests.Extensions; namespace MissingValues.Tests.Data; @@ -251,32 +253,92 @@ public class OctoDataSources public static IEnumerable> ParseTestData() { - throw new NotImplementedException(); + yield return () => ("10.0", NumberStyles.Float, CultureInfo.InvariantCulture, Octo.Ten); + yield return () => ("3", NumberStyles.Float, CultureInfo.InvariantCulture, Octo.Three); + yield return () => ("-3", NumberStyles.Float, CultureInfo.InvariantCulture, Octo.NegativeThree); + yield return () => ("2.0", NumberStyles.Float, CultureInfo.InvariantCulture, Octo.Two); + yield return () => ("-2", NumberStyles.Float, CultureInfo.InvariantCulture, Octo.NegativeTwo); + yield return () => ("0", NumberStyles.Float, CultureInfo.InvariantCulture, Octo.Zero); + yield return () => ("-0", NumberStyles.Float, CultureInfo.InvariantCulture, Octo.NegativeZero); + yield return () => ("1.61132571748576047361957211845200501064402387454966951747637125049607183E+78913", NumberStyles.Float, CultureInfo.InvariantCulture, Octo.MaxValue); + yield return () => (NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol, NumberStyles.Float, CultureInfo.InvariantCulture, Octo.PositiveInfinity); + yield return () => (NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol, NumberStyles.Float, CultureInfo.InvariantCulture, Octo.NegativeInfinity); + yield return () => (NumberFormatInfo.CurrentInfo.NaNSymbol, NumberStyles.Float, CultureInfo.InvariantCulture, Octo.NaN); } public static IEnumerable> ParseSpanTestData() { - throw new NotImplementedException(); + yield return () => ("10.0".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.Ten); + yield return () => ("3".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.Three); + yield return () => ("-3".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.NegativeThree); + yield return () => ("2.0".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.Two); + yield return () => ("-2".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.NegativeTwo); + yield return () => ("0".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.Zero); + yield return () => ("-0".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.NegativeZero); + yield return () => ("1.61132571748576047361957211845200501064402387454966951747637125049607183E+78913".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.MaxValue); + yield return () => (NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol.ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.PositiveInfinity); + yield return () => (NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol.ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.NegativeInfinity); + yield return () => (NumberFormatInfo.CurrentInfo.NaNSymbol.ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.NaN); } public static IEnumerable> ParseUtf8TestData() { - throw new NotImplementedException(); + yield return () => ("10.0"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.Ten); + yield return () => ("3"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.Three); + yield return () => ("-3"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.NegativeThree); + yield return () => ("2.0"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.Two); + yield return () => ("-2"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.NegativeTwo); + yield return () => ("0"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.Zero); + yield return () => ("-0"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.NegativeZero); + yield return () => ("1.61132571748576047361957211845200501064402387454966951747637125049607183E+78913"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.MaxValue); + yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.PositiveInfinity); + yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.NegativeInfinity); + yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.CurrentInfo.NaNSymbol), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.NaN); } public static IEnumerable> TryParseTestData() { - throw new NotImplementedException(); + yield return () => ("10.0", NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.Ten); + yield return () => ("3", NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.Three); + yield return () => ("-3", NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.NegativeThree); + yield return () => ("2.0", NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.Two); + yield return () => ("-2", NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.NegativeTwo); + yield return () => ("0", NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.Zero); + yield return () => ("-0", NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.NegativeZero); + yield return () => ("1.61132571748576047361957211845200501064402387454966951747637125049607183E+78913", NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.MaxValue); + yield return () => (NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol, NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.PositiveInfinity); + yield return () => (NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol, NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.NegativeInfinity); + yield return () => (NumberFormatInfo.CurrentInfo.NaNSymbol, NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.NaN); } public static IEnumerable> TryParseSpanTestData() { - throw new NotImplementedException(); + yield return () => ("10.0".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.Ten); + yield return () => ("3".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.Three); + yield return () => ("-3".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.NegativeThree); + yield return () => ("2.0".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.Two); + yield return () => ("-2".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.NegativeTwo); + yield return () => ("0".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.Zero); + yield return () => ("-0".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.NegativeZero); + yield return () => ("1.61132571748576047361957211845200501064402387454966951747637125049607183E+78913".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.MaxValue); + yield return () => (NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol.ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.PositiveInfinity); + yield return () => (NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol.ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.NegativeInfinity); + yield return () => (NumberFormatInfo.CurrentInfo.NaNSymbol.ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.NaN); } public static IEnumerable> TryParseUtf8TestData() { - throw new NotImplementedException(); + yield return () => ("10.0"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.Ten); + yield return () => ("3"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.Three); + yield return () => ("-3"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.NegativeThree); + yield return () => ("2.0"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.Two); + yield return () => ("-2"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.NegativeTwo); + yield return () => ("0"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.Zero); + yield return () => ("-0"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.NegativeZero); + yield return () => ("1.61132571748576047361957211845200501064402387454966951747637125049607183E+78913"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.MaxValue); + yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.PositiveInfinity); + yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.NegativeInfinity); + yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.CurrentInfo.NaNSymbol), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.NaN); } public static IEnumerable> ClampTestData() diff --git a/src/MissingValues.Tests/Data/QuadDataSources.cs b/src/MissingValues.Tests/Data/QuadDataSources.cs index dcb536b..4addc8e 100644 --- a/src/MissingValues.Tests/Data/QuadDataSources.cs +++ b/src/MissingValues.Tests/Data/QuadDataSources.cs @@ -442,6 +442,7 @@ public class QuadDataSources { yield return () => ("2.0", NumberStyles.Float, CultureInfo.InvariantCulture, Quad.Two); yield return () => ("-2", NumberStyles.Float, CultureInfo.InvariantCulture, -Quad.Two); + yield return () => ("1.189731495357231765085759326628007E+4932", NumberStyles.Float, CultureInfo.InvariantCulture, Quad.MaxValue); yield return () => ("0", NumberStyles.Float, CultureInfo.InvariantCulture, Quad.Zero); yield return () => (NumberFormatInfo.InvariantInfo.PositiveInfinitySymbol, NumberStyles.Float, CultureInfo.InvariantCulture, Quad.PositiveInfinity); yield return () => (NumberFormatInfo.InvariantInfo.NegativeInfinitySymbol, NumberStyles.Float, CultureInfo.InvariantCulture, Quad.NegativeInfinity); @@ -460,6 +461,7 @@ public class QuadDataSources { yield return () => ("2.0".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Quad.Two); yield return () => ("-2".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, -Quad.Two); + yield return () => ("1.189731495357231765085759326628007E+4932".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Quad.MaxValue); yield return () => ("0".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Quad.Zero); yield return () => (NumberFormatInfo.InvariantInfo.PositiveInfinitySymbol.ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Quad.PositiveInfinity); yield return () => (NumberFormatInfo.InvariantInfo.NegativeInfinitySymbol.ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Quad.NegativeInfinity); @@ -478,6 +480,7 @@ public class QuadDataSources { yield return () => ("2.0"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Quad.Two); yield return () => ("-2"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, -Quad.Two); + yield return () => ("1.189731495357231765085759326628007E+4932"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Quad.MaxValue); yield return () => ("0"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Quad.Zero); yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.InvariantInfo.PositiveInfinitySymbol), NumberStyles.Float, CultureInfo.InvariantCulture, Quad.PositiveInfinity); yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.InvariantInfo.NegativeInfinitySymbol), NumberStyles.Float, CultureInfo.InvariantCulture, Quad.NegativeInfinity); @@ -496,6 +499,7 @@ public class QuadDataSources { yield return () => ("2.0", NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.Two); yield return () => ("-2", NumberStyles.Float, CultureInfo.InvariantCulture, true, -Quad.Two); + yield return () => ("1.189731495357231765085759326628007E+4932", NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.MaxValue); yield return () => ("0", NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.Zero); yield return () => (NumberFormatInfo.InvariantInfo.PositiveInfinitySymbol, NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.PositiveInfinity); yield return () => (NumberFormatInfo.InvariantInfo.NegativeInfinitySymbol, NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.NegativeInfinity); @@ -515,6 +519,7 @@ public class QuadDataSources { yield return () => ("2.0".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.Two); yield return () => ("-2".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, -Quad.Two); + yield return () => ("1.189731495357231765085759326628007E+4932".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.MaxValue); yield return () => ("0".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.Zero); yield return () => (NumberFormatInfo.InvariantInfo.PositiveInfinitySymbol.ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.PositiveInfinity); yield return () => (NumberFormatInfo.InvariantInfo.NegativeInfinitySymbol.ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.NegativeInfinity); @@ -534,6 +539,7 @@ public class QuadDataSources { yield return () => ("2.0"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.Two); yield return () => ("-2"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, -Quad.Two); + yield return () => ("1.189731495357231765085759326628007E+4932"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.MaxValue); yield return () => ("0"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.Zero); yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.InvariantInfo.PositiveInfinitySymbol), NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.PositiveInfinity); yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.InvariantInfo.NegativeInfinitySymbol), NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.NegativeInfinity); From 1ddbb4196e86ed01a42e66bc37574534d262e9b0 Mon Sep 17 00:00:00 2001 From: crookseta Date: Sun, 12 Jul 2026 11:46:10 -0500 Subject: [PATCH 51/74] Added Tests for Octo --- .../Data/OctoDataSources.cs | 496 ++++++++++++++--- .../Data/QuadDataSources.cs | 25 +- .../IFloatingPointIeee754DataSource.cs | 2 +- .../Numerics/OctoGenericMathTests.cs | 526 +++++++++++++++++- .../Numerics/QuadGenericMathTests.cs | 70 +-- 5 files changed, 980 insertions(+), 139 deletions(-) diff --git a/src/MissingValues.Tests/Data/OctoDataSources.cs b/src/MissingValues.Tests/Data/OctoDataSources.cs index a6c0fe9..852e2db 100644 --- a/src/MissingValues.Tests/Data/OctoDataSources.cs +++ b/src/MissingValues.Tests/Data/OctoDataSources.cs @@ -18,237 +18,427 @@ public class OctoDataSources { public static IEnumerable> op_AdditionTestData() { - throw new NotImplementedException(); - } - - public static IEnumerable> op_CheckedAdditionTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> op_CheckedDecrementTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> op_CheckedIncrementTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> op_CheckedMultiplyTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> op_CheckedSubtractionTestData() - { - throw new NotImplementedException(); + yield return () => (Octo.One, Octo.One, Octo.Two); + yield return () => (Octo.One, Octo.NegativeOne, Octo.Zero); + yield return () => (Octo.One, Octo.NegativeTwo, Octo.NegativeOne); + yield return () => (Octo.One, Octo.Four, Octo.Five); + yield return () => (Octo.Three, Octo.Two, Octo.Five); + yield return () => (Octo.SmallestSubnormal, Octo.GreatestSubnormal, Values.CreateFloat(0x0000_1000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); + yield return () => (Octo.PositiveInfinity, Octo.One, Octo.PositiveInfinity); + yield return () => (Octo.NegativeInfinity, Octo.One, Octo.NegativeInfinity); + yield return () => (Octo.PositiveInfinity, Octo.PositiveInfinity, Octo.PositiveInfinity); + yield return () => (Octo.NegativeInfinity, Octo.NegativeInfinity, Octo.NegativeInfinity); } public static IEnumerable> op_DecrementTestData() { - throw new NotImplementedException(); + yield return () => (Octo.NegativeOne, Octo.NegativeTwo); + yield return () => (Octo.Zero, Octo.NegativeOne); + yield return () => (Octo.One, Octo.Zero); + yield return () => (Octo.Two, Octo.One); } public static IEnumerable> op_DivisionTestData() { - throw new NotImplementedException(); + yield return () => (Octo.Ten, Octo.Ten, Octo.One); + yield return () => (Octo.Hundred, Octo.Ten, Octo.Ten); + yield return () => (Octo.NegativeThousand, Octo.Ten, Octo.NegativeHundred); + yield return () => (Octo.Zero, Octo.Zero, Octo.NaN); + yield return () => (Octo.One, Octo.Zero, Octo.PositiveInfinity); + yield return () => (Octo.NegativeOne, Octo.Zero, Octo.NegativeInfinity); + yield return () => (Octo.PositiveInfinity, Octo.PositiveInfinity, Octo.NaN); + yield return () => (Octo.NegativeInfinity, Octo.NegativeInfinity, Octo.NaN); } public static IEnumerable> op_IncrementTestData() { - throw new NotImplementedException(); + yield return () => (Octo.NegativeTwo, Octo.NegativeOne); + yield return () => (Octo.NegativeOne, Octo.Zero); + yield return () => (Octo.Zero, Octo.One); + yield return () => (Octo.One, Octo.Two); } public static IEnumerable> op_ModulusTestData() { - throw new NotImplementedException(); + yield return () => (Octo.Two, Octo.Four, Octo.Two); + yield return () => (Octo.Half, Octo.Four, Octo.Half); + yield return () => (Octo.Four, Octo.Half, Octo.Zero); + yield return () => (Octo.NegativeFour, Octo.Half, Octo.NegativeZero); + yield return () => (Octo.NegativeFour, Octo.Thousand, Octo.NegativeFour); } public static IEnumerable> op_MultiplyTestData() { - throw new NotImplementedException(); + yield return () => (Octo.One, Octo.One, Octo.One); + yield return () => (Octo.One, Octo.NegativeOne, Octo.NegativeOne); + yield return () => (Octo.Ten, Octo.Ten, Octo.Hundred); + yield return () => (Octo.NegativeHundred, Octo.Ten, Octo.NegativeThousand); + yield return () => (Octo.NegativeTen, Octo.Hundred, Octo.NegativeThousand); + yield return () => (Octo.Zero, Octo.NegativeThousand, Octo.NegativeZero); + yield return () => (Octo.Zero, Octo.PositiveInfinity, Octo.NaN); + yield return () => (Octo.NegativeZero, Octo.NegativeInfinity, Octo.NaN); + yield return () => (Octo.PositiveInfinity, Octo.Zero, Octo.NaN); + yield return () => (Octo.NegativeInfinity, Octo.NegativeZero, Octo.NaN); } public static IEnumerable> op_SubtractionTestData() { - throw new NotImplementedException(); + yield return () => (Octo.One, Octo.One, Octo.Zero); + yield return () => (Octo.One, Octo.NegativeOne, Octo.Two); + yield return () => (Octo.One, Octo.Two, Octo.NegativeOne); + yield return () => (Octo.SmallestSubnormal, Octo.GreatestSubnormal, Values.CreateFloat(0x8000_0FFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE)); + yield return () => (Octo.PositiveInfinity, Octo.PositiveInfinity, Octo.NaN); + yield return () => (Octo.NegativeInfinity, Octo.NegativeInfinity, Octo.NaN); } public static IEnumerable> op_UnaryNegationTestData() { - throw new NotImplementedException(); - } - - public static IEnumerable> op_CheckedUnaryNegationTestData() - { - throw new NotImplementedException(); + yield return () => (Octo.Zero, Octo.NegativeZero); + yield return () => (Octo.One, Octo.NegativeOne); + yield return () => (Octo.Two, Octo.NegativeTwo); + yield return () => (Octo.Ten, Octo.NegativeTen); + yield return () => (Octo.Hundred, Octo.NegativeHundred); + yield return () => (Octo.Thousand, Octo.NegativeThousand); } public static IEnumerable> op_BitwiseAndTestData() { - throw new NotImplementedException(); + yield return () => (Octo.Zero, Octo.One, Octo.Zero); + yield return () => (Octo.One, Octo.One, Octo.One); + yield return () => (Values.CreateFloat(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), Values.CreateFloat(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001), Values.CreateFloat(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001)); } public static IEnumerable> op_BitwiseOrTestData() { - throw new NotImplementedException(); + yield return () => (Octo.Zero, Octo.One, Octo.One); + yield return () => (Octo.One, Octo.One, Octo.One); + yield return () => (Values.CreateFloat(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), Values.CreateFloat(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001), Values.CreateFloat(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); } public static IEnumerable> op_BitwiseXorTestData() { - throw new NotImplementedException(); + yield return () => (Octo.Zero, Octo.One, Octo.One); + yield return () => (Octo.One, Octo.One, Octo.Zero); + yield return () => (Values.CreateFloat(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), Values.CreateFloat(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001), Values.CreateFloat(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE)); } public static IEnumerable> op_OnesComplementTestData() { - throw new NotImplementedException(); + yield return () => (Octo.Zero, Values.CreateFloat(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); + yield return () => (Values.CreateFloat(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001), Values.CreateFloat(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE)); + yield return () => (Values.CreateFloat(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF), Octo.Zero); } public static IEnumerable> op_EqualityTestData() { - throw new NotImplementedException(); + yield return () => (Octo.One, Octo.One, true); + yield return () => (Octo.Two, Octo.Two, true); + yield return () => (Octo.NaN, Octo.NaN, false); + yield return () => (Octo.GreatestSubnormal, Octo.GreatestSubnormal, true); } public static IEnumerable> op_InequalityTestData() { - throw new NotImplementedException(); + yield return () => (Octo.One, Octo.One, false); + yield return () => (Octo.NaN, Octo.NaN, true); + yield return () => (Octo.NegativeTwo, Octo.Two, true); + yield return () => (Octo.SmallestSubnormal, Octo.GreatestSubnormal, true); } public static IEnumerable> op_GreaterThanOrEqualTestData() { - throw new NotImplementedException(); + yield return () => (Octo.One, Octo.One, true); + yield return () => (Octo.Two, Octo.Two, true); + yield return () => (Octo.NaN, Octo.NaN, false); + yield return () => (Octo.GreatestSubnormal, Octo.GreatestSubnormal, true); + yield return () => (Octo.Two, Octo.One, true); + yield return () => (Octo.Thousand, Octo.NegativeThousand, true); + yield return () => (Octo.NegativeQuarter, Octo.NegativeHalf, true); + yield return () => (Octo.Quarter, Octo.Half, false); + yield return () => (Octo.Ten, Octo.Hundred, false); + yield return () => (Octo.GreaterThanOneSmallest, Octo.One, true); } public static IEnumerable> op_GreaterThanTestData() { - throw new NotImplementedException(); + yield return () => (Octo.Two, Octo.One, true); + yield return () => (Octo.Thousand, Octo.NegativeThousand, true); + yield return () => (Octo.NegativeQuarter, Octo.NegativeHalf, true); + yield return () => (Octo.Quarter, Octo.Half, false); + yield return () => (Octo.Ten, Octo.Hundred, false); + yield return () => (Octo.GreaterThanOneSmallest, Octo.One, true); } public static IEnumerable> op_LessThanOrEqualTestData() { - throw new NotImplementedException(); + yield return () => (Octo.One, Octo.One, true); + yield return () => (Octo.Two, Octo.Two, true); + yield return () => (Octo.NaN, Octo.NaN, false); + yield return () => (Octo.GreatestSubnormal, Octo.GreatestSubnormal, true); + yield return () => (Octo.Zero, Octo.One, true); + yield return () => (Octo.Zero, Octo.Quarter, true); + yield return () => (Octo.NegativeThousand, Octo.Thousand, true); + yield return () => (Octo.NegativeOne, Octo.NegativeThree, false); + yield return () => (Octo.Hundred, Octo.Two, false); + yield return () => (Octo.LessThanOneLargest, Octo.One, true); } public static IEnumerable> op_LessThanTestData() { - throw new NotImplementedException(); + yield return () => (Octo.Zero, Octo.One, true); + yield return () => (Octo.Zero, Octo.Quarter, true); + yield return () => (Octo.NegativeThousand, Octo.Thousand, true); + yield return () => (Octo.NegativeOne, Octo.NegativeThree, false); + yield return () => (Octo.Hundred, Octo.Two, false); + yield return () => (Octo.LessThanOneLargest, Octo.One, true); } public static IEnumerable> AbsTestData() { - throw new NotImplementedException(); + yield return () => (Octo.One, Octo.One); + yield return () => (Octo.NegativeOne, Octo.One); + yield return () => (Octo.NegativeHalf, Octo.Half); + yield return () => (Octo.NegativeQuarter, Octo.Quarter); + yield return () => (Octo.NegativeZero, Octo.Zero); + yield return () => (Octo.NegativeInfinity, Octo.PositiveInfinity); } public static IEnumerable> IsCanonicalTestData() { - throw new NotImplementedException(); + yield return () => (Octo.One, true); } public static IEnumerable> IsComplexNumberTestData() { - throw new NotImplementedException(); + yield return () => (Octo.One, false); } public static IEnumerable> IsEvenIntegerTestData() { - throw new NotImplementedException(); + yield return () => (Octo.Half, false); + yield return () => (Octo.One, false); + yield return () => (Octo.Two, true); + yield return () => (Octo.Three, false); + yield return () => (Octo.Four, true); + yield return () => (Octo.NegativeOne, false); + yield return () => (Octo.NegativeTwo, true); + yield return () => (Octo.NegativeThree, false); + yield return () => (Octo.NegativeFour, true); } public static IEnumerable> IsFiniteTestData() { - throw new NotImplementedException(); + yield return () => (Octo.One, true); + yield return () => (Octo.NegativeOne, true); + yield return () => (Octo.NaN, false); + yield return () => (Octo.PositiveInfinity, false); + yield return () => (Octo.NegativeInfinity, false); } public static IEnumerable> IsImaginaryNumberTestData() { - throw new NotImplementedException(); + yield return () => (Octo.One, false); } public static IEnumerable> IsInfinityTestData() { - throw new NotImplementedException(); + yield return () => (Octo.One, false); + yield return () => (Octo.NegativeOne, false); + yield return () => (Octo.NaN, false); + yield return () => (Octo.PositiveInfinity, true); + yield return () => (Octo.NegativeInfinity, true); } public static IEnumerable> IsIntegerTestData() { - throw new NotImplementedException(); + yield return () => (Octo.Quarter, false); + yield return () => (Octo.Half, false); + yield return () => (Octo.Thousand, true); + yield return () => (Octo.One, true); + yield return () => (Octo.GreaterThanOneSmallest, false); + yield return () => (Octo.SmallestSubnormal, false); + yield return () => (Octo.NegativeOne, true); + yield return () => (Octo.NegativeThousand, true); + yield return () => (Octo.NegativeHalf, false); + yield return () => (Octo.NegativeQuarter, false); + yield return () => (Octo.NaN, false); + yield return () => (Octo.PositiveInfinity, false); + yield return () => (Octo.NegativeInfinity, false); } public static IEnumerable> IsNaNTestData() { - throw new NotImplementedException(); + yield return () => (Octo.One, false); + yield return () => (Octo.NegativeOne, false); + yield return () => (Octo.NaN, true); + yield return () => (Octo.PositiveInfinity, false); + yield return () => (Octo.NegativeInfinity, false); } public static IEnumerable> IsNegativeTestData() { - throw new NotImplementedException(); + yield return () => (Octo.One, false); + yield return () => (Octo.GreatestSubnormal, false); + yield return () => (Octo.PositiveInfinity, false); + yield return () => (Octo.NaN, true); + yield return () => (Octo.NegativeOne, true); + yield return () => (Octo.NegativeInfinity, true); } public static IEnumerable> IsNegativeInfinityTestData() { - throw new NotImplementedException(); + yield return () => (Octo.One, false); + yield return () => (Octo.NegativeOne, false); + yield return () => (Octo.NaN, false); + yield return () => (Octo.PositiveInfinity, false); + yield return () => (Octo.NegativeInfinity, true); } public static IEnumerable> IsNormalTestData() { - throw new NotImplementedException(); + yield return () => (Octo.GreatestSubnormal, false); + yield return () => (Octo.SmallestSubnormal, false); + yield return () => (Octo.MaxValue, true); + yield return () => (Octo.MinValue, true); + yield return () => (Octo.One, true); } public static IEnumerable> IsOddIntegerTestData() { - throw new NotImplementedException(); + yield return () => (Octo.Half, false); + yield return () => (Octo.One, true); + yield return () => (Octo.Two, false); + yield return () => (Octo.Three, true); + yield return () => (Octo.Four, false); + yield return () => (Octo.NegativeOne, true); + yield return () => (Octo.NegativeTwo, false); + yield return () => (Octo.NegativeThree, true); + yield return () => (Octo.NegativeFour, false); } public static IEnumerable> IsPositiveTestData() { - throw new NotImplementedException(); + yield return () => (Octo.One, true); + yield return () => (Octo.GreatestSubnormal, true); + yield return () => (Octo.PositiveInfinity, true); + yield return () => (Octo.NaN, false); + yield return () => (Octo.NegativeOne, false); + yield return () => (Octo.NegativeInfinity, false); } public static IEnumerable> IsPositiveInfinityTestData() { - throw new NotImplementedException(); + yield return () => (Octo.One, false); + yield return () => (Octo.NegativeOne, false); + yield return () => (Octo.NaN, false); + yield return () => (Octo.PositiveInfinity, true); + yield return () => (Octo.NegativeInfinity, false); } public static IEnumerable> IsRealNumberTestData() { - throw new NotImplementedException(); + yield return () => (Octo.GreatestSubnormal, true); + yield return () => (Octo.MaxValue, true); + yield return () => (Octo.NegativeThousand, true); + yield return () => (Octo.PositiveInfinity, true); + yield return () => (Octo.NegativeInfinity, true); + yield return () => (Octo.NaN, false); } public static IEnumerable> IsSubnormalTestData() { - throw new NotImplementedException(); + yield return () => (Octo.GreatestSubnormal, true); + yield return () => (Octo.SmallestSubnormal, true); + yield return () => (Octo.MaxValue, false); + yield return () => (Octo.MinValue, false); + yield return () => (Octo.One, false); } public static IEnumerable> IsZeroTestData() { - throw new NotImplementedException(); + yield return () => (Octo.One, false); + yield return () => (Octo.Epsilon, false); + yield return () => (Octo.Zero, true); + yield return () => (Octo.NegativeZero, true); } public static IEnumerable> MaxMagnitudeTestData() { - throw new NotImplementedException(); + yield return () => (Octo.NegativeInfinity, Octo.One, Octo.NegativeInfinity); + yield return () => (Octo.MinValue, Octo.One, Octo.MinValue); + yield return () => (Octo.NegativeOne, Octo.One, Octo.One); + yield return () => (-Octo.GreatestSubnormal, Octo.One, Octo.One); + yield return () => (-Octo.Epsilon, Octo.One, Octo.One); + yield return () => (Octo.NegativeZero, Octo.One, Octo.One); + yield return () => (Octo.NaN, Octo.One, Octo.NaN); + yield return () => (Octo.Zero, Octo.One, Octo.One); + yield return () => (Octo.Epsilon, Octo.One, Octo.One); + yield return () => (Octo.GreatestSubnormal, Octo.One, Octo.One); + yield return () => (Octo.One, Octo.One, Octo.One); + yield return () => (Octo.MaxValue, Octo.One, Octo.MaxValue); + yield return () => (Octo.PositiveInfinity, Octo.One, Octo.PositiveInfinity); } public static IEnumerable> MaxMagnitudeNumberTestData() { - throw new NotImplementedException(); + yield return () => (Octo.NegativeInfinity, Octo.One, Octo.NegativeInfinity); + yield return () => (Octo.MinValue, Octo.One, Octo.MinValue); + yield return () => (Octo.NegativeOne, Octo.One, Octo.One); + yield return () => (-Octo.GreatestSubnormal, Octo.One, Octo.One); + yield return () => (-Octo.Epsilon, Octo.One, Octo.One); + yield return () => (Octo.NegativeZero, Octo.One, Octo.One); + yield return () => (Octo.NaN, Octo.One, Octo.One); + yield return () => (Octo.Zero, Octo.One, Octo.One); + yield return () => (Octo.Epsilon, Octo.One, Octo.One); + yield return () => (Octo.GreatestSubnormal, Octo.One, Octo.One); + yield return () => (Octo.One, Octo.One, Octo.One); + yield return () => (Octo.MaxValue, Octo.One, Octo.MaxValue); + yield return () => (Octo.PositiveInfinity, Octo.One, Octo.PositiveInfinity); } public static IEnumerable> MinMagnitudeTestData() { - throw new NotImplementedException(); + yield return () => (Octo.NegativeInfinity, Octo.One, Octo.One); + yield return () => (Octo.MinValue, Octo.One, Octo.One); + yield return () => (Octo.NegativeOne, Octo.One, Octo.NegativeOne); + yield return () => (-Octo.GreatestSubnormal, Octo.One, -Octo.GreatestSubnormal); + yield return () => (-Octo.Epsilon, Octo.One, -Octo.Epsilon); + yield return () => (Octo.NegativeZero, Octo.One, Octo.NegativeZero); + yield return () => (Octo.NaN, Octo.One, Octo.NaN); + yield return () => (Octo.Zero, Octo.One, Octo.Zero); + yield return () => (Octo.Epsilon, Octo.One, Octo.Epsilon); + yield return () => (Octo.GreatestSubnormal, Octo.One, Octo.GreatestSubnormal); + yield return () => (Octo.One, Octo.One, Octo.One); + yield return () => (Octo.MaxValue, Octo.One, Octo.One); + yield return () => (Octo.PositiveInfinity, Octo.One, Octo.One); } public static IEnumerable> MinMagnitudeNumberTestData() { - throw new NotImplementedException(); + yield return () => (Octo.NegativeInfinity, Octo.One, Octo.One); + yield return () => (Octo.MinValue, Octo.One, Octo.One); + yield return () => (Octo.NegativeOne, Octo.One, Octo.NegativeOne); + yield return () => (-Octo.GreatestSubnormal, Octo.One, -Octo.GreatestSubnormal); + yield return () => (-Octo.Epsilon, Octo.One, -Octo.Epsilon); + yield return () => (Octo.NegativeZero, Octo.One, Octo.NegativeZero); + yield return () => (Octo.NaN, Octo.One, Octo.One); + yield return () => (Octo.Zero, Octo.One, Octo.Zero); + yield return () => (Octo.Epsilon, Octo.One, Octo.Epsilon); + yield return () => (Octo.GreatestSubnormal, Octo.One, Octo.GreatestSubnormal); + yield return () => (Octo.One, Octo.One, Octo.One); + yield return () => (Octo.MaxValue, Octo.One, Octo.One); + yield return () => (Octo.PositiveInfinity, Octo.One, Octo.One); } public static IEnumerable> MultiplyAddEstimateTestData() { - throw new NotImplementedException(); + yield return () => (Octo.One, Octo.One, Octo.One, Octo.Two); + yield return () => (Octo.Ten, Octo.Ten, Octo.Zero, Octo.Hundred); + yield return () => (Octo.Five, Octo.Zero, Octo.Five, Octo.Five); + yield return () => (Octo.Half, Octo.Two, Octo.Two, Octo.Three); + yield return () => (Octo.Two, Octo.Four, Octo.Two, Octo.Ten); + yield return () => (Octo.Ten, Octo.Half, Octo.Five, Octo.Ten); + yield return () => (Values.CreateFloat(0xBFFF_F400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), Octo.One, Octo.Two, Values.CreateFloat(0x3FFF_E800_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); } public static IEnumerable> ParseTestData() @@ -343,42 +533,105 @@ public class OctoDataSources public static IEnumerable> ClampTestData() { - throw new NotImplementedException(); + yield return () => (Octo.NegativeInfinity, Octo.One, Octo.Thousand, Octo.One); + yield return () => (Octo.MinValue, Octo.One, Octo.Thousand, Octo.One); + yield return () => (Octo.NegativeOne, Octo.One, Octo.Thousand, Octo.One); + yield return () => (-Octo.GreatestSubnormal, Octo.One, Octo.Thousand, Octo.One); + yield return () => (-Octo.Epsilon, Octo.One, Octo.Thousand, Octo.One); + yield return () => (Octo.NaN, Octo.One, Octo.Thousand, Octo.NaN); + yield return () => (Octo.Zero, Octo.One, Octo.Thousand, Octo.One); + yield return () => (Octo.Epsilon, Octo.One, Octo.Thousand, Octo.One); + yield return () => (Octo.GreatestSubnormal, Octo.One, Octo.Thousand, Octo.One); + yield return () => (Octo.One, Octo.One, Octo.Thousand, Octo.One); + yield return () => (Octo.MaxValue, Octo.One, Octo.Thousand, Octo.Thousand); + yield return () => (Octo.PositiveInfinity, Octo.One, Octo.Thousand, Octo.Thousand); } public static IEnumerable> CopySignTestData() { - throw new NotImplementedException(); + yield return () => (Octo.NegativeOne, Octo.One, Octo.One); + yield return () => (Octo.One, Octo.NegativeOne, Octo.NegativeOne); + yield return () => (Octo.Thousand, Octo.NegativeOne, Octo.NegativeThousand); + yield return () => (Octo.NegativeHundred, Octo.NegativeOne, Octo.NegativeHundred); } public static IEnumerable> MaxTestData() { - throw new NotImplementedException(); + yield return () => (Octo.NegativeInfinity, Octo.One, Octo.One); + yield return () => (Octo.MinValue, Octo.One, Octo.One); + yield return () => (Octo.NegativeOne, Octo.One, Octo.One); + yield return () => (-Octo.GreatestSubnormal, Octo.One, Octo.One); + yield return () => (-Octo.Epsilon, Octo.One, Octo.One); + yield return () => (Octo.NegativeZero, Octo.One, Octo.One); + yield return () => (Octo.NaN, Octo.One, Octo.NaN); + yield return () => (Octo.Zero, Octo.One, Octo.One); + yield return () => (Octo.One, Octo.One, Octo.One); + yield return () => (Octo.MaxValue, Octo.One, Octo.MaxValue); + yield return () => (Octo.PositiveInfinity, Octo.One, Octo.PositiveInfinity); } public static IEnumerable> MaxNumberTestData() { - throw new NotImplementedException(); + yield return () => (Octo.NegativeInfinity, Octo.One, Octo.One); + yield return () => (Octo.MinValue, Octo.One, Octo.One); + yield return () => (Octo.NegativeOne, Octo.One, Octo.One); + yield return () => (-Octo.GreatestSubnormal, Octo.One, Octo.One); + yield return () => (-Octo.Epsilon, Octo.One, Octo.One); + yield return () => (Octo.NegativeZero, Octo.One, Octo.One); + yield return () => (Octo.NaN, Octo.One, Octo.One); + yield return () => (Octo.Zero, Octo.One, Octo.One); + yield return () => (Octo.One, Octo.One, Octo.One); + yield return () => (Octo.MaxValue, Octo.One, Octo.MaxValue); + yield return () => (Octo.PositiveInfinity, Octo.One, Octo.PositiveInfinity); } public static IEnumerable> MinTestData() { - throw new NotImplementedException(); + yield return () => (Octo.NegativeInfinity, Octo.One, Octo.NegativeInfinity); + yield return () => (Octo.MinValue, Octo.One, Octo.MinValue); + yield return () => (Octo.NegativeOne, Octo.One, Octo.NegativeOne); + yield return () => (-Octo.GreatestSubnormal, Octo.One, -Octo.GreatestSubnormal); + yield return () => (-Octo.Epsilon, Octo.One, -Octo.Epsilon); + yield return () => (Octo.NegativeZero, Octo.One, Octo.NegativeZero); + yield return () => (Octo.NaN, Octo.One, Octo.NaN); + yield return () => (Octo.Zero, Octo.One, Octo.Zero); + yield return () => (Octo.One, Octo.One, Octo.One); + yield return () => (Octo.MaxValue, Octo.One, Octo.One); + yield return () => (Octo.PositiveInfinity, Octo.One, Octo.One); } public static IEnumerable> MinNumberTestData() { - throw new NotImplementedException(); + yield return () => (Octo.NegativeInfinity, Octo.One, Octo.NegativeInfinity); + yield return () => (Octo.MinValue, Octo.One, Octo.MinValue); + yield return () => (Octo.NegativeOne, Octo.One, Octo.NegativeOne); + yield return () => (-Octo.GreatestSubnormal, Octo.One, -Octo.GreatestSubnormal); + yield return () => (-Octo.Epsilon, Octo.One, -Octo.Epsilon); + yield return () => (Octo.NegativeZero, Octo.One, Octo.NegativeZero); + yield return () => (Octo.NaN, Octo.One, Octo.One); + yield return () => (Octo.Zero, Octo.One, Octo.Zero); + yield return () => (Octo.One, Octo.One, Octo.One); + yield return () => (Octo.MaxValue, Octo.One, Octo.One); + yield return () => (Octo.PositiveInfinity, Octo.One, Octo.One); } public static IEnumerable> SignTestData() { - throw new NotImplementedException(); + yield return () => (Octo.One, 1); + yield return () => (Octo.NegativeOne, -1); + yield return () => (Octo.Ten, 1); + yield return () => (Octo.NegativeTen, -1); + yield return () => (Octo.Zero, 0); + yield return () => (Octo.NegativeZero, 0); } public static IEnumerable> IsPow2TestData() { - throw new NotImplementedException(); + yield return () => (Octo.Half, true); + yield return () => (Octo.One, true); + yield return () => (Octo.Two, true); + yield return () => (Octo.Three, false); + yield return () => (Octo.NegativeTwo, false); } public static IEnumerable> Log2TestData() @@ -398,7 +651,50 @@ public class OctoDataSources public static IEnumerable> RoundTestData() { - throw new NotImplementedException(); + yield return () => (Values.CreateFloat(0x4000_0C00_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.AwayFromZero, Octo.Four); + yield return () => (Values.CreateFloat(0x4000_0666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.AwayFromZero, Octo.Three); + yield return () => (Values.CreateFloat(0x4000_0400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.AwayFromZero, Octo.Three); + yield return () => (Values.CreateFloat(0x4000_00CC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.AwayFromZero, Octo.Two); + yield return () => (Values.CreateFloat(0xC000_00CC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.AwayFromZero, Octo.NegativeTwo); + yield return () => (Values.CreateFloat(0xC000_0400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.AwayFromZero, Octo.NegativeThree); + yield return () => (Values.CreateFloat(0xC000_0666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.AwayFromZero, Octo.NegativeThree); + yield return () => (Values.CreateFloat(0xC000_0C00_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.AwayFromZero, Octo.NegativeFour); + + yield return () => (Values.CreateFloat(0x4000_0C00_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToEven, Octo.Four); + yield return () => (Values.CreateFloat(0x4000_0666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToEven, Octo.Three); + yield return () => (Values.CreateFloat(0x4000_0400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToEven, Octo.Two); + yield return () => (Values.CreateFloat(0x4000_00CC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToEven, Octo.Two); + yield return () => (Values.CreateFloat(0xC000_00CC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToEven, Octo.NegativeTwo); + yield return () => (Values.CreateFloat(0xC000_0400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToEven, Octo.NegativeTwo); + yield return () => (Values.CreateFloat(0xC000_0666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToEven, Octo.NegativeThree); + yield return () => (Values.CreateFloat(0xC000_0C00_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToEven, Octo.NegativeFour); + + yield return () => (Values.CreateFloat(0x4000_0C00_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToNegativeInfinity, Octo.Three); + yield return () => (Values.CreateFloat(0x4000_0666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToNegativeInfinity, Octo.Two); + yield return () => (Values.CreateFloat(0x4000_0400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToNegativeInfinity, Octo.Two); + yield return () => (Values.CreateFloat(0x4000_00CC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToNegativeInfinity, Octo.Two); + yield return () => (Values.CreateFloat(0xC000_00CC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToNegativeInfinity, Octo.NegativeThree); + yield return () => (Values.CreateFloat(0xC000_0400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToNegativeInfinity, Octo.NegativeThree); + yield return () => (Values.CreateFloat(0xC000_0666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToNegativeInfinity, Octo.NegativeThree); + yield return () => (Values.CreateFloat(0xC000_0C00_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToNegativeInfinity, Octo.NegativeFour); + + yield return () => (Values.CreateFloat(0x4000_0C00_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToPositiveInfinity, Octo.Four); + yield return () => (Values.CreateFloat(0x4000_0666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToPositiveInfinity, Octo.Three); + yield return () => (Values.CreateFloat(0x4000_0400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToPositiveInfinity, Octo.Three); + yield return () => (Values.CreateFloat(0x4000_00CC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToPositiveInfinity, Octo.Three); + yield return () => (Values.CreateFloat(0xC000_00CC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToPositiveInfinity, Octo.NegativeTwo); + yield return () => (Values.CreateFloat(0xC000_0400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToPositiveInfinity, Octo.NegativeTwo); + yield return () => (Values.CreateFloat(0xC000_0666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToPositiveInfinity, Octo.NegativeTwo); + yield return () => (Values.CreateFloat(0xC000_0C00_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToPositiveInfinity, Octo.NegativeThree); + + yield return () => (Values.CreateFloat(0x4000_0C00_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToZero, Octo.Three); + yield return () => (Values.CreateFloat(0x4000_0666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToZero, Octo.Two); + yield return () => (Values.CreateFloat(0x4000_0400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToZero, Octo.Two); + yield return () => (Values.CreateFloat(0x4000_00CC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToZero, Octo.Two); + yield return () => (Values.CreateFloat(0xC000_00CC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCC, 0xCCCC_CCCC_CCCC_CCCD), 0, MidpointRounding.ToZero, Octo.NegativeTwo); + yield return () => (Values.CreateFloat(0xC000_0400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToZero, Octo.NegativeTwo); + yield return () => (Values.CreateFloat(0xC000_0666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666, 0x6666_6666_6666_6666), 0, MidpointRounding.ToZero, Octo.NegativeTwo); + yield return () => (Values.CreateFloat(0xC000_0C00_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 0, MidpointRounding.ToZero, Octo.NegativeThree); } public static IEnumerable> TruncateTestData() @@ -458,27 +754,49 @@ public class OctoDataSources public static IEnumerable> BitDecrementTestData() { - throw new NotImplementedException(); + yield return () => (Octo.One, Values.CreateFloat(0x3FFFEFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => (Octo.NegativeOne, Values.CreateFloat(0xBFFFF00000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000001)); + yield return () => (Octo.Zero, -Octo.Epsilon); + yield return () => (Octo.NegativeInfinity, Octo.NegativeInfinity); + yield return () => (Octo.PositiveInfinity, Octo.MaxValue); } public static IEnumerable> BitIncrementTestData() { - throw new NotImplementedException(); + yield return () => (Octo.One, Values.CreateFloat(0x3FFFF00000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000001)); + yield return () => (Octo.NegativeOne, Values.CreateFloat(0xBFFFEFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => (Octo.NegativeZero, Octo.Epsilon); + yield return () => (Octo.NegativeInfinity, Octo.MinValue); + yield return () => (Octo.PositiveInfinity, Octo.PositiveInfinity); } public static IEnumerable> FusedMultiplyAddTestData() { - throw new NotImplementedException(); + yield return () => (Octo.One, Octo.One, Octo.One, Octo.Two); + yield return () => (Octo.Ten, Octo.Ten, Octo.Zero, Octo.Hundred); + yield return () => (Octo.Five, Octo.Zero, Octo.Five, Octo.Five); + yield return () => (Octo.Half, Octo.Two, Octo.Two, Octo.Three); + yield return () => (Octo.Two, Octo.Four, Octo.Two, Octo.Ten); + yield return () => (Octo.Ten, Octo.Half, Octo.Five, Octo.Ten); + yield return () => (Values.CreateFloat(0xBFFF_F400_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), Octo.One, Octo.Two, Values.CreateFloat(0x3FFF_E800_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); } public static IEnumerable> Ieee754RemainderTestData() { - throw new NotImplementedException(); + yield return () => (Octo.Ten, Octo.Three, Octo.One); + yield return () => (Octo.Ten, Octo.Two, Octo.Zero); + yield return () => (Octo.NegativeTen, Octo.Three, Octo.NegativeOne); + yield return () => (Octo.NegativeTen, Octo.Two, Octo.Zero); + yield return () => (Octo.NegativeTen, Octo.Zero, Octo.NaN); } - public static IEnumerable> ILogBTestData() + public static IEnumerable> ILogBTestData() { - throw new NotImplementedException(); + yield return () => (Values.CreateFloat(0x4000_9000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 10); + yield return () => (Values.CreateFloat(0x4003_F000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 64); + yield return () => (Values.CreateFloat(0x4007_F000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 128); + yield return () => (Values.CreateFloat(0xC003_F000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), 64); + yield return () => (Octo.Zero, int.MinValue); } public static IEnumerable> LerpTestData() @@ -498,7 +816,11 @@ public class OctoDataSources public static IEnumerable> ScaleBTestData() { - throw new NotImplementedException(); + yield return () => (Octo.Two, 3, Values.CreateFloat(0x4000_3000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); + yield return () => (Octo.NegativeTwo, 3, Values.CreateFloat(0xC000_3000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); + yield return () => (Octo.Zero, 6, Octo.Zero); + yield return () => (Octo.Two, 300000, Octo.PositiveInfinity); + yield return () => (Octo.Two, -300000, Octo.Zero); } public static IEnumerable> ConvertToCheckedByteTestData() { diff --git a/src/MissingValues.Tests/Data/QuadDataSources.cs b/src/MissingValues.Tests/Data/QuadDataSources.cs index 4addc8e..04c8815 100644 --- a/src/MissingValues.Tests/Data/QuadDataSources.cs +++ b/src/MissingValues.Tests/Data/QuadDataSources.cs @@ -778,12 +778,20 @@ public class QuadDataSources public static IEnumerable> BitDecrementTestData() { - throw new NotImplementedException(); + yield return () => (Quad.One, Values.CreateFloat(0x3FFEFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => (Quad.NegativeOne, Values.CreateFloat(0xBFFF000000000000, 0x0000000000000001)); + yield return () => (Quad.Zero, -Quad.Epsilon); + yield return () => (Quad.NegativeInfinity, Quad.NegativeInfinity); + yield return () => (Quad.PositiveInfinity, Quad.MaxValue); } public static IEnumerable> BitIncrementTestData() { - throw new NotImplementedException(); + yield return () => (Quad.One, Values.CreateFloat(0x3FFF000000000000, 0x0000000000000001)); + yield return () => (Quad.NegativeOne, Values.CreateFloat(0xBFFEFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); + yield return () => (Quad.NegativeZero, Quad.Epsilon); + yield return () => (Quad.NegativeInfinity, Quad.MinValue); + yield return () => (Quad.PositiveInfinity, Quad.PositiveInfinity); } public static IEnumerable> FusedMultiplyAddTestData() @@ -803,9 +811,12 @@ public class QuadDataSources yield return () => (Quad.NegativeTen, Quad.Zero, Quad.NaN); } - public static IEnumerable> ILogBTestData() + public static IEnumerable> ILogBTestData() { - throw new NotImplementedException(); + yield return () => (Values.CreateFloat(0x4009_0000_0000_0000, 0x0000_0000_0000_0000), 10); + yield return () => (Values.CreateFloat(0x403F_0000_0000_0000, 0x0000_0000_0000_0000), 64); + yield return () => (Values.CreateFloat(0xC03F_0000_0000_0000, 0x0000_0000_0000_0000), 64); + yield return () => (Quad.Zero, int.MinValue); } public static IEnumerable> LerpTestData() @@ -825,7 +836,11 @@ public class QuadDataSources public static IEnumerable> ScaleBTestData() { - throw new NotImplementedException(); + yield return () => (Quad.Two, 3, Values.CreateFloat(0x4003_0000_0000_0000, 0x0000_0000_0000_0000)); + yield return () => (Quad.NegativeTwo, 3, Values.CreateFloat(0xC003_0000_0000_0000, 0x0000_0000_0000_0000)); + yield return () => (Quad.Zero, 6, Quad.Zero); + yield return () => (Quad.Two, 300000, Quad.PositiveInfinity); + yield return () => (Quad.Two, -300000, Quad.Zero); } public static IEnumerable> ConvertToCheckedByteTestData() diff --git a/src/MissingValues.Tests/Data/Sources/IFloatingPointIeee754DataSource.cs b/src/MissingValues.Tests/Data/Sources/IFloatingPointIeee754DataSource.cs index c2fe941..d6abd22 100644 --- a/src/MissingValues.Tests/Data/Sources/IFloatingPointIeee754DataSource.cs +++ b/src/MissingValues.Tests/Data/Sources/IFloatingPointIeee754DataSource.cs @@ -11,7 +11,7 @@ public interface IFloatingPointIeee754DataSource static abstract IEnumerable> BitIncrementTestData(); static abstract IEnumerable> FusedMultiplyAddTestData(); static abstract IEnumerable> Ieee754RemainderTestData(); - static abstract IEnumerable> ILogBTestData(); + static abstract IEnumerable> ILogBTestData(); static abstract IEnumerable> LerpTestData(); static abstract IEnumerable> ReciprocalEstimateTestData(); static abstract IEnumerable> ReciprocalSqrtEstimateTestData(); diff --git a/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs b/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs index 4895b42..8c96422 100644 --- a/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs @@ -1,15 +1,539 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; - +using MissingValues.Tests.Data; +using MissingValues.Tests.Extensions; using static MissingValues.Tests.Data.OctoDataSources; +using Float = MissingValues.Octo; using DataSources = MissingValues.Tests.Data.OctoDataSources; namespace MissingValues.Tests.Numerics; public class OctoGenericMathTests { + #region Operators + [Test] + [MethodDataSource(nameof(op_AdditionTestData))] + public async Task op_AdditionTest(Float left, Float right, Float expected) + { + var result = left + right; + + await Assert.That(result).IsEqualTo(expected).And.IsBitwiseEquivalentTo(expected); + } + [Test] + [MethodDataSource(nameof(op_IncrementTestData))] + public async Task op_IncrementTest(Float value, Float expected) + { + var result = ++value; + + using (Assert.Multiple()) + { + await Assert.That(result).IsEqualTo(expected).And.IsBitwiseEquivalentTo(expected); + await Assert.That(result).IsEqualTo(value).And.IsBitwiseEquivalentTo(value); + } + } + [Test] + [MethodDataSource(nameof(op_SubtractionTestData))] + public async Task op_SubtractionTest(Float left, Float right, Float expected) + { + var result = left - right; + + if (Float.IsNaN(expected)) + { + await Assert.That(result).IsNaN(); + } + else + { + await Assert.That(result).IsEqualTo(expected).And.IsBitwiseEquivalentTo(expected); + } + } + [Test] + [MethodDataSource(nameof(op_DecrementTestData))] + public async Task op_DecrementTest(Float value, Float expected) + { + var result = --value; + + using (Assert.Multiple()) + { + await Assert.That(result).IsEqualTo(expected).And.IsBitwiseEquivalentTo(expected); + await Assert.That(result).IsEqualTo(value).And.IsBitwiseEquivalentTo(value); + } + } + [Test] + [MethodDataSource(nameof(op_MultiplyTestData))] + public async Task op_MultiplyTest(Float left, Float right, Float expected) + { + var result = left * right; + + await Assert.That(result).IsEqualTo(expected).And.IsBitwiseEquivalentTo(expected); + } + [Test] + [MethodDataSource(nameof(op_DivisionTestData))] + public async Task op_DivisionTest(Float left, Float right, Float expected) + { + var result = left / right; + + await Assert.That(result).IsEqualTo(expected).And.IsBitwiseEquivalentTo(expected); + } + [Test] + [MethodDataSource(nameof(op_ModulusTestData))] + public async Task op_ModulusTest(Float left, Float right, Float expected) + { + var result = left % right; + + await Assert.That(result).IsEqualTo(expected).And.IsBitwiseEquivalentTo(expected); + } + [Test] + [MethodDataSource(nameof(op_OnesComplementTestData))] + public async Task op_OnesComplementTest(Float value, Float expected) + { + var result = Helper.OnesComplement(value); + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(op_BitwiseAndTestData))] + public async Task op_BitwiseAndTest(Float left, Float right, Float expected) + { + var result = Helper.And(left, right); + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(op_BitwiseOrTestData))] + public async Task op_BitwiseOrTest(Float left, Float right, Float expected) + { + var result = Helper.Or(left, right); + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(op_BitwiseXorTestData))] + public async Task op_BitwiseXorTest(Float left, Float right, Float expected) + { + var result = Helper.Xor(left, right); + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(op_EqualityTestData))] + public async Task op_EqualityTest(Float left, Float right, bool expected) + { + var result = left == right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(op_InequalityTestData))] + public async Task op_InequalityTest(Float left, Float right, bool expected) + { + var result = left != right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(op_LessThanTestData))] + public async Task op_LessThanTest(Float left, Float right, bool expected) + { + var result = left < right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(op_LessThanOrEqualTestData))] + public async Task op_LessThanOrEqualTest(Float left, Float right, bool expected) + { + var result = left <= right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(op_GreaterThanTestData))] + public async Task op_GreaterThanTest(Float left, Float right, bool expected) + { + var result = left > right; + + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(op_GreaterThanOrEqualTestData))] + public async Task op_GreaterThanOrEqualTest(Float left, Float right, bool expected) + { + var result = left >= right; + + await Assert.That(result).IsEqualTo(expected); + } + #endregion + + #region INumberBase + [Test] + [MethodDataSource(nameof(AbsTestData))] + public async Task AbsTest(Quad value, Quad expected) + { + Quad result = Helper.Abs(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsCanonicalTestData))] + public async Task IsCanonicalTest(Quad value, bool expected) + { + bool result = Helper.IsCanonical(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsComplexNumberTestData))] + public async Task IsComplexNumberTest(Quad value, bool expected) + { + bool result = Helper.IsComplexNumber(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsEvenIntegerTestData))] + public async Task IsEvenIntegerTest(Quad value, bool expected) + { + bool result = Helper.IsEvenInteger(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsFiniteTestData))] + public async Task IsFiniteTest(Quad value, bool expected) + { + bool result = Helper.IsFinite(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsImaginaryNumberTestData))] + public async Task IsImaginaryNumberTest(Quad value, bool expected) + { + bool result = Helper.IsImaginaryNumber(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsInfinityTestData))] + public async Task IsInfinityTest(Quad value, bool expected) + { + bool result = Helper.IsInfinity(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsIntegerTestData))] + public async Task IsIntegerTest(Quad value, bool expected) + { + bool result = Helper.IsInteger(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsNaNTestData))] + public async Task IsNaNTest(Quad value, bool expected) + { + bool result = Helper.IsNaN(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsNegativeTestData))] + public async Task IsNegativeTest(Quad value, bool expected) + { + bool result = Helper.IsNegative(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsNegativeInfinityTestData))] + public async Task IsNegativeInfinityTest(Quad value, bool expected) + { + bool result = Helper.IsNegativeInfinity(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsNormalTestData))] + public async Task IsNormalTest(Quad value, bool expected) + { + bool result = Helper.IsNormal(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsOddIntegerTestData))] + public async Task IsOddIntegerTest(Quad value, bool expected) + { + bool result = Helper.IsOddInteger(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsPositiveTestData))] + public async Task IsPositiveTest(Quad value, bool expected) + { + bool result = Helper.IsPositive(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsPositiveInfinityTestData))] + public async Task IsPositiveInfinityTest(Quad value, bool expected) + { + bool result = Helper.IsPositiveInfinity(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsRealNumberTestData))] + public async Task IsRealNumberTest(Quad value, bool expected) + { + bool result = Helper.IsRealNumber(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsSubnormalTestData))] + public async Task IsSubnormalTest(Quad value, bool expected) + { + bool result = Helper.IsSubnormal(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(IsZeroTestData))] + public async Task IsZeroTest(Quad value, bool expected) + { + bool result = Helper.IsZero(value); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(MaxMagnitudeTestData))] + public async Task MaxMagnitudeTest(Quad x, Quad y, Quad expected) + { + var result = Helper.MaxMagnitude(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(MaxMagnitudeNumberTestData))] + public async Task MaxMagnitudeNumberTest(Quad x, Quad y, Quad expected) + { + var result = Helper.MaxMagnitudeNumber(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(MinMagnitudeTestData))] + public async Task MinMagnitudeTest(Quad x, Quad y, Quad expected) + { + var result = Helper.MinMagnitude(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(MinMagnitudeNumberTestData))] + public async Task MinMagnitudeNumberTest(Quad x, Quad y, Quad expected) + { + var result = Helper.MinMagnitudeNumber(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(MultiplyAddEstimateTestData))] + public async Task MultiplyAddEstimateTest(Quad left, Quad right, Quad addend, Quad expected) + { + var result = Helper.MultiplyAddEstimate(left, right, addend); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(ParseTestData))] + public async Task ParseTest(string s, NumberStyles style, IFormatProvider? provider, Quad expected) + { + var result = Helper.Parse(s, style, provider); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(ParseSpanTestData))] + public async Task ParseTest(char[] s, NumberStyles style, IFormatProvider? provider, Quad expected) + { + var result = Helper.Parse(s, style, provider); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(ParseUtf8TestData))] + public async Task ParseTest(byte[] utf8Text, NumberStyles style, IFormatProvider? provider, Quad expected) + { + var result = Helper.Parse(utf8Text, style, provider); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(TryParseTestData))] + public async Task TryParseTest(string s, NumberStyles style, IFormatProvider? provider, bool expected, Quad expectedValue) + { + var success = Helper.TryParse(s, style, provider, out var result); + using (Assert.Multiple()) + { + await Assert.That(success).IsEqualTo(expected); + await Assert.That(result).IsEqualTo(expectedValue); + } + } + [Test] + [MethodDataSource(nameof(TryParseSpanTestData))] + public async Task TryParseTest(char[] s, NumberStyles style, IFormatProvider? provider, bool expected, Quad expectedValue) + { + var success = Helper.TryParse(s, style, provider, out var result); + using (Assert.Multiple()) + { + await Assert.That(success).IsEqualTo(expected); + await Assert.That(result).IsEqualTo(expectedValue); + } + } + [Test] + [MethodDataSource(nameof(TryParseUtf8TestData))] + public async Task TryParseTest(byte[] utf8Text, NumberStyles style, IFormatProvider? provider, bool expected, Quad expectedValue) + { + var success = Helper.TryParse(utf8Text, style, provider, out var result); + using (Assert.Multiple()) + { + await Assert.That(success).IsEqualTo(expected); + await Assert.That(result).IsEqualTo(expectedValue); + } + } + #endregion + + #region INumber + [Test] + [MethodDataSource(nameof(ClampTestData))] + public async Task ClampTest(Float value, Float min, Float max, Float expected) + { + if (min > max) + { + await Assert.That(() => Helper.Clamp(value, min, max)).Throws(); + } + else + { + var result = Helper.Clamp(value, min, max); + await Assert.That(result).IsEqualTo(expected); + } + } + [Test] + [MethodDataSource(nameof(CopySignTestData))] + public async Task CopySignTest(Float value, Float sign, Float expected) + { + var result = Helper.CopySign(value, sign); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(MaxTestData))] + public async Task MaxTest(Float x, Float y, Float expected) + { + var result = Helper.Max(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(MaxNumberTestData))] + public async Task MaxNumberTest(Float x, Float y, Float expected) + { + var result = Helper.MaxNumber(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(MinTestData))] + public async Task MinTest(Float x, Float y, Float expected) + { + var result = Helper.Min(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(MinNumberTestData))] + public async Task MinNumberTest(Float x, Float y, Float expected) + { + var result = Helper.MinNumber(x, y); + await Assert.That(result).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(SignTestData))] + public async Task SignTest(Float value, int expected) + { + var result = Helper.Sign(value); + await Assert.That(result).IsEqualTo(expected); + } + #endregion + + #region IBinaryNumber + [Test] + [MethodDataSource(nameof(IsPow2TestData))] + public async Task IsPow2Test(Float value, bool expected) + { + var result = Helper.IsPow2(value); + await Assert.That(result).IsEqualTo(expected); + } + #endregion + + #region IFloatingPoint + [Test] + [MethodDataSource(nameof(RoundTestData))] + public async Task RoundTest(Float value, int digits, MidpointRounding midpointRounding, Float expected) + { + var result = Float.Round(value, digits, midpointRounding); + await Assert.That(result).IsEqualTo(expected); + } + #endregion + + #region IFloatingPointIeee754 + [Test] + [MethodDataSource(nameof(BitDecrementTestData))] + public async Task BitDecrementTest(Float value, Float expected) + { + await Assert.That(Float.BitDecrement(value)).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(BitIncrementTestData))] + public async Task BitIncrementTest(Float value, Float expected) + { + await Assert.That(Float.BitIncrement(value)).IsEqualTo(expected); + } + [Test] + [MethodDataSource(nameof(FusedMultiplyAddTestData))] + public async Task FusedMultiplyAddTest(Float left, Float right, Float addend, Float result) + { + await Assert.That(Float.FusedMultiplyAdd(left, right, addend)) + .IsEqualTo(result).And + .IsBitwiseEquivalentTo(result); + } + [Test] + [MethodDataSource(nameof(Ieee754RemainderTestData))] + public async Task IeeeRemainderTest(Float left, Float right, Float result) + { + if (Float.IsNaN(result)) + { + await Assert.That(Float.Ieee754Remainder(left, right)) + .IsNaN(); + } + else + { + await Assert.That(Float.Ieee754Remainder(left, right)) + .IsBitwiseEquivalentTo(result); + } + } + + [Test] + [MethodDataSource(nameof(ILogBTestData))] + public async Task ILogBTest(Float x, int result) + { + await Assert.That(Float.ILogB(x)).IsEqualTo(result); + } + [Test] + public async Task ReciprocalEstimateTest() + { + await Assert.That(Float.ReciprocalEstimate(Float.Two)).IsEqualTo(Float.Half); + await Assert.That(Float.ReciprocalEstimate(Float.Four)) + .IsApproximately(Values.CreateFloat(0x3FFF_D000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000), Float.Delta); + } + [Test] + [MethodDataSource(nameof(ScaleBTestData))] + public async Task ScaleBTest(Float x, int n, Float result) + { + await Assert.That(Float.ScaleB(x, n)) + .IsBitwiseEquivalentTo(result); + } + + [Test] + public async Task SqrtTest() + { + await Assert.That(Float.Sqrt(Float.Zero)).EqualTo(Float.Zero); + await Assert.That(Float.Sqrt(Float.NegativeZero)).EqualTo(Float.NegativeZero); + await Assert.That(Float.Sqrt(Float.PositiveInfinity)).EqualTo(Float.PositiveInfinity); + await Assert.That(Float.Sqrt(Float.NegativeFour)).IsNaN(); + await Assert.That(Float.Sqrt(Float.NaN)).IsNaN(); + + await Assert.That(Float.Sqrt(Float.Hundred)).IsApproximately(Float.Ten, Float.Delta); + } + #endregion } \ No newline at end of file diff --git a/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs b/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs index d4ffb76..00fc4f5 100644 --- a/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs @@ -546,32 +546,16 @@ await Assert.That(Float.Atanh(Float.Half)) .IsApproximately(Values.CreateFloat(0x3FFE_193E_A7AA_D030, 0xA976_BA8D_B53A_D6E3), Float.Delta); } [Test] - public async Task BitDecrementTest() - { - await Assert.That(Float.BitDecrement(Float.One)) - .IsEqualTo(Values.CreateFloat(0x3FFEFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); - await Assert.That(Float.BitDecrement(Float.NegativeOne)) - .IsEqualTo(Values.CreateFloat(0xBFFF000000000000, 0x0000000000000001)); - await Assert.That(Float.BitDecrement(Float.Zero)) - .IsEqualTo(-Float.Epsilon); - await Assert.That(Float.BitDecrement(Float.NegativeInfinity)) - .IsEqualTo(Float.NegativeInfinity); - await Assert.That(Float.BitDecrement(Float.PositiveInfinity)) - .IsEqualTo(Float.MaxValue); + [MethodDataSource(nameof(BitDecrementTestData))] + public async Task BitDecrementTest(Float value, Float expected) + { + await Assert.That(Float.BitDecrement(value)).IsEqualTo(expected); } [Test] - public async Task BitIncrementTest() + [MethodDataSource(nameof(BitIncrementTestData))] + public async Task BitIncrementTest(Float value, Float expected) { - await Assert.That(Float.BitIncrement(Float.One)) - .IsEqualTo(Values.CreateFloat(0x3FFF000000000000, 0x0000000000000001)); - await Assert.That(Float.BitIncrement(Float.NegativeOne)) - .IsEqualTo(Values.CreateFloat(0xBFFEFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF)); - await Assert.That(Float.BitIncrement(Float.NegativeZero)) - .IsEqualTo(Float.Epsilon); - await Assert.That(Float.BitIncrement(Float.NegativeInfinity)) - .IsEqualTo(Float.MinValue); - await Assert.That(Float.BitIncrement(Float.PositiveInfinity)) - .IsEqualTo(Float.PositiveInfinity); + await Assert.That(Float.BitIncrement(value)).IsEqualTo(expected); } [Test] public async Task CbrtTest() @@ -694,20 +678,23 @@ await Assert.That(Float.Hypot(Float.NaN, Float.NaN)) [MethodDataSource(nameof(Ieee754RemainderTestData))] public async Task IeeeRemainderTest(Float left, Float right, Float result) { - await Assert.That(Float.Ieee754Remainder(left, right)) - .IsBitwiseEquivalentTo(result); + if (Float.IsNaN(result)) + { + await Assert.That(Float.Ieee754Remainder(left, right)) + .IsNaN(); + } + else + { + await Assert.That(Float.Ieee754Remainder(left, right)) + .IsBitwiseEquivalentTo(result); + } } + [Test] - public async Task ILogBTest() + [MethodDataSource(nameof(ILogBTestData))] + public async Task ILogBTest(Float x, int result) { - await Assert.That(Float.ILogB(Values.CreateFloat(0x4009_0000_0000_0000, 0x0000_0000_0000_0000))) - .IsEqualTo(10); - await Assert.That(Float.ILogB(Values.CreateFloat(0x403F_0000_0000_0000, 0x0000_0000_0000_0000))) - .IsEqualTo(64); - await Assert.That(Float.ILogB(Values.CreateFloat(0xC03F_0000_0000_0000, 0x0000_0000_0000_0000))) - .IsEqualTo(64); - await Assert.That(Float.ILogB(Float.Zero)) - .IsEqualTo(int.MinValue); + await Assert.That(Float.ILogB(x)).IsEqualTo(result); } [Test] public async Task LogTest() @@ -825,18 +812,11 @@ await Assert.That(Float.RootN(Float.NaN, 2)) .IsNaN(); } [Test] - public async Task ScaleBTest() + [MethodDataSource(nameof(ScaleBTestData))] + public async Task ScaleBTest(Float x, int n, Float result) { - await Assert.That(Float.ScaleB(Float.Two, 3)) - .IsBitwiseEquivalentTo(Values.CreateFloat(0x4003_0000_0000_0000, 0x0000_0000_0000_0000)); - await Assert.That(Float.ScaleB(Float.NegativeTwo, 3)) - .IsBitwiseEquivalentTo(Values.CreateFloat(0xC003_0000_0000_0000, 0x0000_0000_0000_0000)); - await Assert.That(Float.ScaleB(Float.Zero, 6)) - .IsBitwiseEquivalentTo(Float.Zero); - await Assert.That(Float.ScaleB(Float.Two, 30000)) - .IsBitwiseEquivalentTo(Float.PositiveInfinity); - await Assert.That(Float.ScaleB(Float.Two, -30000)) - .IsBitwiseEquivalentTo(Float.Zero); + await Assert.That(Float.ScaleB(x, n)) + .IsBitwiseEquivalentTo(result); } [Test] public async Task SinTest() From 2259b21f9aad284bb166f067e5887364f183dccd Mon Sep 17 00:00:00 2001 From: crookseta Date: Sun, 12 Jul 2026 16:50:39 -0500 Subject: [PATCH 52/74] Added test for Formatting. --- .../Data/Int256DataSources.cs | 57 ++++++++++++++ .../Data/Int512DataSources.cs | 74 +++++++++++++++++++ .../Data/OctoDataSources.cs | 53 +++++++++++++ .../Data/QuadDataSources.cs | 53 +++++++++++++ .../Data/Sources/INumberBaseDataSource.cs | 1 + .../Data/UInt256DataSources.cs | 5 ++ .../Data/UInt512DataSources.cs | 6 ++ src/MissingValues.Tests/Helper.cs | 21 ++++++ .../Numerics/Int256GenericMathTests.cs | 6 ++ .../Numerics/Int512GenericMathTests.cs | 6 ++ .../Numerics/OctoGenericMathTests.cs | 6 ++ .../Numerics/QuadGenericMathTests.cs | 6 ++ .../Numerics/UInt256GenericMathTests.cs | 6 ++ .../Numerics/UInt512GenericMathTests.cs | 6 ++ 14 files changed, 306 insertions(+) diff --git a/src/MissingValues.Tests/Data/Int256DataSources.cs b/src/MissingValues.Tests/Data/Int256DataSources.cs index 72fd53f..6869808 100644 --- a/src/MissingValues.Tests/Data/Int256DataSources.cs +++ b/src/MissingValues.Tests/Data/Int256DataSources.cs @@ -563,6 +563,14 @@ public class Int256DataSources NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0b1111111111111111111111111111111111111111111111111111111111111111, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); yield return () => ("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + + yield return () => ("2.5E10", NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, 25_000_000_000); + yield return () => ("1E10", NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, 10_000_000_000); + yield return () => ("1.000", NumberStyles.Number, CultureInfo.InvariantCulture, Int256.One); + yield return () => ("1,000.0", NumberStyles.Number, CultureInfo.InvariantCulture, 1_000); + yield return () => ("1,000,000", NumberStyles.Number, CultureInfo.InvariantCulture, 1_000_000); + yield return () => ("1,000,000,000.00", NumberStyles.Number, CultureInfo.InvariantCulture, 1_000_000_000); + yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968.000", NumberStyles.Number, NumberFormatInfo.InvariantInfo, Int256.MinValue); } public static IEnumerable> ParseSpanTestData() @@ -612,6 +620,14 @@ public class Int256DataSources NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0b1111111111111111111111111111111111111111111111111111111111111111, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); yield return () => ("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + + yield return () => ("2.5E10".ToCharArray(), NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, 25_000_000_000); + yield return () => ("1E10".ToCharArray(), NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, 10_000_000_000); + yield return () => ("1.000".ToCharArray(), NumberStyles.Number, CultureInfo.InvariantCulture, Int256.One); + yield return () => ("1,000.0".ToCharArray(), NumberStyles.Number, CultureInfo.InvariantCulture, 1_000); + yield return () => ("1,000,000".ToCharArray(), NumberStyles.Number, CultureInfo.InvariantCulture, 1_000_000); + yield return () => ("1,000,000,000.00".ToCharArray(), NumberStyles.Number, CultureInfo.InvariantCulture, 1_000_000_000); + yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968.000".ToCharArray(), NumberStyles.Number, NumberFormatInfo.InvariantInfo, Int256.MinValue); } public static IEnumerable> ParseUtf8TestData() @@ -661,6 +677,14 @@ public class Int256DataSources NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0b1111111111111111111111111111111111111111111111111111111111111111, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); yield return () => ("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int256(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + + yield return () => ("2.5E10"u8.ToArray(), NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, 25_000_000_000); + yield return () => ("1E10"u8.ToArray(), NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, 10_000_000_000); + yield return () => ("1.000"u8.ToArray(), NumberStyles.Number, CultureInfo.InvariantCulture, Int256.One); + yield return () => ("1,000.0"u8.ToArray(), NumberStyles.Number, CultureInfo.InvariantCulture, 1_000); + yield return () => ("1,000,000"u8.ToArray(), NumberStyles.Number, CultureInfo.InvariantCulture, 1_000_000); + yield return () => ("1,000,000,000.00"u8.ToArray(), NumberStyles.Number, CultureInfo.InvariantCulture, 1_000_000_000); + yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968.000"u8.ToArray(), NumberStyles.Number, CultureInfo.InvariantCulture, Int256.MinValue); } public static IEnumerable> TryParseTestData() @@ -716,6 +740,15 @@ public class Int256DataSources NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int256(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); yield return () => ("111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, false, default); + + yield return () => ("1E200", NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, false, default); + yield return () => ("2.5E10", NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, true, 25_000_000_000); + yield return () => ("1E10", NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, true, 10_000_000_000); + yield return () => ("1.000", NumberStyles.Number, CultureInfo.InvariantCulture, true, Int256.One); + yield return () => ("1,000.0", NumberStyles.Number, CultureInfo.InvariantCulture, true, 1_000); + yield return () => ("1,000,000", NumberStyles.Number, CultureInfo.InvariantCulture, true, 1_000_000); + yield return () => ("1,000,000,000.00", NumberStyles.Number, CultureInfo.InvariantCulture, true, 1_000_000_000); + yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968.000", NumberStyles.Number, CultureInfo.InvariantCulture, true, Int256.MinValue); } public static IEnumerable> TryParseSpanTestData() @@ -771,6 +804,15 @@ public class Int256DataSources NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int256(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); yield return () => ("111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, false, default); + + yield return () => ("1E200".ToCharArray(), NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, false, default); + yield return () => ("2.5E10".ToCharArray(), NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, true, 25_000_000_000); + yield return () => ("1E10".ToCharArray(), NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, true, 10_000_000_000); + yield return () => ("1.000".ToCharArray(), NumberStyles.Number, CultureInfo.InvariantCulture, true, Int256.One); + yield return () => ("1,000.0".ToCharArray(), NumberStyles.Number, CultureInfo.InvariantCulture, true, 1_000); + yield return () => ("1,000,000".ToCharArray(), NumberStyles.Number, CultureInfo.InvariantCulture, true, 1_000_000); + yield return () => ("1,000,000,000.00".ToCharArray(), NumberStyles.Number, CultureInfo.InvariantCulture, true, 1_000_000_000); + yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968.000".ToCharArray(), NumberStyles.Number, CultureInfo.InvariantCulture, true, Int256.MinValue); } public static IEnumerable> TryParseUtf8TestData() @@ -826,6 +868,21 @@ public class Int256DataSources NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int256(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); yield return () => ("111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, false, default); + + yield return () => ("1E200"u8.ToArray(), NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, false, default); + yield return () => ("2.5E10"u8.ToArray(), NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, true, 25_000_000_000); + yield return () => ("1E10"u8.ToArray(), NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, true, 10_000_000_000); + yield return () => ("1.000"u8.ToArray(), NumberStyles.Number, CultureInfo.InvariantCulture, true, Int256.One); + yield return () => ("1,000.0"u8.ToArray(), NumberStyles.Number, CultureInfo.InvariantCulture, true, 1_000); + yield return () => ("1,000,000"u8.ToArray(), NumberStyles.Number, CultureInfo.InvariantCulture, true, 1_000_000); + yield return () => ("1,000,000,000.00"u8.ToArray(), NumberStyles.Number, CultureInfo.InvariantCulture, true, 1_000_000_000); + yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968.000"u8.ToArray(), NumberStyles.Number, CultureInfo.InvariantCulture, true, Int256.MinValue); + } + + public static IEnumerable> ToStringTestData() + { + yield return () => (Int256.MaxValue, "e25", CultureInfo.InvariantCulture, "5.7896044618658097711785493e+76"); + yield return () => (Int256.MinValue, "e25", CultureInfo.InvariantCulture, "-5.7896044618658097711785493e+76"); } public static IEnumerable> ClampTestData() diff --git a/src/MissingValues.Tests/Data/Int512DataSources.cs b/src/MissingValues.Tests/Data/Int512DataSources.cs index 5238be7..b831c26 100644 --- a/src/MissingValues.Tests/Data/Int512DataSources.cs +++ b/src/MissingValues.Tests/Data/Int512DataSources.cs @@ -701,6 +701,16 @@ public class Int512DataSources NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + + yield return () => ("2.5E10", NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, 25_000_000_000); + yield return () => ("1E10", NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, 10_000_000_000); + yield return () => ("1.000", NumberStyles.Number, CultureInfo.InvariantCulture, Int512.One); + yield return () => ("1,000.0", NumberStyles.Number, CultureInfo.InvariantCulture, 1_000); + yield return () => ("1,000,000", NumberStyles.Number, CultureInfo.InvariantCulture, 1_000_000); + yield return () => ("1,000,000,000.00", NumberStyles.Number, CultureInfo.InvariantCulture, 1_000_000_000); + yield return () => ("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048.000", NumberStyles.Number, NumberFormatInfo.InvariantInfo, Int512.MinValue); + yield return () => ("-6,703,903,964,971,298,549,787,012,499,102,923,063,739,682,910,296,196,688,861,780,721,860,882,015,036,773,488,400,937,149,083,451,713,845,015,929,093,243,025,426,876,941,405,973,284,973,216,824,503,042,048", NumberStyles.Number, NumberFormatInfo.InvariantInfo, Int512.MinValue); + yield return () => ("$-6,703,903,964,971,298,549,787,012,499,102,923,063,739,682,910,296,196,688,861,780,721,860,882,015,036,773,488,400,937,149,083,451,713,845,015,929,093,243,025,426,876,941,405,973,284,973,216,824,503,042,048.00", NumberStyles.Currency, Helper.CustomInfo, Int512.MinValue); } public static IEnumerable> ParseSpanTestData() @@ -763,6 +773,16 @@ public class Int512DataSources NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + + yield return () => ("2.5E10".ToCharArray(), NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, 25_000_000_000); + yield return () => ("1E10".ToCharArray(), NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, 10_000_000_000); + yield return () => ("1.000".ToCharArray(), NumberStyles.Number, CultureInfo.InvariantCulture, Int512.One); + yield return () => ("1,000.0".ToCharArray(), NumberStyles.Number, CultureInfo.InvariantCulture, 1_000); + yield return () => ("1,000,000".ToCharArray(), NumberStyles.Number, CultureInfo.InvariantCulture, 1_000_000); + yield return () => ("1,000,000,000.00".ToCharArray(), NumberStyles.Number, CultureInfo.InvariantCulture, 1_000_000_000); + yield return () => ("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048.000".ToCharArray(), NumberStyles.Number, NumberFormatInfo.InvariantInfo, Int512.MinValue); + yield return () => ("-6,703,903,964,971,298,549,787,012,499,102,923,063,739,682,910,296,196,688,861,780,721,860,882,015,036,773,488,400,937,149,083,451,713,845,015,929,093,243,025,426,876,941,405,973,284,973,216,824,503,042,048".ToCharArray(), NumberStyles.Number, NumberFormatInfo.InvariantInfo, Int512.MinValue); + yield return () => ("$-6,703,903,964,971,298,549,787,012,499,102,923,063,739,682,910,296,196,688,861,780,721,860,882,015,036,773,488,400,937,149,083,451,713,845,015,929,093,243,025,426,876,941,405,973,284,973,216,824,503,042,048.00".ToCharArray(), NumberStyles.Currency, Helper.CustomInfo, Int512.MinValue); } public static IEnumerable> ParseUtf8TestData() @@ -825,6 +845,16 @@ public class Int512DataSources NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0, 0, 0, 0, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); yield return () => ("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, new Int512(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); + + yield return () => ("2.5E10"u8.ToArray(), NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, 25_000_000_000); + yield return () => ("1E10"u8.ToArray(), NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, 10_000_000_000); + yield return () => ("1.000"u8.ToArray(), NumberStyles.Number, CultureInfo.InvariantCulture, Int512.One); + yield return () => ("1,000.0"u8.ToArray(), NumberStyles.Number, CultureInfo.InvariantCulture, 1_000); + yield return () => ("1,000,000"u8.ToArray(), NumberStyles.Number, CultureInfo.InvariantCulture, 1_000_000); + yield return () => ("1,000,000,000.00"u8.ToArray(), NumberStyles.Number, CultureInfo.InvariantCulture, 1_000_000_000); + yield return () => ("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048.000"u8.ToArray(), NumberStyles.Number, NumberFormatInfo.InvariantInfo, Int512.MinValue); + yield return () => ("-6,703,903,964,971,298,549,787,012,499,102,923,063,739,682,910,296,196,688,861,780,721,860,882,015,036,773,488,400,937,149,083,451,713,845,015,929,093,243,025,426,876,941,405,973,284,973,216,824,503,042,048"u8.ToArray(), NumberStyles.Number, NumberFormatInfo.InvariantInfo, Int512.MinValue); + yield return () => ("$-6,703,903,964,971,298,549,787,012,499,102,923,063,739,682,910,296,196,688,861,780,721,860,882,015,036,773,488,400,937,149,083,451,713,845,015,929,093,243,025,426,876,941,405,973,284,973,216,824,503,042,048.00"u8.ToArray(), NumberStyles.Currency, Helper.CustomInfo, Int512.MinValue); } public static IEnumerable> TryParseTestData() @@ -893,6 +923,17 @@ public class Int512DataSources NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); yield return () => ("111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, false, default); + + yield return () => ("1E200", NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, false, default); + yield return () => ("2.5E10", NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, true, 25_000_000_000); + yield return () => ("1E10", NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, true, 10_000_000_000); + yield return () => ("1.000", NumberStyles.Number, CultureInfo.InvariantCulture, true, Int512.One); + yield return () => ("1,000.0", NumberStyles.Number, CultureInfo.InvariantCulture, true, 1_000); + yield return () => ("1,000,000", NumberStyles.Number, CultureInfo.InvariantCulture, true, 1_000_000); + yield return () => ("1,000,000,000.00", NumberStyles.Number, CultureInfo.InvariantCulture, true, 1_000_000_000); + yield return () => ("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048.000", NumberStyles.Number, NumberFormatInfo.InvariantInfo, true, Int512.MinValue); + yield return () => ("-6,703,903,964,971,298,549,787,012,499,102,923,063,739,682,910,296,196,688,861,780,721,860,882,015,036,773,488,400,937,149,083,451,713,845,015,929,093,243,025,426,876,941,405,973,284,973,216,824,503,042,048", NumberStyles.Number, NumberFormatInfo.InvariantInfo, true, Int512.MinValue); + yield return () => ("$-6,703,903,964,971,298,549,787,012,499,102,923,063,739,682,910,296,196,688,861,780,721,860,882,015,036,773,488,400,937,149,083,451,713,845,015,929,093,243,025,426,876,941,405,973,284,973,216,824,503,042,048.00", NumberStyles.Currency, Helper.CustomInfo, true, Int512.MinValue); } public static IEnumerable> TryParseSpanTestData() @@ -961,6 +1002,17 @@ public class Int512DataSources NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); yield return () => ("111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".ToCharArray(), NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, false, default); + + yield return () => ("1E200".ToCharArray(), NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, false, default); + yield return () => ("2.5E10".ToCharArray(), NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, true, 25_000_000_000); + yield return () => ("1E10".ToCharArray(), NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, true, 10_000_000_000); + yield return () => ("1.000".ToCharArray(), NumberStyles.Number, CultureInfo.InvariantCulture, true, Int512.One); + yield return () => ("1,000.0".ToCharArray(), NumberStyles.Number, CultureInfo.InvariantCulture, true, 1_000); + yield return () => ("1,000,000".ToCharArray(), NumberStyles.Number, CultureInfo.InvariantCulture, true, 1_000_000); + yield return () => ("1,000,000,000.00".ToCharArray(), NumberStyles.Number, CultureInfo.InvariantCulture, true, 1_000_000_000); + yield return () => ("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048.000".ToCharArray(), NumberStyles.Number, NumberFormatInfo.InvariantInfo, true, Int512.MinValue); + yield return () => ("-6,703,903,964,971,298,549,787,012,499,102,923,063,739,682,910,296,196,688,861,780,721,860,882,015,036,773,488,400,937,149,083,451,713,845,015,929,093,243,025,426,876,941,405,973,284,973,216,824,503,042,048".ToCharArray(), NumberStyles.Number, NumberFormatInfo.InvariantInfo, true, Int512.MinValue); + yield return () => ("$-6,703,903,964,971,298,549,787,012,499,102,923,063,739,682,910,296,196,688,861,780,721,860,882,015,036,773,488,400,937,149,083,451,713,845,015,929,093,243,025,426,876,941,405,973,284,973,216,824,503,042,048.00".ToCharArray(), NumberStyles.Currency, Helper.CustomInfo, true, Int512.MinValue); } public static IEnumerable> TryParseUtf8TestData() @@ -1029,6 +1081,28 @@ public class Int512DataSources NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, true, new Int512(0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111, 0b1111111111111111111111111111111111111111111111111111111111111111)); yield return () => ("111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"u8.ToArray(), NumberStyles.BinaryNumber, CultureInfo.InvariantCulture, false, default); + + yield return () => ("1E200"u8.ToArray(), NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, false, default); + yield return () => ("2.5E10"u8.ToArray(), NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, true, 25_000_000_000); + yield return () => ("1E10"u8.ToArray(), NumberStyles.Number | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, true, 10_000_000_000); + yield return () => ("1.000"u8.ToArray(), NumberStyles.Number, CultureInfo.InvariantCulture, true, Int512.One); + yield return () => ("1,000.0"u8.ToArray(), NumberStyles.Number, CultureInfo.InvariantCulture, true, 1_000); + yield return () => ("1,000,000"u8.ToArray(), NumberStyles.Number, CultureInfo.InvariantCulture, true, 1_000_000); + yield return () => ("1,000,000,000.00"u8.ToArray(), NumberStyles.Number, CultureInfo.InvariantCulture, true, 1_000_000_000); + yield return () => ("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048.000"u8.ToArray(), NumberStyles.Number, NumberFormatInfo.InvariantInfo, true, Int512.MinValue); + yield return () => ("-6,703,903,964,971,298,549,787,012,499,102,923,063,739,682,910,296,196,688,861,780,721,860,882,015,036,773,488,400,937,149,083,451,713,845,015,929,093,243,025,426,876,941,405,973,284,973,216,824,503,042,048"u8.ToArray(), NumberStyles.Number, NumberFormatInfo.InvariantInfo, true, Int512.MinValue); + yield return () => ("$-6,703,903,964,971,298,549,787,012,499,102,923,063,739,682,910,296,196,688,861,780,721,860,882,015,036,773,488,400,937,149,083,451,713,845,015,929,093,243,025,426,876,941,405,973,284,973,216,824,503,042,048.00"u8.ToArray(), NumberStyles.Currency, Helper.CustomInfo, true, Int512.MinValue); + } + + public static IEnumerable> ToStringTestData() + { + yield return () => (Int256.MaxValue, "e25", CultureInfo.InvariantCulture, "5.7896044618658097711785493e+76"); + yield return () => (Int256.MinValue, "e25", CultureInfo.InvariantCulture, "-5.7896044618658097711785493e+76"); + yield return () => (Int512.MaxValue, "e25", CultureInfo.InvariantCulture, "6.7039039649712985497870125e+153"); + yield return () => (Int512.MinValue, "e25", CultureInfo.InvariantCulture, "-6.7039039649712985497870125e+153"); + yield return () => (Int512.MinValue, "F3", CultureInfo.InvariantCulture, "-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048.000"); + yield return () => (Int512.MinValue, "N", CultureInfo.InvariantCulture, "-6,703,903,964,971,298,549,787,012,499,102,923,063,739,682,910,296,196,688,861,780,721,860,882,015,036,773,488,400,937,149,083,451,713,845,015,929,093,243,025,426,876,941,405,973,284,973,216,824,503,042,048.00"); + yield return () => (Int512.MinValue, "C", Helper.CustomInfo, "$-6,703,903,964,971,298,549,787,012,499,102,923,063,739,682,910,296,196,688,861,780,721,860,882,015,036,773,488,400,937,149,083,451,713,845,015,929,093,243,025,426,876,941,405,973,284,973,216,824,503,042,048.00"); } public static IEnumerable> ClampTestData() diff --git a/src/MissingValues.Tests/Data/OctoDataSources.cs b/src/MissingValues.Tests/Data/OctoDataSources.cs index 852e2db..5054af9 100644 --- a/src/MissingValues.Tests/Data/OctoDataSources.cs +++ b/src/MissingValues.Tests/Data/OctoDataSources.cs @@ -454,6 +454,13 @@ public class OctoDataSources yield return () => (NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol, NumberStyles.Float, CultureInfo.InvariantCulture, Octo.PositiveInfinity); yield return () => (NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol, NumberStyles.Float, CultureInfo.InvariantCulture, Octo.NegativeInfinity); yield return () => (NumberFormatInfo.CurrentInfo.NaNSymbol, NumberStyles.Float, CultureInfo.InvariantCulture, Octo.NaN); + + yield return () => ("2.5E-1", NumberStyles.Float, CultureInfo.InvariantCulture, Octo.Quarter); + yield return () => ("0.250", NumberStyles.Float, CultureInfo.InvariantCulture, Octo.Quarter); + yield return () => ("$-0.25", NumberStyles.Currency, Helper.CustomInfo, Octo.NegativeQuarter); + yield return () => ("1.000", NumberStyles.Float, CultureInfo.InvariantCulture, Octo.One); + yield return () => ("1,000.00", NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, Octo.Thousand); + yield return () => ("-1,000.00", NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, Octo.NegativeThousand); } public static IEnumerable> ParseSpanTestData() @@ -469,6 +476,13 @@ public class OctoDataSources yield return () => (NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol.ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.PositiveInfinity); yield return () => (NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol.ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.NegativeInfinity); yield return () => (NumberFormatInfo.CurrentInfo.NaNSymbol.ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.NaN); + + yield return () => ("2.5E-1".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.Quarter); + yield return () => ("0.250".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.Quarter); + yield return () => ("$-0.25".ToCharArray(), NumberStyles.Currency, Helper.CustomInfo, Octo.NegativeQuarter); + yield return () => ("1.000".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.One); + yield return () => ("1,000.00".ToCharArray(), NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, Octo.Thousand); + yield return () => ("-1,000.00".ToCharArray(), NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, Octo.NegativeThousand); } public static IEnumerable> ParseUtf8TestData() @@ -484,6 +498,13 @@ public class OctoDataSources yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.PositiveInfinity); yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.NegativeInfinity); yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.CurrentInfo.NaNSymbol), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.NaN); + + yield return () => ("2.5E-1"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.Quarter); + yield return () => ("0.250"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.Quarter); + yield return () => ("$-0.25"u8.ToArray(), NumberStyles.Currency, Helper.CustomInfo, Octo.NegativeQuarter); + yield return () => ("1.000"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Octo.One); + yield return () => ("1,000.00"u8.ToArray(), NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, Octo.Thousand); + yield return () => ("-1,000.00"u8.ToArray(), NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, Octo.NegativeThousand); } public static IEnumerable> TryParseTestData() @@ -499,6 +520,13 @@ public class OctoDataSources yield return () => (NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol, NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.PositiveInfinity); yield return () => (NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol, NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.NegativeInfinity); yield return () => (NumberFormatInfo.CurrentInfo.NaNSymbol, NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.NaN); + + yield return () => ("2.5E-1", NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.Quarter); + yield return () => ("0.250", NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.Quarter); + yield return () => ("$-0.25", NumberStyles.Currency, Helper.CustomInfo, true, Octo.NegativeQuarter); + yield return () => ("1.000", NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.One); + yield return () => ("1,000.00", NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, true, Octo.Thousand); + yield return () => ("-1,000.00", NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, true, Octo.NegativeThousand); } public static IEnumerable> TryParseSpanTestData() @@ -514,6 +542,13 @@ public class OctoDataSources yield return () => (NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol.ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.PositiveInfinity); yield return () => (NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol.ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.NegativeInfinity); yield return () => (NumberFormatInfo.CurrentInfo.NaNSymbol.ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.NaN); + + yield return () => ("2.5E-1".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.Quarter); + yield return () => ("0.250".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.Quarter); + yield return () => ("$-0.25".ToCharArray(), NumberStyles.Currency, Helper.CustomInfo, true, Octo.NegativeQuarter); + yield return () => ("1.000".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.One); + yield return () => ("1,000.00".ToCharArray(), NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, true, Octo.Thousand); + yield return () => ("-1,000.00".ToCharArray(), NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, true, Octo.NegativeThousand); } public static IEnumerable> TryParseUtf8TestData() @@ -529,6 +564,24 @@ public class OctoDataSources yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.PositiveInfinity); yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.NegativeInfinity); yield return () => (Encoding.UTF8.GetBytes(NumberFormatInfo.CurrentInfo.NaNSymbol), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.NaN); + + yield return () => ("2.5E-1"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.Quarter); + yield return () => ("0.250"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.Quarter); + yield return () => ("$-0.25"u8.ToArray(), NumberStyles.Currency, Helper.CustomInfo, true, Octo.NegativeQuarter); + yield return () => ("1.000"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Octo.One); + yield return () => ("1,000.00"u8.ToArray(), NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, true, Octo.Thousand); + yield return () => ("-1,000.00"u8.ToArray(), NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, true, Octo.NegativeThousand); + } + + public static IEnumerable> ToStringTestData() + { + Octo value = Values.CreateFloat(0x4000_C81C_D6E6_31F8, 0xA090_2DE0_0D1B_7175, 0x8E21_9652_BD3C_3611, 0x3404_EA4A_8C15_4C98); + + yield return () => (value, "F", CultureInfo.InvariantCulture, "12345.68"); + yield return () => (value, "F", Helper.CustomInfo, "12345.67890"); + yield return () => (value, "N3", CultureInfo.InvariantCulture, "12,345.679"); + yield return () => (value, "N", Helper.CustomInfo, "1_23_45.67890"); + yield return () => (value, "C", Helper.CustomInfo, "$12,345.68"); } public static IEnumerable> ClampTestData() diff --git a/src/MissingValues.Tests/Data/QuadDataSources.cs b/src/MissingValues.Tests/Data/QuadDataSources.cs index 04c8815..9f62b5d 100644 --- a/src/MissingValues.Tests/Data/QuadDataSources.cs +++ b/src/MissingValues.Tests/Data/QuadDataSources.cs @@ -455,6 +455,13 @@ public class QuadDataSources yield return () => ("0.04201133209656899095", NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0x3FFA_5828_262D_512C, 0x8840_B3B3_D424_5947)); yield return () => ("7.7E777", NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0x4A17_0F28_5D1D_4C84, 0xA11F_6899_101B_A9A4)); yield return () => ("-7.7E-777", NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0xB5EC_BFCE_3AF6_4E08, 0x42C8_5750_BEBD_A572)); + + yield return () => ("2.5E-1", NumberStyles.Float, CultureInfo.InvariantCulture, Quad.Quarter); + yield return () => ("0.250", NumberStyles.Float, CultureInfo.InvariantCulture, Quad.Quarter); + yield return () => ("$-0.25", NumberStyles.Currency, Helper.CustomInfo, Quad.NegativeQuarter); + yield return () => ("1.000", NumberStyles.Float, CultureInfo.InvariantCulture, Quad.One); + yield return () => ("1,000.00", NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, Quad.Thousand); + yield return () => ("-1,000.00", NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, Quad.NegativeThousand); } public static IEnumerable> ParseSpanTestData() @@ -474,6 +481,13 @@ public class QuadDataSources yield return () => ("0.04201133209656899095".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0x3FFA_5828_262D_512C, 0x8840_B3B3_D424_5947)); yield return () => ("7.7E777".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0x4A17_0F28_5D1D_4C84, 0xA11F_6899_101B_A9A4)); yield return () => ("-7.7E-777".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0xB5EC_BFCE_3AF6_4E08, 0x42C8_5750_BEBD_A572)); + + yield return () => ("2.5E-1".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Quad.Quarter); + yield return () => ("0.250".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Quad.Quarter); + yield return () => ("$-0.25".ToCharArray(), NumberStyles.Currency, Helper.CustomInfo, Quad.NegativeQuarter); + yield return () => ("1.000".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Quad.One); + yield return () => ("1,000.00".ToCharArray(), NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, Quad.Thousand); + yield return () => ("-1,000.00".ToCharArray(), NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, Quad.NegativeThousand); } public static IEnumerable> ParseUtf8TestData() @@ -493,6 +507,13 @@ public class QuadDataSources yield return () => ("0.04201133209656899095"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0x3FFA_5828_262D_512C, 0x8840_B3B3_D424_5947)); yield return () => ("7.7E777"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0x4A17_0F28_5D1D_4C84, 0xA11F_6899_101B_A9A4)); yield return () => ("-7.7E-777"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Values.CreateFloat(0xB5EC_BFCE_3AF6_4E08, 0x42C8_5750_BEBD_A572)); + + yield return () => ("2.5E-1"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Quad.Quarter); + yield return () => ("0.250"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Quad.Quarter); + yield return () => ("$-0.25"u8.ToArray(), NumberStyles.Currency, Helper.CustomInfo, Quad.NegativeQuarter); + yield return () => ("1.000"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, Quad.One); + yield return () => ("1,000.00"u8.ToArray(), NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, Quad.Thousand); + yield return () => ("-1,000.00"u8.ToArray(), NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, Quad.NegativeThousand); } public static IEnumerable> TryParseTestData() @@ -513,6 +534,13 @@ public class QuadDataSources yield return () => ("7.7E777", NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0x4A17_0F28_5D1D_4C84, 0xA11F_6899_101B_A9A4)); yield return () => ("-7.7E-777", NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0xB5EC_BFCE_3AF6_4E08, 0x42C8_5750_BEBD_A572)); yield return () => ("1A", NumberStyles.Float, CultureInfo.InvariantCulture, false, default); + + yield return () => ("2.5E-1", NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.Quarter); + yield return () => ("0.250", NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.Quarter); + yield return () => ("$-0.25", NumberStyles.Currency, Helper.CustomInfo, true, Quad.NegativeQuarter); + yield return () => ("1.000", NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.One); + yield return () => ("1,000.00", NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, true, Quad.Thousand); + yield return () => ("-1,000.00", NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, true, Quad.NegativeThousand); } public static IEnumerable> TryParseSpanTestData() @@ -533,6 +561,13 @@ public class QuadDataSources yield return () => ("7.7E777".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0x4A17_0F28_5D1D_4C84, 0xA11F_6899_101B_A9A4)); yield return () => ("-7.7E-777".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0xB5EC_BFCE_3AF6_4E08, 0x42C8_5750_BEBD_A572)); yield return () => ("1A".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, false, default); + + yield return () => ("2.5E-1".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.Quarter); + yield return () => ("0.250".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.Quarter); + yield return () => ("$-0.25".ToCharArray(), NumberStyles.Currency, Helper.CustomInfo, true, Quad.NegativeQuarter); + yield return () => ("1.000".ToCharArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.One); + yield return () => ("1,000.00".ToCharArray(), NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, true, Quad.Thousand); + yield return () => ("-1,000.00".ToCharArray(), NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, true, Quad.NegativeThousand); } public static IEnumerable> TryParseUtf8TestData() @@ -553,6 +588,24 @@ public class QuadDataSources yield return () => ("7.7E777"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0x4A17_0F28_5D1D_4C84, 0xA11F_6899_101B_A9A4)); yield return () => ("-7.7E-777"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Values.CreateFloat(0xB5EC_BFCE_3AF6_4E08, 0x42C8_5750_BEBD_A572)); yield return () => ("1A"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, false, default); + + yield return () => ("2.5E-1"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.Quarter); + yield return () => ("0.250"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.Quarter); + yield return () => ("$-0.25"u8.ToArray(), NumberStyles.Currency, Helper.CustomInfo, true, Quad.NegativeQuarter); + yield return () => ("1.000"u8.ToArray(), NumberStyles.Float, CultureInfo.InvariantCulture, true, Quad.One); + yield return () => ("1,000.00"u8.ToArray(), NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, true, Quad.Thousand); + yield return () => ("-1,000.00"u8.ToArray(), NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, true, Quad.NegativeThousand); + } + + public static IEnumerable> ToStringTestData() + { + Quad value = Values.CreateFloat(0x400C_81CD_6E63_1F8A, 0x0902_DE00_D1B7_1759); + + yield return () => (value, "F", CultureInfo.InvariantCulture, "12345.68"); + yield return () => (value, "F", Helper.CustomInfo, "12345.67890"); + yield return () => (value, "N3", CultureInfo.InvariantCulture, "12,345.679"); + yield return () => (value, "N", Helper.CustomInfo, "1_23_45.67890"); + yield return () => (value, "C", Helper.CustomInfo, "$12,345.68"); } public static IEnumerable> ClampTestData() diff --git a/src/MissingValues.Tests/Data/Sources/INumberBaseDataSource.cs b/src/MissingValues.Tests/Data/Sources/INumberBaseDataSource.cs index 5ec0253..38172ac 100644 --- a/src/MissingValues.Tests/Data/Sources/INumberBaseDataSource.cs +++ b/src/MissingValues.Tests/Data/Sources/INumberBaseDataSource.cs @@ -35,4 +35,5 @@ public interface INumberBaseDataSource static abstract IEnumerable> TryParseTestData(); static abstract IEnumerable> TryParseSpanTestData(); static abstract IEnumerable> TryParseUtf8TestData(); + static abstract IEnumerable> ToStringTestData(); } \ No newline at end of file diff --git a/src/MissingValues.Tests/Data/UInt256DataSources.cs b/src/MissingValues.Tests/Data/UInt256DataSources.cs index 2460ee7..89f439f 100644 --- a/src/MissingValues.Tests/Data/UInt256DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt256DataSources.cs @@ -595,6 +595,11 @@ public class UInt256DataSources yield return () => ("1000000000000000000000000000000000000000000000000000000000000000000000000000000"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); } + public static IEnumerable> ToStringTestData() + { + yield return () => ((UInt256)Int256.MaxValue, "e25", CultureInfo.InvariantCulture, "5.7896044618658097711785493e+76"); + } + public static IEnumerable> ClampTestData() { yield return () => (new UInt256(0, 0, 0, 15), new UInt256(0, 0, 0, 10), new UInt256(0, 0, 0, 20), new UInt256(0, 0, 0, 15)); diff --git a/src/MissingValues.Tests/Data/UInt512DataSources.cs b/src/MissingValues.Tests/Data/UInt512DataSources.cs index 0cba985..092917f 100644 --- a/src/MissingValues.Tests/Data/UInt512DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt512DataSources.cs @@ -766,6 +766,12 @@ public class UInt512DataSources yield return () => ("20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); } + public static IEnumerable> ToStringTestData() + { + yield return () => ((UInt512)Int256.MaxValue, "e25", CultureInfo.InvariantCulture, "5.7896044618658097711785493e+76"); + yield return () => ((UInt512)Int512.MaxValue, "e25", CultureInfo.InvariantCulture, "6.7039039649712985497870125e+153"); + } + public static IEnumerable> ClampTestData() { yield return () => (new UInt512(0, 0, 0, 0, 0, 0, 0, 15), new UInt512(0, 0, 0, 0, 0, 0, 0, 10), new UInt512(0, 0, 0, 0, 0, 0, 0, 20), new UInt512(0, 0, 0, 0, 0, 0, 0, 15)); diff --git a/src/MissingValues.Tests/Helper.cs b/src/MissingValues.Tests/Helper.cs index 0f3b82c..26677f0 100644 --- a/src/MissingValues.Tests/Helper.cs +++ b/src/MissingValues.Tests/Helper.cs @@ -5,6 +5,27 @@ namespace MissingValues.Tests; public static class Helper { + public static NumberFormatInfo CustomInfo => new() + { + PositiveSign = "+", + NegativeSign = "-", + CurrencyPositivePattern = 0, + CurrencyNegativePattern = 2, + CurrencySymbol = "$", + CurrencyDecimalDigits = 2, + CurrencyDecimalSeparator = ".", + CurrencyGroupSeparator = ",", + CurrencyGroupSizes = [3], + NumberGroupSeparator = "_", + NumberGroupSizes = [2], + NumberDecimalDigits = 5, + NumberDecimalSeparator = ".", + NumberNegativePattern = 1, + PositiveInfinitySymbol = "+Inf", + NegativeInfinitySymbol = "-Inf", + NaNSymbol = "NaN", + }; + public static TSelf Abs(TSelf value) where TSelf : INumberBase { diff --git a/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs b/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs index b6f7d1c..af03961 100644 --- a/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs @@ -476,6 +476,12 @@ public async Task TryParseTest(byte[] utf8Text, NumberStyles style, IFormatProvi await Assert.That(result).IsEqualTo(expectedValue); } } + [Test] + [MethodDataSource(nameof(ToStringTestData))] + public async Task ToStringTest(Int256 value, string fmt, IFormatProvider? provider, string expected) + { + await Assert.That(value.ToString(fmt, provider)).EqualTo(expected); + } #endregion #region INumber diff --git a/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs b/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs index 32bf475..7ea0d32 100644 --- a/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs @@ -475,6 +475,12 @@ public async Task TryParseTest(byte[] utf8Text, NumberStyles style, IFormatProvi await Assert.That(result).IsEqualTo(expectedValue); } } + [Test] + [MethodDataSource(nameof(ToStringTestData))] + public async Task ToStringTest(Int512 value, string fmt, IFormatProvider? provider, string expected) + { + await Assert.That(value.ToString(fmt, provider)).EqualTo(expected); + } #endregion #region INumber diff --git a/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs b/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs index 8c96422..15f6636 100644 --- a/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs @@ -385,6 +385,12 @@ public async Task TryParseTest(byte[] utf8Text, NumberStyles style, IFormatProvi await Assert.That(result).IsEqualTo(expectedValue); } } + [Test] + [MethodDataSource(nameof(ToStringTestData))] + public async Task ToStringTest(Float value, string fmt, IFormatProvider? provider, string expected) + { + await Assert.That(value.ToString(fmt, provider)).EqualTo(expected); + } #endregion #region INumber diff --git a/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs b/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs index 00fc4f5..1c12216 100644 --- a/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs @@ -379,6 +379,12 @@ public async Task TryParseTest(byte[] utf8Text, NumberStyles style, IFormatProvi await Assert.That(result).IsEqualTo(expectedValue); } } + [Test] + [MethodDataSource(nameof(ToStringTestData))] + public async Task ToStringTest(Float value, string fmt, IFormatProvider? provider, string expected) + { + await Assert.That(value.ToString(fmt, provider)).EqualTo(expected); + } #endregion #region INumber diff --git a/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs b/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs index 8773e92..a431946 100644 --- a/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs @@ -476,6 +476,12 @@ public async Task TryParseTest(byte[] utf8Text, NumberStyles style, IFormatProvi await Assert.That(result).IsEqualTo(expectedValue); } } + [Test] + [MethodDataSource(nameof(ToStringTestData))] + public async Task ToStringTest(UInt256 value, string fmt, IFormatProvider? provider, string expected) + { + await Assert.That(value.ToString(fmt, provider)).EqualTo(expected); + } #endregion #region INumber diff --git a/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs b/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs index e21ae17..ff24ac1 100644 --- a/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs @@ -475,6 +475,12 @@ public async Task TryParseTest(byte[] utf8Text, NumberStyles style, IFormatProvi await Assert.That(result).IsEqualTo(expectedValue); } } + [Test] + [MethodDataSource(nameof(ToStringTestData))] + public async Task ToStringTest(UInt512 value, string fmt, IFormatProvider? provider, string expected) + { + await Assert.That(value.ToString(fmt, provider)).EqualTo(expected); + } #endregion #region INumber From 23637dc271004447eda4ef000923604f8ba47e25 Mon Sep 17 00:00:00 2001 From: crookseta Date: Sun, 12 Jul 2026 18:23:22 -0500 Subject: [PATCH 53/74] Added test methods for UInt256. --- .../Numerics/UInt256GenericMathTests.cs | 147 ++++++++++++++++++ 1 file changed, 147 insertions(+) diff --git a/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs b/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs index a431946..1d36b25 100644 --- a/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; +using System.Numerics; using System.Text; using System.Threading.Tasks; using static MissingValues.Tests.Data.UInt256DataSources; @@ -668,4 +669,150 @@ public async Task WriteLittleEndianTest(UInt256 value, byte[] expectedDestinatio } } #endregion + + #region Conversion + [Test, MethodDataSource(nameof(ConvertToCheckedByteTestData))] public async Task ConvertToCheckedByteTest(UInt256 input, byte expected) => await Assert.That(byte.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingByteTestData))] public async Task ConvertToSaturatingByteTest(UInt256 input, byte expected) => await Assert.That(byte.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingByteTestData))] public async Task ConvertToTruncatingByteTest(UInt256 input, byte expected) => await Assert.That(byte.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt16TestData))] public async Task ConvertToCheckedUInt16Test(UInt256 input, ushort expected) => await Assert.That(ushort.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt16TestData))] public async Task ConvertToSaturatingUInt16Test(UInt256 input, ushort expected) => await Assert.That(ushort.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt16TestData))] public async Task ConvertToTruncatingUInt16Test(UInt256 input, ushort expected) => await Assert.That(ushort.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt32TestData))] public async Task ConvertToCheckedUInt32Test(UInt256 input, uint expected) => await Assert.That(uint.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt32TestData))] public async Task ConvertToSaturatingUInt32Test(UInt256 input, uint expected) => await Assert.That(uint.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt32TestData))] public async Task ConvertToTruncatingUInt32Test(UInt256 input, uint expected) => await Assert.That(uint.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt64TestData))] public async Task ConvertToCheckedUInt64Test(UInt256 input, ulong expected) => await Assert.That(ulong.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt64TestData))] public async Task ConvertToSaturatingUInt64Test(UInt256 input, ulong expected) => await Assert.That(ulong.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt64TestData))] public async Task ConvertToTruncatingUInt64Test(UInt256 input, ulong expected) => await Assert.That(ulong.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt128TestData))] public async Task ConvertToCheckedUInt128Test(UInt256 input, UInt128 expected) => await Assert.That(UInt128.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt128TestData))] public async Task ConvertToSaturatingUInt128Test(UInt256 input, UInt128 expected) => await Assert.That(UInt128.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt128TestData))] public async Task ConvertToTruncatingUInt128Test(UInt256 input, UInt128 expected) => await Assert.That(UInt128.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt512TestData))] public async Task ConvertToCheckedUInt512Test(UInt256 input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt512TestData))] public async Task ConvertToSaturatingUInt512Test(UInt256 input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt512TestData))] public async Task ConvertToTruncatingUInt512Test(UInt256 input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedSByteTestData))] public async Task ConvertToCheckedSByteTest(UInt256 input, sbyte expected) => await Assert.That(sbyte.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingSByteTestData))] public async Task ConvertToSaturatingSByteTest(UInt256 input, sbyte expected) => await Assert.That(sbyte.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingSByteTestData))] public async Task ConvertToTruncatingByteTest(UInt256 input, sbyte expected) => await Assert.That(sbyte.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt16TestData))] public async Task ConvertToCheckedInt16Test(UInt256 input, short expected) => await Assert.That(ushort.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt16TestData))] public async Task ConvertToSaturatingInt16Test(UInt256 input, short expected) => await Assert.That(ushort.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt16TestData))] public async Task ConvertToTruncatingInt16Test(UInt256 input, short expected) => await Assert.That(ushort.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt32TestData))] public async Task ConvertToCheckedInt32Test(UInt256 input, int expected) => await Assert.That(uint.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt32TestData))] public async Task ConvertToSaturatingInt32Test(UInt256 input, int expected) => await Assert.That(uint.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt32TestData))] public async Task ConvertToTruncatingInt32Test(UInt256 input, int expected) => await Assert.That(uint.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt64TestData))] public async Task ConvertToCheckedInt64Test(UInt256 input, long expected) => await Assert.That(ulong.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt64TestData))] public async Task ConvertToSaturatingInt64Test(UInt256 input, long expected) => await Assert.That(ulong.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt64TestData))] public async Task ConvertToTruncatingInt64Test(UInt256 input, long expected) => await Assert.That(ulong.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt128TestData))] public async Task ConvertToCheckedInt128Test(UInt256 input, Int128 expected) => await Assert.That(Int128.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt128TestData))] public async Task ConvertToSaturatingInt128Test(UInt256 input, Int128 expected) => await Assert.That(Int128.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt128TestData))] public async Task ConvertToTruncatingInt128Test(UInt256 input, Int128 expected) => await Assert.That(Int128.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt256TestData))] public async Task ConvertToCheckedInt256Test(UInt256 input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt256TestData))] public async Task ConvertToSaturatingInt256Test(UInt256 input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt256TestData))] public async Task ConvertToTruncatingInt256Test(UInt256 input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt512TestData))] public async Task ConvertToCheckedInt512Test(UInt256 input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt512TestData))] public async Task ConvertToSaturatingInt512Test(UInt256 input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt512TestData))] public async Task ConvertToTruncatingInt512Test(UInt256 input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedHalfTestData))] public async Task ConvertToCheckedHalfTest(UInt256 input, Half expected) => await Assert.That(Half.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingHalfTestData))] public async Task ConvertToSaturatingHalfTest(UInt256 input, Half expected) => await Assert.That(Half.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingHalfTestData))] public async Task ConvertToTruncatingHalfTest(UInt256 input, Half expected) => await Assert.That(Half.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedSingleTestData))] public async Task ConvertToCheckedSingleTest(UInt256 input, float expected) => await Assert.That(float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingSingleTestData))] public async Task ConvertToSaturatingSingleTest(UInt256 input, float expected) => await Assert.That(float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingSingleTestData))] public async Task ConvertToTruncatingSingleTest(UInt256 input, float expected) => await Assert.That(float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedDoubleTestData))] public async Task ConvertToCheckedDoubleTest(UInt256 input, double expected) => await Assert.That(double.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingDoubleTestData))] public async Task ConvertToSaturatingDoubleTest(UInt256 input, double expected) => await Assert.That(double.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingDoubleTestData))] public async Task ConvertToTruncatingDoubleTest(UInt256 input, double expected) => await Assert.That(double.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedQuadTestData))] public async Task ConvertToCheckedQuadTest(UInt256 input, Quad expected) => await Assert.That(Quad.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingQuadTestData))] public async Task ConvertToSaturatingQuadTest(UInt256 input, Quad expected) => await Assert.That(Quad.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingQuadTestData))] public async Task ConvertToTruncatingQuadTest(UInt256 input, Quad expected) => await Assert.That(Quad.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedOctoTestData))] public async Task ConvertToCheckedOctoTest(UInt256 input, Octo expected) => await Assert.That(Octo.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingOctoTestData))] public async Task ConvertToSaturatingOctoTest(UInt256 input, Octo expected) => await Assert.That(Octo.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingOctoTestData))] public async Task ConvertToTruncatingOctoTest(UInt256 input, Octo expected) => await Assert.That(Octo.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedByteTestData))] public async Task ConvertFromCheckedByteTest(byte input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingByteTestData))] public async Task ConvertFromSaturatingByteTest(byte input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingByteTestData))] public async Task ConvertFromTruncatingByteTest(byte input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt16TestData))] public async Task ConvertFromCheckedUInt16Test(ushort input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt16TestData))] public async Task ConvertFromSaturatingUInt16Test(ushort input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt16TestData))] public async Task ConvertFromTruncatingUInt16Test(ushort input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt32TestData))] public async Task ConvertFromCheckedUInt32Test(uint input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt32TestData))] public async Task ConvertFromSaturatingUInt32Test(uint input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt32TestData))] public async Task ConvertFromTruncatingUInt32Test(uint input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt64TestData))] public async Task ConvertFromCheckedUInt64Test(ulong input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt64TestData))] public async Task ConvertFromSaturatingUInt64Test(ulong input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt64TestData))] public async Task ConvertFromTruncatingUInt64Test(ulong input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt128TestData))] public async Task ConvertFromCheckedUInt128Test(UInt128 input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt128TestData))] public async Task ConvertFromSaturatingUInt128Test(UInt128 input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt128TestData))] public async Task ConvertFromTruncatingUInt128Test(UInt128 input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt512TestData))] public async Task ConvertFromCheckedUInt512Test(UInt512 input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt512TestData))] public async Task ConvertFromSaturatingUInt512Test(UInt512 input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt512TestData))] public async Task ConvertFromTruncatingUInt512Test(UInt512 input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedSByteTestData))] public async Task ConvertFromCheckedSByteTest(sbyte input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingSByteTestData))] public async Task ConvertFromSaturatingSByteTest(sbyte input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingSByteTestData))] public async Task ConvertFromTruncatingSByteTest(sbyte input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt16TestData))] public async Task ConvertFromCheckedInt16Test(short input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt16TestData))] public async Task ConvertFromSaturatingInt16Test(short input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt16TestData))] public async Task ConvertFromTruncatingInt16Test(short input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt32TestData))] public async Task ConvertFromCheckedInt32Test(int input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt32TestData))] public async Task ConvertFromSaturatingInt32Test(int input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt32TestData))] public async Task ConvertFromTruncatingInt32Test(int input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt64TestData))] public async Task ConvertFromCheckedInt64Test(long input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt64TestData))] public async Task ConvertFromSaturatingInt64Test(long input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt64TestData))] public async Task ConvertFromTruncatingInt64Test(long input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt128TestData))] public async Task ConvertFromCheckedInt128Test(Int128 input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt128TestData))] public async Task ConvertFromSaturatingInt128Test(Int128 input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt128TestData))] public async Task ConvertFromTruncatingInt128Test(Int128 input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt256TestData))] public async Task ConvertFromCheckedInt256Test(Int256 input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt256TestData))] public async Task ConvertFromSaturatingInt256Test(Int256 input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt256TestData))] public async Task ConvertFromTruncatingInt256Test(Int256 input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt512TestData))] public async Task ConvertFromCheckedInt512Test(Int512 input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt512TestData))] public async Task ConvertFromSaturatingInt512Test(Int512 input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt512TestData))] public async Task ConvertFromTruncatingInt512Test(Int512 input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedHalfTestData))] public async Task ConvertFromCheckedHalfTest(Half input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingHalfTestData))] public async Task ConvertFromSaturatingHalfTest(Half input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingHalfTestData))] public async Task ConvertFromTruncatingHalfTest(Half input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedSingleTestData))] public async Task ConvertFromCheckedSingleTest(float input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingSingleTestData))] public async Task ConvertFromSaturatingSingleTest(float input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingSingleTestData))] public async Task ConvertFromTruncatingSingleTest(float input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedDoubleTestData))] public async Task ConvertFromCheckedDoubleTest(double input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingDoubleTestData))] public async Task ConvertFromSaturatingDoubleTest(double input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingDoubleTestData))] public async Task ConvertFromTruncatingDoubleTest(double input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedQuadTestData))] public async Task ConvertFromCheckedQuadTest(Quad input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingQuadTestData))] public async Task ConvertFromSaturatingQuadTest(Quad input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingQuadTestData))] public async Task ConvertFromTruncatingQuadTest(Quad input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedOctoTestData))] public async Task ConvertFromCheckedOctoTest(Octo input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingOctoTestData))] public async Task ConvertFromSaturatingOctoTest(Octo input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingOctoTestData))] public async Task ConvertFromTruncatingOctoTest(Octo input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); + #endregion } From b48713d36117dfcb788724046de385971733ce2f Mon Sep 17 00:00:00 2001 From: crookseta Date: Sun, 12 Jul 2026 20:31:20 -0500 Subject: [PATCH 54/74] -Added Conversion test methods for remaining types. --- .../Data/UInt512DataSources.cs | 12 +- .../Numerics/Int256GenericMathTests.cs | 146 ++++++++++++++++++ .../Numerics/Int512GenericMathTests.cs | 146 ++++++++++++++++++ .../Numerics/OctoGenericMathTests.cs | 146 ++++++++++++++++++ .../Numerics/QuadGenericMathTests.cs | 146 ++++++++++++++++++ .../Numerics/UInt512GenericMathTests.cs | 146 ++++++++++++++++++ 6 files changed, 736 insertions(+), 6 deletions(-) diff --git a/src/MissingValues.Tests/Data/UInt512DataSources.cs b/src/MissingValues.Tests/Data/UInt512DataSources.cs index 092917f..1a045fc 100644 --- a/src/MissingValues.Tests/Data/UInt512DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt512DataSources.cs @@ -1104,17 +1104,17 @@ public class UInt512DataSources throw new NotImplementedException(); } - public static IEnumerable> ConvertToCheckedUInt512TestData() + public static IEnumerable> ConvertToCheckedUInt256TestData() { throw new NotImplementedException(); } - public static IEnumerable> ConvertToSaturatingUInt512TestData() + public static IEnumerable> ConvertToSaturatingUInt256TestData() { throw new NotImplementedException(); } - public static IEnumerable> ConvertToTruncatingUInt512TestData() + public static IEnumerable> ConvertToTruncatingUInt256TestData() { throw new NotImplementedException(); } @@ -1383,17 +1383,17 @@ public class UInt512DataSources throw new NotImplementedException(); } - public static IEnumerable> ConvertFromCheckedUInt512TestData() + public static IEnumerable> ConvertFromCheckedUInt256TestData() { throw new NotImplementedException(); } - public static IEnumerable> ConvertFromSaturatingUInt512TestData() + public static IEnumerable> ConvertFromSaturatingUInt256TestData() { throw new NotImplementedException(); } - public static IEnumerable> ConvertFromTruncatingUInt512TestData() + public static IEnumerable> ConvertFromTruncatingUInt256TestData() { throw new NotImplementedException(); } diff --git a/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs b/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs index af03961..cbc5006 100644 --- a/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs @@ -668,4 +668,150 @@ public async Task WriteLittleEndianTest(Int256 value, byte[] expectedDestination } } #endregion + + #region Conversion + [Test, MethodDataSource(nameof(ConvertToCheckedByteTestData))] public async Task ConvertToCheckedByteTest(Int256 input, byte expected) => await Assert.That(byte.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingByteTestData))] public async Task ConvertToSaturatingByteTest(Int256 input, byte expected) => await Assert.That(byte.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingByteTestData))] public async Task ConvertToTruncatingByteTest(Int256 input, byte expected) => await Assert.That(byte.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt16TestData))] public async Task ConvertToCheckedUInt16Test(Int256 input, ushort expected) => await Assert.That(ushort.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt16TestData))] public async Task ConvertToSaturatingUInt16Test(Int256 input, ushort expected) => await Assert.That(ushort.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt16TestData))] public async Task ConvertToTruncatingUInt16Test(Int256 input, ushort expected) => await Assert.That(ushort.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt32TestData))] public async Task ConvertToCheckedUInt32Test(Int256 input, uint expected) => await Assert.That(uint.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt32TestData))] public async Task ConvertToSaturatingUInt32Test(Int256 input, uint expected) => await Assert.That(uint.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt32TestData))] public async Task ConvertToTruncatingUInt32Test(Int256 input, uint expected) => await Assert.That(uint.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt64TestData))] public async Task ConvertToCheckedUInt64Test(Int256 input, ulong expected) => await Assert.That(ulong.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt64TestData))] public async Task ConvertToSaturatingUInt64Test(Int256 input, ulong expected) => await Assert.That(ulong.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt64TestData))] public async Task ConvertToTruncatingUInt64Test(Int256 input, ulong expected) => await Assert.That(ulong.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt128TestData))] public async Task ConvertToCheckedUInt128Test(Int256 input, UInt128 expected) => await Assert.That(UInt128.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt128TestData))] public async Task ConvertToSaturatingUInt128Test(Int256 input, UInt128 expected) => await Assert.That(UInt128.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt128TestData))] public async Task ConvertToTruncatingUInt128Test(Int256 input, UInt128 expected) => await Assert.That(UInt128.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt256TestData))] public async Task ConvertToCheckedUInt256Test(Int256 input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt256TestData))] public async Task ConvertToSaturatingUInt256Test(Int256 input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt256TestData))] public async Task ConvertToTruncatingUInt256Test(Int256 input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt512TestData))] public async Task ConvertToCheckedUInt512Test(Int256 input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt512TestData))] public async Task ConvertToSaturatingUInt512Test(Int256 input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt512TestData))] public async Task ConvertToTruncatingUInt512Test(Int256 input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedSByteTestData))] public async Task ConvertToCheckedSByteTest(Int256 input, sbyte expected) => await Assert.That(sbyte.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingSByteTestData))] public async Task ConvertToSaturatingSByteTest(Int256 input, sbyte expected) => await Assert.That(sbyte.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingSByteTestData))] public async Task ConvertToTruncatingByteTest(Int256 input, sbyte expected) => await Assert.That(sbyte.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt16TestData))] public async Task ConvertToCheckedInt16Test(Int256 input, short expected) => await Assert.That(ushort.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt16TestData))] public async Task ConvertToSaturatingInt16Test(Int256 input, short expected) => await Assert.That(ushort.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt16TestData))] public async Task ConvertToTruncatingInt16Test(Int256 input, short expected) => await Assert.That(ushort.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt32TestData))] public async Task ConvertToCheckedInt32Test(Int256 input, int expected) => await Assert.That(uint.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt32TestData))] public async Task ConvertToSaturatingInt32Test(Int256 input, int expected) => await Assert.That(uint.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt32TestData))] public async Task ConvertToTruncatingInt32Test(Int256 input, int expected) => await Assert.That(uint.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt64TestData))] public async Task ConvertToCheckedInt64Test(Int256 input, long expected) => await Assert.That(ulong.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt64TestData))] public async Task ConvertToSaturatingInt64Test(Int256 input, long expected) => await Assert.That(ulong.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt64TestData))] public async Task ConvertToTruncatingInt64Test(Int256 input, long expected) => await Assert.That(ulong.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt128TestData))] public async Task ConvertToCheckedInt128Test(Int256 input, Int128 expected) => await Assert.That(Int128.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt128TestData))] public async Task ConvertToSaturatingInt128Test(Int256 input, Int128 expected) => await Assert.That(Int128.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt128TestData))] public async Task ConvertToTruncatingInt128Test(Int256 input, Int128 expected) => await Assert.That(Int128.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt512TestData))] public async Task ConvertToCheckedInt512Test(Int256 input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt512TestData))] public async Task ConvertToSaturatingInt512Test(Int256 input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt512TestData))] public async Task ConvertToTruncatingInt512Test(Int256 input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedHalfTestData))] public async Task ConvertToCheckedHalfTest(Int256 input, Half expected) => await Assert.That(Half.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingHalfTestData))] public async Task ConvertToSaturatingHalfTest(Int256 input, Half expected) => await Assert.That(Half.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingHalfTestData))] public async Task ConvertToTruncatingHalfTest(Int256 input, Half expected) => await Assert.That(Half.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedSingleTestData))] public async Task ConvertToCheckedSingleTest(Int256 input, float expected) => await Assert.That(float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingSingleTestData))] public async Task ConvertToSaturatingSingleTest(Int256 input, float expected) => await Assert.That(float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingSingleTestData))] public async Task ConvertToTruncatingSingleTest(Int256 input, float expected) => await Assert.That(float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedDoubleTestData))] public async Task ConvertToCheckedDoubleTest(Int256 input, double expected) => await Assert.That(double.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingDoubleTestData))] public async Task ConvertToSaturatingDoubleTest(Int256 input, double expected) => await Assert.That(double.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingDoubleTestData))] public async Task ConvertToTruncatingDoubleTest(Int256 input, double expected) => await Assert.That(double.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedQuadTestData))] public async Task ConvertToCheckedQuadTest(Int256 input, Quad expected) => await Assert.That(Quad.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingQuadTestData))] public async Task ConvertToSaturatingQuadTest(Int256 input, Quad expected) => await Assert.That(Quad.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingQuadTestData))] public async Task ConvertToTruncatingQuadTest(Int256 input, Quad expected) => await Assert.That(Quad.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedOctoTestData))] public async Task ConvertToCheckedOctoTest(Int256 input, Octo expected) => await Assert.That(Octo.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingOctoTestData))] public async Task ConvertToSaturatingOctoTest(Int256 input, Octo expected) => await Assert.That(Octo.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingOctoTestData))] public async Task ConvertToTruncatingOctoTest(Int256 input, Octo expected) => await Assert.That(Octo.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedByteTestData))] public async Task ConvertFromCheckedByteTest(byte input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingByteTestData))] public async Task ConvertFromSaturatingByteTest(byte input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingByteTestData))] public async Task ConvertFromTruncatingByteTest(byte input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt16TestData))] public async Task ConvertFromCheckedUInt16Test(ushort input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt16TestData))] public async Task ConvertFromSaturatingUInt16Test(ushort input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt16TestData))] public async Task ConvertFromTruncatingUInt16Test(ushort input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt32TestData))] public async Task ConvertFromCheckedUInt32Test(uint input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt32TestData))] public async Task ConvertFromSaturatingUInt32Test(uint input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt32TestData))] public async Task ConvertFromTruncatingUInt32Test(uint input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt64TestData))] public async Task ConvertFromCheckedUInt64Test(ulong input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt64TestData))] public async Task ConvertFromSaturatingUInt64Test(ulong input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt64TestData))] public async Task ConvertFromTruncatingUInt64Test(ulong input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt128TestData))] public async Task ConvertFromCheckedUInt128Test(UInt128 input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt128TestData))] public async Task ConvertFromSaturatingUInt128Test(UInt128 input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt128TestData))] public async Task ConvertFromTruncatingUInt128Test(UInt128 input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt256TestData))] public async Task ConvertFromCheckedUInt256Test(UInt256 input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt256TestData))] public async Task ConvertFromSaturatingUInt256Test(UInt256 input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt256TestData))] public async Task ConvertFromTruncatingUInt256Test(UInt256 input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt512TestData))] public async Task ConvertFromCheckedUInt512Test(UInt512 input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt512TestData))] public async Task ConvertFromSaturatingUInt512Test(UInt512 input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt512TestData))] public async Task ConvertFromTruncatingUInt512Test(UInt512 input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedSByteTestData))] public async Task ConvertFromCheckedSByteTest(sbyte input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingSByteTestData))] public async Task ConvertFromSaturatingSByteTest(sbyte input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingSByteTestData))] public async Task ConvertFromTruncatingSByteTest(sbyte input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt16TestData))] public async Task ConvertFromCheckedInt16Test(short input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt16TestData))] public async Task ConvertFromSaturatingInt16Test(short input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt16TestData))] public async Task ConvertFromTruncatingInt16Test(short input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt32TestData))] public async Task ConvertFromCheckedInt32Test(int input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt32TestData))] public async Task ConvertFromSaturatingInt32Test(int input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt32TestData))] public async Task ConvertFromTruncatingInt32Test(int input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt64TestData))] public async Task ConvertFromCheckedInt64Test(long input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt64TestData))] public async Task ConvertFromSaturatingInt64Test(long input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt64TestData))] public async Task ConvertFromTruncatingInt64Test(long input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt128TestData))] public async Task ConvertFromCheckedInt128Test(Int128 input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt128TestData))] public async Task ConvertFromSaturatingInt128Test(Int128 input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt128TestData))] public async Task ConvertFromTruncatingInt128Test(Int128 input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt512TestData))] public async Task ConvertFromCheckedInt512Test(Int512 input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt512TestData))] public async Task ConvertFromSaturatingInt512Test(Int512 input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt512TestData))] public async Task ConvertFromTruncatingInt512Test(Int512 input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedHalfTestData))] public async Task ConvertFromCheckedHalfTest(Half input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingHalfTestData))] public async Task ConvertFromSaturatingHalfTest(Half input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingHalfTestData))] public async Task ConvertFromTruncatingHalfTest(Half input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedSingleTestData))] public async Task ConvertFromCheckedSingleTest(float input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingSingleTestData))] public async Task ConvertFromSaturatingSingleTest(float input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingSingleTestData))] public async Task ConvertFromTruncatingSingleTest(float input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedDoubleTestData))] public async Task ConvertFromCheckedDoubleTest(double input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingDoubleTestData))] public async Task ConvertFromSaturatingDoubleTest(double input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingDoubleTestData))] public async Task ConvertFromTruncatingDoubleTest(double input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedQuadTestData))] public async Task ConvertFromCheckedQuadTest(Quad input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingQuadTestData))] public async Task ConvertFromSaturatingQuadTest(Quad input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingQuadTestData))] public async Task ConvertFromTruncatingQuadTest(Quad input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedOctoTestData))] public async Task ConvertFromCheckedOctoTest(Octo input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingOctoTestData))] public async Task ConvertFromSaturatingOctoTest(Octo input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingOctoTestData))] public async Task ConvertFromTruncatingOctoTest(Octo input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); + #endregion } \ No newline at end of file diff --git a/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs b/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs index 7ea0d32..5bdd4bb 100644 --- a/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs @@ -667,4 +667,150 @@ public async Task WriteLittleEndianTest(Int512 value, byte[] expectedDestination } } #endregion + + #region Conversion + [Test, MethodDataSource(nameof(ConvertToCheckedByteTestData))] public async Task ConvertToCheckedByteTest(Int512 input, byte expected) => await Assert.That(byte.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingByteTestData))] public async Task ConvertToSaturatingByteTest(Int512 input, byte expected) => await Assert.That(byte.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingByteTestData))] public async Task ConvertToTruncatingByteTest(Int512 input, byte expected) => await Assert.That(byte.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt16TestData))] public async Task ConvertToCheckedUInt16Test(Int512 input, ushort expected) => await Assert.That(ushort.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt16TestData))] public async Task ConvertToSaturatingUInt16Test(Int512 input, ushort expected) => await Assert.That(ushort.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt16TestData))] public async Task ConvertToTruncatingUInt16Test(Int512 input, ushort expected) => await Assert.That(ushort.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt32TestData))] public async Task ConvertToCheckedUInt32Test(Int512 input, uint expected) => await Assert.That(uint.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt32TestData))] public async Task ConvertToSaturatingUInt32Test(Int512 input, uint expected) => await Assert.That(uint.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt32TestData))] public async Task ConvertToTruncatingUInt32Test(Int512 input, uint expected) => await Assert.That(uint.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt64TestData))] public async Task ConvertToCheckedUInt64Test(Int512 input, ulong expected) => await Assert.That(ulong.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt64TestData))] public async Task ConvertToSaturatingUInt64Test(Int512 input, ulong expected) => await Assert.That(ulong.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt64TestData))] public async Task ConvertToTruncatingUInt64Test(Int512 input, ulong expected) => await Assert.That(ulong.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt128TestData))] public async Task ConvertToCheckedUInt128Test(Int512 input, UInt128 expected) => await Assert.That(UInt128.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt128TestData))] public async Task ConvertToSaturatingUInt128Test(Int512 input, UInt128 expected) => await Assert.That(UInt128.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt128TestData))] public async Task ConvertToTruncatingUInt128Test(Int512 input, UInt128 expected) => await Assert.That(UInt128.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt256TestData))] public async Task ConvertToCheckedUInt256Test(Int512 input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt256TestData))] public async Task ConvertToSaturatingUInt256Test(Int512 input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt256TestData))] public async Task ConvertToTruncatingUInt256Test(Int512 input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt512TestData))] public async Task ConvertToCheckedUInt512Test(Int512 input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt512TestData))] public async Task ConvertToSaturatingUInt512Test(Int512 input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt512TestData))] public async Task ConvertToTruncatingUInt512Test(Int512 input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedSByteTestData))] public async Task ConvertToCheckedSByteTest(Int512 input, sbyte expected) => await Assert.That(sbyte.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingSByteTestData))] public async Task ConvertToSaturatingSByteTest(Int512 input, sbyte expected) => await Assert.That(sbyte.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingSByteTestData))] public async Task ConvertToTruncatingByteTest(Int512 input, sbyte expected) => await Assert.That(sbyte.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt16TestData))] public async Task ConvertToCheckedInt16Test(Int512 input, short expected) => await Assert.That(ushort.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt16TestData))] public async Task ConvertToSaturatingInt16Test(Int512 input, short expected) => await Assert.That(ushort.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt16TestData))] public async Task ConvertToTruncatingInt16Test(Int512 input, short expected) => await Assert.That(ushort.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt32TestData))] public async Task ConvertToCheckedInt32Test(Int512 input, int expected) => await Assert.That(uint.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt32TestData))] public async Task ConvertToSaturatingInt32Test(Int512 input, int expected) => await Assert.That(uint.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt32TestData))] public async Task ConvertToTruncatingInt32Test(Int512 input, int expected) => await Assert.That(uint.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt64TestData))] public async Task ConvertToCheckedInt64Test(Int512 input, long expected) => await Assert.That(ulong.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt64TestData))] public async Task ConvertToSaturatingInt64Test(Int512 input, long expected) => await Assert.That(ulong.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt64TestData))] public async Task ConvertToTruncatingInt64Test(Int512 input, long expected) => await Assert.That(ulong.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt128TestData))] public async Task ConvertToCheckedInt128Test(Int512 input, Int128 expected) => await Assert.That(Int128.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt128TestData))] public async Task ConvertToSaturatingInt128Test(Int512 input, Int128 expected) => await Assert.That(Int128.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt128TestData))] public async Task ConvertToTruncatingInt128Test(Int512 input, Int128 expected) => await Assert.That(Int128.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt256TestData))] public async Task ConvertToCheckedInt256Test(Int512 input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt256TestData))] public async Task ConvertToSaturatingInt256Test(Int512 input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt256TestData))] public async Task ConvertToTruncatingInt256Test(Int512 input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedHalfTestData))] public async Task ConvertToCheckedHalfTest(Int512 input, Half expected) => await Assert.That(Half.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingHalfTestData))] public async Task ConvertToSaturatingHalfTest(Int512 input, Half expected) => await Assert.That(Half.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingHalfTestData))] public async Task ConvertToTruncatingHalfTest(Int512 input, Half expected) => await Assert.That(Half.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedSingleTestData))] public async Task ConvertToCheckedSingleTest(Int512 input, float expected) => await Assert.That(float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingSingleTestData))] public async Task ConvertToSaturatingSingleTest(Int512 input, float expected) => await Assert.That(float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingSingleTestData))] public async Task ConvertToTruncatingSingleTest(Int512 input, float expected) => await Assert.That(float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedDoubleTestData))] public async Task ConvertToCheckedDoubleTest(Int512 input, double expected) => await Assert.That(double.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingDoubleTestData))] public async Task ConvertToSaturatingDoubleTest(Int512 input, double expected) => await Assert.That(double.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingDoubleTestData))] public async Task ConvertToTruncatingDoubleTest(Int512 input, double expected) => await Assert.That(double.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedQuadTestData))] public async Task ConvertToCheckedQuadTest(Int512 input, Quad expected) => await Assert.That(Quad.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingQuadTestData))] public async Task ConvertToSaturatingQuadTest(Int512 input, Quad expected) => await Assert.That(Quad.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingQuadTestData))] public async Task ConvertToTruncatingQuadTest(Int512 input, Quad expected) => await Assert.That(Quad.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedOctoTestData))] public async Task ConvertToCheckedOctoTest(Int512 input, Octo expected) => await Assert.That(Octo.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingOctoTestData))] public async Task ConvertToSaturatingOctoTest(Int512 input, Octo expected) => await Assert.That(Octo.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingOctoTestData))] public async Task ConvertToTruncatingOctoTest(Int512 input, Octo expected) => await Assert.That(Octo.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedByteTestData))] public async Task ConvertFromCheckedByteTest(byte input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingByteTestData))] public async Task ConvertFromSaturatingByteTest(byte input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingByteTestData))] public async Task ConvertFromTruncatingByteTest(byte input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt16TestData))] public async Task ConvertFromCheckedUInt16Test(ushort input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt16TestData))] public async Task ConvertFromSaturatingUInt16Test(ushort input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt16TestData))] public async Task ConvertFromTruncatingUInt16Test(ushort input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt32TestData))] public async Task ConvertFromCheckedUInt32Test(uint input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt32TestData))] public async Task ConvertFromSaturatingUInt32Test(uint input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt32TestData))] public async Task ConvertFromTruncatingUInt32Test(uint input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt64TestData))] public async Task ConvertFromCheckedUInt64Test(ulong input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt64TestData))] public async Task ConvertFromSaturatingUInt64Test(ulong input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt64TestData))] public async Task ConvertFromTruncatingUInt64Test(ulong input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt128TestData))] public async Task ConvertFromCheckedUInt128Test(UInt128 input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt128TestData))] public async Task ConvertFromSaturatingUInt128Test(UInt128 input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt128TestData))] public async Task ConvertFromTruncatingUInt128Test(UInt128 input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt256TestData))] public async Task ConvertFromCheckedUInt256Test(UInt256 input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt256TestData))] public async Task ConvertFromSaturatingUInt256Test(UInt256 input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt256TestData))] public async Task ConvertFromTruncatingUInt256Test(UInt256 input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt512TestData))] public async Task ConvertFromCheckedUInt512Test(UInt512 input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt512TestData))] public async Task ConvertFromSaturatingUInt512Test(UInt512 input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt512TestData))] public async Task ConvertFromTruncatingUInt512Test(UInt512 input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedSByteTestData))] public async Task ConvertFromCheckedSByteTest(sbyte input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingSByteTestData))] public async Task ConvertFromSaturatingSByteTest(sbyte input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingSByteTestData))] public async Task ConvertFromTruncatingSByteTest(sbyte input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt16TestData))] public async Task ConvertFromCheckedInt16Test(short input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt16TestData))] public async Task ConvertFromSaturatingInt16Test(short input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt16TestData))] public async Task ConvertFromTruncatingInt16Test(short input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt32TestData))] public async Task ConvertFromCheckedInt32Test(int input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt32TestData))] public async Task ConvertFromSaturatingInt32Test(int input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt32TestData))] public async Task ConvertFromTruncatingInt32Test(int input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt64TestData))] public async Task ConvertFromCheckedInt64Test(long input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt64TestData))] public async Task ConvertFromSaturatingInt64Test(long input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt64TestData))] public async Task ConvertFromTruncatingInt64Test(long input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt128TestData))] public async Task ConvertFromCheckedInt128Test(Int128 input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt128TestData))] public async Task ConvertFromSaturatingInt128Test(Int128 input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt128TestData))] public async Task ConvertFromTruncatingInt128Test(Int128 input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt256TestData))] public async Task ConvertFromCheckedInt256Test(Int256 input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt256TestData))] public async Task ConvertFromSaturatingInt256Test(Int256 input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt256TestData))] public async Task ConvertFromTruncatingInt256Test(Int256 input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedHalfTestData))] public async Task ConvertFromCheckedHalfTest(Half input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingHalfTestData))] public async Task ConvertFromSaturatingHalfTest(Half input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingHalfTestData))] public async Task ConvertFromTruncatingHalfTest(Half input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedSingleTestData))] public async Task ConvertFromCheckedSingleTest(float input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingSingleTestData))] public async Task ConvertFromSaturatingSingleTest(float input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingSingleTestData))] public async Task ConvertFromTruncatingSingleTest(float input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedDoubleTestData))] public async Task ConvertFromCheckedDoubleTest(double input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingDoubleTestData))] public async Task ConvertFromSaturatingDoubleTest(double input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingDoubleTestData))] public async Task ConvertFromTruncatingDoubleTest(double input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedQuadTestData))] public async Task ConvertFromCheckedQuadTest(Quad input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingQuadTestData))] public async Task ConvertFromSaturatingQuadTest(Quad input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingQuadTestData))] public async Task ConvertFromTruncatingQuadTest(Quad input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedOctoTestData))] public async Task ConvertFromCheckedOctoTest(Octo input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingOctoTestData))] public async Task ConvertFromSaturatingOctoTest(Octo input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingOctoTestData))] public async Task ConvertFromTruncatingOctoTest(Octo input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + #endregion } \ No newline at end of file diff --git a/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs b/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs index 15f6636..734ef4b 100644 --- a/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs @@ -542,4 +542,150 @@ public async Task SqrtTest() await Assert.That(Float.Sqrt(Float.Hundred)).IsApproximately(Float.Ten, Float.Delta); } #endregion + + #region Conversion + [Test, MethodDataSource(nameof(ConvertToCheckedByteTestData))] public async Task ConvertToCheckedByteTest(Float input, byte expected) => await Assert.That(byte.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingByteTestData))] public async Task ConvertToSaturatingByteTest(Float input, byte expected) => await Assert.That(byte.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingByteTestData))] public async Task ConvertToTruncatingByteTest(Float input, byte expected) => await Assert.That(byte.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt16TestData))] public async Task ConvertToCheckedUInt16Test(Float input, ushort expected) => await Assert.That(ushort.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt16TestData))] public async Task ConvertToSaturatingUInt16Test(Float input, ushort expected) => await Assert.That(ushort.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt16TestData))] public async Task ConvertToTruncatingUInt16Test(Float input, ushort expected) => await Assert.That(ushort.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt32TestData))] public async Task ConvertToCheckedUInt32Test(Float input, uint expected) => await Assert.That(uint.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt32TestData))] public async Task ConvertToSaturatingUInt32Test(Float input, uint expected) => await Assert.That(uint.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt32TestData))] public async Task ConvertToTruncatingUInt32Test(Float input, uint expected) => await Assert.That(uint.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt64TestData))] public async Task ConvertToCheckedUInt64Test(Float input, ulong expected) => await Assert.That(ulong.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt64TestData))] public async Task ConvertToSaturatingUInt64Test(Float input, ulong expected) => await Assert.That(ulong.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt64TestData))] public async Task ConvertToTruncatingUInt64Test(Float input, ulong expected) => await Assert.That(ulong.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt128TestData))] public async Task ConvertToCheckedUInt128Test(Float input, UInt128 expected) => await Assert.That(UInt128.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt128TestData))] public async Task ConvertToSaturatingUInt128Test(Float input, UInt128 expected) => await Assert.That(UInt128.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt128TestData))] public async Task ConvertToTruncatingUInt128Test(Float input, UInt128 expected) => await Assert.That(UInt128.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt256TestData))] public async Task ConvertToCheckedUInt256Test(Float input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt256TestData))] public async Task ConvertToSaturatingUInt256Test(Float input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt256TestData))] public async Task ConvertToTruncatingUInt256Test(Float input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt512TestData))] public async Task ConvertToCheckedUInt512Test(Float input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt512TestData))] public async Task ConvertToSaturatingUInt512Test(Float input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt512TestData))] public async Task ConvertToTruncatingUInt512Test(Float input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedSByteTestData))] public async Task ConvertToCheckedSByteTest(Float input, sbyte expected) => await Assert.That(sbyte.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingSByteTestData))] public async Task ConvertToSaturatingSByteTest(Float input, sbyte expected) => await Assert.That(sbyte.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingSByteTestData))] public async Task ConvertToTruncatingByteTest(Float input, sbyte expected) => await Assert.That(sbyte.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt16TestData))] public async Task ConvertToCheckedInt16Test(Float input, short expected) => await Assert.That(ushort.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt16TestData))] public async Task ConvertToSaturatingInt16Test(Float input, short expected) => await Assert.That(ushort.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt16TestData))] public async Task ConvertToTruncatingInt16Test(Float input, short expected) => await Assert.That(ushort.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt32TestData))] public async Task ConvertToCheckedInt32Test(Float input, int expected) => await Assert.That(uint.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt32TestData))] public async Task ConvertToSaturatingInt32Test(Float input, int expected) => await Assert.That(uint.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt32TestData))] public async Task ConvertToTruncatingInt32Test(Float input, int expected) => await Assert.That(uint.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt64TestData))] public async Task ConvertToCheckedInt64Test(Float input, long expected) => await Assert.That(ulong.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt64TestData))] public async Task ConvertToSaturatingInt64Test(Float input, long expected) => await Assert.That(ulong.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt64TestData))] public async Task ConvertToTruncatingInt64Test(Float input, long expected) => await Assert.That(ulong.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt128TestData))] public async Task ConvertToCheckedInt128Test(Float input, Int128 expected) => await Assert.That(Int128.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt128TestData))] public async Task ConvertToSaturatingInt128Test(Float input, Int128 expected) => await Assert.That(Int128.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt128TestData))] public async Task ConvertToTruncatingInt128Test(Float input, Int128 expected) => await Assert.That(Int128.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt256TestData))] public async Task ConvertToCheckedInt256Test(Float input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt256TestData))] public async Task ConvertToSaturatingInt256Test(Float input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt256TestData))] public async Task ConvertToTruncatingInt256Test(Float input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt512TestData))] public async Task ConvertToCheckedInt512Test(Float input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt512TestData))] public async Task ConvertToSaturatingInt512Test(Float input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt512TestData))] public async Task ConvertToTruncatingInt512Test(Float input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedHalfTestData))] public async Task ConvertToCheckedHalfTest(Float input, Half expected) => await Assert.That(Half.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingHalfTestData))] public async Task ConvertToSaturatingHalfTest(Float input, Half expected) => await Assert.That(Half.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingHalfTestData))] public async Task ConvertToTruncatingHalfTest(Float input, Half expected) => await Assert.That(Half.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedSingleTestData))] public async Task ConvertToCheckedSingleTest(Float input, float expected) => await Assert.That(float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingSingleTestData))] public async Task ConvertToSaturatingSingleTest(Float input, float expected) => await Assert.That(float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingSingleTestData))] public async Task ConvertToTruncatingSingleTest(Float input, float expected) => await Assert.That(float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedDoubleTestData))] public async Task ConvertToCheckedDoubleTest(Float input, double expected) => await Assert.That(double.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingDoubleTestData))] public async Task ConvertToSaturatingDoubleTest(Float input, double expected) => await Assert.That(double.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingDoubleTestData))] public async Task ConvertToTruncatingDoubleTest(Float input, double expected) => await Assert.That(double.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedQuadTestData))] public async Task ConvertToCheckedQuadTest(Float input, Quad expected) => await Assert.That(Quad.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingQuadTestData))] public async Task ConvertToSaturatingQuadTest(Float input, Quad expected) => await Assert.That(Quad.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingQuadTestData))] public async Task ConvertToTruncatingQuadTest(Float input, Quad expected) => await Assert.That(Quad.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedByteTestData))] public async Task ConvertFromCheckedByteTest(byte input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingByteTestData))] public async Task ConvertFromSaturatingByteTest(byte input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingByteTestData))] public async Task ConvertFromTruncatingByteTest(byte input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt16TestData))] public async Task ConvertFromCheckedUInt16Test(ushort input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt16TestData))] public async Task ConvertFromSaturatingUInt16Test(ushort input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt16TestData))] public async Task ConvertFromTruncatingUInt16Test(ushort input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt32TestData))] public async Task ConvertFromCheckedUInt32Test(uint input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt32TestData))] public async Task ConvertFromSaturatingUInt32Test(uint input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt32TestData))] public async Task ConvertFromTruncatingUInt32Test(uint input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt64TestData))] public async Task ConvertFromCheckedUInt64Test(ulong input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt64TestData))] public async Task ConvertFromSaturatingUInt64Test(ulong input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt64TestData))] public async Task ConvertFromTruncatingUInt64Test(ulong input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt128TestData))] public async Task ConvertFromCheckedUInt128Test(UInt128 input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt128TestData))] public async Task ConvertFromSaturatingUInt128Test(UInt128 input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt128TestData))] public async Task ConvertFromTruncatingUInt128Test(UInt128 input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt256TestData))] public async Task ConvertFromCheckedUInt256Test(UInt256 input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt256TestData))] public async Task ConvertFromSaturatingUInt256Test(UInt256 input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt256TestData))] public async Task ConvertFromTruncatingUInt256Test(UInt256 input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt512TestData))] public async Task ConvertFromCheckedUInt512Test(UInt512 input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt512TestData))] public async Task ConvertFromSaturatingUInt512Test(UInt512 input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt512TestData))] public async Task ConvertFromTruncatingUInt512Test(UInt512 input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedSByteTestData))] public async Task ConvertFromCheckedSByteTest(sbyte input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingSByteTestData))] public async Task ConvertFromSaturatingSByteTest(sbyte input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingSByteTestData))] public async Task ConvertFromTruncatingSByteTest(sbyte input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt16TestData))] public async Task ConvertFromCheckedInt16Test(short input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt16TestData))] public async Task ConvertFromSaturatingInt16Test(short input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt16TestData))] public async Task ConvertFromTruncatingInt16Test(short input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt32TestData))] public async Task ConvertFromCheckedInt32Test(int input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt32TestData))] public async Task ConvertFromSaturatingInt32Test(int input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt32TestData))] public async Task ConvertFromTruncatingInt32Test(int input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt64TestData))] public async Task ConvertFromCheckedInt64Test(long input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt64TestData))] public async Task ConvertFromSaturatingInt64Test(long input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt64TestData))] public async Task ConvertFromTruncatingInt64Test(long input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt128TestData))] public async Task ConvertFromCheckedInt128Test(Int128 input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt128TestData))] public async Task ConvertFromSaturatingInt128Test(Int128 input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt128TestData))] public async Task ConvertFromTruncatingInt128Test(Int128 input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt256TestData))] public async Task ConvertFromCheckedInt256Test(Int256 input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt256TestData))] public async Task ConvertFromSaturatingInt256Test(Int256 input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt256TestData))] public async Task ConvertFromTruncatingInt256Test(Int256 input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt512TestData))] public async Task ConvertFromCheckedInt512Test(Int512 input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt512TestData))] public async Task ConvertFromSaturatingInt512Test(Int512 input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt512TestData))] public async Task ConvertFromTruncatingInt512Test(Int512 input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedHalfTestData))] public async Task ConvertFromCheckedHalfTest(Half input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingHalfTestData))] public async Task ConvertFromSaturatingHalfTest(Half input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingHalfTestData))] public async Task ConvertFromTruncatingHalfTest(Half input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedSingleTestData))] public async Task ConvertFromCheckedSingleTest(float input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingSingleTestData))] public async Task ConvertFromSaturatingSingleTest(float input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingSingleTestData))] public async Task ConvertFromTruncatingSingleTest(float input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedDoubleTestData))] public async Task ConvertFromCheckedDoubleTest(double input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingDoubleTestData))] public async Task ConvertFromSaturatingDoubleTest(double input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingDoubleTestData))] public async Task ConvertFromTruncatingDoubleTest(double input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedQuadTestData))] public async Task ConvertFromCheckedDoubleTest(Quad input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingQuadTestData))] public async Task ConvertFromSaturatingDoubleTest(Quad input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingQuadTestData))] public async Task ConvertFromTruncatingDoubleTest(Quad input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + #endregion } \ No newline at end of file diff --git a/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs b/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs index 1c12216..0d37167 100644 --- a/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs @@ -901,4 +901,150 @@ await Assert.That(Float.Tanh(Float.Zero)) .IsBitwiseEquivalentTo(Float.Zero); } #endregion + + #region Conversion + [Test, MethodDataSource(nameof(ConvertToCheckedByteTestData))] public async Task ConvertToCheckedByteTest(Float input, byte expected) => await Assert.That(byte.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingByteTestData))] public async Task ConvertToSaturatingByteTest(Float input, byte expected) => await Assert.That(byte.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingByteTestData))] public async Task ConvertToTruncatingByteTest(Float input, byte expected) => await Assert.That(byte.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt16TestData))] public async Task ConvertToCheckedUInt16Test(Float input, ushort expected) => await Assert.That(ushort.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt16TestData))] public async Task ConvertToSaturatingUInt16Test(Float input, ushort expected) => await Assert.That(ushort.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt16TestData))] public async Task ConvertToTruncatingUInt16Test(Float input, ushort expected) => await Assert.That(ushort.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt32TestData))] public async Task ConvertToCheckedUInt32Test(Float input, uint expected) => await Assert.That(uint.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt32TestData))] public async Task ConvertToSaturatingUInt32Test(Float input, uint expected) => await Assert.That(uint.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt32TestData))] public async Task ConvertToTruncatingUInt32Test(Float input, uint expected) => await Assert.That(uint.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt64TestData))] public async Task ConvertToCheckedUInt64Test(Float input, ulong expected) => await Assert.That(ulong.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt64TestData))] public async Task ConvertToSaturatingUInt64Test(Float input, ulong expected) => await Assert.That(ulong.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt64TestData))] public async Task ConvertToTruncatingUInt64Test(Float input, ulong expected) => await Assert.That(ulong.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt128TestData))] public async Task ConvertToCheckedUInt128Test(Float input, UInt128 expected) => await Assert.That(UInt128.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt128TestData))] public async Task ConvertToSaturatingUInt128Test(Float input, UInt128 expected) => await Assert.That(UInt128.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt128TestData))] public async Task ConvertToTruncatingUInt128Test(Float input, UInt128 expected) => await Assert.That(UInt128.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt256TestData))] public async Task ConvertToCheckedUInt256Test(Float input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt256TestData))] public async Task ConvertToSaturatingUInt256Test(Float input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt256TestData))] public async Task ConvertToTruncatingUInt256Test(Float input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt512TestData))] public async Task ConvertToCheckedUInt512Test(Float input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt512TestData))] public async Task ConvertToSaturatingUInt512Test(Float input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt512TestData))] public async Task ConvertToTruncatingUInt512Test(Float input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedSByteTestData))] public async Task ConvertToCheckedSByteTest(Float input, sbyte expected) => await Assert.That(sbyte.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingSByteTestData))] public async Task ConvertToSaturatingSByteTest(Float input, sbyte expected) => await Assert.That(sbyte.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingSByteTestData))] public async Task ConvertToTruncatingByteTest(Float input, sbyte expected) => await Assert.That(sbyte.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt16TestData))] public async Task ConvertToCheckedInt16Test(Float input, short expected) => await Assert.That(ushort.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt16TestData))] public async Task ConvertToSaturatingInt16Test(Float input, short expected) => await Assert.That(ushort.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt16TestData))] public async Task ConvertToTruncatingInt16Test(Float input, short expected) => await Assert.That(ushort.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt32TestData))] public async Task ConvertToCheckedInt32Test(Float input, int expected) => await Assert.That(uint.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt32TestData))] public async Task ConvertToSaturatingInt32Test(Float input, int expected) => await Assert.That(uint.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt32TestData))] public async Task ConvertToTruncatingInt32Test(Float input, int expected) => await Assert.That(uint.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt64TestData))] public async Task ConvertToCheckedInt64Test(Float input, long expected) => await Assert.That(ulong.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt64TestData))] public async Task ConvertToSaturatingInt64Test(Float input, long expected) => await Assert.That(ulong.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt64TestData))] public async Task ConvertToTruncatingInt64Test(Float input, long expected) => await Assert.That(ulong.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt128TestData))] public async Task ConvertToCheckedInt128Test(Float input, Int128 expected) => await Assert.That(Int128.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt128TestData))] public async Task ConvertToSaturatingInt128Test(Float input, Int128 expected) => await Assert.That(Int128.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt128TestData))] public async Task ConvertToTruncatingInt128Test(Float input, Int128 expected) => await Assert.That(Int128.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt256TestData))] public async Task ConvertToCheckedInt256Test(Float input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt256TestData))] public async Task ConvertToSaturatingInt256Test(Float input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt256TestData))] public async Task ConvertToTruncatingInt256Test(Float input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt512TestData))] public async Task ConvertToCheckedInt512Test(Float input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt512TestData))] public async Task ConvertToSaturatingInt512Test(Float input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt512TestData))] public async Task ConvertToTruncatingInt512Test(Float input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedHalfTestData))] public async Task ConvertToCheckedHalfTest(Float input, Half expected) => await Assert.That(Half.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingHalfTestData))] public async Task ConvertToSaturatingHalfTest(Float input, Half expected) => await Assert.That(Half.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingHalfTestData))] public async Task ConvertToTruncatingHalfTest(Float input, Half expected) => await Assert.That(Half.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedSingleTestData))] public async Task ConvertToCheckedSingleTest(Float input, float expected) => await Assert.That(float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingSingleTestData))] public async Task ConvertToSaturatingSingleTest(Float input, float expected) => await Assert.That(float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingSingleTestData))] public async Task ConvertToTruncatingSingleTest(Float input, float expected) => await Assert.That(float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedDoubleTestData))] public async Task ConvertToCheckedDoubleTest(Float input, double expected) => await Assert.That(double.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingDoubleTestData))] public async Task ConvertToSaturatingDoubleTest(Float input, double expected) => await Assert.That(double.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingDoubleTestData))] public async Task ConvertToTruncatingDoubleTest(Float input, double expected) => await Assert.That(double.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedOctoTestData))] public async Task ConvertToCheckedOctoTest(Float input, Octo expected) => await Assert.That(Octo.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingOctoTestData))] public async Task ConvertToSaturatingOctoTest(Float input, Octo expected) => await Assert.That(Octo.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingOctoTestData))] public async Task ConvertToTruncatingOctoTest(Float input, Octo expected) => await Assert.That(Octo.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedByteTestData))] public async Task ConvertFromCheckedByteTest(byte input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingByteTestData))] public async Task ConvertFromSaturatingByteTest(byte input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingByteTestData))] public async Task ConvertFromTruncatingByteTest(byte input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt16TestData))] public async Task ConvertFromCheckedUInt16Test(ushort input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt16TestData))] public async Task ConvertFromSaturatingUInt16Test(ushort input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt16TestData))] public async Task ConvertFromTruncatingUInt16Test(ushort input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt32TestData))] public async Task ConvertFromCheckedUInt32Test(uint input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt32TestData))] public async Task ConvertFromSaturatingUInt32Test(uint input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt32TestData))] public async Task ConvertFromTruncatingUInt32Test(uint input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt64TestData))] public async Task ConvertFromCheckedUInt64Test(ulong input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt64TestData))] public async Task ConvertFromSaturatingUInt64Test(ulong input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt64TestData))] public async Task ConvertFromTruncatingUInt64Test(ulong input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt128TestData))] public async Task ConvertFromCheckedUInt128Test(UInt128 input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt128TestData))] public async Task ConvertFromSaturatingUInt128Test(UInt128 input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt128TestData))] public async Task ConvertFromTruncatingUInt128Test(UInt128 input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt256TestData))] public async Task ConvertFromCheckedUInt256Test(UInt256 input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt256TestData))] public async Task ConvertFromSaturatingUInt256Test(UInt256 input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt256TestData))] public async Task ConvertFromTruncatingUInt256Test(UInt256 input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt512TestData))] public async Task ConvertFromCheckedUInt512Test(UInt512 input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt512TestData))] public async Task ConvertFromSaturatingUInt512Test(UInt512 input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt512TestData))] public async Task ConvertFromTruncatingUInt512Test(UInt512 input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedSByteTestData))] public async Task ConvertFromCheckedSByteTest(sbyte input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingSByteTestData))] public async Task ConvertFromSaturatingSByteTest(sbyte input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingSByteTestData))] public async Task ConvertFromTruncatingSByteTest(sbyte input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt16TestData))] public async Task ConvertFromCheckedInt16Test(short input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt16TestData))] public async Task ConvertFromSaturatingInt16Test(short input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt16TestData))] public async Task ConvertFromTruncatingInt16Test(short input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt32TestData))] public async Task ConvertFromCheckedInt32Test(int input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt32TestData))] public async Task ConvertFromSaturatingInt32Test(int input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt32TestData))] public async Task ConvertFromTruncatingInt32Test(int input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt64TestData))] public async Task ConvertFromCheckedInt64Test(long input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt64TestData))] public async Task ConvertFromSaturatingInt64Test(long input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt64TestData))] public async Task ConvertFromTruncatingInt64Test(long input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt128TestData))] public async Task ConvertFromCheckedInt128Test(Int128 input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt128TestData))] public async Task ConvertFromSaturatingInt128Test(Int128 input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt128TestData))] public async Task ConvertFromTruncatingInt128Test(Int128 input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt256TestData))] public async Task ConvertFromCheckedInt256Test(Int256 input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt256TestData))] public async Task ConvertFromSaturatingInt256Test(Int256 input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt256TestData))] public async Task ConvertFromTruncatingInt256Test(Int256 input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt512TestData))] public async Task ConvertFromCheckedInt512Test(Int512 input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt512TestData))] public async Task ConvertFromSaturatingInt512Test(Int512 input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt512TestData))] public async Task ConvertFromTruncatingInt512Test(Int512 input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedHalfTestData))] public async Task ConvertFromCheckedHalfTest(Half input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingHalfTestData))] public async Task ConvertFromSaturatingHalfTest(Half input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingHalfTestData))] public async Task ConvertFromTruncatingHalfTest(Half input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedSingleTestData))] public async Task ConvertFromCheckedSingleTest(float input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingSingleTestData))] public async Task ConvertFromSaturatingSingleTest(float input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingSingleTestData))] public async Task ConvertFromTruncatingSingleTest(float input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedDoubleTestData))] public async Task ConvertFromCheckedDoubleTest(double input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingDoubleTestData))] public async Task ConvertFromSaturatingDoubleTest(double input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingDoubleTestData))] public async Task ConvertFromTruncatingDoubleTest(double input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedOctoTestData))] public async Task ConvertFromCheckedOctoTest(Octo input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingOctoTestData))] public async Task ConvertFromSaturatingOctoTest(Octo input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingOctoTestData))] public async Task ConvertFromTruncatingOctoTest(Octo input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + #endregion } \ No newline at end of file diff --git a/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs b/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs index ff24ac1..77e3945 100644 --- a/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs @@ -667,4 +667,150 @@ public async Task WriteLittleEndianTest(UInt512 value, byte[] expectedDestinatio } } #endregion + + #region Conversion + [Test, MethodDataSource(nameof(ConvertToCheckedByteTestData))] public async Task ConvertToCheckedByteTest(UInt512 input, byte expected) => await Assert.That(byte.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingByteTestData))] public async Task ConvertToSaturatingByteTest(UInt512 input, byte expected) => await Assert.That(byte.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingByteTestData))] public async Task ConvertToTruncatingByteTest(UInt512 input, byte expected) => await Assert.That(byte.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt16TestData))] public async Task ConvertToCheckedUInt16Test(UInt512 input, ushort expected) => await Assert.That(ushort.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt16TestData))] public async Task ConvertToSaturatingUInt16Test(UInt512 input, ushort expected) => await Assert.That(ushort.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt16TestData))] public async Task ConvertToTruncatingUInt16Test(UInt512 input, ushort expected) => await Assert.That(ushort.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt32TestData))] public async Task ConvertToCheckedUInt32Test(UInt512 input, uint expected) => await Assert.That(uint.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt32TestData))] public async Task ConvertToSaturatingUInt32Test(UInt512 input, uint expected) => await Assert.That(uint.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt32TestData))] public async Task ConvertToTruncatingUInt32Test(UInt512 input, uint expected) => await Assert.That(uint.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt64TestData))] public async Task ConvertToCheckedUInt64Test(UInt512 input, ulong expected) => await Assert.That(ulong.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt64TestData))] public async Task ConvertToSaturatingUInt64Test(UInt512 input, ulong expected) => await Assert.That(ulong.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt64TestData))] public async Task ConvertToTruncatingUInt64Test(UInt512 input, ulong expected) => await Assert.That(ulong.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt128TestData))] public async Task ConvertToCheckedUInt128Test(UInt512 input, UInt128 expected) => await Assert.That(UInt128.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt128TestData))] public async Task ConvertToSaturatingUInt128Test(UInt512 input, UInt128 expected) => await Assert.That(UInt128.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt128TestData))] public async Task ConvertToTruncatingUInt128Test(UInt512 input, UInt128 expected) => await Assert.That(UInt128.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedUInt256TestData))] public async Task ConvertToCheckedUInt256Test(UInt512 input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingUInt256TestData))] public async Task ConvertToSaturatingUInt256Test(UInt512 input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingUInt256TestData))] public async Task ConvertToTruncatingUInt256Test(UInt512 input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedSByteTestData))] public async Task ConvertToCheckedSByteTest(UInt512 input, sbyte expected) => await Assert.That(sbyte.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingSByteTestData))] public async Task ConvertToSaturatingSByteTest(UInt512 input, sbyte expected) => await Assert.That(sbyte.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingSByteTestData))] public async Task ConvertToTruncatingByteTest(UInt512 input, sbyte expected) => await Assert.That(sbyte.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt16TestData))] public async Task ConvertToCheckedInt16Test(UInt512 input, short expected) => await Assert.That(ushort.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt16TestData))] public async Task ConvertToSaturatingInt16Test(UInt512 input, short expected) => await Assert.That(ushort.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt16TestData))] public async Task ConvertToTruncatingInt16Test(UInt512 input, short expected) => await Assert.That(ushort.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt32TestData))] public async Task ConvertToCheckedInt32Test(UInt512 input, int expected) => await Assert.That(uint.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt32TestData))] public async Task ConvertToSaturatingInt32Test(UInt512 input, int expected) => await Assert.That(uint.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt32TestData))] public async Task ConvertToTruncatingInt32Test(UInt512 input, int expected) => await Assert.That(uint.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt64TestData))] public async Task ConvertToCheckedInt64Test(UInt512 input, long expected) => await Assert.That(ulong.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt64TestData))] public async Task ConvertToSaturatingInt64Test(UInt512 input, long expected) => await Assert.That(ulong.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt64TestData))] public async Task ConvertToTruncatingInt64Test(UInt512 input, long expected) => await Assert.That(ulong.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt128TestData))] public async Task ConvertToCheckedInt128Test(UInt512 input, Int128 expected) => await Assert.That(Int128.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt128TestData))] public async Task ConvertToSaturatingInt128Test(UInt512 input, Int128 expected) => await Assert.That(Int128.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt128TestData))] public async Task ConvertToTruncatingInt128Test(UInt512 input, Int128 expected) => await Assert.That(Int128.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt256TestData))] public async Task ConvertToCheckedInt256Test(UInt512 input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt256TestData))] public async Task ConvertToSaturatingInt256Test(UInt512 input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt256TestData))] public async Task ConvertToTruncatingInt256Test(UInt512 input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedInt512TestData))] public async Task ConvertToCheckedInt512Test(UInt512 input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt512TestData))] public async Task ConvertToSaturatingInt512Test(UInt512 input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt512TestData))] public async Task ConvertToTruncatingInt512Test(UInt512 input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedHalfTestData))] public async Task ConvertToCheckedHalfTest(UInt512 input, Half expected) => await Assert.That(Half.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingHalfTestData))] public async Task ConvertToSaturatingHalfTest(UInt512 input, Half expected) => await Assert.That(Half.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingHalfTestData))] public async Task ConvertToTruncatingHalfTest(UInt512 input, Half expected) => await Assert.That(Half.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedSingleTestData))] public async Task ConvertToCheckedSingleTest(UInt512 input, float expected) => await Assert.That(float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingSingleTestData))] public async Task ConvertToSaturatingSingleTest(UInt512 input, float expected) => await Assert.That(float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingSingleTestData))] public async Task ConvertToTruncatingSingleTest(UInt512 input, float expected) => await Assert.That(float.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedDoubleTestData))] public async Task ConvertToCheckedDoubleTest(UInt512 input, double expected) => await Assert.That(double.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingDoubleTestData))] public async Task ConvertToSaturatingDoubleTest(UInt512 input, double expected) => await Assert.That(double.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingDoubleTestData))] public async Task ConvertToTruncatingDoubleTest(UInt512 input, double expected) => await Assert.That(double.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedQuadTestData))] public async Task ConvertToCheckedQuadTest(UInt512 input, Quad expected) => await Assert.That(Quad.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingQuadTestData))] public async Task ConvertToSaturatingQuadTest(UInt512 input, Quad expected) => await Assert.That(Quad.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingQuadTestData))] public async Task ConvertToTruncatingQuadTest(UInt512 input, Quad expected) => await Assert.That(Quad.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedOctoTestData))] public async Task ConvertToCheckedOctoTest(UInt512 input, Octo expected) => await Assert.That(Octo.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingOctoTestData))] public async Task ConvertToSaturatingOctoTest(UInt512 input, Octo expected) => await Assert.That(Octo.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingOctoTestData))] public async Task ConvertToTruncatingOctoTest(UInt512 input, Octo expected) => await Assert.That(Octo.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedByteTestData))] public async Task ConvertFromCheckedByteTest(byte input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingByteTestData))] public async Task ConvertFromSaturatingByteTest(byte input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingByteTestData))] public async Task ConvertFromTruncatingByteTest(byte input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt16TestData))] public async Task ConvertFromCheckedUInt16Test(ushort input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt16TestData))] public async Task ConvertFromSaturatingUInt16Test(ushort input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt16TestData))] public async Task ConvertFromTruncatingUInt16Test(ushort input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt32TestData))] public async Task ConvertFromCheckedUInt32Test(uint input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt32TestData))] public async Task ConvertFromSaturatingUInt32Test(uint input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt32TestData))] public async Task ConvertFromTruncatingUInt32Test(uint input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt64TestData))] public async Task ConvertFromCheckedUInt64Test(ulong input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt64TestData))] public async Task ConvertFromSaturatingUInt64Test(ulong input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt64TestData))] public async Task ConvertFromTruncatingUInt64Test(ulong input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt128TestData))] public async Task ConvertFromCheckedUInt128Test(UInt128 input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt128TestData))] public async Task ConvertFromSaturatingUInt128Test(UInt128 input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt128TestData))] public async Task ConvertFromTruncatingUInt128Test(UInt128 input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedUInt256TestData))] public async Task ConvertFromCheckedUInt256Test(UInt256 input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt256TestData))] public async Task ConvertFromSaturatingUInt256Test(UInt256 input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt256TestData))] public async Task ConvertFromTruncatingUInt256Test(UInt256 input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedSByteTestData))] public async Task ConvertFromCheckedSByteTest(sbyte input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingSByteTestData))] public async Task ConvertFromSaturatingSByteTest(sbyte input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingSByteTestData))] public async Task ConvertFromTruncatingSByteTest(sbyte input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt16TestData))] public async Task ConvertFromCheckedInt16Test(short input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt16TestData))] public async Task ConvertFromSaturatingInt16Test(short input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt16TestData))] public async Task ConvertFromTruncatingInt16Test(short input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt32TestData))] public async Task ConvertFromCheckedInt32Test(int input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt32TestData))] public async Task ConvertFromSaturatingInt32Test(int input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt32TestData))] public async Task ConvertFromTruncatingInt32Test(int input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt64TestData))] public async Task ConvertFromCheckedInt64Test(long input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt64TestData))] public async Task ConvertFromSaturatingInt64Test(long input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt64TestData))] public async Task ConvertFromTruncatingInt64Test(long input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt128TestData))] public async Task ConvertFromCheckedInt128Test(Int128 input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt128TestData))] public async Task ConvertFromSaturatingInt128Test(Int128 input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt128TestData))] public async Task ConvertFromTruncatingInt128Test(Int128 input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt256TestData))] public async Task ConvertFromCheckedInt256Test(Int256 input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt256TestData))] public async Task ConvertFromSaturatingInt256Test(Int256 input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt256TestData))] public async Task ConvertFromTruncatingInt256Test(Int256 input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedInt512TestData))] public async Task ConvertFromCheckedInt512Test(Int512 input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingInt512TestData))] public async Task ConvertFromSaturatingInt512Test(Int512 input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingInt512TestData))] public async Task ConvertFromTruncatingInt512Test(Int512 input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedHalfTestData))] public async Task ConvertFromCheckedHalfTest(Half input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingHalfTestData))] public async Task ConvertFromSaturatingHalfTest(Half input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingHalfTestData))] public async Task ConvertFromTruncatingHalfTest(Half input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedSingleTestData))] public async Task ConvertFromCheckedSingleTest(float input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingSingleTestData))] public async Task ConvertFromSaturatingSingleTest(float input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingSingleTestData))] public async Task ConvertFromTruncatingSingleTest(float input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedDoubleTestData))] public async Task ConvertFromCheckedDoubleTest(double input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingDoubleTestData))] public async Task ConvertFromSaturatingDoubleTest(double input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingDoubleTestData))] public async Task ConvertFromTruncatingDoubleTest(double input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedQuadTestData))] public async Task ConvertFromCheckedQuadTest(Quad input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingQuadTestData))] public async Task ConvertFromSaturatingQuadTest(Quad input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingQuadTestData))] public async Task ConvertFromTruncatingQuadTest(Quad input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertFromCheckedOctoTestData))] public async Task ConvertFromCheckedOctoTest(Octo input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingOctoTestData))] public async Task ConvertFromSaturatingOctoTest(Octo input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingOctoTestData))] public async Task ConvertFromTruncatingOctoTest(Octo input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); + #endregion } \ No newline at end of file From 499a0597411c282a400049657b546d960a0c73ad Mon Sep 17 00:00:00 2001 From: crookseta Date: Mon, 13 Jul 2026 14:14:53 -0500 Subject: [PATCH 55/74] -Added Tests for UInt256->(unsigned integer) conversions. --- .../Data/UInt256DataSources.cs | 120 +++++++++++++++--- .../Extensions/Int256Extensions.cs | 38 +++--- .../Extensions/Int512Extensions.cs | 44 +++---- .../Extensions/UInt256Extensions.cs | 23 ++-- .../Extensions/UInt512Extensions.cs | 38 ++++-- 5 files changed, 185 insertions(+), 78 deletions(-) diff --git a/src/MissingValues.Tests/Data/UInt256DataSources.cs b/src/MissingValues.Tests/Data/UInt256DataSources.cs index 89f439f..61d1185 100644 --- a/src/MissingValues.Tests/Data/UInt256DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt256DataSources.cs @@ -1,6 +1,7 @@ using System.Globalization; using System.Runtime.CompilerServices; using MissingValues.Tests.Data.Sources; +using MissingValues.Tests.Extensions; namespace MissingValues.Tests.Data; @@ -858,92 +859,175 @@ public class UInt256DataSources public static IEnumerable> ConvertToCheckedByteTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, 1); + yield return () => (UInt256.ByteMaxValue, byte.MaxValue); } public static IEnumerable> ConvertToSaturatingByteTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, 1); + yield return () => (UInt256.ByteMaxValue, byte.MaxValue); + yield return () => (UInt256.MaxValue, byte.MaxValue); + yield return () => (UInt256.ByteMaxValue + UInt256.One, byte.MaxValue); } public static IEnumerable> ConvertToTruncatingByteTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, 1); + yield return () => (UInt256.ByteMaxValue, byte.MaxValue); + yield return () => (UInt256.MaxValue, byte.MaxValue); + yield return () => (UInt256.ByteMaxValue + UInt256.One, 0); } public static IEnumerable> ConvertToCheckedUInt16TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, 1); + yield return () => (UInt256.ByteMaxValue, byte.MaxValue); + yield return () => (UInt256.UInt16MaxValue, ushort.MaxValue); } public static IEnumerable> ConvertToSaturatingUInt16TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, 1); + yield return () => (UInt256.ByteMaxValue, byte.MaxValue); + yield return () => (UInt256.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt256.MaxValue, ushort.MaxValue); + yield return () => (UInt256.UInt16MaxValue + UInt256.One, ushort.MaxValue); } public static IEnumerable> ConvertToTruncatingUInt16TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, 1); + yield return () => (UInt256.ByteMaxValue, byte.MaxValue); + yield return () => (UInt256.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt256.MaxValue, ushort.MaxValue); + yield return () => (UInt256.UInt16MaxValue + UInt256.One, 0); } public static IEnumerable> ConvertToCheckedUInt32TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, 1); + yield return () => (UInt256.ByteMaxValue, byte.MaxValue); + yield return () => (UInt256.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt256.UInt32MaxValue, uint.MaxValue); } public static IEnumerable> ConvertToSaturatingUInt32TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, 1); + yield return () => (UInt256.ByteMaxValue, byte.MaxValue); + yield return () => (UInt256.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt256.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt256.MaxValue, uint.MaxValue); + yield return () => (UInt256.UInt32MaxValue + UInt256.One, uint.MaxValue); } public static IEnumerable> ConvertToTruncatingUInt32TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, 1); + yield return () => (UInt256.ByteMaxValue, byte.MaxValue); + yield return () => (UInt256.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt256.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt256.MaxValue, uint.MaxValue); + yield return () => (UInt256.UInt32MaxValue + UInt256.One, 0); } public static IEnumerable> ConvertToCheckedUInt64TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, 1U); + yield return () => (UInt256.ByteMaxValue, byte.MaxValue); + yield return () => (UInt256.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt256.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt256.UInt64MaxValue, ulong.MaxValue); } public static IEnumerable> ConvertToSaturatingUInt64TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, 1U); + yield return () => (UInt256.ByteMaxValue, byte.MaxValue); + yield return () => (UInt256.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt256.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt256.UInt64MaxValue, ulong.MaxValue); + yield return () => (UInt256.MaxValue, ulong.MaxValue); + yield return () => (UInt256.UInt64MaxValue + UInt256.One, ulong.MaxValue); } public static IEnumerable> ConvertToTruncatingUInt64TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, 1U); + yield return () => (UInt256.ByteMaxValue, byte.MaxValue); + yield return () => (UInt256.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt256.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt256.UInt64MaxValue, ulong.MaxValue); + yield return () => (UInt256.MaxValue, ulong.MaxValue); + yield return () => (UInt256.UInt64MaxValue + UInt256.One, 0); } public static IEnumerable> ConvertToCheckedUInt128TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, UInt128.One); + yield return () => (UInt256.ByteMaxValue, byte.MaxValue); + yield return () => (UInt256.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt256.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt256.UInt64MaxValue, ulong.MaxValue); + yield return () => (UInt256.UInt128MaxValue, UInt128.MaxValue); } public static IEnumerable> ConvertToSaturatingUInt128TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, UInt128.One); + yield return () => (UInt256.ByteMaxValue, byte.MaxValue); + yield return () => (UInt256.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt256.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt256.UInt64MaxValue, ulong.MaxValue); + yield return () => (UInt256.UInt128MaxValue, UInt128.MaxValue); + yield return () => (UInt256.MaxValue, UInt128.MaxValue); + yield return () => (UInt256.UInt128MaxValue + UInt256.One, UInt128.MaxValue); } public static IEnumerable> ConvertToTruncatingUInt128TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, UInt128.One); + yield return () => (UInt256.ByteMaxValue, byte.MaxValue); + yield return () => (UInt256.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt256.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt256.UInt64MaxValue, ulong.MaxValue); + yield return () => (UInt256.UInt128MaxValue, UInt128.MaxValue); + yield return () => (UInt256.MaxValue, UInt128.MaxValue); + yield return () => (UInt256.UInt128MaxValue + UInt256.One, UInt128.Zero); } public static IEnumerable> ConvertToCheckedUInt512TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, UInt512.One); + yield return () => (UInt256.ByteMaxValue, UInt512.ByteMaxValue); + yield return () => (UInt256.UInt16MaxValue, UInt512.UInt16MaxValue); + yield return () => (UInt256.UInt32MaxValue, UInt512.UInt32MaxValue); + yield return () => (UInt256.UInt64MaxValue, UInt512.UInt64MaxValue); + yield return () => (UInt256.UInt128MaxValue, UInt512.UInt128MaxValue); + yield return () => (UInt256.MaxValue, UInt512.UInt256MaxValue); } public static IEnumerable> ConvertToSaturatingUInt512TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, UInt512.One); + yield return () => (UInt256.ByteMaxValue, UInt512.ByteMaxValue); + yield return () => (UInt256.UInt16MaxValue, UInt512.UInt16MaxValue); + yield return () => (UInt256.UInt32MaxValue, UInt512.UInt32MaxValue); + yield return () => (UInt256.UInt64MaxValue, UInt512.UInt64MaxValue); + yield return () => (UInt256.UInt128MaxValue, UInt512.UInt128MaxValue); + yield return () => (UInt256.MaxValue, UInt512.UInt256MaxValue); } public static IEnumerable> ConvertToTruncatingUInt512TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, UInt512.One); + yield return () => (UInt256.ByteMaxValue, UInt512.ByteMaxValue); + yield return () => (UInt256.UInt16MaxValue, UInt512.UInt16MaxValue); + yield return () => (UInt256.UInt32MaxValue, UInt512.UInt32MaxValue); + yield return () => (UInt256.UInt64MaxValue, UInt512.UInt64MaxValue); + yield return () => (UInt256.UInt128MaxValue, UInt512.UInt128MaxValue); + yield return () => (UInt256.MaxValue, UInt512.UInt256MaxValue); } public static IEnumerable> ConvertToCheckedSByteTestData() diff --git a/src/MissingValues.Tests/Extensions/Int256Extensions.cs b/src/MissingValues.Tests/Extensions/Int256Extensions.cs index 399e325..b184528 100644 --- a/src/MissingValues.Tests/Extensions/Int256Extensions.cs +++ b/src/MissingValues.Tests/Extensions/Int256Extensions.cs @@ -4,34 +4,34 @@ public static class Int256Extensions { extension(Int256) { - private static Int256 SByteMaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_007F); - private static Int256 SByteMinValue => new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF80); + public static Int256 SByteMaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_007F); + public static Int256 SByteMinValue => new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF80); - private static Int256 ByteMaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_00FF); + public static Int256 ByteMaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_00FF); - private static Int256 Int16MaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_7FFF); - private static Int256 Int16MinValue => new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_8000); + public static Int256 Int16MaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_7FFF); + public static Int256 Int16MinValue => new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_8000); - private static Int256 UInt16MaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_FFFF); + public static Int256 UInt16MaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_FFFF); - private static Int256 Int32MaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_7FFF_FFFF); - private static Int256 Int32MinValue => new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_8000_0000); + public static Int256 Int32MaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_7FFF_FFFF); + public static Int256 Int32MinValue => new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_8000_0000); - private static Int256 UInt32MaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_FFFF_FFFF); + public static Int256 UInt32MaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_FFFF_FFFF); - private static Int256 Int64MaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x7FFF_FFFF_FFFF_FFFF); - private static Int256 Int64MinValue => new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000); + public static Int256 Int64MaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x7FFF_FFFF_FFFF_FFFF); + public static Int256 Int64MinValue => new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000); - private static Int256 UInt64MaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF); + public static Int256 UInt64MaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF); - private static Int256 Int128MaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); - private static Int256 Int128MinValue => new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000, 0x0000_0000_0000_0000); + public static Int256 Int128MaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); + public static Int256 Int128MinValue => new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000, 0x0000_0000_0000_0000); - private static Int256 UInt128MaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); + public static Int256 UInt128MaxValue => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); - private static Int256 NegativeTwo => new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE); - private static Int256 Two => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0002); - private static Int256 MaxValueMinusOne => new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE); - private static Int256 MinValuePlusOne => new(0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001); + public static Int256 NegativeTwo => new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE); + public static Int256 Two => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0002); + public static Int256 MaxValueMinusOne => new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE); + public static Int256 MinValuePlusOne => new(0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0001); } } \ No newline at end of file diff --git a/src/MissingValues.Tests/Extensions/Int512Extensions.cs b/src/MissingValues.Tests/Extensions/Int512Extensions.cs index f4caab6..0ef2cc5 100644 --- a/src/MissingValues.Tests/Extensions/Int512Extensions.cs +++ b/src/MissingValues.Tests/Extensions/Int512Extensions.cs @@ -4,82 +4,82 @@ public static class Int512Extensions { extension(Int512) { - private static Int512 SByteMaxValue => new( + public static Int512 SByteMaxValue => new( 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_007F); - private static Int512 SByteMinValue => new( + public static Int512 SByteMinValue => new( 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF80); - private static Int512 ByteMaxValue => new( + public static Int512 ByteMaxValue => new( 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_00FF); - private static Int512 Int16MaxValue => new( + public static Int512 Int16MaxValue => new( 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_7FFF); - private static Int512 Int16MinValue => new( + public static Int512 Int16MinValue => new( 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_8000); - private static Int512 UInt16MaxValue => new( + public static Int512 UInt16MaxValue => new( 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_FFFF); - private static Int512 Int32MaxValue => new( + public static Int512 Int32MaxValue => new( 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_7FFF_FFFF); - private static Int512 Int32MinValue => new( + public static Int512 Int32MinValue => new( 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_8000_0000); - private static Int512 UInt32MaxValue => new( + public static Int512 UInt32MaxValue => new( 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_FFFF_FFFF); - private static Int512 Int64MaxValue => new( + public static Int512 Int64MaxValue => new( 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x7FFF_FFFF_FFFF_FFFF); - private static Int512 Int64MinValue => new( + public static Int512 Int64MinValue => new( 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000); - private static Int512 UInt64MaxValue => new( + public static Int512 UInt64MaxValue => new( 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF); - private static Int512 Int128MaxValue => new( + public static Int512 Int128MaxValue => new( 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); - private static Int512 Int128MinValue => new( + public static Int512 Int128MinValue => new( 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000, 0x0000_0000_0000_0000); - private static Int512 UInt128MaxValue => new( + public static Int512 UInt128MaxValue => new( 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); - private static Int512 Int256MaxValue => new( + public static Int512 Int256MaxValue => new( 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); - private static Int512 Int256MinValue => new( + public static Int512 Int256MinValue => new( 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000); - private static Int512 UInt256MaxValue => new( + public static Int512 UInt256MaxValue => new( 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); - private static Int512 NegativeTwo => new( + public static Int512 NegativeTwo => new( 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE); - private static Int512 Two => new( + public static Int512 Two => new( 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0002); - private static Int512 MaxValueMinusOne => new( + public static Int512 MaxValueMinusOne => new( 0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE); - private static Int512 MinValuePlusOne => new( + public static Int512 MinValuePlusOne => new( 0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000,0x0000_0000_0000_0000, 0x0000_0000_0000_0001); } diff --git a/src/MissingValues.Tests/Extensions/UInt256Extensions.cs b/src/MissingValues.Tests/Extensions/UInt256Extensions.cs index 3d4d6c0..02b404b 100644 --- a/src/MissingValues.Tests/Extensions/UInt256Extensions.cs +++ b/src/MissingValues.Tests/Extensions/UInt256Extensions.cs @@ -4,15 +4,20 @@ public static class UInt256Extensions { extension(UInt256) { - private static UInt256 ByteMaxValue => new(0, 0, 0x0000_0000_0000_0000, 0x0000_0000_0000_00FF); - private static UInt256 UInt16MaxValue => new(0, 0, 0x0000_0000_0000_0000, 0x0000_0000_0000_FFFF); - private static UInt256 UInt32MaxValue => new(0, 0, 0x0000_0000_0000_0000, 0x0000_0000_FFFF_FFFF); - private static UInt256 UInt64MaxValue => new(0, 0, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF); - private static UInt256 UInt128MaxValue => new(0, 0, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); + public static UInt256 SByteMaxValue => new(0, 0, 0x0000_0000_0000_0000, 0x0000_0000_0000_007F); + public static UInt256 ByteMaxValue => new(0, 0, 0x0000_0000_0000_0000, 0x0000_0000_0000_00FF); + public static UInt256 Int16MaxValue => new(0, 0, 0x0000_0000_0000_0000, 0x0000_0000_0000_7FFF); + public static UInt256 UInt16MaxValue => new(0, 0, 0x0000_0000_0000_0000, 0x0000_0000_0000_FFFF); + public static UInt256 Int32MaxValue => new(0, 0, 0x0000_0000_0000_0000, 0x0000_0000_7FFF_FFFF); + public static UInt256 UInt32MaxValue => new(0, 0, 0x0000_0000_0000_0000, 0x0000_0000_FFFF_FFFF); + public static UInt256 UInt64MaxValue => new(0, 0, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF); + public static UInt256 Int64MaxValue => new(0, 0, 0x0000_0000_0000_0000, 0x7FFF_FFFF_FFFF_FFFF); + public static UInt256 Int128MaxValue => new(0, 0, 0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); + public static UInt256 UInt128MaxValue => new(0, 0, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); - private static UInt256 Two => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0002); - private static UInt256 MaxValueMinusOne => new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE); - private static UInt256 MaxValueMinusTwo => new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFD); - private static UInt256 HalfMaxValue => new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); + public static UInt256 Two => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0002); + public static UInt256 MaxValueMinusOne => new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE); + public static UInt256 MaxValueMinusTwo => new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFD); + public static UInt256 HalfMaxValue => new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); } } \ No newline at end of file diff --git a/src/MissingValues.Tests/Extensions/UInt512Extensions.cs b/src/MissingValues.Tests/Extensions/UInt512Extensions.cs index 5ee9de9..ec7fd9b 100644 --- a/src/MissingValues.Tests/Extensions/UInt512Extensions.cs +++ b/src/MissingValues.Tests/Extensions/UInt512Extensions.cs @@ -4,35 +4,53 @@ public static class UInt512Extensions { extension(UInt512) { - private static UInt512 ByteMaxValue => new( + public static UInt512 SByteMaxValue => new( + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_007F); + public static UInt512 ByteMaxValue => new( 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_00FF); - private static UInt512 UInt16MaxValue => new( + public static UInt512 Int16MaxValue => new( + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_7FFF); + public static UInt512 UInt16MaxValue => new( 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_FFFF); - private static UInt512 UInt32MaxValue => new( + public static UInt512 Int32MaxValue => new( + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_7FFF_FFFF); + public static UInt512 UInt32MaxValue => new( 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_FFFF_FFFF); - private static UInt512 UInt64MaxValue => new( + public static UInt512 Int64MaxValue => new( + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x7FFF_FFFF_FFFF_FFFF); + public static UInt512 UInt64MaxValue => new( 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF); - private static UInt512 UInt128MaxValue => new( + public static UInt512 Int128MaxValue => new( + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); + public static UInt512 UInt128MaxValue => new( 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); - private static UInt512 UInt256MaxValue => new( + public static UInt512 Int256MaxValue => new( + 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, + 0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); + public static UInt512 UInt256MaxValue => new( 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); - private static UInt512 Two => new( + public static UInt512 Two => new( 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0002); - private static UInt512 MaxValueMinusOne => new( + public static UInt512 MaxValueMinusOne => new( 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE); - private static UInt512 MaxValueMinusTwo => new( + public static UInt512 MaxValueMinusTwo => new( 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFD); - private static UInt512 HalfMaxValue => new( + public static UInt512 HalfMaxValue => new( 0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); } From 3fe1f88b590bbb7c9987943d4b89221f2c9b069d Mon Sep 17 00:00:00 2001 From: crookseta Date: Wed, 15 Jul 2026 20:07:47 -0500 Subject: [PATCH 56/74] -Added Tests for UInt256->(signed integer) conversions. --- .../Data/UInt256DataSources.cs | 150 +++++++++++++++--- .../Extensions/UInt256Extensions.cs | 1 + .../Extensions/UInt512Extensions.cs | 3 + 3 files changed, 133 insertions(+), 21 deletions(-) diff --git a/src/MissingValues.Tests/Data/UInt256DataSources.cs b/src/MissingValues.Tests/Data/UInt256DataSources.cs index 61d1185..8093f62 100644 --- a/src/MissingValues.Tests/Data/UInt256DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt256DataSources.cs @@ -1032,107 +1032,215 @@ public class UInt256DataSources public static IEnumerable> ConvertToCheckedSByteTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, 1); + yield return () => (UInt256.SByteMaxValue, sbyte.MaxValue); } public static IEnumerable> ConvertToSaturatingSByteTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, 1); + yield return () => (UInt256.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt256.MaxValue, sbyte.MaxValue); + yield return () => (UInt256.SByteMaxValue + UInt256.One, sbyte.MaxValue); } public static IEnumerable> ConvertToTruncatingSByteTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, 1); + yield return () => (UInt256.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt256.MaxValue, unchecked((sbyte)0xFF)); + yield return () => (UInt256.SByteMaxValue + UInt256.One, unchecked((sbyte)0x80)); } public static IEnumerable> ConvertToCheckedInt16TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, 1); + yield return () => (UInt256.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt256.Int16MaxValue, short.MaxValue); } public static IEnumerable> ConvertToSaturatingInt16TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, 1); + yield return () => (UInt256.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt256.Int16MaxValue, short.MaxValue); + yield return () => (UInt256.MaxValue, short.MaxValue); + yield return () => (UInt256.Int16MaxValue + UInt256.One, short.MaxValue); } public static IEnumerable> ConvertToTruncatingInt16TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, 1); + yield return () => (UInt256.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt256.Int16MaxValue, short.MaxValue); + yield return () => (UInt256.MaxValue, unchecked((short)0xFFFF)); + yield return () => (UInt256.Int16MaxValue + UInt256.One, unchecked((short)0x8000)); } public static IEnumerable> ConvertToCheckedInt32TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, 1); + yield return () => (UInt256.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt256.Int16MaxValue, short.MaxValue); + yield return () => (UInt256.Int32MaxValue, int.MaxValue); } public static IEnumerable> ConvertToSaturatingInt32TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, 1); + yield return () => (UInt256.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt256.Int16MaxValue, short.MaxValue); + yield return () => (UInt256.Int32MaxValue, int.MaxValue); + yield return () => (UInt256.MaxValue, int.MaxValue); + yield return () => (UInt256.Int32MaxValue + UInt256.One, int.MaxValue); } public static IEnumerable> ConvertToTruncatingInt32TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, 1); + yield return () => (UInt256.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt256.Int16MaxValue, short.MaxValue); + yield return () => (UInt256.Int32MaxValue, int.MaxValue); + yield return () => (UInt256.MaxValue, unchecked((int)0xFFFF_FFFF)); + yield return () => (UInt256.Int32MaxValue + UInt256.One, unchecked((int)0x8000_0000)); } public static IEnumerable> ConvertToCheckedInt64TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, 1); + yield return () => (UInt256.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt256.Int16MaxValue, short.MaxValue); + yield return () => (UInt256.Int32MaxValue, int.MaxValue); + yield return () => (UInt256.Int64MaxValue, long.MaxValue); } public static IEnumerable> ConvertToSaturatingInt64TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, 1); + yield return () => (UInt256.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt256.Int16MaxValue, short.MaxValue); + yield return () => (UInt256.Int32MaxValue, int.MaxValue); + yield return () => (UInt256.Int64MaxValue, long.MaxValue); + yield return () => (UInt256.MaxValue, long.MaxValue); + yield return () => (UInt256.Int64MaxValue + UInt256.One, long.MaxValue); } public static IEnumerable> ConvertToTruncatingInt64TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, 1); + yield return () => (UInt256.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt256.Int16MaxValue, short.MaxValue); + yield return () => (UInt256.Int32MaxValue, int.MaxValue); + yield return () => (UInt256.Int64MaxValue, long.MaxValue); + yield return () => (UInt256.MaxValue, unchecked((long)0xFFFF_FFFF_FFFF_FFFF)); + yield return () => (UInt256.Int64MaxValue + UInt256.One, unchecked((long)0x8000_0000_0000_0000)); } public static IEnumerable> ConvertToCheckedInt128TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, Int128.One); + yield return () => (UInt256.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt256.Int16MaxValue, short.MaxValue); + yield return () => (UInt256.Int32MaxValue, int.MaxValue); + yield return () => (UInt256.Int64MaxValue, long.MaxValue); + yield return () => (UInt256.Int128MaxValue, Int128.MaxValue); } public static IEnumerable> ConvertToSaturatingInt128TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, Int128.One); + yield return () => (UInt256.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt256.Int16MaxValue, short.MaxValue); + yield return () => (UInt256.Int32MaxValue, int.MaxValue); + yield return () => (UInt256.Int64MaxValue, long.MaxValue); + yield return () => (UInt256.Int128MaxValue, Int128.MaxValue); + yield return () => (UInt256.MaxValue, Int128.MaxValue); + yield return () => (UInt256.Int128MaxValue + UInt256.One, Int128.MaxValue); } public static IEnumerable> ConvertToTruncatingInt128TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, Int128.One); + yield return () => (UInt256.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt256.Int16MaxValue, short.MaxValue); + yield return () => (UInt256.Int32MaxValue, int.MaxValue); + yield return () => (UInt256.Int64MaxValue, long.MaxValue); + yield return () => (UInt256.Int128MaxValue, Int128.MaxValue); + yield return () => (UInt256.MaxValue, new Int128(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); + yield return () => (UInt256.Int128MaxValue + UInt256.One, new Int128(0x8000_0000_0000_0000, 0x0000_0000_0000_0000)); } public static IEnumerable> ConvertToCheckedInt256TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, Int256.One); + yield return () => (UInt256.SByteMaxValue, Int256.SByteMaxValue); + yield return () => (UInt256.Int16MaxValue, Int256.Int16MaxValue); + yield return () => (UInt256.Int32MaxValue, Int256.Int32MaxValue); + yield return () => (UInt256.Int64MaxValue, Int256.Int64MaxValue); + yield return () => (UInt256.Int128MaxValue, Int256.Int128MaxValue); + yield return () => (UInt256.Int256MaxValue, Int256.MaxValue); } public static IEnumerable> ConvertToSaturatingInt256TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, Int256.One); + yield return () => (UInt256.SByteMaxValue, Int256.SByteMaxValue); + yield return () => (UInt256.Int16MaxValue, Int256.Int16MaxValue); + yield return () => (UInt256.Int32MaxValue, Int256.Int32MaxValue); + yield return () => (UInt256.Int64MaxValue, Int256.Int64MaxValue); + yield return () => (UInt256.Int128MaxValue, Int256.Int128MaxValue); + yield return () => (UInt256.Int256MaxValue, Int256.MaxValue); + yield return () => (UInt256.MaxValue, Int256.MaxValue); + yield return () => (UInt256.Int256MaxValue + UInt256.One, Int256.MaxValue); } public static IEnumerable> ConvertToTruncatingInt256TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, Int256.One); + yield return () => (UInt256.SByteMaxValue, Int256.SByteMaxValue); + yield return () => (UInt256.Int16MaxValue, Int256.Int16MaxValue); + yield return () => (UInt256.Int32MaxValue, Int256.Int32MaxValue); + yield return () => (UInt256.Int64MaxValue, Int256.Int64MaxValue); + yield return () => (UInt256.Int128MaxValue, Int256.Int128MaxValue); + yield return () => (UInt256.Int256MaxValue, Int256.MaxValue); + yield return () => (UInt256.MaxValue, new Int256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); + yield return () => (UInt256.Int256MaxValue + UInt256.One, new Int256(0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); } public static IEnumerable> ConvertToCheckedInt512TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, Int512.One); + yield return () => (UInt256.SByteMaxValue, Int512.SByteMaxValue); + yield return () => (UInt256.Int16MaxValue, Int512.Int16MaxValue); + yield return () => (UInt256.Int32MaxValue, Int512.Int32MaxValue); + yield return () => (UInt256.Int64MaxValue, Int512.Int64MaxValue); + yield return () => (UInt256.Int128MaxValue, Int512.Int128MaxValue); + yield return () => (UInt256.Int256MaxValue, Int512.Int256MaxValue); + yield return () => (UInt256.MaxValue, Int512.UInt256MaxValue); } public static IEnumerable> ConvertToSaturatingInt512TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, Int512.One); + yield return () => (UInt256.SByteMaxValue, Int512.SByteMaxValue); + yield return () => (UInt256.Int16MaxValue, Int512.Int16MaxValue); + yield return () => (UInt256.Int32MaxValue, Int512.Int32MaxValue); + yield return () => (UInt256.Int64MaxValue, Int512.Int64MaxValue); + yield return () => (UInt256.Int128MaxValue, Int512.Int128MaxValue); + yield return () => (UInt256.Int256MaxValue, Int512.Int256MaxValue); + yield return () => (UInt256.MaxValue, Int512.UInt256MaxValue); } public static IEnumerable> ConvertToTruncatingInt512TestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, Int512.One); + yield return () => (UInt256.SByteMaxValue, Int512.SByteMaxValue); + yield return () => (UInt256.Int16MaxValue, Int512.Int16MaxValue); + yield return () => (UInt256.Int32MaxValue, Int512.Int32MaxValue); + yield return () => (UInt256.Int64MaxValue, Int512.Int64MaxValue); + yield return () => (UInt256.Int128MaxValue, Int512.Int128MaxValue); + yield return () => (UInt256.Int256MaxValue, Int512.Int256MaxValue); + yield return () => (UInt256.MaxValue, Int512.UInt256MaxValue); } public static IEnumerable> ConvertToCheckedHalfTestData() diff --git a/src/MissingValues.Tests/Extensions/UInt256Extensions.cs b/src/MissingValues.Tests/Extensions/UInt256Extensions.cs index 02b404b..8e06c63 100644 --- a/src/MissingValues.Tests/Extensions/UInt256Extensions.cs +++ b/src/MissingValues.Tests/Extensions/UInt256Extensions.cs @@ -14,6 +14,7 @@ public static class UInt256Extensions public static UInt256 Int64MaxValue => new(0, 0, 0x0000_0000_0000_0000, 0x7FFF_FFFF_FFFF_FFFF); public static UInt256 Int128MaxValue => new(0, 0, 0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); public static UInt256 UInt128MaxValue => new(0, 0, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); + public static UInt256 Int256MaxValue => new(0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); public static UInt256 Two => new(0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0002); public static UInt256 MaxValueMinusOne => new(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFE); diff --git a/src/MissingValues.Tests/Extensions/UInt512Extensions.cs b/src/MissingValues.Tests/Extensions/UInt512Extensions.cs index ec7fd9b..07c88f3 100644 --- a/src/MissingValues.Tests/Extensions/UInt512Extensions.cs +++ b/src/MissingValues.Tests/Extensions/UInt512Extensions.cs @@ -40,6 +40,9 @@ public static class UInt512Extensions public static UInt512 UInt256MaxValue => new( 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); + public static UInt512 Int512MaxValue => new( + 0x7FFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, + 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF); public static UInt512 Two => new( 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, From dbb4530b2bb9e55acd76f65f39e8fd69a7399ae8 Mon Sep 17 00:00:00 2001 From: crookseta Date: Fri, 17 Jul 2026 12:40:50 -0500 Subject: [PATCH 57/74] -Added Tests for UInt256->(floating point) conversions. --- .../Data/UInt256DataSources.cs | 157 ++++++++++++++++-- 1 file changed, 145 insertions(+), 12 deletions(-) diff --git a/src/MissingValues.Tests/Data/UInt256DataSources.cs b/src/MissingValues.Tests/Data/UInt256DataSources.cs index 8093f62..59da0de 100644 --- a/src/MissingValues.Tests/Data/UInt256DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt256DataSources.cs @@ -1,4 +1,5 @@ using System.Globalization; +using System.Numerics; using System.Runtime.CompilerServices; using MissingValues.Tests.Data.Sources; using MissingValues.Tests.Extensions; @@ -1245,80 +1246,212 @@ public class UInt256DataSources public static IEnumerable> ConvertToCheckedHalfTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, Half.One); + yield return () => (UInt256.ByteMaxValue, (Half)byte.MaxValue); + yield return () => (UInt256.SByteMaxValue, (Half)sbyte.MaxValue); + yield return () => (UInt256.Int16MaxValue, (Half)short.MaxValue); } public static IEnumerable> ConvertToSaturatingHalfTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, Half.One); + yield return () => (UInt256.ByteMaxValue, (Half)byte.MaxValue); + yield return () => (UInt256.SByteMaxValue, (Half)sbyte.MaxValue); + yield return () => (UInt256.Int16MaxValue, (Half)short.MaxValue); + yield return () => (UInt256.UInt16MaxValue, Half.MaxValue); + yield return () => (UInt256.MaxValue, Half.MaxValue); } public static IEnumerable> ConvertToTruncatingHalfTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, Half.One); + yield return () => (UInt256.ByteMaxValue, (Half)byte.MaxValue); + yield return () => (UInt256.SByteMaxValue, (Half)sbyte.MaxValue); + yield return () => (UInt256.Int16MaxValue, (Half)short.MaxValue); + yield return () => (UInt256.UInt16MaxValue, Half.MaxValue); + yield return () => (UInt256.MaxValue, Half.MaxValue); } public static IEnumerable> ConvertToCheckedSingleTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, 1f); + yield return () => (UInt256.ByteMaxValue, byte.MaxValue); + yield return () => (UInt256.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt256.Int16MaxValue, short.MaxValue); + yield return () => (UInt256.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt256.Int32MaxValue, int.MaxValue); + yield return () => (UInt256.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt256.Int64MaxValue, long.MaxValue); + yield return () => (UInt256.UInt64MaxValue, ulong.MaxValue); } public static IEnumerable> ConvertToSaturatingSingleTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, 1f); + yield return () => (UInt256.ByteMaxValue, byte.MaxValue); + yield return () => (UInt256.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt256.Int16MaxValue, short.MaxValue); + yield return () => (UInt256.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt256.Int32MaxValue, int.MaxValue); + yield return () => (UInt256.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt256.Int64MaxValue, long.MaxValue); + yield return () => (UInt256.UInt64MaxValue, ulong.MaxValue); } public static IEnumerable> ConvertToTruncatingSingleTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, 1f); + yield return () => (UInt256.ByteMaxValue, byte.MaxValue); + yield return () => (UInt256.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt256.Int16MaxValue, short.MaxValue); + yield return () => (UInt256.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt256.Int32MaxValue, int.MaxValue); + yield return () => (UInt256.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt256.Int64MaxValue, long.MaxValue); + yield return () => (UInt256.UInt64MaxValue, ulong.MaxValue); } public static IEnumerable> ConvertToCheckedDoubleTestData() { + yield return () => (UInt256.One, 1d); + yield return () => (UInt256.ByteMaxValue, byte.MaxValue); + yield return () => (UInt256.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt256.Int16MaxValue, short.MaxValue); + yield return () => (UInt256.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt256.Int32MaxValue, int.MaxValue); + yield return () => (UInt256.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt256.Int64MaxValue, long.MaxValue); + yield return () => (UInt256.UInt64MaxValue, ulong.MaxValue); + yield return () => (UInt256.Int128MaxValue, (double)Int128.MaxValue); + yield return () => (UInt256.UInt128MaxValue, (double)UInt128.MaxValue); + + yield return () => (UInt256.MaxValue, 115792089237316195423570985008687907853269984665640564039457584007913129639935.0d); + yield return () => (UInt256.Parse("781377183594418599030564404241984000000000000000000"), 781377183594418599030564404241984000000000000000000.0d); } public static IEnumerable> ConvertToSaturatingDoubleTestData() { + yield return () => (UInt256.One, 1d); + yield return () => (UInt256.ByteMaxValue, byte.MaxValue); + yield return () => (UInt256.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt256.Int16MaxValue, short.MaxValue); + yield return () => (UInt256.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt256.Int32MaxValue, int.MaxValue); + yield return () => (UInt256.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt256.Int64MaxValue, long.MaxValue); + yield return () => (UInt256.UInt64MaxValue, ulong.MaxValue); + yield return () => (UInt256.Int128MaxValue, (double)Int128.MaxValue); + yield return () => (UInt256.UInt128MaxValue, (double)UInt128.MaxValue); + + yield return () => (UInt256.MaxValue, 115792089237316195423570985008687907853269984665640564039457584007913129639935.0d); + yield return () => (UInt256.Parse("781377183594418599030564404241984000000000000000000"), 781377183594418599030564404241984000000000000000000.0d); } public static IEnumerable> ConvertToTruncatingDoubleTestData() { + yield return () => (UInt256.One, 1d); + yield return () => (UInt256.ByteMaxValue, byte.MaxValue); + yield return () => (UInt256.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt256.Int16MaxValue, short.MaxValue); + yield return () => (UInt256.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt256.Int32MaxValue, int.MaxValue); + yield return () => (UInt256.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt256.Int64MaxValue, long.MaxValue); + yield return () => (UInt256.UInt64MaxValue, ulong.MaxValue); + yield return () => (UInt256.Int128MaxValue, (double)Int128.MaxValue); + yield return () => (UInt256.UInt128MaxValue, (double)UInt128.MaxValue); + + yield return () => (UInt256.MaxValue, 115792089237316195423570985008687907853269984665640564039457584007913129639935.0d); + yield return () => (UInt256.Parse("781377183594418599030564404241984000000000000000000"), 781377183594418599030564404241984000000000000000000.0d); } + // TODO: Add test for BigInteger conversion + // public static IEnumerable> ConvertToCheckedBigIntegerTestData(); + public static IEnumerable> ConvertToCheckedQuadTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, Quad.One); + yield return () => (UInt256.ByteMaxValue, Quad.ByteMaxValue); + yield return () => (UInt256.SByteMaxValue, Quad.SByteMaxValue); + yield return () => (UInt256.Int16MaxValue, Quad.Int16MaxValue); + yield return () => (UInt256.UInt16MaxValue, Quad.UInt16MaxValue); + yield return () => (UInt256.Int32MaxValue, Quad.Int32MaxValue); + yield return () => (UInt256.UInt32MaxValue, Quad.UInt32MaxValue); + yield return () => (UInt256.Int64MaxValue, Quad.Int64MaxValue); + yield return () => (UInt256.UInt64MaxValue, Quad.UInt64MaxValue); + // TODO: Also test for higher numeric values. } public static IEnumerable> ConvertToSaturatingQuadTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, Quad.One); + yield return () => (UInt256.ByteMaxValue, Quad.ByteMaxValue); + yield return () => (UInt256.SByteMaxValue, Quad.SByteMaxValue); + yield return () => (UInt256.Int16MaxValue, Quad.Int16MaxValue); + yield return () => (UInt256.UInt16MaxValue, Quad.UInt16MaxValue); + yield return () => (UInt256.Int32MaxValue, Quad.Int32MaxValue); + yield return () => (UInt256.UInt32MaxValue, Quad.UInt32MaxValue); + yield return () => (UInt256.Int64MaxValue, Quad.Int64MaxValue); + yield return () => (UInt256.UInt64MaxValue, Quad.UInt64MaxValue); } public static IEnumerable> ConvertToTruncatingQuadTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, Quad.One); + yield return () => (UInt256.ByteMaxValue, Quad.ByteMaxValue); + yield return () => (UInt256.SByteMaxValue, Quad.SByteMaxValue); + yield return () => (UInt256.Int16MaxValue, Quad.Int16MaxValue); + yield return () => (UInt256.UInt16MaxValue, Quad.UInt16MaxValue); + yield return () => (UInt256.Int32MaxValue, Quad.Int32MaxValue); + yield return () => (UInt256.UInt32MaxValue, Quad.UInt32MaxValue); + yield return () => (UInt256.Int64MaxValue, Quad.Int64MaxValue); + yield return () => (UInt256.UInt64MaxValue, Quad.UInt64MaxValue); } public static IEnumerable> ConvertToCheckedOctoTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, Octo.One); + yield return () => (UInt256.ByteMaxValue, Octo.ByteMaxValue); + yield return () => (UInt256.SByteMaxValue, Octo.SByteMaxValue); + yield return () => (UInt256.Int16MaxValue, Octo.Int16MaxValue); + yield return () => (UInt256.UInt16MaxValue, Octo.UInt16MaxValue); + yield return () => (UInt256.Int32MaxValue, Octo.Int32MaxValue); + yield return () => (UInt256.UInt32MaxValue, Octo.UInt32MaxValue); + yield return () => (UInt256.Int64MaxValue, Octo.Int64MaxValue); + yield return () => (UInt256.UInt64MaxValue, Octo.UInt64MaxValue); + // TODO: Also test for higher numeric values. } public static IEnumerable> ConvertToSaturatingOctoTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, Octo.One); + yield return () => (UInt256.ByteMaxValue, Octo.ByteMaxValue); + yield return () => (UInt256.SByteMaxValue, Octo.SByteMaxValue); + yield return () => (UInt256.Int16MaxValue, Octo.Int16MaxValue); + yield return () => (UInt256.UInt16MaxValue, Octo.UInt16MaxValue); + yield return () => (UInt256.Int32MaxValue, Octo.Int32MaxValue); + yield return () => (UInt256.UInt32MaxValue, Octo.UInt32MaxValue); + yield return () => (UInt256.Int64MaxValue, Octo.Int64MaxValue); + yield return () => (UInt256.UInt64MaxValue, Octo.UInt64MaxValue); } public static IEnumerable> ConvertToTruncatingOctoTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, Octo.One); + yield return () => (UInt256.ByteMaxValue, Octo.ByteMaxValue); + yield return () => (UInt256.SByteMaxValue, Octo.SByteMaxValue); + yield return () => (UInt256.Int16MaxValue, Octo.Int16MaxValue); + yield return () => (UInt256.UInt16MaxValue, Octo.UInt16MaxValue); + yield return () => (UInt256.Int32MaxValue, Octo.Int32MaxValue); + yield return () => (UInt256.UInt32MaxValue, Octo.UInt32MaxValue); + yield return () => (UInt256.Int64MaxValue, Octo.Int64MaxValue); + yield return () => (UInt256.UInt64MaxValue, Octo.UInt64MaxValue); } public static IEnumerable> ConvertFromCheckedByteTestData() From 45cc831006aa89ef060cf79852614ce74cc52f4f Mon Sep 17 00:00:00 2001 From: crookseta Date: Fri, 17 Jul 2026 15:46:58 -0500 Subject: [PATCH 58/74] -Remove redundant conversion test cases. --- .../Data/Int256DataSources.cs | 75 ------------------- .../Data/Int512DataSources.cs | 75 ------------------- .../Data/OctoDataSources.cs | 75 ------------------- .../Data/QuadDataSources.cs | 75 ------------------- .../Data/UInt256DataSources.cs | 75 ------------------- .../Data/UInt512DataSources.cs | 75 ------------------- .../Numerics/Int256GenericMathTests.cs | 20 ----- .../Numerics/Int512GenericMathTests.cs | 20 ----- .../Numerics/OctoGenericMathTests.cs | 20 ----- .../Numerics/QuadGenericMathTests.cs | 20 ----- .../Numerics/UInt256GenericMathTests.cs | 20 ----- .../Numerics/UInt512GenericMathTests.cs | 20 ----- 12 files changed, 570 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int256DataSources.cs b/src/MissingValues.Tests/Data/Int256DataSources.cs index 6869808..4c6d4ae 100644 --- a/src/MissingValues.Tests/Data/Int256DataSources.cs +++ b/src/MissingValues.Tests/Data/Int256DataSources.cs @@ -1514,36 +1514,6 @@ public class Int256DataSources throw new NotImplementedException(); } - public static IEnumerable> ConvertFromCheckedUInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingUInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingUInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromCheckedUInt512TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingUInt512TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingUInt512TestData() - { - throw new NotImplementedException(); - } - public static IEnumerable> ConvertFromCheckedSByteTestData() { throw new NotImplementedException(); @@ -1619,21 +1589,6 @@ public class Int256DataSources throw new NotImplementedException(); } - public static IEnumerable> ConvertFromCheckedInt512TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingInt512TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingInt512TestData() - { - throw new NotImplementedException(); - } - public static IEnumerable> ConvertFromCheckedHalfTestData() { throw new NotImplementedException(); @@ -1678,34 +1633,4 @@ public class Int256DataSources { throw new NotImplementedException(); } - - public static IEnumerable> ConvertFromCheckedQuadTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingQuadTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingQuadTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromCheckedOctoTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingOctoTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingOctoTestData() - { - throw new NotImplementedException(); - } } diff --git a/src/MissingValues.Tests/Data/Int512DataSources.cs b/src/MissingValues.Tests/Data/Int512DataSources.cs index b831c26..96995d9 100644 --- a/src/MissingValues.Tests/Data/Int512DataSources.cs +++ b/src/MissingValues.Tests/Data/Int512DataSources.cs @@ -1747,36 +1747,6 @@ public class Int512DataSources throw new NotImplementedException(); } - public static IEnumerable> ConvertFromCheckedUInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingUInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingUInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromCheckedUInt512TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingUInt512TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingUInt512TestData() - { - throw new NotImplementedException(); - } - public static IEnumerable> ConvertFromCheckedSByteTestData() { throw new NotImplementedException(); @@ -1852,21 +1822,6 @@ public class Int512DataSources throw new NotImplementedException(); } - public static IEnumerable> ConvertFromCheckedInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingInt256TestData() - { - throw new NotImplementedException(); - } - public static IEnumerable> ConvertFromCheckedHalfTestData() { throw new NotImplementedException(); @@ -1911,34 +1866,4 @@ public class Int512DataSources { throw new NotImplementedException(); } - - public static IEnumerable> ConvertFromCheckedQuadTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingQuadTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingQuadTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromCheckedOctoTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingOctoTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingOctoTestData() - { - throw new NotImplementedException(); - } } diff --git a/src/MissingValues.Tests/Data/OctoDataSources.cs b/src/MissingValues.Tests/Data/OctoDataSources.cs index 5054af9..7f7b59e 100644 --- a/src/MissingValues.Tests/Data/OctoDataSources.cs +++ b/src/MissingValues.Tests/Data/OctoDataSources.cs @@ -1220,36 +1220,6 @@ public class OctoDataSources throw new NotImplementedException(); } - public static IEnumerable> ConvertFromCheckedUInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingUInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingUInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromCheckedUInt512TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingUInt512TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingUInt512TestData() - { - throw new NotImplementedException(); - } - public static IEnumerable> ConvertFromCheckedSByteTestData() { throw new NotImplementedException(); @@ -1325,36 +1295,6 @@ public class OctoDataSources throw new NotImplementedException(); } - public static IEnumerable> ConvertFromCheckedInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromCheckedInt512TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingInt512TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingInt512TestData() - { - throw new NotImplementedException(); - } - public static IEnumerable> ConvertFromCheckedHalfTestData() { throw new NotImplementedException(); @@ -1399,19 +1339,4 @@ public class OctoDataSources { throw new NotImplementedException(); } - - public static IEnumerable> ConvertFromCheckedQuadTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingQuadTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingQuadTestData() - { - throw new NotImplementedException(); - } } \ No newline at end of file diff --git a/src/MissingValues.Tests/Data/QuadDataSources.cs b/src/MissingValues.Tests/Data/QuadDataSources.cs index 9f62b5d..a8cd863 100644 --- a/src/MissingValues.Tests/Data/QuadDataSources.cs +++ b/src/MissingValues.Tests/Data/QuadDataSources.cs @@ -1241,36 +1241,6 @@ public class QuadDataSources throw new NotImplementedException(); } - public static IEnumerable> ConvertFromCheckedUInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingUInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingUInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromCheckedUInt512TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingUInt512TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingUInt512TestData() - { - throw new NotImplementedException(); - } - public static IEnumerable> ConvertFromCheckedSByteTestData() { throw new NotImplementedException(); @@ -1346,36 +1316,6 @@ public class QuadDataSources throw new NotImplementedException(); } - public static IEnumerable> ConvertFromCheckedInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromCheckedInt512TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingInt512TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingInt512TestData() - { - throw new NotImplementedException(); - } - public static IEnumerable> ConvertFromCheckedHalfTestData() { throw new NotImplementedException(); @@ -1420,19 +1360,4 @@ public class QuadDataSources { throw new NotImplementedException(); } - - public static IEnumerable> ConvertFromCheckedOctoTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingOctoTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingOctoTestData() - { - throw new NotImplementedException(); - } } \ No newline at end of file diff --git a/src/MissingValues.Tests/Data/UInt256DataSources.cs b/src/MissingValues.Tests/Data/UInt256DataSources.cs index 59da0de..3861f24 100644 --- a/src/MissingValues.Tests/Data/UInt256DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt256DataSources.cs @@ -1529,21 +1529,6 @@ public class UInt256DataSources throw new NotImplementedException(); } - public static IEnumerable> ConvertFromCheckedUInt512TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingUInt512TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingUInt512TestData() - { - throw new NotImplementedException(); - } - public static IEnumerable> ConvertFromCheckedSByteTestData() { throw new NotImplementedException(); @@ -1619,36 +1604,6 @@ public class UInt256DataSources throw new NotImplementedException(); } - public static IEnumerable> ConvertFromCheckedInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromCheckedInt512TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingInt512TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingInt512TestData() - { - throw new NotImplementedException(); - } - public static IEnumerable> ConvertFromCheckedHalfTestData() { throw new NotImplementedException(); @@ -1693,34 +1648,4 @@ public class UInt256DataSources { throw new NotImplementedException(); } - - public static IEnumerable> ConvertFromCheckedQuadTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingQuadTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingQuadTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromCheckedOctoTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingOctoTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingOctoTestData() - { - throw new NotImplementedException(); - } } diff --git a/src/MissingValues.Tests/Data/UInt512DataSources.cs b/src/MissingValues.Tests/Data/UInt512DataSources.cs index 1a045fc..a5f5683 100644 --- a/src/MissingValues.Tests/Data/UInt512DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt512DataSources.cs @@ -1383,21 +1383,6 @@ public class UInt512DataSources throw new NotImplementedException(); } - public static IEnumerable> ConvertFromCheckedUInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingUInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingUInt256TestData() - { - throw new NotImplementedException(); - } - public static IEnumerable> ConvertFromCheckedSByteTestData() { throw new NotImplementedException(); @@ -1473,36 +1458,6 @@ public class UInt512DataSources throw new NotImplementedException(); } - public static IEnumerable> ConvertFromCheckedInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingInt256TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromCheckedInt512TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingInt512TestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingInt512TestData() - { - throw new NotImplementedException(); - } - public static IEnumerable> ConvertFromCheckedHalfTestData() { throw new NotImplementedException(); @@ -1547,34 +1502,4 @@ public class UInt512DataSources { throw new NotImplementedException(); } - - public static IEnumerable> ConvertFromCheckedQuadTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingQuadTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingQuadTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromCheckedOctoTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromSaturatingOctoTestData() - { - throw new NotImplementedException(); - } - - public static IEnumerable> ConvertFromTruncatingOctoTestData() - { - throw new NotImplementedException(); - } } diff --git a/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs b/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs index cbc5006..e53a8a6 100644 --- a/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs @@ -762,14 +762,6 @@ public async Task WriteLittleEndianTest(Int256 value, byte[] expectedDestination [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt128TestData))] public async Task ConvertFromSaturatingUInt128Test(UInt128 input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt128TestData))] public async Task ConvertFromTruncatingUInt128Test(UInt128 input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromCheckedUInt256TestData))] public async Task ConvertFromCheckedUInt256Test(UInt256 input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt256TestData))] public async Task ConvertFromSaturatingUInt256Test(UInt256 input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt256TestData))] public async Task ConvertFromTruncatingUInt256Test(UInt256 input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); - - [Test, MethodDataSource(nameof(ConvertFromCheckedUInt512TestData))] public async Task ConvertFromCheckedUInt512Test(UInt512 input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt512TestData))] public async Task ConvertFromSaturatingUInt512Test(UInt512 input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt512TestData))] public async Task ConvertFromTruncatingUInt512Test(UInt512 input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromCheckedSByteTestData))] public async Task ConvertFromCheckedSByteTest(sbyte input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromSaturatingSByteTestData))] public async Task ConvertFromSaturatingSByteTest(sbyte input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingSByteTestData))] public async Task ConvertFromTruncatingSByteTest(sbyte input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); @@ -790,10 +782,6 @@ public async Task WriteLittleEndianTest(Int256 value, byte[] expectedDestination [Test, MethodDataSource(nameof(ConvertFromSaturatingInt128TestData))] public async Task ConvertFromSaturatingInt128Test(Int128 input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingInt128TestData))] public async Task ConvertFromTruncatingInt128Test(Int128 input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromCheckedInt512TestData))] public async Task ConvertFromCheckedInt512Test(Int512 input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingInt512TestData))] public async Task ConvertFromSaturatingInt512Test(Int512 input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingInt512TestData))] public async Task ConvertFromTruncatingInt512Test(Int512 input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromCheckedHalfTestData))] public async Task ConvertFromCheckedHalfTest(Half input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromSaturatingHalfTestData))] public async Task ConvertFromSaturatingHalfTest(Half input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingHalfTestData))] public async Task ConvertFromTruncatingHalfTest(Half input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); @@ -805,13 +793,5 @@ public async Task WriteLittleEndianTest(Int256 value, byte[] expectedDestination [Test, MethodDataSource(nameof(ConvertFromCheckedDoubleTestData))] public async Task ConvertFromCheckedDoubleTest(double input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromSaturatingDoubleTestData))] public async Task ConvertFromSaturatingDoubleTest(double input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingDoubleTestData))] public async Task ConvertFromTruncatingDoubleTest(double input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); - - [Test, MethodDataSource(nameof(ConvertFromCheckedQuadTestData))] public async Task ConvertFromCheckedQuadTest(Quad input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingQuadTestData))] public async Task ConvertFromSaturatingQuadTest(Quad input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingQuadTestData))] public async Task ConvertFromTruncatingQuadTest(Quad input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); - - [Test, MethodDataSource(nameof(ConvertFromCheckedOctoTestData))] public async Task ConvertFromCheckedOctoTest(Octo input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingOctoTestData))] public async Task ConvertFromSaturatingOctoTest(Octo input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingOctoTestData))] public async Task ConvertFromTruncatingOctoTest(Octo input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); #endregion } \ No newline at end of file diff --git a/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs b/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs index 5bdd4bb..6c712d5 100644 --- a/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs @@ -761,14 +761,6 @@ public async Task WriteLittleEndianTest(Int512 value, byte[] expectedDestination [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt128TestData))] public async Task ConvertFromSaturatingUInt128Test(UInt128 input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt128TestData))] public async Task ConvertFromTruncatingUInt128Test(UInt128 input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromCheckedUInt256TestData))] public async Task ConvertFromCheckedUInt256Test(UInt256 input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt256TestData))] public async Task ConvertFromSaturatingUInt256Test(UInt256 input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt256TestData))] public async Task ConvertFromTruncatingUInt256Test(UInt256 input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); - - [Test, MethodDataSource(nameof(ConvertFromCheckedUInt512TestData))] public async Task ConvertFromCheckedUInt512Test(UInt512 input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt512TestData))] public async Task ConvertFromSaturatingUInt512Test(UInt512 input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt512TestData))] public async Task ConvertFromTruncatingUInt512Test(UInt512 input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromCheckedSByteTestData))] public async Task ConvertFromCheckedSByteTest(sbyte input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromSaturatingSByteTestData))] public async Task ConvertFromSaturatingSByteTest(sbyte input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingSByteTestData))] public async Task ConvertFromTruncatingSByteTest(sbyte input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); @@ -789,10 +781,6 @@ public async Task WriteLittleEndianTest(Int512 value, byte[] expectedDestination [Test, MethodDataSource(nameof(ConvertFromSaturatingInt128TestData))] public async Task ConvertFromSaturatingInt128Test(Int128 input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingInt128TestData))] public async Task ConvertFromTruncatingInt128Test(Int128 input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromCheckedInt256TestData))] public async Task ConvertFromCheckedInt256Test(Int256 input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingInt256TestData))] public async Task ConvertFromSaturatingInt256Test(Int256 input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingInt256TestData))] public async Task ConvertFromTruncatingInt256Test(Int256 input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromCheckedHalfTestData))] public async Task ConvertFromCheckedHalfTest(Half input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromSaturatingHalfTestData))] public async Task ConvertFromSaturatingHalfTest(Half input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingHalfTestData))] public async Task ConvertFromTruncatingHalfTest(Half input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); @@ -804,13 +792,5 @@ public async Task WriteLittleEndianTest(Int512 value, byte[] expectedDestination [Test, MethodDataSource(nameof(ConvertFromCheckedDoubleTestData))] public async Task ConvertFromCheckedDoubleTest(double input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromSaturatingDoubleTestData))] public async Task ConvertFromSaturatingDoubleTest(double input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingDoubleTestData))] public async Task ConvertFromTruncatingDoubleTest(double input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); - - [Test, MethodDataSource(nameof(ConvertFromCheckedQuadTestData))] public async Task ConvertFromCheckedQuadTest(Quad input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingQuadTestData))] public async Task ConvertFromSaturatingQuadTest(Quad input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingQuadTestData))] public async Task ConvertFromTruncatingQuadTest(Quad input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); - - [Test, MethodDataSource(nameof(ConvertFromCheckedOctoTestData))] public async Task ConvertFromCheckedOctoTest(Octo input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingOctoTestData))] public async Task ConvertFromSaturatingOctoTest(Octo input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingOctoTestData))] public async Task ConvertFromTruncatingOctoTest(Octo input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); #endregion } \ No newline at end of file diff --git a/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs b/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs index 734ef4b..962edcc 100644 --- a/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs @@ -636,14 +636,6 @@ public async Task SqrtTest() [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt128TestData))] public async Task ConvertFromSaturatingUInt128Test(UInt128 input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt128TestData))] public async Task ConvertFromTruncatingUInt128Test(UInt128 input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromCheckedUInt256TestData))] public async Task ConvertFromCheckedUInt256Test(UInt256 input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt256TestData))] public async Task ConvertFromSaturatingUInt256Test(UInt256 input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt256TestData))] public async Task ConvertFromTruncatingUInt256Test(UInt256 input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); - - [Test, MethodDataSource(nameof(ConvertFromCheckedUInt512TestData))] public async Task ConvertFromCheckedUInt512Test(UInt512 input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt512TestData))] public async Task ConvertFromSaturatingUInt512Test(UInt512 input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt512TestData))] public async Task ConvertFromTruncatingUInt512Test(UInt512 input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromCheckedSByteTestData))] public async Task ConvertFromCheckedSByteTest(sbyte input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromSaturatingSByteTestData))] public async Task ConvertFromSaturatingSByteTest(sbyte input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingSByteTestData))] public async Task ConvertFromTruncatingSByteTest(sbyte input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); @@ -664,14 +656,6 @@ public async Task SqrtTest() [Test, MethodDataSource(nameof(ConvertFromSaturatingInt128TestData))] public async Task ConvertFromSaturatingInt128Test(Int128 input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingInt128TestData))] public async Task ConvertFromTruncatingInt128Test(Int128 input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromCheckedInt256TestData))] public async Task ConvertFromCheckedInt256Test(Int256 input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingInt256TestData))] public async Task ConvertFromSaturatingInt256Test(Int256 input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingInt256TestData))] public async Task ConvertFromTruncatingInt256Test(Int256 input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); - - [Test, MethodDataSource(nameof(ConvertFromCheckedInt512TestData))] public async Task ConvertFromCheckedInt512Test(Int512 input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingInt512TestData))] public async Task ConvertFromSaturatingInt512Test(Int512 input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingInt512TestData))] public async Task ConvertFromTruncatingInt512Test(Int512 input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromCheckedHalfTestData))] public async Task ConvertFromCheckedHalfTest(Half input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromSaturatingHalfTestData))] public async Task ConvertFromSaturatingHalfTest(Half input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingHalfTestData))] public async Task ConvertFromTruncatingHalfTest(Half input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); @@ -683,9 +667,5 @@ public async Task SqrtTest() [Test, MethodDataSource(nameof(ConvertFromCheckedDoubleTestData))] public async Task ConvertFromCheckedDoubleTest(double input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromSaturatingDoubleTestData))] public async Task ConvertFromSaturatingDoubleTest(double input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingDoubleTestData))] public async Task ConvertFromTruncatingDoubleTest(double input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); - - [Test, MethodDataSource(nameof(ConvertFromCheckedQuadTestData))] public async Task ConvertFromCheckedDoubleTest(Quad input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingQuadTestData))] public async Task ConvertFromSaturatingDoubleTest(Quad input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingQuadTestData))] public async Task ConvertFromTruncatingDoubleTest(Quad input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); #endregion } \ No newline at end of file diff --git a/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs b/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs index 0d37167..f863a6c 100644 --- a/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs @@ -995,14 +995,6 @@ await Assert.That(Float.Tanh(Float.Zero)) [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt128TestData))] public async Task ConvertFromSaturatingUInt128Test(UInt128 input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt128TestData))] public async Task ConvertFromTruncatingUInt128Test(UInt128 input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromCheckedUInt256TestData))] public async Task ConvertFromCheckedUInt256Test(UInt256 input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt256TestData))] public async Task ConvertFromSaturatingUInt256Test(UInt256 input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt256TestData))] public async Task ConvertFromTruncatingUInt256Test(UInt256 input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); - - [Test, MethodDataSource(nameof(ConvertFromCheckedUInt512TestData))] public async Task ConvertFromCheckedUInt512Test(UInt512 input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt512TestData))] public async Task ConvertFromSaturatingUInt512Test(UInt512 input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt512TestData))] public async Task ConvertFromTruncatingUInt512Test(UInt512 input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromCheckedSByteTestData))] public async Task ConvertFromCheckedSByteTest(sbyte input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromSaturatingSByteTestData))] public async Task ConvertFromSaturatingSByteTest(sbyte input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingSByteTestData))] public async Task ConvertFromTruncatingSByteTest(sbyte input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); @@ -1023,14 +1015,6 @@ await Assert.That(Float.Tanh(Float.Zero)) [Test, MethodDataSource(nameof(ConvertFromSaturatingInt128TestData))] public async Task ConvertFromSaturatingInt128Test(Int128 input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingInt128TestData))] public async Task ConvertFromTruncatingInt128Test(Int128 input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromCheckedInt256TestData))] public async Task ConvertFromCheckedInt256Test(Int256 input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingInt256TestData))] public async Task ConvertFromSaturatingInt256Test(Int256 input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingInt256TestData))] public async Task ConvertFromTruncatingInt256Test(Int256 input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); - - [Test, MethodDataSource(nameof(ConvertFromCheckedInt512TestData))] public async Task ConvertFromCheckedInt512Test(Int512 input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingInt512TestData))] public async Task ConvertFromSaturatingInt512Test(Int512 input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingInt512TestData))] public async Task ConvertFromTruncatingInt512Test(Int512 input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromCheckedHalfTestData))] public async Task ConvertFromCheckedHalfTest(Half input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromSaturatingHalfTestData))] public async Task ConvertFromSaturatingHalfTest(Half input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingHalfTestData))] public async Task ConvertFromTruncatingHalfTest(Half input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); @@ -1042,9 +1026,5 @@ await Assert.That(Float.Tanh(Float.Zero)) [Test, MethodDataSource(nameof(ConvertFromCheckedDoubleTestData))] public async Task ConvertFromCheckedDoubleTest(double input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromSaturatingDoubleTestData))] public async Task ConvertFromSaturatingDoubleTest(double input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingDoubleTestData))] public async Task ConvertFromTruncatingDoubleTest(double input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); - - [Test, MethodDataSource(nameof(ConvertFromCheckedOctoTestData))] public async Task ConvertFromCheckedOctoTest(Octo input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingOctoTestData))] public async Task ConvertFromSaturatingOctoTest(Octo input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingOctoTestData))] public async Task ConvertFromTruncatingOctoTest(Octo input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); #endregion } \ No newline at end of file diff --git a/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs b/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs index 1d36b25..6728769 100644 --- a/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs @@ -763,10 +763,6 @@ public async Task WriteLittleEndianTest(UInt256 value, byte[] expectedDestinatio [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt128TestData))] public async Task ConvertFromSaturatingUInt128Test(UInt128 input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt128TestData))] public async Task ConvertFromTruncatingUInt128Test(UInt128 input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromCheckedUInt512TestData))] public async Task ConvertFromCheckedUInt512Test(UInt512 input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt512TestData))] public async Task ConvertFromSaturatingUInt512Test(UInt512 input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt512TestData))] public async Task ConvertFromTruncatingUInt512Test(UInt512 input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromCheckedSByteTestData))] public async Task ConvertFromCheckedSByteTest(sbyte input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromSaturatingSByteTestData))] public async Task ConvertFromSaturatingSByteTest(sbyte input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingSByteTestData))] public async Task ConvertFromTruncatingSByteTest(sbyte input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); @@ -787,14 +783,6 @@ public async Task WriteLittleEndianTest(UInt256 value, byte[] expectedDestinatio [Test, MethodDataSource(nameof(ConvertFromSaturatingInt128TestData))] public async Task ConvertFromSaturatingInt128Test(Int128 input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingInt128TestData))] public async Task ConvertFromTruncatingInt128Test(Int128 input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromCheckedInt256TestData))] public async Task ConvertFromCheckedInt256Test(Int256 input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingInt256TestData))] public async Task ConvertFromSaturatingInt256Test(Int256 input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingInt256TestData))] public async Task ConvertFromTruncatingInt256Test(Int256 input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); - - [Test, MethodDataSource(nameof(ConvertFromCheckedInt512TestData))] public async Task ConvertFromCheckedInt512Test(Int512 input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingInt512TestData))] public async Task ConvertFromSaturatingInt512Test(Int512 input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingInt512TestData))] public async Task ConvertFromTruncatingInt512Test(Int512 input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromCheckedHalfTestData))] public async Task ConvertFromCheckedHalfTest(Half input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromSaturatingHalfTestData))] public async Task ConvertFromSaturatingHalfTest(Half input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingHalfTestData))] public async Task ConvertFromTruncatingHalfTest(Half input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); @@ -806,13 +794,5 @@ public async Task WriteLittleEndianTest(UInt256 value, byte[] expectedDestinatio [Test, MethodDataSource(nameof(ConvertFromCheckedDoubleTestData))] public async Task ConvertFromCheckedDoubleTest(double input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromSaturatingDoubleTestData))] public async Task ConvertFromSaturatingDoubleTest(double input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingDoubleTestData))] public async Task ConvertFromTruncatingDoubleTest(double input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); - - [Test, MethodDataSource(nameof(ConvertFromCheckedQuadTestData))] public async Task ConvertFromCheckedQuadTest(Quad input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingQuadTestData))] public async Task ConvertFromSaturatingQuadTest(Quad input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingQuadTestData))] public async Task ConvertFromTruncatingQuadTest(Quad input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); - - [Test, MethodDataSource(nameof(ConvertFromCheckedOctoTestData))] public async Task ConvertFromCheckedOctoTest(Octo input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingOctoTestData))] public async Task ConvertFromSaturatingOctoTest(Octo input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingOctoTestData))] public async Task ConvertFromTruncatingOctoTest(Octo input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); #endregion } diff --git a/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs b/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs index 77e3945..892261b 100644 --- a/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs @@ -761,10 +761,6 @@ public async Task WriteLittleEndianTest(UInt512 value, byte[] expectedDestinatio [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt128TestData))] public async Task ConvertFromSaturatingUInt128Test(UInt128 input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt128TestData))] public async Task ConvertFromTruncatingUInt128Test(UInt128 input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromCheckedUInt256TestData))] public async Task ConvertFromCheckedUInt256Test(UInt256 input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingUInt256TestData))] public async Task ConvertFromSaturatingUInt256Test(UInt256 input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingUInt256TestData))] public async Task ConvertFromTruncatingUInt256Test(UInt256 input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromCheckedSByteTestData))] public async Task ConvertFromCheckedSByteTest(sbyte input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromSaturatingSByteTestData))] public async Task ConvertFromSaturatingSByteTest(sbyte input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingSByteTestData))] public async Task ConvertFromTruncatingSByteTest(sbyte input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); @@ -785,14 +781,6 @@ public async Task WriteLittleEndianTest(UInt512 value, byte[] expectedDestinatio [Test, MethodDataSource(nameof(ConvertFromSaturatingInt128TestData))] public async Task ConvertFromSaturatingInt128Test(Int128 input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingInt128TestData))] public async Task ConvertFromTruncatingInt128Test(Int128 input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromCheckedInt256TestData))] public async Task ConvertFromCheckedInt256Test(Int256 input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingInt256TestData))] public async Task ConvertFromSaturatingInt256Test(Int256 input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingInt256TestData))] public async Task ConvertFromTruncatingInt256Test(Int256 input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); - - [Test, MethodDataSource(nameof(ConvertFromCheckedInt512TestData))] public async Task ConvertFromCheckedInt512Test(Int512 input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingInt512TestData))] public async Task ConvertFromSaturatingInt512Test(Int512 input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingInt512TestData))] public async Task ConvertFromTruncatingInt512Test(Int512 input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromCheckedHalfTestData))] public async Task ConvertFromCheckedHalfTest(Half input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromSaturatingHalfTestData))] public async Task ConvertFromSaturatingHalfTest(Half input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingHalfTestData))] public async Task ConvertFromTruncatingHalfTest(Half input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); @@ -804,13 +792,5 @@ public async Task WriteLittleEndianTest(UInt512 value, byte[] expectedDestinatio [Test, MethodDataSource(nameof(ConvertFromCheckedDoubleTestData))] public async Task ConvertFromCheckedDoubleTest(double input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromSaturatingDoubleTestData))] public async Task ConvertFromSaturatingDoubleTest(double input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingDoubleTestData))] public async Task ConvertFromTruncatingDoubleTest(double input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); - - [Test, MethodDataSource(nameof(ConvertFromCheckedQuadTestData))] public async Task ConvertFromCheckedQuadTest(Quad input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingQuadTestData))] public async Task ConvertFromSaturatingQuadTest(Quad input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingQuadTestData))] public async Task ConvertFromTruncatingQuadTest(Quad input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); - - [Test, MethodDataSource(nameof(ConvertFromCheckedOctoTestData))] public async Task ConvertFromCheckedOctoTest(Octo input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromSaturatingOctoTestData))] public async Task ConvertFromSaturatingOctoTest(Octo input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertFromTruncatingOctoTestData))] public async Task ConvertFromTruncatingOctoTest(Octo input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); #endregion } \ No newline at end of file From 42c8fbdeeaf0ebba8c473e7214da78bfae14a7a5 Mon Sep 17 00:00:00 2001 From: crookseta Date: Fri, 17 Jul 2026 16:33:52 -0500 Subject: [PATCH 59/74] -Added Tests for T->UInt256 conversions. --- .../Data/UInt256DataSources.cs | 240 +++++++++++++++--- 1 file changed, 201 insertions(+), 39 deletions(-) diff --git a/src/MissingValues.Tests/Data/UInt256DataSources.cs b/src/MissingValues.Tests/Data/UInt256DataSources.cs index 3861f24..45c25e9 100644 --- a/src/MissingValues.Tests/Data/UInt256DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt256DataSources.cs @@ -1456,196 +1456,358 @@ public class UInt256DataSources public static IEnumerable> ConvertFromCheckedByteTestData() { - throw new NotImplementedException(); + yield return () => (1, UInt256.One); + yield return () => (byte.MaxValue, UInt256.ByteMaxValue); } public static IEnumerable> ConvertFromSaturatingByteTestData() { - throw new NotImplementedException(); + yield return () => (1, UInt256.One); + yield return () => (byte.MaxValue, UInt256.ByteMaxValue); } public static IEnumerable> ConvertFromTruncatingByteTestData() { - throw new NotImplementedException(); + yield return () => (1, UInt256.One); + yield return () => (byte.MaxValue, UInt256.ByteMaxValue); } public static IEnumerable> ConvertFromCheckedUInt16TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt256.One); + yield return () => (byte.MaxValue, UInt256.ByteMaxValue); + yield return () => (ushort.MaxValue, UInt256.UInt16MaxValue); } public static IEnumerable> ConvertFromSaturatingUInt16TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt256.One); + yield return () => (byte.MaxValue, UInt256.ByteMaxValue); + yield return () => (ushort.MaxValue, UInt256.UInt16MaxValue); } public static IEnumerable> ConvertFromTruncatingUInt16TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt256.One); + yield return () => (byte.MaxValue, UInt256.ByteMaxValue); + yield return () => (ushort.MaxValue, UInt256.UInt16MaxValue); } public static IEnumerable> ConvertFromCheckedUInt32TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt256.One); + yield return () => (byte.MaxValue, UInt256.ByteMaxValue); + yield return () => (ushort.MaxValue, UInt256.UInt16MaxValue); + yield return () => (uint.MaxValue, UInt256.UInt32MaxValue); } public static IEnumerable> ConvertFromSaturatingUInt32TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt256.One); + yield return () => (byte.MaxValue, UInt256.ByteMaxValue); + yield return () => (ushort.MaxValue, UInt256.UInt16MaxValue); + yield return () => (uint.MaxValue, UInt256.UInt32MaxValue); } public static IEnumerable> ConvertFromTruncatingUInt32TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt256.One); + yield return () => (byte.MaxValue, UInt256.ByteMaxValue); + yield return () => (ushort.MaxValue, UInt256.UInt16MaxValue); + yield return () => (uint.MaxValue, UInt256.UInt32MaxValue); } public static IEnumerable> ConvertFromCheckedUInt64TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt256.One); + yield return () => (byte.MaxValue, UInt256.ByteMaxValue); + yield return () => (ushort.MaxValue, UInt256.UInt16MaxValue); + yield return () => (uint.MaxValue, UInt256.UInt32MaxValue); + yield return () => (ulong.MaxValue, UInt256.UInt64MaxValue); } public static IEnumerable> ConvertFromSaturatingUInt64TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt256.One); + yield return () => (byte.MaxValue, UInt256.ByteMaxValue); + yield return () => (ushort.MaxValue, UInt256.UInt16MaxValue); + yield return () => (uint.MaxValue, UInt256.UInt32MaxValue); + yield return () => (ulong.MaxValue, UInt256.UInt64MaxValue); } public static IEnumerable> ConvertFromTruncatingUInt64TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt256.One); + yield return () => (byte.MaxValue, UInt256.ByteMaxValue); + yield return () => (ushort.MaxValue, UInt256.UInt16MaxValue); + yield return () => (uint.MaxValue, UInt256.UInt32MaxValue); + yield return () => (ulong.MaxValue, UInt256.UInt64MaxValue); } public static IEnumerable> ConvertFromCheckedUInt128TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt256.One); + yield return () => (byte.MaxValue, UInt256.ByteMaxValue); + yield return () => (ushort.MaxValue, UInt256.UInt16MaxValue); + yield return () => (uint.MaxValue, UInt256.UInt32MaxValue); + yield return () => (ulong.MaxValue, UInt256.UInt64MaxValue); + yield return () => (UInt128.MaxValue, UInt256.UInt128MaxValue); } public static IEnumerable> ConvertFromSaturatingUInt128TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt256.One); + yield return () => (byte.MaxValue, UInt256.ByteMaxValue); + yield return () => (ushort.MaxValue, UInt256.UInt16MaxValue); + yield return () => (uint.MaxValue, UInt256.UInt32MaxValue); + yield return () => (ulong.MaxValue, UInt256.UInt64MaxValue); + yield return () => (UInt128.MaxValue, UInt256.UInt128MaxValue); } public static IEnumerable> ConvertFromTruncatingUInt128TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt256.One); + yield return () => (byte.MaxValue, UInt256.ByteMaxValue); + yield return () => (ushort.MaxValue, UInt256.UInt16MaxValue); + yield return () => (uint.MaxValue, UInt256.UInt32MaxValue); + yield return () => (ulong.MaxValue, UInt256.UInt64MaxValue); + yield return () => (UInt128.MaxValue, UInt256.UInt128MaxValue); } public static IEnumerable> ConvertFromCheckedSByteTestData() { - throw new NotImplementedException(); + yield return () => (1, UInt256.One); + yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); } public static IEnumerable> ConvertFromSaturatingSByteTestData() { - throw new NotImplementedException(); + yield return () => (sbyte.MinValue, UInt256.Zero); + yield return () => (1, UInt256.One); + yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); } public static IEnumerable> ConvertFromTruncatingSByteTestData() { - throw new NotImplementedException(); + yield return () => (sbyte.MinValue, new UInt256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF80)); + yield return () => (1, UInt256.One); + yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); } public static IEnumerable> ConvertFromCheckedInt16TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt256.One); + yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); + yield return () => (short.MaxValue, UInt256.Int16MaxValue); } public static IEnumerable> ConvertFromSaturatingInt16TestData() { - throw new NotImplementedException(); + yield return () => (short.MinValue, UInt256.Zero); + yield return () => (sbyte.MinValue, UInt256.Zero); + yield return () => (1, UInt256.One); + yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); + yield return () => (short.MaxValue, UInt256.Int16MaxValue); } public static IEnumerable> ConvertFromTruncatingInt16TestData() { - throw new NotImplementedException(); + yield return () => (short.MinValue, new UInt256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_8000)); + yield return () => (sbyte.MinValue, new UInt256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF80)); + yield return () => (1, UInt256.One); + yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); + yield return () => (short.MaxValue, UInt256.Int16MaxValue); } public static IEnumerable> ConvertFromCheckedInt32TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt256.One); + yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); + yield return () => (short.MaxValue, UInt256.Int16MaxValue); + yield return () => (int.MaxValue, UInt256.Int32MaxValue); } public static IEnumerable> ConvertFromSaturatingInt32TestData() { - throw new NotImplementedException(); + yield return () => (int.MinValue, UInt256.Zero); + yield return () => (short.MinValue, UInt256.Zero); + yield return () => (sbyte.MinValue, UInt256.Zero); + yield return () => (1, UInt256.One); + yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); + yield return () => (short.MaxValue, UInt256.Int16MaxValue); + yield return () => (int.MaxValue, UInt256.Int32MaxValue); } public static IEnumerable> ConvertFromTruncatingInt32TestData() { - throw new NotImplementedException(); + yield return () => (int.MinValue, new UInt256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_8000_0000)); + yield return () => (short.MinValue, new UInt256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_8000)); + yield return () => (sbyte.MinValue, new UInt256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF80)); + yield return () => (1, UInt256.One); + yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); + yield return () => (short.MaxValue, UInt256.Int16MaxValue); + yield return () => (int.MaxValue, UInt256.Int32MaxValue); } public static IEnumerable> ConvertFromCheckedInt64TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt256.One); + yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); + yield return () => (short.MaxValue, UInt256.Int16MaxValue); + yield return () => (int.MaxValue, UInt256.Int32MaxValue); + yield return () => (long.MaxValue, UInt256.Int64MaxValue); } public static IEnumerable> ConvertFromSaturatingInt64TestData() { - throw new NotImplementedException(); + yield return () => (long.MinValue, UInt256.Zero); + yield return () => (int.MinValue, UInt256.Zero); + yield return () => (short.MinValue, UInt256.Zero); + yield return () => (sbyte.MinValue, UInt256.Zero); + yield return () => (1, UInt256.One); + yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); + yield return () => (short.MaxValue, UInt256.Int16MaxValue); + yield return () => (int.MaxValue, UInt256.Int32MaxValue); + yield return () => (long.MaxValue, UInt256.Int64MaxValue); } public static IEnumerable> ConvertFromTruncatingInt64TestData() { - throw new NotImplementedException(); + yield return () => (long.MinValue, new UInt256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000)); + yield return () => (int.MinValue, new UInt256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_8000_0000)); + yield return () => (short.MinValue, new UInt256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_8000)); + yield return () => (sbyte.MinValue, new UInt256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF80)); + yield return () => (1, UInt256.One); + yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); + yield return () => (short.MaxValue, UInt256.Int16MaxValue); + yield return () => (int.MaxValue, UInt256.Int32MaxValue); + yield return () => (long.MaxValue, UInt256.Int64MaxValue); } public static IEnumerable> ConvertFromCheckedInt128TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt256.One); + yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); + yield return () => (short.MaxValue, UInt256.Int16MaxValue); + yield return () => (int.MaxValue, UInt256.Int32MaxValue); + yield return () => (long.MaxValue, UInt256.Int64MaxValue); + yield return () => (Int128.MaxValue, UInt256.Int128MaxValue); } public static IEnumerable> ConvertFromSaturatingInt128TestData() { - throw new NotImplementedException(); + yield return () => (Int128.MinValue, UInt256.Zero); + yield return () => (long.MinValue, UInt256.Zero); + yield return () => (int.MinValue, UInt256.Zero); + yield return () => (short.MinValue, UInt256.Zero); + yield return () => (sbyte.MinValue, UInt256.Zero); + yield return () => (1, UInt256.One); + yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); + yield return () => (short.MaxValue, UInt256.Int16MaxValue); + yield return () => (int.MaxValue, UInt256.Int32MaxValue); + yield return () => (long.MaxValue, UInt256.Int64MaxValue); + yield return () => (Int128.MaxValue, UInt256.Int128MaxValue); } public static IEnumerable> ConvertFromTruncatingInt128TestData() { - throw new NotImplementedException(); + yield return () => (Int128.MinValue, new UInt256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000, 0x0000_0000_0000_0000)); + yield return () => (long.MinValue, new UInt256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000)); + yield return () => (int.MinValue, new UInt256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_8000_0000)); + yield return () => (short.MinValue, new UInt256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_8000)); + yield return () => (sbyte.MinValue, new UInt256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF80)); + yield return () => (1, UInt256.One); + yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); + yield return () => (short.MaxValue, UInt256.Int16MaxValue); + yield return () => (int.MaxValue, UInt256.Int32MaxValue); + yield return () => (long.MaxValue, UInt256.Int64MaxValue); + yield return () => (Int128.MaxValue, UInt256.Int128MaxValue); } public static IEnumerable> ConvertFromCheckedHalfTestData() { - throw new NotImplementedException(); + yield return () => ((Half)1f, UInt256.One); + yield return () => (byte.MaxValue, UInt256.ByteMaxValue); + yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); } public static IEnumerable> ConvertFromSaturatingHalfTestData() { - throw new NotImplementedException(); + yield return () => (Half.MinValue, UInt256.Zero); + yield return () => ((Half)1f, UInt256.One); + yield return () => (byte.MaxValue, UInt256.ByteMaxValue); + yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); } public static IEnumerable> ConvertFromTruncatingHalfTestData() { - throw new NotImplementedException(); + yield return () => (Half.MinValue, UInt256.Zero); + yield return () => ((Half)1f, UInt256.One); + yield return () => (byte.MaxValue, UInt256.ByteMaxValue); + yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); } public static IEnumerable> ConvertFromCheckedSingleTestData() { - throw new NotImplementedException(); + yield return () => (1f, UInt256.One); + yield return () => (byte.MaxValue, UInt256.ByteMaxValue); + yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); + yield return () => (short.MaxValue, UInt256.Int16MaxValue); + yield return () => (ushort.MaxValue, UInt256.UInt16MaxValue); } public static IEnumerable> ConvertFromSaturatingSingleTestData() { - throw new NotImplementedException(); + yield return () => (float.MinValue, UInt256.Zero); + yield return () => (1f, UInt256.One); + yield return () => (byte.MaxValue, UInt256.ByteMaxValue); + yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); + yield return () => (short.MaxValue, UInt256.Int16MaxValue); + yield return () => (ushort.MaxValue, UInt256.UInt16MaxValue); } public static IEnumerable> ConvertFromTruncatingSingleTestData() { - throw new NotImplementedException(); + yield return () => (float.MinValue, UInt256.Zero); + yield return () => (1f, UInt256.One); + yield return () => (byte.MaxValue, UInt256.ByteMaxValue); + yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); + yield return () => (short.MaxValue, UInt256.Int16MaxValue); + yield return () => (ushort.MaxValue, UInt256.UInt16MaxValue); } public static IEnumerable> ConvertFromCheckedDoubleTestData() { - throw new NotImplementedException(); + yield return () => (1d, UInt256.One); + yield return () => (byte.MaxValue, UInt256.ByteMaxValue); + yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); + yield return () => (short.MaxValue, UInt256.Int16MaxValue); + yield return () => (ushort.MaxValue, UInt256.UInt16MaxValue); + yield return () => (int.MaxValue, UInt256.Int32MaxValue); + yield return () => (uint.MaxValue, UInt256.UInt32MaxValue); } public static IEnumerable> ConvertFromSaturatingDoubleTestData() { - throw new NotImplementedException(); + yield return () => (double.MinValue, UInt256.Zero); + yield return () => (1d, UInt256.One); + yield return () => (byte.MaxValue, UInt256.ByteMaxValue); + yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); + yield return () => (short.MaxValue, UInt256.Int16MaxValue); + yield return () => (ushort.MaxValue, UInt256.UInt16MaxValue); + yield return () => (int.MaxValue, UInt256.Int32MaxValue); + yield return () => (uint.MaxValue, UInt256.UInt32MaxValue); } public static IEnumerable> ConvertFromTruncatingDoubleTestData() { - throw new NotImplementedException(); + yield return () => (double.MinValue, UInt256.Zero); + yield return () => (1d, UInt256.One); + yield return () => (byte.MaxValue, UInt256.ByteMaxValue); + yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); + yield return () => (short.MaxValue, UInt256.Int16MaxValue); + yield return () => (ushort.MaxValue, UInt256.UInt16MaxValue); + yield return () => (int.MaxValue, UInt256.Int32MaxValue); + yield return () => (uint.MaxValue, UInt256.UInt32MaxValue); } } From f453c93603f2bd1501d6adeb734bff743798e86b Mon Sep 17 00:00:00 2001 From: crookseta Date: Sat, 18 Jul 2026 10:17:03 -0500 Subject: [PATCH 60/74] -Added Tests for BigInteger conversions. --- .../Data/Int256DataSources.cs | 31 ++++++++ .../Data/Int512DataSources.cs | 31 ++++++++ .../Data/OctoDataSources.cs | 31 ++++++++ .../Data/QuadDataSources.cs | 31 ++++++++ .../Data/UInt256DataSources.cs | 73 ++++++++++++++++++- .../Data/UInt512DataSources.cs | 31 ++++++++ .../Numerics/Int256GenericMathTests.cs | 9 +++ .../Numerics/Int512GenericMathTests.cs | 9 +++ .../Numerics/OctoGenericMathTests.cs | 9 +++ .../Numerics/QuadGenericMathTests.cs | 9 +++ .../Numerics/UInt256GenericMathTests.cs | 8 ++ .../Numerics/UInt512GenericMathTests.cs | 9 +++ 12 files changed, 278 insertions(+), 3 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int256DataSources.cs b/src/MissingValues.Tests/Data/Int256DataSources.cs index 4c6d4ae..3113f55 100644 --- a/src/MissingValues.Tests/Data/Int256DataSources.cs +++ b/src/MissingValues.Tests/Data/Int256DataSources.cs @@ -1,4 +1,5 @@ using System.Globalization; +using System.Numerics; using System.Runtime.CompilerServices; using MissingValues.Tests.Data.Sources; @@ -1354,6 +1355,21 @@ public class Int256DataSources { throw new NotImplementedException(); } + + public static IEnumerable> ConvertToCheckedBigIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingBigIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingBigIntegerTestData() + { + throw new NotImplementedException(); + } public static IEnumerable> ConvertToCheckedHalfTestData() { @@ -1588,6 +1604,21 @@ public class Int256DataSources { throw new NotImplementedException(); } + + public static IEnumerable> ConvertFromCheckedBigIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingBigIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingBigIntegerTestData() + { + throw new NotImplementedException(); + } public static IEnumerable> ConvertFromCheckedHalfTestData() { diff --git a/src/MissingValues.Tests/Data/Int512DataSources.cs b/src/MissingValues.Tests/Data/Int512DataSources.cs index 96995d9..8d6f4ec 100644 --- a/src/MissingValues.Tests/Data/Int512DataSources.cs +++ b/src/MissingValues.Tests/Data/Int512DataSources.cs @@ -1,4 +1,5 @@ using System.Globalization; +using System.Numerics; using System.Runtime.CompilerServices; using MissingValues.Tests.Data.Sources; @@ -1577,6 +1578,21 @@ public class Int512DataSources { throw new NotImplementedException(); } + + public static IEnumerable> ConvertToCheckedBigIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingBigIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingBigIntegerTestData() + { + throw new NotImplementedException(); + } public static IEnumerable> ConvertToCheckedHalfTestData() { @@ -1821,6 +1837,21 @@ public class Int512DataSources { throw new NotImplementedException(); } + + public static IEnumerable> ConvertFromCheckedBigIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingBigIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingBigIntegerTestData() + { + throw new NotImplementedException(); + } public static IEnumerable> ConvertFromCheckedHalfTestData() { diff --git a/src/MissingValues.Tests/Data/OctoDataSources.cs b/src/MissingValues.Tests/Data/OctoDataSources.cs index 7f7b59e..6400451 100644 --- a/src/MissingValues.Tests/Data/OctoDataSources.cs +++ b/src/MissingValues.Tests/Data/OctoDataSources.cs @@ -1,4 +1,5 @@ using System.Globalization; +using System.Numerics; using System.Text; using MissingValues.Tests.Data.Sources; using MissingValues.Tests.Extensions; @@ -1084,6 +1085,21 @@ public class OctoDataSources { throw new NotImplementedException(); } + + public static IEnumerable> ConvertToCheckedBigIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingBigIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingBigIntegerTestData() + { + throw new NotImplementedException(); + } public static IEnumerable> ConvertToCheckedHalfTestData() { @@ -1294,6 +1310,21 @@ public class OctoDataSources { throw new NotImplementedException(); } + + public static IEnumerable> ConvertFromCheckedBigIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingBigIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingBigIntegerTestData() + { + throw new NotImplementedException(); + } public static IEnumerable> ConvertFromCheckedHalfTestData() { diff --git a/src/MissingValues.Tests/Data/QuadDataSources.cs b/src/MissingValues.Tests/Data/QuadDataSources.cs index a8cd863..c7380c8 100644 --- a/src/MissingValues.Tests/Data/QuadDataSources.cs +++ b/src/MissingValues.Tests/Data/QuadDataSources.cs @@ -1,4 +1,5 @@ using System.Globalization; +using System.Numerics; using System.Text; using MissingValues.Tests.Data.Sources; using MissingValues.Tests.Extensions; @@ -1105,6 +1106,21 @@ public class QuadDataSources { throw new NotImplementedException(); } + + public static IEnumerable> ConvertToCheckedBigIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingBigIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingBigIntegerTestData() + { + throw new NotImplementedException(); + } public static IEnumerable> ConvertToCheckedHalfTestData() { @@ -1315,6 +1331,21 @@ public class QuadDataSources { throw new NotImplementedException(); } + + public static IEnumerable> ConvertFromCheckedBigIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingBigIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingBigIntegerTestData() + { + throw new NotImplementedException(); + } public static IEnumerable> ConvertFromCheckedHalfTestData() { diff --git a/src/MissingValues.Tests/Data/UInt256DataSources.cs b/src/MissingValues.Tests/Data/UInt256DataSources.cs index 45c25e9..568cd9e 100644 --- a/src/MissingValues.Tests/Data/UInt256DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt256DataSources.cs @@ -1244,6 +1244,21 @@ public class UInt256DataSources yield return () => (UInt256.MaxValue, Int512.UInt256MaxValue); } + public static IEnumerable> ConvertToCheckedBigIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingBigIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingBigIntegerTestData() + { + throw new NotImplementedException(); + } + public static IEnumerable> ConvertToCheckedHalfTestData() { yield return () => (UInt256.One, Half.One); @@ -1724,9 +1739,61 @@ public class UInt256DataSources yield return () => (Int128.MaxValue, UInt256.Int128MaxValue); } + public static IEnumerable> ConvertFromCheckedBigIntegerTestData() + { + yield return () => (BigInteger.One, UInt256.One); + yield return () => ((BigInteger)byte.MaxValue, UInt256.ByteMaxValue); + yield return () => ((BigInteger)sbyte.MaxValue, UInt256.SByteMaxValue); + yield return () => ((BigInteger)short.MaxValue, UInt256.Int16MaxValue); + yield return () => ((BigInteger)ushort.MaxValue, UInt256.UInt16MaxValue); + yield return () => ((BigInteger)int.MaxValue, UInt256.Int32MaxValue); + yield return () => ((BigInteger)uint.MaxValue, UInt256.UInt32MaxValue); + yield return () => ((BigInteger)long.MaxValue, UInt256.Int64MaxValue); + yield return () => ((BigInteger)ulong.MaxValue, UInt256.UInt64MaxValue); + yield return () => ((BigInteger)Int128.MaxValue, UInt256.Int128MaxValue); + yield return () => ((BigInteger)UInt128.MaxValue, UInt256.UInt128MaxValue); + yield return () => (BigInteger.Parse("115792089237316195423570985008687907853269984665640564039457584007913129639935"), UInt256.MaxValue); + } + + public static IEnumerable> ConvertFromSaturatingBigIntegerTestData() + { + yield return () => (BigInteger.One, UInt256.One); + yield return () => ((BigInteger)byte.MaxValue, UInt256.ByteMaxValue); + yield return () => ((BigInteger)sbyte.MaxValue, UInt256.SByteMaxValue); + yield return () => ((BigInteger)short.MaxValue, UInt256.Int16MaxValue); + yield return () => ((BigInteger)ushort.MaxValue, UInt256.UInt16MaxValue); + yield return () => ((BigInteger)int.MaxValue, UInt256.Int32MaxValue); + yield return () => ((BigInteger)uint.MaxValue, UInt256.UInt32MaxValue); + yield return () => ((BigInteger)long.MaxValue, UInt256.Int64MaxValue); + yield return () => ((BigInteger)ulong.MaxValue, UInt256.UInt64MaxValue); + yield return () => ((BigInteger)Int128.MaxValue, UInt256.Int128MaxValue); + yield return () => ((BigInteger)UInt128.MaxValue, UInt256.UInt128MaxValue); + yield return () => (BigInteger.Parse("115792089237316195423570985008687907853269984665640564039457584007913129639935"), UInt256.MaxValue); + yield return () => (BigInteger.Parse("115792089237316195423570985008687907853269984665640564039457584007913129639936"), UInt256.MaxValue); + yield return () => (BigInteger.Parse("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095"), UInt256.MaxValue); + } + + public static IEnumerable> ConvertFromTruncatingBigIntegerTestData() + { + yield return () => (BigInteger.One, UInt256.One); + yield return () => ((BigInteger)byte.MaxValue, UInt256.ByteMaxValue); + yield return () => ((BigInteger)sbyte.MaxValue, UInt256.SByteMaxValue); + yield return () => ((BigInteger)short.MaxValue, UInt256.Int16MaxValue); + yield return () => ((BigInteger)ushort.MaxValue, UInt256.UInt16MaxValue); + yield return () => ((BigInteger)int.MaxValue, UInt256.Int32MaxValue); + yield return () => ((BigInteger)uint.MaxValue, UInt256.UInt32MaxValue); + yield return () => ((BigInteger)long.MaxValue, UInt256.Int64MaxValue); + yield return () => ((BigInteger)ulong.MaxValue, UInt256.UInt64MaxValue); + yield return () => ((BigInteger)Int128.MaxValue, UInt256.Int128MaxValue); + yield return () => ((BigInteger)UInt128.MaxValue, UInt256.UInt128MaxValue); + yield return () => (BigInteger.Parse("115792089237316195423570985008687907853269984665640564039457584007913129639935"), UInt256.MaxValue); + yield return () => (BigInteger.Parse("115792089237316195423570985008687907853269984665640564039457584007913129639936"), UInt256.Zero); + yield return () => (BigInteger.Parse("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095"), UInt256.MaxValue); + } + public static IEnumerable> ConvertFromCheckedHalfTestData() { - yield return () => ((Half)1f, UInt256.One); + yield return () => (Half.One, UInt256.One); yield return () => (byte.MaxValue, UInt256.ByteMaxValue); yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); } @@ -1734,7 +1801,7 @@ public class UInt256DataSources public static IEnumerable> ConvertFromSaturatingHalfTestData() { yield return () => (Half.MinValue, UInt256.Zero); - yield return () => ((Half)1f, UInt256.One); + yield return () => (Half.One, UInt256.One); yield return () => (byte.MaxValue, UInt256.ByteMaxValue); yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); } @@ -1742,7 +1809,7 @@ public class UInt256DataSources public static IEnumerable> ConvertFromTruncatingHalfTestData() { yield return () => (Half.MinValue, UInt256.Zero); - yield return () => ((Half)1f, UInt256.One); + yield return () => (Half.One, UInt256.One); yield return () => (byte.MaxValue, UInt256.ByteMaxValue); yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); } diff --git a/src/MissingValues.Tests/Data/UInt512DataSources.cs b/src/MissingValues.Tests/Data/UInt512DataSources.cs index a5f5683..ba1e324 100644 --- a/src/MissingValues.Tests/Data/UInt512DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt512DataSources.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; +using System.Numerics; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; @@ -1223,6 +1224,21 @@ public class UInt512DataSources { throw new NotImplementedException(); } + + public static IEnumerable> ConvertToCheckedBigIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToSaturatingBigIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertToTruncatingBigIntegerTestData() + { + throw new NotImplementedException(); + } public static IEnumerable> ConvertToCheckedHalfTestData() { @@ -1457,6 +1473,21 @@ public class UInt512DataSources { throw new NotImplementedException(); } + + public static IEnumerable> ConvertFromCheckedBigIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromSaturatingBigIntegerTestData() + { + throw new NotImplementedException(); + } + + public static IEnumerable> ConvertFromTruncatingBigIntegerTestData() + { + throw new NotImplementedException(); + } public static IEnumerable> ConvertFromCheckedHalfTestData() { diff --git a/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs b/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs index e53a8a6..2d6e149 100644 --- a/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/Int256GenericMathTests.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; +using System.Numerics; using System.Text; using System.Threading.Tasks; using MissingValues.Tests.Data; @@ -721,6 +722,10 @@ public async Task WriteLittleEndianTest(Int256 value, byte[] expectedDestination [Test, MethodDataSource(nameof(ConvertToCheckedInt512TestData))] public async Task ConvertToCheckedInt512Test(Int256 input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToSaturatingInt512TestData))] public async Task ConvertToSaturatingInt512Test(Int256 input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToTruncatingInt512TestData))] public async Task ConvertToTruncatingInt512Test(Int256 input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedBigIntegerTestData))] public async Task ConvertToCheckedBigIntegerTest(Int256 input, BigInteger expected) => await Assert.That(BigInteger.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingBigIntegerTestData))] public async Task ConvertToSaturatingBigIntegerTest(Int256 input, BigInteger expected) => await Assert.That(BigInteger.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingBigIntegerTestData))] public async Task ConvertToTruncatingBigIntegerTest(Int256 input, BigInteger expected) => await Assert.That(BigInteger.CreateTruncating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToCheckedHalfTestData))] public async Task ConvertToCheckedHalfTest(Int256 input, Half expected) => await Assert.That(Half.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToSaturatingHalfTestData))] public async Task ConvertToSaturatingHalfTest(Int256 input, Half expected) => await Assert.That(Half.CreateSaturating(input)).IsEqualTo(expected); @@ -782,6 +787,10 @@ public async Task WriteLittleEndianTest(Int256 value, byte[] expectedDestination [Test, MethodDataSource(nameof(ConvertFromSaturatingInt128TestData))] public async Task ConvertFromSaturatingInt128Test(Int128 input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingInt128TestData))] public async Task ConvertFromTruncatingInt128Test(Int128 input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromCheckedBigIntegerTestData))] public async Task ConvertFromCheckedBigIntegerTest(BigInteger input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingBigIntegerTestData))] public async Task ConvertFromSaturatingBigIntegerTest(BigInteger input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingBigIntegerTestData))] public async Task ConvertFromTruncatingBigIntegerTest(BigInteger input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromCheckedHalfTestData))] public async Task ConvertFromCheckedHalfTest(Half input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromSaturatingHalfTestData))] public async Task ConvertFromSaturatingHalfTest(Half input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingHalfTestData))] public async Task ConvertFromTruncatingHalfTest(Half input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); diff --git a/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs b/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs index 6c712d5..3d2f431 100644 --- a/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/Int512GenericMathTests.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; +using System.Numerics; using System.Text; using System.Threading.Tasks; using static MissingValues.Tests.Data.Int512DataSources; @@ -720,6 +721,10 @@ public async Task WriteLittleEndianTest(Int512 value, byte[] expectedDestination [Test, MethodDataSource(nameof(ConvertToCheckedInt256TestData))] public async Task ConvertToCheckedInt256Test(Int512 input, Int256 expected) => await Assert.That(Int256.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToSaturatingInt256TestData))] public async Task ConvertToSaturatingInt256Test(Int512 input, Int256 expected) => await Assert.That(Int256.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToTruncatingInt256TestData))] public async Task ConvertToTruncatingInt256Test(Int512 input, Int256 expected) => await Assert.That(Int256.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedBigIntegerTestData))] public async Task ConvertToCheckedBigIntegerTest(Int512 input, BigInteger expected) => await Assert.That(BigInteger.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingBigIntegerTestData))] public async Task ConvertToSaturatingBigIntegerTest(Int512 input, BigInteger expected) => await Assert.That(BigInteger.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingBigIntegerTestData))] public async Task ConvertToTruncatingBigIntegerTest(Int512 input, BigInteger expected) => await Assert.That(BigInteger.CreateTruncating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToCheckedHalfTestData))] public async Task ConvertToCheckedHalfTest(Int512 input, Half expected) => await Assert.That(Half.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToSaturatingHalfTestData))] public async Task ConvertToSaturatingHalfTest(Int512 input, Half expected) => await Assert.That(Half.CreateSaturating(input)).IsEqualTo(expected); @@ -781,6 +786,10 @@ public async Task WriteLittleEndianTest(Int512 value, byte[] expectedDestination [Test, MethodDataSource(nameof(ConvertFromSaturatingInt128TestData))] public async Task ConvertFromSaturatingInt128Test(Int128 input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingInt128TestData))] public async Task ConvertFromTruncatingInt128Test(Int128 input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromCheckedBigIntegerTestData))] public async Task ConvertFromCheckedBigIntegerTest(BigInteger input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingBigIntegerTestData))] public async Task ConvertFromSaturatingBigIntegerTest(BigInteger input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingBigIntegerTestData))] public async Task ConvertFromTruncatingBigIntegerTest(BigInteger input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromCheckedHalfTestData))] public async Task ConvertFromCheckedHalfTest(Half input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromSaturatingHalfTestData))] public async Task ConvertFromSaturatingHalfTest(Half input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingHalfTestData))] public async Task ConvertFromTruncatingHalfTest(Half input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); diff --git a/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs b/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs index 962edcc..6e91c14 100644 --- a/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; +using System.Numerics; using System.Text; using System.Threading.Tasks; using MissingValues.Tests.Data; @@ -600,6 +601,10 @@ public async Task SqrtTest() [Test, MethodDataSource(nameof(ConvertToSaturatingInt512TestData))] public async Task ConvertToSaturatingInt512Test(Float input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToTruncatingInt512TestData))] public async Task ConvertToTruncatingInt512Test(Float input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToCheckedBigIntegerTestData))] public async Task ConvertToCheckedBigIntegerTest(Quad input, BigInteger expected) => await Assert.That(BigInteger.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingBigIntegerTestData))] public async Task ConvertToSaturatingBigIntegerTest(Quad input, BigInteger expected) => await Assert.That(BigInteger.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingBigIntegerTestData))] public async Task ConvertToTruncatingBigIntegerTest(Quad input, BigInteger expected) => await Assert.That(BigInteger.CreateTruncating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToCheckedHalfTestData))] public async Task ConvertToCheckedHalfTest(Float input, Half expected) => await Assert.That(Half.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToSaturatingHalfTestData))] public async Task ConvertToSaturatingHalfTest(Float input, Half expected) => await Assert.That(Half.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToTruncatingHalfTestData))] public async Task ConvertToTruncatingHalfTest(Float input, Half expected) => await Assert.That(Half.CreateTruncating(input)).IsEqualTo(expected); @@ -656,6 +661,10 @@ public async Task SqrtTest() [Test, MethodDataSource(nameof(ConvertFromSaturatingInt128TestData))] public async Task ConvertFromSaturatingInt128Test(Int128 input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingInt128TestData))] public async Task ConvertFromTruncatingInt128Test(Int128 input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromCheckedBigIntegerTestData))] public async Task ConvertFromCheckedBigIntegerTest(BigInteger input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingBigIntegerTestData))] public async Task ConvertFromSaturatingBigIntegerTest(BigInteger input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingBigIntegerTestData))] public async Task ConvertFromTruncatingBigIntegerTest(BigInteger input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromCheckedHalfTestData))] public async Task ConvertFromCheckedHalfTest(Half input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromSaturatingHalfTestData))] public async Task ConvertFromSaturatingHalfTest(Half input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingHalfTestData))] public async Task ConvertFromTruncatingHalfTest(Half input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); diff --git a/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs b/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs index f863a6c..a20c5a0 100644 --- a/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs @@ -1,4 +1,5 @@ using System.Globalization; +using System.Numerics; using MissingValues.Tests.Extensions; using static MissingValues.Tests.Data.QuadDataSources; @@ -958,6 +959,10 @@ await Assert.That(Float.Tanh(Float.Zero)) [Test, MethodDataSource(nameof(ConvertToCheckedInt512TestData))] public async Task ConvertToCheckedInt512Test(Float input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToSaturatingInt512TestData))] public async Task ConvertToSaturatingInt512Test(Float input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToTruncatingInt512TestData))] public async Task ConvertToTruncatingInt512Test(Float input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedBigIntegerTestData))] public async Task ConvertToCheckedBigIntegerTest(Float input, BigInteger expected) => await Assert.That(BigInteger.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingBigIntegerTestData))] public async Task ConvertToSaturatingBigIntegerTest(Float input, BigInteger expected) => await Assert.That(BigInteger.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingBigIntegerTestData))] public async Task ConvertToTruncatingBigIntegerTest(Float input, BigInteger expected) => await Assert.That(BigInteger.CreateTruncating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToCheckedHalfTestData))] public async Task ConvertToCheckedHalfTest(Float input, Half expected) => await Assert.That(Half.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToSaturatingHalfTestData))] public async Task ConvertToSaturatingHalfTest(Float input, Half expected) => await Assert.That(Half.CreateSaturating(input)).IsEqualTo(expected); @@ -1015,6 +1020,10 @@ await Assert.That(Float.Tanh(Float.Zero)) [Test, MethodDataSource(nameof(ConvertFromSaturatingInt128TestData))] public async Task ConvertFromSaturatingInt128Test(Int128 input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingInt128TestData))] public async Task ConvertFromTruncatingInt128Test(Int128 input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromCheckedBigIntegerTestData))] public async Task ConvertFromCheckedBigIntegerTest(BigInteger input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingBigIntegerTestData))] public async Task ConvertFromSaturatingBigIntegerTest(BigInteger input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingBigIntegerTestData))] public async Task ConvertFromTruncatingBigIntegerTest(BigInteger input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromCheckedHalfTestData))] public async Task ConvertFromCheckedHalfTest(Half input, Float expected) => await Assert.That(Float.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromSaturatingHalfTestData))] public async Task ConvertFromSaturatingHalfTest(Half input, Float expected) => await Assert.That(Float.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingHalfTestData))] public async Task ConvertFromTruncatingHalfTest(Half input, Float expected) => await Assert.That(Float.CreateTruncating(input)).IsEqualTo(expected); diff --git a/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs b/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs index 6728769..317d12c 100644 --- a/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/UInt256GenericMathTests.cs @@ -723,6 +723,10 @@ public async Task WriteLittleEndianTest(UInt256 value, byte[] expectedDestinatio [Test, MethodDataSource(nameof(ConvertToSaturatingInt512TestData))] public async Task ConvertToSaturatingInt512Test(UInt256 input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToTruncatingInt512TestData))] public async Task ConvertToTruncatingInt512Test(UInt256 input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToCheckedBigIntegerTestData))] public async Task ConvertToCheckedBigIntegerTest(UInt256 input, BigInteger expected) => await Assert.That(BigInteger.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingBigIntegerTestData))] public async Task ConvertToSaturatingBigIntegerTest(UInt256 input, BigInteger expected) => await Assert.That(BigInteger.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingBigIntegerTestData))] public async Task ConvertToTruncatingBigIntegerTest(UInt256 input, BigInteger expected) => await Assert.That(BigInteger.CreateTruncating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToCheckedHalfTestData))] public async Task ConvertToCheckedHalfTest(UInt256 input, Half expected) => await Assert.That(Half.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToSaturatingHalfTestData))] public async Task ConvertToSaturatingHalfTest(UInt256 input, Half expected) => await Assert.That(Half.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToTruncatingHalfTestData))] public async Task ConvertToTruncatingHalfTest(UInt256 input, Half expected) => await Assert.That(Half.CreateTruncating(input)).IsEqualTo(expected); @@ -783,6 +787,10 @@ public async Task WriteLittleEndianTest(UInt256 value, byte[] expectedDestinatio [Test, MethodDataSource(nameof(ConvertFromSaturatingInt128TestData))] public async Task ConvertFromSaturatingInt128Test(Int128 input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingInt128TestData))] public async Task ConvertFromTruncatingInt128Test(Int128 input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromCheckedBigIntegerTestData))] public async Task ConvertFromCheckedBigIntegerTest(BigInteger input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingBigIntegerTestData))] public async Task ConvertFromSaturatingBigIntegerTest(BigInteger input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingBigIntegerTestData))] public async Task ConvertFromTruncatingBigIntegerTest(BigInteger input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromCheckedHalfTestData))] public async Task ConvertFromCheckedHalfTest(Half input, UInt256 expected) => await Assert.That(UInt256.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromSaturatingHalfTestData))] public async Task ConvertFromSaturatingHalfTest(Half input, UInt256 expected) => await Assert.That(UInt256.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingHalfTestData))] public async Task ConvertFromTruncatingHalfTest(Half input, UInt256 expected) => await Assert.That(UInt256.CreateTruncating(input)).IsEqualTo(expected); diff --git a/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs b/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs index 892261b..a05f66b 100644 --- a/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/UInt512GenericMathTests.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; +using System.Numerics; using System.Text; using System.Threading.Tasks; using static MissingValues.Tests.Data.UInt512DataSources; @@ -720,6 +721,10 @@ public async Task WriteLittleEndianTest(UInt512 value, byte[] expectedDestinatio [Test, MethodDataSource(nameof(ConvertToCheckedInt512TestData))] public async Task ConvertToCheckedInt512Test(UInt512 input, Int512 expected) => await Assert.That(Int512.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToSaturatingInt512TestData))] public async Task ConvertToSaturatingInt512Test(UInt512 input, Int512 expected) => await Assert.That(Int512.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToTruncatingInt512TestData))] public async Task ConvertToTruncatingInt512Test(UInt512 input, Int512 expected) => await Assert.That(Int512.CreateTruncating(input)).IsEqualTo(expected); + + [Test, MethodDataSource(nameof(ConvertToCheckedBigIntegerTestData))] public async Task ConvertToCheckedBigIntegerTest(UInt512 input, BigInteger expected) => await Assert.That(BigInteger.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingBigIntegerTestData))] public async Task ConvertToSaturatingBigIntegerTest(UInt512 input, BigInteger expected) => await Assert.That(BigInteger.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingBigIntegerTestData))] public async Task ConvertToTruncatingBigIntegerTest(UInt512 input, BigInteger expected) => await Assert.That(BigInteger.CreateTruncating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToCheckedHalfTestData))] public async Task ConvertToCheckedHalfTest(UInt512 input, Half expected) => await Assert.That(Half.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToSaturatingHalfTestData))] public async Task ConvertToSaturatingHalfTest(UInt512 input, Half expected) => await Assert.That(Half.CreateSaturating(input)).IsEqualTo(expected); @@ -781,6 +786,10 @@ public async Task WriteLittleEndianTest(UInt512 value, byte[] expectedDestinatio [Test, MethodDataSource(nameof(ConvertFromSaturatingInt128TestData))] public async Task ConvertFromSaturatingInt128Test(Int128 input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingInt128TestData))] public async Task ConvertFromTruncatingInt128Test(Int128 input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromCheckedBigIntegerTestData))] public async Task ConvertFromCheckedBigIntegerTest(BigInteger input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromSaturatingBigIntegerTestData))] public async Task ConvertFromSaturatingBigIntegerTest(BigInteger input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromTruncatingBigIntegerTestData))] public async Task ConvertFromTruncatingBigIntegerTest(BigInteger input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertFromCheckedHalfTestData))] public async Task ConvertFromCheckedHalfTest(Half input, UInt512 expected) => await Assert.That(UInt512.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromSaturatingHalfTestData))] public async Task ConvertFromSaturatingHalfTest(Half input, UInt512 expected) => await Assert.That(UInt512.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertFromTruncatingHalfTestData))] public async Task ConvertFromTruncatingHalfTest(Half input, UInt512 expected) => await Assert.That(UInt512.CreateTruncating(input)).IsEqualTo(expected); From 25c4ea4bdb44100eff8ce45abe8104727ac15d04 Mon Sep 17 00:00:00 2001 From: crookseta Date: Sat, 18 Jul 2026 10:22:55 -0500 Subject: [PATCH 61/74] -Added Tests for UInt256->BigInteger conversions. --- .../Data/UInt256DataSources.cs | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/MissingValues.Tests/Data/UInt256DataSources.cs b/src/MissingValues.Tests/Data/UInt256DataSources.cs index 568cd9e..84400c0 100644 --- a/src/MissingValues.Tests/Data/UInt256DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt256DataSources.cs @@ -1246,17 +1246,35 @@ public class UInt256DataSources public static IEnumerable> ConvertToCheckedBigIntegerTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, UInt128.One); + yield return () => (UInt256.ByteMaxValue, byte.MaxValue); + yield return () => (UInt256.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt256.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt256.UInt64MaxValue, ulong.MaxValue); + yield return () => (UInt256.UInt128MaxValue, UInt128.MaxValue); + yield return () => (UInt256.MaxValue, BigInteger.Parse("115792089237316195423570985008687907853269984665640564039457584007913129639935")); } public static IEnumerable> ConvertToSaturatingBigIntegerTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, UInt128.One); + yield return () => (UInt256.ByteMaxValue, byte.MaxValue); + yield return () => (UInt256.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt256.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt256.UInt64MaxValue, ulong.MaxValue); + yield return () => (UInt256.UInt128MaxValue, UInt128.MaxValue); + yield return () => (UInt256.MaxValue, BigInteger.Parse("115792089237316195423570985008687907853269984665640564039457584007913129639935")); } public static IEnumerable> ConvertToTruncatingBigIntegerTestData() { - throw new NotImplementedException(); + yield return () => (UInt256.One, UInt128.One); + yield return () => (UInt256.ByteMaxValue, byte.MaxValue); + yield return () => (UInt256.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt256.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt256.UInt64MaxValue, ulong.MaxValue); + yield return () => (UInt256.UInt128MaxValue, UInt128.MaxValue); + yield return () => (UInt256.MaxValue, BigInteger.Parse("115792089237316195423570985008687907853269984665640564039457584007913129639935")); } public static IEnumerable> ConvertToCheckedHalfTestData() From 7276481106b1fbe0a9ca417e85a8c272afd2e72f Mon Sep 17 00:00:00 2001 From: crookseta Date: Sat, 18 Jul 2026 10:55:48 -0500 Subject: [PATCH 62/74] -Added Tests for Int256->(unsigned integer) conversions. --- .../Data/Int256DataSources.cs | 165 +++++++++++++++--- 1 file changed, 144 insertions(+), 21 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int256DataSources.cs b/src/MissingValues.Tests/Data/Int256DataSources.cs index 3113f55..418c2a6 100644 --- a/src/MissingValues.Tests/Data/Int256DataSources.cs +++ b/src/MissingValues.Tests/Data/Int256DataSources.cs @@ -2,6 +2,7 @@ using System.Numerics; using System.Runtime.CompilerServices; using MissingValues.Tests.Data.Sources; +using MissingValues.Tests.Extensions; namespace MissingValues.Tests.Data; @@ -1163,107 +1164,229 @@ public class Int256DataSources public static IEnumerable> ConvertToCheckedByteTestData() { - throw new NotImplementedException(); + yield return () => (Int256.One, 1); + yield return () => (Int256.ByteMaxValue, byte.MaxValue); } public static IEnumerable> ConvertToSaturatingByteTestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, 0); + yield return () => (Int256.One, 1); + yield return () => (Int256.ByteMaxValue, byte.MaxValue); + yield return () => (Int256.MaxValue, byte.MaxValue); + yield return () => (Int256.ByteMaxValue + Int256.One, byte.MaxValue); } public static IEnumerable> ConvertToTruncatingByteTestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, 0); + yield return () => (Int256.NegativeOne, 0xFF); + yield return () => (Int256.One, 1); + yield return () => (Int256.ByteMaxValue, byte.MaxValue); + yield return () => (Int256.MaxValue, byte.MaxValue); + yield return () => (Int256.ByteMaxValue + Int256.One, 0); } public static IEnumerable> ConvertToCheckedUInt16TestData() { - throw new NotImplementedException(); + yield return () => (Int256.One, 1); + yield return () => (Int256.ByteMaxValue, byte.MaxValue); + yield return () => (Int256.UInt16MaxValue, ushort.MaxValue); } public static IEnumerable> ConvertToSaturatingUInt16TestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, 0); + yield return () => (Int256.One, 1); + yield return () => (Int256.ByteMaxValue, byte.MaxValue); + yield return () => (Int256.UInt16MaxValue, ushort.MaxValue); + yield return () => (Int256.MaxValue, ushort.MaxValue); + yield return () => (Int256.UInt16MaxValue + Int256.One, ushort.MaxValue); } public static IEnumerable> ConvertToTruncatingUInt16TestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, 0); + yield return () => (Int256.NegativeOne, 0xFFFF); + yield return () => (Int256.One, 1); + yield return () => (Int256.ByteMaxValue, byte.MaxValue); + yield return () => (Int256.UInt16MaxValue, ushort.MaxValue); + yield return () => (Int256.MaxValue, ushort.MaxValue); + yield return () => (Int256.UInt16MaxValue + Int256.One, 0); } public static IEnumerable> ConvertToCheckedUInt32TestData() { - throw new NotImplementedException(); + yield return () => (Int256.One, 1); + yield return () => (Int256.ByteMaxValue, byte.MaxValue); + yield return () => (Int256.UInt16MaxValue, ushort.MaxValue); + yield return () => (Int256.UInt32MaxValue, uint.MaxValue); } public static IEnumerable> ConvertToSaturatingUInt32TestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, 0); + yield return () => (Int256.One, 1); + yield return () => (Int256.ByteMaxValue, byte.MaxValue); + yield return () => (Int256.UInt16MaxValue, ushort.MaxValue); + yield return () => (Int256.UInt32MaxValue, uint.MaxValue); + yield return () => (Int256.MaxValue, uint.MaxValue); + yield return () => (Int256.UInt32MaxValue + Int256.One, uint.MaxValue); } public static IEnumerable> ConvertToTruncatingUInt32TestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, 0); + yield return () => (Int256.NegativeOne, 0xFFFF_FFFF); + yield return () => (Int256.One, 1); + yield return () => (Int256.ByteMaxValue, byte.MaxValue); + yield return () => (Int256.UInt16MaxValue, ushort.MaxValue); + yield return () => (Int256.UInt32MaxValue, uint.MaxValue); + yield return () => (Int256.MaxValue, uint.MaxValue); + yield return () => (Int256.UInt32MaxValue + Int256.One, 0); } public static IEnumerable> ConvertToCheckedUInt64TestData() { - throw new NotImplementedException(); + yield return () => (Int256.One, 1); + yield return () => (Int256.ByteMaxValue, byte.MaxValue); + yield return () => (Int256.UInt16MaxValue, ushort.MaxValue); + yield return () => (Int256.UInt32MaxValue, uint.MaxValue); + yield return () => (Int256.UInt64MaxValue, ulong.MaxValue); } public static IEnumerable> ConvertToSaturatingUInt64TestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, 0); + yield return () => (Int256.One, 1); + yield return () => (Int256.ByteMaxValue, byte.MaxValue); + yield return () => (Int256.UInt16MaxValue, ushort.MaxValue); + yield return () => (Int256.UInt32MaxValue, uint.MaxValue); + yield return () => (Int256.UInt64MaxValue, ulong.MaxValue); + yield return () => (Int256.MaxValue, ulong.MaxValue); + yield return () => (Int256.UInt64MaxValue + Int256.One, ulong.MaxValue); } public static IEnumerable> ConvertToTruncatingUInt64TestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, 0); + yield return () => (Int256.NegativeOne, 0xFFFF_FFFF_FFFF_FFFF); + yield return () => (Int256.One, 1); + yield return () => (Int256.ByteMaxValue, byte.MaxValue); + yield return () => (Int256.UInt16MaxValue, ushort.MaxValue); + yield return () => (Int256.UInt32MaxValue, uint.MaxValue); + yield return () => (Int256.UInt64MaxValue, ulong.MaxValue); + yield return () => (Int256.MaxValue, ulong.MaxValue); + yield return () => (Int256.UInt64MaxValue + Int256.One, 0); } public static IEnumerable> ConvertToCheckedUInt128TestData() { - throw new NotImplementedException(); + yield return () => (Int256.One, UInt128.One); + yield return () => (Int256.ByteMaxValue, byte.MaxValue); + yield return () => (Int256.UInt16MaxValue, ushort.MaxValue); + yield return () => (Int256.UInt32MaxValue, uint.MaxValue); + yield return () => (Int256.UInt64MaxValue, ulong.MaxValue); + yield return () => (Int256.UInt128MaxValue, UInt128.MaxValue); } public static IEnumerable> ConvertToSaturatingUInt128TestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, UInt128.Zero); + yield return () => (Int256.One, UInt128.One); + yield return () => (Int256.ByteMaxValue, byte.MaxValue); + yield return () => (Int256.UInt16MaxValue, ushort.MaxValue); + yield return () => (Int256.UInt32MaxValue, uint.MaxValue); + yield return () => (Int256.UInt64MaxValue, ulong.MaxValue); + yield return () => (Int256.UInt128MaxValue, UInt128.MaxValue); + yield return () => (Int256.MaxValue, UInt128.MaxValue); + yield return () => (Int256.UInt128MaxValue + Int256.One, UInt128.MaxValue); } public static IEnumerable> ConvertToTruncatingUInt128TestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, UInt128.Zero); + yield return () => (Int256.NegativeOne, new UInt128(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); + yield return () => (Int256.One, UInt128.One); + yield return () => (Int256.ByteMaxValue, byte.MaxValue); + yield return () => (Int256.UInt16MaxValue, ushort.MaxValue); + yield return () => (Int256.UInt32MaxValue, uint.MaxValue); + yield return () => (Int256.UInt64MaxValue, ulong.MaxValue); + yield return () => (Int256.UInt128MaxValue, UInt128.MaxValue); + yield return () => (Int256.MaxValue, UInt128.MaxValue); + yield return () => (Int256.UInt128MaxValue + Int256.One, UInt128.Zero); } public static IEnumerable> ConvertToCheckedUInt256TestData() { - throw new NotImplementedException(); + yield return () => (Int256.One, UInt256.One); + yield return () => (Int256.ByteMaxValue, UInt256.ByteMaxValue); + yield return () => (Int256.UInt16MaxValue, UInt256.UInt16MaxValue); + yield return () => (Int256.UInt32MaxValue, UInt256.UInt32MaxValue); + yield return () => (Int256.UInt64MaxValue, UInt256.UInt64MaxValue); + yield return () => (Int256.UInt128MaxValue, UInt256.UInt128MaxValue); + yield return () => (Int256.MaxValue, UInt256.Int256MaxValue); } public static IEnumerable> ConvertToSaturatingUInt256TestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, UInt256.Zero); + yield return () => (Int256.One, UInt256.One); + yield return () => (Int256.ByteMaxValue, UInt256.ByteMaxValue); + yield return () => (Int256.UInt16MaxValue, UInt256.UInt16MaxValue); + yield return () => (Int256.UInt32MaxValue, UInt256.UInt32MaxValue); + yield return () => (Int256.UInt64MaxValue, UInt256.UInt64MaxValue); + yield return () => (Int256.UInt128MaxValue, UInt256.UInt128MaxValue); + yield return () => (Int256.MaxValue, UInt256.Int256MaxValue); } public static IEnumerable> ConvertToTruncatingUInt256TestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, new UInt256(0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); + yield return () => (Int256.NegativeOne, UInt256.MaxValue); + yield return () => (Int256.One, UInt256.One); + yield return () => (Int256.ByteMaxValue, UInt256.ByteMaxValue); + yield return () => (Int256.UInt16MaxValue, UInt256.UInt16MaxValue); + yield return () => (Int256.UInt32MaxValue, UInt256.UInt32MaxValue); + yield return () => (Int256.UInt64MaxValue, UInt256.UInt64MaxValue); + yield return () => (Int256.UInt128MaxValue, UInt256.UInt128MaxValue); + yield return () => (Int256.MaxValue, UInt256.Int256MaxValue); } public static IEnumerable> ConvertToCheckedUInt512TestData() { - throw new NotImplementedException(); + yield return () => (Int256.One, UInt512.One); + yield return () => (Int256.ByteMaxValue, UInt512.ByteMaxValue); + yield return () => (Int256.UInt16MaxValue, UInt512.UInt16MaxValue); + yield return () => (Int256.UInt32MaxValue, UInt512.UInt32MaxValue); + yield return () => (Int256.UInt64MaxValue, UInt512.UInt64MaxValue); + yield return () => (Int256.UInt128MaxValue, UInt512.UInt128MaxValue); + yield return () => (Int256.MaxValue, UInt512.Int256MaxValue); } public static IEnumerable> ConvertToSaturatingUInt512TestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, UInt512.Zero); + yield return () => (Int256.One, UInt512.One); + yield return () => (Int256.ByteMaxValue, UInt512.ByteMaxValue); + yield return () => (Int256.UInt16MaxValue, UInt512.UInt16MaxValue); + yield return () => (Int256.UInt32MaxValue, UInt512.UInt32MaxValue); + yield return () => (Int256.UInt64MaxValue, UInt512.UInt64MaxValue); + yield return () => (Int256.UInt128MaxValue, UInt512.UInt128MaxValue); + yield return () => (Int256.MaxValue, UInt512.Int256MaxValue); } public static IEnumerable> ConvertToTruncatingUInt512TestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, new UInt512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); + yield return () => (Int256.NegativeOne, UInt512.MaxValue); + yield return () => (Int256.One, UInt512.One); + yield return () => (Int256.ByteMaxValue, UInt512.ByteMaxValue); + yield return () => (Int256.UInt16MaxValue, UInt512.UInt16MaxValue); + yield return () => (Int256.UInt32MaxValue, UInt512.UInt32MaxValue); + yield return () => (Int256.UInt64MaxValue, UInt512.UInt64MaxValue); + yield return () => (Int256.UInt128MaxValue, UInt512.UInt128MaxValue); + yield return () => (Int256.MaxValue, UInt512.Int256MaxValue); } public static IEnumerable> ConvertToCheckedSByteTestData() From 3dd1459345b0d0876b5055d5ad5cae177f8e4721 Mon Sep 17 00:00:00 2001 From: crookseta Date: Sat, 18 Jul 2026 11:12:29 -0500 Subject: [PATCH 63/74] -Added Tests for Int256->(signed integer & big integer) conversions. --- .../Data/Int256DataSources.cs | 230 ++++++++++++++++-- 1 file changed, 210 insertions(+), 20 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int256DataSources.cs b/src/MissingValues.Tests/Data/Int256DataSources.cs index 418c2a6..111813a 100644 --- a/src/MissingValues.Tests/Data/Int256DataSources.cs +++ b/src/MissingValues.Tests/Data/Int256DataSources.cs @@ -1391,107 +1391,297 @@ public class Int256DataSources public static IEnumerable> ConvertToCheckedSByteTestData() { - throw new NotImplementedException(); + yield return () => (Int256.SByteMinValue, sbyte.MinValue); + yield return () => (Int256.One, 1); + yield return () => (Int256.SByteMaxValue, sbyte.MaxValue); } public static IEnumerable> ConvertToSaturatingSByteTestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, sbyte.MinValue); + yield return () => (Int256.SByteMinValue, sbyte.MinValue); + yield return () => (Int256.One, 1); + yield return () => (Int256.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int256.MaxValue, sbyte.MaxValue); } public static IEnumerable> ConvertToTruncatingSByteTestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, 0); + yield return () => (Int256.SByteMinValue, sbyte.MinValue); + yield return () => (Int256.One, 1); + yield return () => (Int256.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int256.MaxValue, -1); } public static IEnumerable> ConvertToCheckedInt16TestData() { - throw new NotImplementedException(); + yield return () => (Int256.Int16MinValue, short.MinValue); + yield return () => (Int256.SByteMinValue, sbyte.MinValue); + yield return () => (Int256.One, 1); + yield return () => (Int256.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int256.Int16MaxValue, short.MaxValue); } public static IEnumerable> ConvertToSaturatingInt16TestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, short.MinValue); + yield return () => (Int256.Int16MinValue, short.MinValue); + yield return () => (Int256.SByteMinValue, sbyte.MinValue); + yield return () => (Int256.One, 1); + yield return () => (Int256.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int256.Int16MaxValue, short.MaxValue); + yield return () => (Int256.MaxValue, short.MaxValue); } public static IEnumerable> ConvertToTruncatingInt16TestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, 0); + yield return () => (Int256.Int16MinValue, short.MinValue); + yield return () => (Int256.SByteMinValue, sbyte.MinValue); + yield return () => (Int256.One, 1); + yield return () => (Int256.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int256.Int16MaxValue, short.MaxValue); + yield return () => (Int256.MaxValue, -1); } public static IEnumerable> ConvertToCheckedInt32TestData() { - throw new NotImplementedException(); + yield return () => (Int256.Int32MinValue, int.MinValue); + yield return () => (Int256.Int16MinValue, short.MinValue); + yield return () => (Int256.SByteMinValue, sbyte.MinValue); + yield return () => (Int256.One, 1); + yield return () => (Int256.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int256.Int16MaxValue, short.MaxValue); + yield return () => (Int256.Int32MaxValue, int.MaxValue); } public static IEnumerable> ConvertToSaturatingInt32TestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, int.MinValue); + yield return () => (Int256.Int32MinValue, int.MinValue); + yield return () => (Int256.Int16MinValue, short.MinValue); + yield return () => (Int256.SByteMinValue, sbyte.MinValue); + yield return () => (Int256.One, 1); + yield return () => (Int256.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int256.Int16MaxValue, short.MaxValue); + yield return () => (Int256.Int32MaxValue, int.MaxValue); + yield return () => (Int256.MaxValue, int.MaxValue); } public static IEnumerable> ConvertToTruncatingInt32TestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, 0); + yield return () => (Int256.Int32MinValue, int.MinValue); + yield return () => (Int256.Int16MinValue, short.MinValue); + yield return () => (Int256.SByteMinValue, sbyte.MinValue); + yield return () => (Int256.One, 1); + yield return () => (Int256.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int256.Int16MaxValue, short.MaxValue); + yield return () => (Int256.Int32MaxValue, int.MaxValue); + yield return () => (Int256.MaxValue, -1); } public static IEnumerable> ConvertToCheckedInt64TestData() { - throw new NotImplementedException(); + yield return () => (Int256.Int64MinValue, long.MinValue); + yield return () => (Int256.Int32MinValue, int.MinValue); + yield return () => (Int256.Int16MinValue, short.MinValue); + yield return () => (Int256.SByteMinValue, sbyte.MinValue); + yield return () => (Int256.One, 1); + yield return () => (Int256.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int256.Int16MaxValue, short.MaxValue); + yield return () => (Int256.Int32MaxValue, int.MaxValue); + yield return () => (Int256.Int64MaxValue, long.MaxValue); } public static IEnumerable> ConvertToSaturatingInt64TestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, long.MinValue); + yield return () => (Int256.Int64MinValue, long.MinValue); + yield return () => (Int256.Int32MinValue, int.MinValue); + yield return () => (Int256.Int16MinValue, short.MinValue); + yield return () => (Int256.SByteMinValue, sbyte.MinValue); + yield return () => (Int256.One, 1); + yield return () => (Int256.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int256.Int16MaxValue, short.MaxValue); + yield return () => (Int256.Int32MaxValue, int.MaxValue); + yield return () => (Int256.Int64MaxValue, long.MaxValue); + yield return () => (Int256.MaxValue, long.MaxValue); } public static IEnumerable> ConvertToTruncatingInt64TestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, 0); + yield return () => (Int256.Int64MinValue, long.MinValue); + yield return () => (Int256.Int32MinValue, int.MinValue); + yield return () => (Int256.Int16MinValue, short.MinValue); + yield return () => (Int256.SByteMinValue, sbyte.MinValue); + yield return () => (Int256.One, 1); + yield return () => (Int256.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int256.Int16MaxValue, short.MaxValue); + yield return () => (Int256.Int32MaxValue, int.MaxValue); + yield return () => (Int256.Int64MaxValue, long.MaxValue); + yield return () => (Int256.MaxValue, -1); } public static IEnumerable> ConvertToCheckedInt128TestData() { - throw new NotImplementedException(); + yield return () => (Int256.Int128MinValue, Int128.MinValue); + yield return () => (Int256.Int64MinValue, long.MinValue); + yield return () => (Int256.Int32MinValue, int.MinValue); + yield return () => (Int256.Int16MinValue, short.MinValue); + yield return () => (Int256.SByteMinValue, sbyte.MinValue); + yield return () => (Int256.One, Int128.One); + yield return () => (Int256.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int256.Int16MaxValue, short.MaxValue); + yield return () => (Int256.Int32MaxValue, int.MaxValue); + yield return () => (Int256.Int64MaxValue, long.MaxValue); + yield return () => (Int256.Int128MaxValue, Int128.MaxValue); } public static IEnumerable> ConvertToSaturatingInt128TestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, Int128.MinValue); + yield return () => (Int256.Int128MinValue, Int128.MinValue); + yield return () => (Int256.Int64MinValue, long.MinValue); + yield return () => (Int256.Int32MinValue, int.MinValue); + yield return () => (Int256.Int16MinValue, short.MinValue); + yield return () => (Int256.SByteMinValue, sbyte.MinValue); + yield return () => (Int256.One, Int128.One); + yield return () => (Int256.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int256.Int16MaxValue, short.MaxValue); + yield return () => (Int256.Int32MaxValue, int.MaxValue); + yield return () => (Int256.Int64MaxValue, long.MaxValue); + yield return () => (Int256.Int128MaxValue, Int128.MaxValue); + yield return () => (Int256.MaxValue, Int128.MaxValue); } public static IEnumerable> ConvertToTruncatingInt128TestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, Int128.Zero); + yield return () => (Int256.MinValue, Int128.MinValue); + yield return () => (Int256.Int128MinValue, Int128.MinValue); + yield return () => (Int256.Int64MinValue, long.MinValue); + yield return () => (Int256.Int32MinValue, int.MinValue); + yield return () => (Int256.Int16MinValue, short.MinValue); + yield return () => (Int256.SByteMinValue, sbyte.MinValue); + yield return () => (Int256.One, Int128.One); + yield return () => (Int256.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int256.Int16MaxValue, short.MaxValue); + yield return () => (Int256.Int32MaxValue, int.MaxValue); + yield return () => (Int256.Int64MaxValue, long.MaxValue); + yield return () => (Int256.Int128MaxValue, Int128.MaxValue); + yield return () => (Int256.MaxValue, Int128.MaxValue); + yield return () => (Int256.MaxValue, Int128.NegativeOne); } public static IEnumerable> ConvertToCheckedInt512TestData() { + yield return () => (Int256.MinValue, Int512.Int256MinValue); + yield return () => (Int256.Int128MinValue, Int512.Int128MinValue); + yield return () => (Int256.Int64MinValue, Int512.Int64MinValue); + yield return () => (Int256.Int32MinValue, Int512.Int32MinValue); + yield return () => (Int256.Int16MinValue, Int512.Int16MinValue); + yield return () => (Int256.SByteMinValue, Int512.SByteMinValue); + yield return () => (Int256.One, Int512.One); + yield return () => (Int256.SByteMaxValue, Int512.SByteMaxValue); + yield return () => (Int256.Int16MaxValue, Int512.Int16MaxValue); + yield return () => (Int256.Int32MaxValue, Int512.Int32MaxValue); + yield return () => (Int256.Int64MaxValue, Int512.Int64MaxValue); + yield return () => (Int256.Int128MaxValue, Int512.Int128MaxValue); + yield return () => (Int256.MaxValue, Int512.Int256MaxValue); + yield return () => (Int256.Parse("-465182250000"), Int512.Parse("-465182250000")); } public static IEnumerable> ConvertToSaturatingInt512TestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, Int512.Int256MinValue); + yield return () => (Int256.Int128MinValue, Int512.Int128MinValue); + yield return () => (Int256.Int64MinValue, Int512.Int64MinValue); + yield return () => (Int256.Int32MinValue, Int512.Int32MinValue); + yield return () => (Int256.Int16MinValue, Int512.Int16MinValue); + yield return () => (Int256.SByteMinValue, Int512.SByteMinValue); + yield return () => (Int256.One, Int512.One); + yield return () => (Int256.SByteMaxValue, Int512.SByteMaxValue); + yield return () => (Int256.Int16MaxValue, Int512.Int16MaxValue); + yield return () => (Int256.Int32MaxValue, Int512.Int32MaxValue); + yield return () => (Int256.Int64MaxValue, Int512.Int64MaxValue); + yield return () => (Int256.Int128MaxValue, Int512.Int128MaxValue); + yield return () => (Int256.MaxValue, Int512.Int256MaxValue); + + yield return () => (Int256.Parse("-465182250000"), Int512.Parse("-465182250000")); } public static IEnumerable> ConvertToTruncatingInt512TestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, Int512.Int256MinValue); + yield return () => (Int256.Int128MinValue, Int512.Int128MinValue); + yield return () => (Int256.Int64MinValue, Int512.Int64MinValue); + yield return () => (Int256.Int32MinValue, Int512.Int32MinValue); + yield return () => (Int256.Int16MinValue, Int512.Int16MinValue); + yield return () => (Int256.SByteMinValue, Int512.SByteMinValue); + yield return () => (Int256.One, Int512.One); + yield return () => (Int256.SByteMaxValue, Int512.SByteMaxValue); + yield return () => (Int256.Int16MaxValue, Int512.Int16MaxValue); + yield return () => (Int256.Int32MaxValue, Int512.Int32MaxValue); + yield return () => (Int256.Int64MaxValue, Int512.Int64MaxValue); + yield return () => (Int256.Int128MaxValue, Int512.Int128MaxValue); + yield return () => (Int256.MaxValue, Int512.Int256MaxValue); + + yield return () => (Int256.Parse("-465182250000"), Int512.Parse("-465182250000")); } public static IEnumerable> ConvertToCheckedBigIntegerTestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, BigInteger.Parse("-57896044618658097711785492504343953926634992332820282019728792003956564819968")); + yield return () => (Int256.Int128MinValue, Int128.MinValue); + yield return () => (Int256.Int64MinValue, long.MinValue); + yield return () => (Int256.Int32MinValue, int.MinValue); + yield return () => (Int256.Int16MinValue, short.MinValue); + yield return () => (Int256.SByteMinValue, sbyte.MinValue); + yield return () => (Int256.One, BigInteger.One); + yield return () => (Int256.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int256.Int16MaxValue, short.MaxValue); + yield return () => (Int256.Int32MaxValue, int.MaxValue); + yield return () => (Int256.Int64MaxValue, long.MaxValue); + yield return () => (Int256.Int128MaxValue, Int128.MaxValue); + yield return () => (Int256.MaxValue, BigInteger.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819967")); } public static IEnumerable> ConvertToSaturatingBigIntegerTestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, BigInteger.Parse("-57896044618658097711785492504343953926634992332820282019728792003956564819968")); + yield return () => (Int256.Int128MinValue, Int128.MinValue); + yield return () => (Int256.Int64MinValue, long.MinValue); + yield return () => (Int256.Int32MinValue, int.MinValue); + yield return () => (Int256.Int16MinValue, short.MinValue); + yield return () => (Int256.SByteMinValue, sbyte.MinValue); + yield return () => (Int256.One, BigInteger.One); + yield return () => (Int256.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int256.Int16MaxValue, short.MaxValue); + yield return () => (Int256.Int32MaxValue, int.MaxValue); + yield return () => (Int256.Int64MaxValue, long.MaxValue); + yield return () => (Int256.Int128MaxValue, Int128.MaxValue); + yield return () => (Int256.MaxValue, BigInteger.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819967")); } public static IEnumerable> ConvertToTruncatingBigIntegerTestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, BigInteger.Parse("-57896044618658097711785492504343953926634992332820282019728792003956564819968")); + yield return () => (Int256.Int128MinValue, Int128.MinValue); + yield return () => (Int256.Int64MinValue, long.MinValue); + yield return () => (Int256.Int32MinValue, int.MinValue); + yield return () => (Int256.Int16MinValue, short.MinValue); + yield return () => (Int256.SByteMinValue, sbyte.MinValue); + yield return () => (Int256.One, BigInteger.One); + yield return () => (Int256.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int256.Int16MaxValue, short.MaxValue); + yield return () => (Int256.Int32MaxValue, int.MaxValue); + yield return () => (Int256.Int64MaxValue, long.MaxValue); + yield return () => (Int256.Int128MaxValue, Int128.MaxValue); + yield return () => (Int256.MaxValue, BigInteger.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819967")); } public static IEnumerable> ConvertToCheckedHalfTestData() From 17f6d45cd1c892fcd4d9d1766ab097ad4d5f56da Mon Sep 17 00:00:00 2001 From: crookseta Date: Sat, 18 Jul 2026 11:19:28 -0500 Subject: [PATCH 64/74] -Added Tests for Int256->Half conversions. --- .../Data/Int256DataSources.cs | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int256DataSources.cs b/src/MissingValues.Tests/Data/Int256DataSources.cs index 111813a..88026f7 100644 --- a/src/MissingValues.Tests/Data/Int256DataSources.cs +++ b/src/MissingValues.Tests/Data/Int256DataSources.cs @@ -1686,17 +1686,33 @@ public class Int256DataSources public static IEnumerable> ConvertToCheckedHalfTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Int16MinValue, (Half)short.MinValue); + yield return () => (Int256.SByteMinValue, (Half)sbyte.MinValue); + yield return () => (Int256.One, Half.One); + yield return () => (Int256.SByteMaxValue, (Half)sbyte.MaxValue); + yield return () => (Int256.Int16MaxValue, (Half)short.MaxValue); } public static IEnumerable> ConvertToSaturatingHalfTestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, Half.MinValue); + yield return () => (Int256.Int16MinValue, (Half)short.MinValue); + yield return () => (Int256.SByteMinValue, (Half)sbyte.MinValue); + yield return () => (Int256.One, Half.One); + yield return () => (Int256.SByteMaxValue, (Half)sbyte.MaxValue); + yield return () => (Int256.Int16MaxValue, (Half)short.MaxValue); + yield return () => (Int256.MaxValue, Half.MaxValue); } public static IEnumerable> ConvertToTruncatingHalfTestData() { - throw new NotImplementedException(); + yield return () => (Int256.MinValue, Half.MinValue); + yield return () => (Int256.Int16MinValue, (Half)short.MinValue); + yield return () => (Int256.SByteMinValue, (Half)sbyte.MinValue); + yield return () => (Int256.One, Half.One); + yield return () => (Int256.SByteMaxValue, (Half)sbyte.MaxValue); + yield return () => (Int256.Int16MaxValue, (Half)short.MaxValue); + yield return () => (Int256.MaxValue, Half.MaxValue); } public static IEnumerable> ConvertToCheckedSingleTestData() From 5c1fd46a85aa40ff0edd945e26c8eb974f81fb15 Mon Sep 17 00:00:00 2001 From: crookseta Date: Sun, 19 Jul 2026 18:24:21 -0500 Subject: [PATCH 65/74] -Added Tests for Int256->(floating point) conversions. --- .../Data/Int256DataSources.cs | 114 ++++++++++++++++-- 1 file changed, 105 insertions(+), 9 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int256DataSources.cs b/src/MissingValues.Tests/Data/Int256DataSources.cs index 88026f7..2da332c 100644 --- a/src/MissingValues.Tests/Data/Int256DataSources.cs +++ b/src/MissingValues.Tests/Data/Int256DataSources.cs @@ -1717,21 +1717,49 @@ public class Int256DataSources public static IEnumerable> ConvertToCheckedSingleTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Int32MinValue, int.MinValue); + yield return () => (Int256.Int16MinValue, short.MinValue); + yield return () => (Int256.SByteMinValue, sbyte.MinValue); + yield return () => (Int256.One, 1f); + yield return () => (Int256.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int256.Int16MaxValue, short.MaxValue); + yield return () => (Int256.Int32MaxValue, int.MaxValue); } public static IEnumerable> ConvertToSaturatingSingleTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Int32MinValue, int.MinValue); + yield return () => (Int256.Int16MinValue, short.MinValue); + yield return () => (Int256.SByteMinValue, sbyte.MinValue); + yield return () => (Int256.One, 1f); + yield return () => (Int256.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int256.Int16MaxValue, short.MaxValue); + yield return () => (Int256.Int32MaxValue, int.MaxValue); } public static IEnumerable> ConvertToTruncatingSingleTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Int32MinValue, int.MinValue); + yield return () => (Int256.Int16MinValue, short.MinValue); + yield return () => (Int256.SByteMinValue, sbyte.MinValue); + yield return () => (Int256.One, 1f); + yield return () => (Int256.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int256.Int16MaxValue, short.MaxValue); + yield return () => (Int256.Int32MaxValue, int.MaxValue); } public static IEnumerable> ConvertToCheckedDoubleTestData() { + yield return () => (Int256.Int64MinValue, long.MinValue); + yield return () => (Int256.Int32MinValue, int.MinValue); + yield return () => (Int256.Int16MinValue, short.MinValue); + yield return () => (Int256.SByteMinValue, sbyte.MinValue); + yield return () => (Int256.One, 1d); + yield return () => (Int256.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int256.Int16MaxValue, short.MaxValue); + yield return () => (Int256.Int32MaxValue, int.MaxValue); + yield return () => (Int256.Int64MaxValue, long.MaxValue); + yield return () => (Int256.Parse("781377183594418599030564404241984000000000000000000"), 781377183594418599030564404241984000000000000000000.0d); yield return () => (Int256.Parse("-781377183594418599030564404241984000000000000000000"), @@ -1740,6 +1768,16 @@ public class Int256DataSources public static IEnumerable> ConvertToSaturatingDoubleTestData() { + yield return () => (Int256.Int64MinValue, long.MinValue); + yield return () => (Int256.Int32MinValue, int.MinValue); + yield return () => (Int256.Int16MinValue, short.MinValue); + yield return () => (Int256.SByteMinValue, sbyte.MinValue); + yield return () => (Int256.One, 1d); + yield return () => (Int256.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int256.Int16MaxValue, short.MaxValue); + yield return () => (Int256.Int32MaxValue, int.MaxValue); + yield return () => (Int256.Int64MaxValue, long.MaxValue); + yield return () => (Int256.Parse("781377183594418599030564404241984000000000000000000"), 781377183594418599030564404241984000000000000000000.0d); yield return () => (Int256.Parse("-781377183594418599030564404241984000000000000000000"), @@ -1748,6 +1786,16 @@ public class Int256DataSources public static IEnumerable> ConvertToTruncatingDoubleTestData() { + yield return () => (Int256.Int64MinValue, long.MinValue); + yield return () => (Int256.Int32MinValue, int.MinValue); + yield return () => (Int256.Int16MinValue, short.MinValue); + yield return () => (Int256.SByteMinValue, sbyte.MinValue); + yield return () => (Int256.One, 1d); + yield return () => (Int256.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int256.Int16MaxValue, short.MaxValue); + yield return () => (Int256.Int32MaxValue, int.MaxValue); + yield return () => (Int256.Int64MaxValue, long.MaxValue); + yield return () => (Int256.Parse("781377183594418599030564404241984000000000000000000"), 781377183594418599030564404241984000000000000000000.0d); yield return () => (Int256.Parse("-781377183594418599030564404241984000000000000000000"), @@ -1756,32 +1804,80 @@ public class Int256DataSources public static IEnumerable> ConvertToCheckedQuadTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Int64MinValue, Quad.Int64MinValue); + yield return () => (Int256.Int32MinValue, Quad.Int32MinValue); + yield return () => (Int256.Int16MinValue, Quad.Int16MinValue); + yield return () => (Int256.SByteMinValue, Quad.SByteMinValue); + yield return () => (Int256.One, Quad.One); + yield return () => (Int256.SByteMaxValue, Quad.SByteMaxValue); + yield return () => (Int256.Int16MaxValue, Quad.Int16MaxValue); + yield return () => (Int256.Int32MaxValue, Quad.Int32MaxValue); + yield return () => (Int256.Int64MaxValue, Quad.Int64MaxValue); } public static IEnumerable> ConvertToSaturatingQuadTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Int64MinValue, Quad.Int64MinValue); + yield return () => (Int256.Int32MinValue, Quad.Int32MinValue); + yield return () => (Int256.Int16MinValue, Quad.Int16MinValue); + yield return () => (Int256.SByteMinValue, Quad.SByteMinValue); + yield return () => (Int256.One, Quad.One); + yield return () => (Int256.SByteMaxValue, Quad.SByteMaxValue); + yield return () => (Int256.Int16MaxValue, Quad.Int16MaxValue); + yield return () => (Int256.Int32MaxValue, Quad.Int32MaxValue); + yield return () => (Int256.Int64MaxValue, Quad.Int64MaxValue); } public static IEnumerable> ConvertToTruncatingQuadTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Int64MinValue, Quad.Int64MinValue); + yield return () => (Int256.Int32MinValue, Quad.Int32MinValue); + yield return () => (Int256.Int16MinValue, Quad.Int16MinValue); + yield return () => (Int256.SByteMinValue, Quad.SByteMinValue); + yield return () => (Int256.One, Quad.One); + yield return () => (Int256.SByteMaxValue, Quad.SByteMaxValue); + yield return () => (Int256.Int16MaxValue, Quad.Int16MaxValue); + yield return () => (Int256.Int32MaxValue, Quad.Int32MaxValue); + yield return () => (Int256.Int64MaxValue, Quad.Int64MaxValue); } public static IEnumerable> ConvertToCheckedOctoTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Int64MinValue, Octo.Int64MinValue); + yield return () => (Int256.Int32MinValue, Octo.Int32MinValue); + yield return () => (Int256.Int16MinValue, Octo.Int16MinValue); + yield return () => (Int256.SByteMinValue, Octo.SByteMinValue); + yield return () => (Int256.One, Octo.One); + yield return () => (Int256.SByteMaxValue, Octo.SByteMaxValue); + yield return () => (Int256.Int16MaxValue, Octo.Int16MaxValue); + yield return () => (Int256.Int32MaxValue, Octo.Int32MaxValue); + yield return () => (Int256.Int64MaxValue, Octo.Int64MaxValue); } public static IEnumerable> ConvertToSaturatingOctoTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Int64MinValue, Octo.Int64MinValue); + yield return () => (Int256.Int32MinValue, Octo.Int32MinValue); + yield return () => (Int256.Int16MinValue, Octo.Int16MinValue); + yield return () => (Int256.SByteMinValue, Octo.SByteMinValue); + yield return () => (Int256.One, Octo.One); + yield return () => (Int256.SByteMaxValue, Octo.SByteMaxValue); + yield return () => (Int256.Int16MaxValue, Octo.Int16MaxValue); + yield return () => (Int256.Int32MaxValue, Octo.Int32MaxValue); + yield return () => (Int256.Int64MaxValue, Octo.Int64MaxValue); } public static IEnumerable> ConvertToTruncatingOctoTestData() { - throw new NotImplementedException(); + yield return () => (Int256.Int64MinValue, Octo.Int64MinValue); + yield return () => (Int256.Int32MinValue, Octo.Int32MinValue); + yield return () => (Int256.Int16MinValue, Octo.Int16MinValue); + yield return () => (Int256.SByteMinValue, Octo.SByteMinValue); + yield return () => (Int256.One, Octo.One); + yield return () => (Int256.SByteMaxValue, Octo.SByteMaxValue); + yield return () => (Int256.Int16MaxValue, Octo.Int16MaxValue); + yield return () => (Int256.Int32MaxValue, Octo.Int32MaxValue); + yield return () => (Int256.Int64MaxValue, Octo.Int64MaxValue); } public static IEnumerable> ConvertFromCheckedByteTestData() From 337bd18fb7637b3647b266693e6b4902383478b3 Mon Sep 17 00:00:00 2001 From: crookseta Date: Sun, 19 Jul 2026 20:29:48 -0500 Subject: [PATCH 66/74] -Added Tests for (integer/floating point)->Int256 conversions. --- .../Data/Int256DataSources.cs | 313 +++++++++++++++--- 1 file changed, 271 insertions(+), 42 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int256DataSources.cs b/src/MissingValues.Tests/Data/Int256DataSources.cs index 2da332c..33473a4 100644 --- a/src/MissingValues.Tests/Data/Int256DataSources.cs +++ b/src/MissingValues.Tests/Data/Int256DataSources.cs @@ -1882,211 +1882,440 @@ public class Int256DataSources public static IEnumerable> ConvertFromCheckedByteTestData() { - throw new NotImplementedException(); + yield return () => (1, Int256.One); + yield return () => (byte.MaxValue, Int256.ByteMaxValue); } public static IEnumerable> ConvertFromSaturatingByteTestData() { - throw new NotImplementedException(); + yield return () => (1, Int256.One); + yield return () => (byte.MaxValue, Int256.ByteMaxValue); } public static IEnumerable> ConvertFromTruncatingByteTestData() { - throw new NotImplementedException(); + yield return () => (1, Int256.One); + yield return () => (byte.MaxValue, Int256.ByteMaxValue); } public static IEnumerable> ConvertFromCheckedUInt16TestData() { - throw new NotImplementedException(); + yield return () => (1, Int256.One); + yield return () => (byte.MaxValue, Int256.ByteMaxValue); + yield return () => (ushort.MaxValue, Int256.UInt16MaxValue); } public static IEnumerable> ConvertFromSaturatingUInt16TestData() { - throw new NotImplementedException(); + yield return () => (1, Int256.One); + yield return () => (byte.MaxValue, Int256.ByteMaxValue); + yield return () => (ushort.MaxValue, Int256.UInt16MaxValue); } public static IEnumerable> ConvertFromTruncatingUInt16TestData() { - throw new NotImplementedException(); + yield return () => (1, Int256.One); + yield return () => (byte.MaxValue, Int256.ByteMaxValue); + yield return () => (ushort.MaxValue, Int256.UInt16MaxValue); } public static IEnumerable> ConvertFromCheckedUInt32TestData() { - throw new NotImplementedException(); + yield return () => (1, Int256.One); + yield return () => (byte.MaxValue, Int256.ByteMaxValue); + yield return () => (ushort.MaxValue, Int256.UInt16MaxValue); + yield return () => (uint.MaxValue, Int256.UInt32MaxValue); } public static IEnumerable> ConvertFromSaturatingUInt32TestData() { - throw new NotImplementedException(); + yield return () => (1, Int256.One); + yield return () => (byte.MaxValue, Int256.ByteMaxValue); + yield return () => (ushort.MaxValue, Int256.UInt16MaxValue); + yield return () => (uint.MaxValue, Int256.UInt32MaxValue); } public static IEnumerable> ConvertFromTruncatingUInt32TestData() { - throw new NotImplementedException(); + yield return () => (1, Int256.One); + yield return () => (byte.MaxValue, Int256.ByteMaxValue); + yield return () => (ushort.MaxValue, Int256.UInt16MaxValue); + yield return () => (uint.MaxValue, Int256.UInt32MaxValue); } public static IEnumerable> ConvertFromCheckedUInt64TestData() { - throw new NotImplementedException(); + yield return () => (1, Int256.One); + yield return () => (byte.MaxValue, Int256.ByteMaxValue); + yield return () => (ushort.MaxValue, Int256.UInt16MaxValue); + yield return () => (uint.MaxValue, Int256.UInt32MaxValue); + yield return () => (ulong.MaxValue, Int256.UInt64MaxValue); } public static IEnumerable> ConvertFromSaturatingUInt64TestData() { - throw new NotImplementedException(); + yield return () => (1, Int256.One); + yield return () => (byte.MaxValue, Int256.ByteMaxValue); + yield return () => (ushort.MaxValue, Int256.UInt16MaxValue); + yield return () => (uint.MaxValue, Int256.UInt32MaxValue); + yield return () => (ulong.MaxValue, Int256.UInt64MaxValue); } public static IEnumerable> ConvertFromTruncatingUInt64TestData() { - throw new NotImplementedException(); + yield return () => (1, Int256.One); + yield return () => (byte.MaxValue, Int256.ByteMaxValue); + yield return () => (ushort.MaxValue, Int256.UInt16MaxValue); + yield return () => (uint.MaxValue, Int256.UInt32MaxValue); + yield return () => (ulong.MaxValue, Int256.UInt64MaxValue); } public static IEnumerable> ConvertFromCheckedUInt128TestData() { - throw new NotImplementedException(); + yield return () => (1, Int256.One); + yield return () => (byte.MaxValue, Int256.ByteMaxValue); + yield return () => (ushort.MaxValue, Int256.UInt16MaxValue); + yield return () => (uint.MaxValue, Int256.UInt32MaxValue); + yield return () => (ulong.MaxValue, Int256.UInt64MaxValue); + yield return () => (UInt128.MaxValue, Int256.UInt128MaxValue); } public static IEnumerable> ConvertFromSaturatingUInt128TestData() { - throw new NotImplementedException(); + yield return () => (1, Int256.One); + yield return () => (byte.MaxValue, Int256.ByteMaxValue); + yield return () => (ushort.MaxValue, Int256.UInt16MaxValue); + yield return () => (uint.MaxValue, Int256.UInt32MaxValue); + yield return () => (ulong.MaxValue, Int256.UInt64MaxValue); + yield return () => (UInt128.MaxValue, Int256.UInt128MaxValue); } public static IEnumerable> ConvertFromTruncatingUInt128TestData() { - throw new NotImplementedException(); + yield return () => (1, Int256.One); + yield return () => (byte.MaxValue, Int256.ByteMaxValue); + yield return () => (ushort.MaxValue, Int256.UInt16MaxValue); + yield return () => (uint.MaxValue, Int256.UInt32MaxValue); + yield return () => (ulong.MaxValue, Int256.UInt64MaxValue); + yield return () => (UInt128.MaxValue, Int256.UInt128MaxValue); } public static IEnumerable> ConvertFromCheckedSByteTestData() { - throw new NotImplementedException(); + yield return () => (sbyte.MinValue, Int256.SByteMinValue); + yield return () => (1, Int256.One); + yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); } public static IEnumerable> ConvertFromSaturatingSByteTestData() { - throw new NotImplementedException(); + yield return () => (sbyte.MinValue, Int256.SByteMinValue); + yield return () => (1, Int256.One); + yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); } public static IEnumerable> ConvertFromTruncatingSByteTestData() { - throw new NotImplementedException(); + yield return () => (sbyte.MinValue, Int256.SByteMinValue); + yield return () => (1, Int256.One); + yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); } public static IEnumerable> ConvertFromCheckedInt16TestData() { - throw new NotImplementedException(); + yield return () => (short.MinValue, Int256.Int16MinValue); + yield return () => (sbyte.MinValue, Int256.SByteMinValue); + yield return () => (1, Int256.One); + yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); + yield return () => (short.MaxValue, Int256.Int16MaxValue); } public static IEnumerable> ConvertFromSaturatingInt16TestData() { - throw new NotImplementedException(); + yield return () => (short.MinValue, Int256.Int16MinValue); + yield return () => (sbyte.MinValue, Int256.SByteMinValue); + yield return () => (1, Int256.One); + yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); + yield return () => (short.MaxValue, Int256.Int16MaxValue); } public static IEnumerable> ConvertFromTruncatingInt16TestData() { - throw new NotImplementedException(); + yield return () => (short.MinValue, Int256.Int16MinValue); + yield return () => (sbyte.MinValue, Int256.SByteMinValue); + yield return () => (1, Int256.One); + yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); + yield return () => (short.MaxValue, Int256.Int16MaxValue); } public static IEnumerable> ConvertFromCheckedInt32TestData() { - throw new NotImplementedException(); + yield return () => (int.MinValue, Int256.Int32MinValue); + yield return () => (short.MinValue, Int256.Int16MinValue); + yield return () => (sbyte.MinValue, Int256.SByteMinValue); + yield return () => (1, Int256.One); + yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); + yield return () => (short.MaxValue, Int256.Int16MaxValue); + yield return () => (int.MaxValue, Int256.Int32MaxValue); } public static IEnumerable> ConvertFromSaturatingInt32TestData() { - throw new NotImplementedException(); + yield return () => (int.MinValue, Int256.Int32MinValue); + yield return () => (short.MinValue, Int256.Int16MinValue); + yield return () => (sbyte.MinValue, Int256.SByteMinValue); + yield return () => (1, Int256.One); + yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); + yield return () => (short.MaxValue, Int256.Int16MaxValue); + yield return () => (int.MaxValue, Int256.Int32MaxValue); } public static IEnumerable> ConvertFromTruncatingInt32TestData() { - throw new NotImplementedException(); + yield return () => (int.MinValue, Int256.Int32MinValue); + yield return () => (short.MinValue, Int256.Int16MinValue); + yield return () => (sbyte.MinValue, Int256.SByteMinValue); + yield return () => (1, Int256.One); + yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); + yield return () => (short.MaxValue, Int256.Int16MaxValue); + yield return () => (int.MaxValue, Int256.Int32MaxValue); } public static IEnumerable> ConvertFromCheckedInt64TestData() { - throw new NotImplementedException(); + yield return () => (long.MinValue, Int256.Int64MinValue); + yield return () => (int.MinValue, Int256.Int32MinValue); + yield return () => (short.MinValue, Int256.Int16MinValue); + yield return () => (sbyte.MinValue, Int256.SByteMinValue); + yield return () => (1, Int256.One); + yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); + yield return () => (short.MaxValue, Int256.Int16MaxValue); + yield return () => (int.MaxValue, Int256.Int32MaxValue); + yield return () => (long.MaxValue, Int256.Int64MaxValue); } public static IEnumerable> ConvertFromSaturatingInt64TestData() { - throw new NotImplementedException(); + yield return () => (long.MinValue, Int256.Int64MinValue); + yield return () => (int.MinValue, Int256.Int32MinValue); + yield return () => (short.MinValue, Int256.Int16MinValue); + yield return () => (sbyte.MinValue, Int256.SByteMinValue); + yield return () => (1, Int256.One); + yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); + yield return () => (short.MaxValue, Int256.Int16MaxValue); + yield return () => (int.MaxValue, Int256.Int32MaxValue); + yield return () => (long.MaxValue, Int256.Int64MaxValue); } public static IEnumerable> ConvertFromTruncatingInt64TestData() { - throw new NotImplementedException(); + yield return () => (long.MinValue, Int256.Int64MinValue); + yield return () => (int.MinValue, Int256.Int32MinValue); + yield return () => (short.MinValue, Int256.Int16MinValue); + yield return () => (sbyte.MinValue, Int256.SByteMinValue); + yield return () => (1, Int256.One); + yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); + yield return () => (short.MaxValue, Int256.Int16MaxValue); + yield return () => (int.MaxValue, Int256.Int32MaxValue); + yield return () => (long.MaxValue, Int256.Int64MaxValue); } public static IEnumerable> ConvertFromCheckedInt128TestData() { - throw new NotImplementedException(); + yield return () => (Int128.MinValue, Int256.Int128MinValue); + yield return () => (long.MinValue, Int256.Int64MinValue); + yield return () => (int.MinValue, Int256.Int32MinValue); + yield return () => (short.MinValue, Int256.Int16MinValue); + yield return () => (sbyte.MinValue, Int256.SByteMinValue); + yield return () => (1, Int256.One); + yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); + yield return () => (short.MaxValue, Int256.Int16MaxValue); + yield return () => (int.MaxValue, Int256.Int32MaxValue); + yield return () => (long.MaxValue, Int256.Int64MaxValue); + yield return () => (Int128.MaxValue, Int256.Int128MaxValue); } public static IEnumerable> ConvertFromSaturatingInt128TestData() { - throw new NotImplementedException(); + yield return () => (Int128.MinValue, Int256.Int128MinValue); + yield return () => (long.MinValue, Int256.Int64MinValue); + yield return () => (int.MinValue, Int256.Int32MinValue); + yield return () => (short.MinValue, Int256.Int16MinValue); + yield return () => (sbyte.MinValue, Int256.SByteMinValue); + yield return () => (1, Int256.One); + yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); + yield return () => (short.MaxValue, Int256.Int16MaxValue); + yield return () => (int.MaxValue, Int256.Int32MaxValue); + yield return () => (long.MaxValue, Int256.Int64MaxValue); + yield return () => (Int128.MaxValue, Int256.Int128MaxValue); } public static IEnumerable> ConvertFromTruncatingInt128TestData() { - throw new NotImplementedException(); + yield return () => (Int128.MinValue, Int256.Int128MinValue); + yield return () => (long.MinValue, Int256.Int64MinValue); + yield return () => (int.MinValue, Int256.Int32MinValue); + yield return () => (short.MinValue, Int256.Int16MinValue); + yield return () => (sbyte.MinValue, Int256.SByteMinValue); + yield return () => (1, Int256.One); + yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); + yield return () => (short.MaxValue, Int256.Int16MaxValue); + yield return () => (int.MaxValue, Int256.Int32MaxValue); + yield return () => (long.MaxValue, Int256.Int64MaxValue); + yield return () => (Int128.MaxValue, Int256.Int128MaxValue); } public static IEnumerable> ConvertFromCheckedBigIntegerTestData() { - throw new NotImplementedException(); + yield return () => (BigInteger.Parse("-57896044618658097711785492504343953926634992332820282019728792003956564819968"), Int256.MinValue); + yield return () => (Int128.MinValue, Int256.Int128MinValue); + yield return () => (long.MinValue, Int256.Int64MinValue); + yield return () => (int.MinValue, Int256.Int32MinValue); + yield return () => (short.MinValue, Int256.Int16MinValue); + yield return () => (sbyte.MinValue, Int256.SByteMinValue); + yield return () => (BigInteger.One, Int256.One); + yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); + yield return () => (short.MaxValue, Int256.Int16MaxValue); + yield return () => (int.MaxValue, Int256.Int32MaxValue); + yield return () => (long.MaxValue, Int256.Int64MaxValue); + yield return () => (Int128.MaxValue, Int256.Int128MaxValue); + yield return () => (BigInteger.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819967"), Int256.MaxValue); } public static IEnumerable> ConvertFromSaturatingBigIntegerTestData() { - throw new NotImplementedException(); + yield return () => (BigInteger.Parse("-57896044618658097711785492504343953926634992332820282019728792003956564819969"), Int256.MinValue); + yield return () => (BigInteger.Parse("-57896044618658097711785492504343953926634992332820282019728792003956564819968"), Int256.MinValue); + yield return () => (Int128.MinValue, Int256.Int128MinValue); + yield return () => (long.MinValue, Int256.Int64MinValue); + yield return () => (int.MinValue, Int256.Int32MinValue); + yield return () => (short.MinValue, Int256.Int16MinValue); + yield return () => (sbyte.MinValue, Int256.SByteMinValue); + yield return () => (BigInteger.One, Int256.One); + yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); + yield return () => (short.MaxValue, Int256.Int16MaxValue); + yield return () => (int.MaxValue, Int256.Int32MaxValue); + yield return () => (long.MaxValue, Int256.Int64MaxValue); + yield return () => (Int128.MaxValue, Int256.Int128MaxValue); + yield return () => (BigInteger.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819967"), Int256.MaxValue); + yield return () => (BigInteger.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968"), Int256.MaxValue); } public static IEnumerable> ConvertFromTruncatingBigIntegerTestData() { - throw new NotImplementedException(); + yield return () => (BigInteger.Parse("-57896044618658097711785492504343953926634992332820282019728792003956564819969"), Int256.MaxValue); + yield return () => (BigInteger.Parse("-57896044618658097711785492504343953926634992332820282019728792003956564819968"), Int256.MinValue); + yield return () => (Int128.MinValue, Int256.Int128MinValue); + yield return () => (long.MinValue, Int256.Int64MinValue); + yield return () => (int.MinValue, Int256.Int32MinValue); + yield return () => (short.MinValue, Int256.Int16MinValue); + yield return () => (sbyte.MinValue, Int256.SByteMinValue); + yield return () => (BigInteger.One, Int256.One); + yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); + yield return () => (short.MaxValue, Int256.Int16MaxValue); + yield return () => (int.MaxValue, Int256.Int32MaxValue); + yield return () => (long.MaxValue, Int256.Int64MaxValue); + yield return () => (Int128.MaxValue, Int256.Int128MaxValue); + yield return () => (BigInteger.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819967"), Int256.MaxValue); + yield return () => (BigInteger.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968"), Int256.MinValue); } public static IEnumerable> ConvertFromCheckedHalfTestData() { - throw new NotImplementedException(); + yield return () => (sbyte.MinValue, Int256.SByteMinValue); + yield return () => (Half.One, Int256.One); + yield return () => (byte.MaxValue, Int256.ByteMaxValue); + yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); } public static IEnumerable> ConvertFromSaturatingHalfTestData() { - throw new NotImplementedException(); + yield return () => (sbyte.MinValue, Int256.SByteMinValue); + yield return () => (Half.One, Int256.One); + yield return () => (byte.MaxValue, Int256.ByteMaxValue); + yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); } public static IEnumerable> ConvertFromTruncatingHalfTestData() { - throw new NotImplementedException(); + yield return () => (sbyte.MinValue, Int256.SByteMinValue); + yield return () => (Half.One, Int256.One); + yield return () => (byte.MaxValue, Int256.ByteMaxValue); + yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); } public static IEnumerable> ConvertFromCheckedSingleTestData() { - throw new NotImplementedException(); + yield return () => (short.MinValue, Int256.Int16MinValue); + yield return () => (sbyte.MinValue, Int256.SByteMinValue); + yield return () => (1f, Int256.One); + yield return () => (byte.MaxValue, Int256.ByteMaxValue); + yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); + yield return () => (short.MaxValue, Int256.Int16MaxValue); + yield return () => (ushort.MaxValue, Int256.UInt16MaxValue); } public static IEnumerable> ConvertFromSaturatingSingleTestData() { - throw new NotImplementedException(); + yield return () => (short.MinValue, Int256.Int16MinValue); + yield return () => (sbyte.MinValue, Int256.SByteMinValue); + yield return () => (1f, Int256.One); + yield return () => (byte.MaxValue, Int256.ByteMaxValue); + yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); + yield return () => (short.MaxValue, Int256.Int16MaxValue); + yield return () => (ushort.MaxValue, Int256.UInt16MaxValue); } public static IEnumerable> ConvertFromTruncatingSingleTestData() { - throw new NotImplementedException(); + yield return () => (short.MinValue, Int256.Int16MinValue); + yield return () => (sbyte.MinValue, Int256.SByteMinValue); + yield return () => (1f, Int256.One); + yield return () => (byte.MaxValue, Int256.ByteMaxValue); + yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); + yield return () => (short.MaxValue, Int256.Int16MaxValue); + yield return () => (ushort.MaxValue, Int256.UInt16MaxValue); } public static IEnumerable> ConvertFromCheckedDoubleTestData() { - throw new NotImplementedException(); + yield return () => (int.MinValue, Int256.Int32MinValue); + yield return () => (short.MinValue, Int256.Int16MinValue); + yield return () => (sbyte.MinValue, Int256.SByteMinValue); + yield return () => (1f, Int256.One); + yield return () => (byte.MaxValue, Int256.ByteMaxValue); + yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); + yield return () => (short.MaxValue, Int256.Int16MaxValue); + yield return () => (ushort.MaxValue, Int256.UInt16MaxValue); + yield return () => (int.MaxValue, Int256.Int32MaxValue); + yield return () => (uint.MaxValue, Int256.UInt32MaxValue); } public static IEnumerable> ConvertFromSaturatingDoubleTestData() { - throw new NotImplementedException(); + yield return () => (int.MinValue, Int256.Int32MinValue); + yield return () => (short.MinValue, Int256.Int16MinValue); + yield return () => (sbyte.MinValue, Int256.SByteMinValue); + yield return () => (1f, Int256.One); + yield return () => (byte.MaxValue, Int256.ByteMaxValue); + yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); + yield return () => (short.MaxValue, Int256.Int16MaxValue); + yield return () => (ushort.MaxValue, Int256.UInt16MaxValue); + yield return () => (int.MaxValue, Int256.Int32MaxValue); + yield return () => (uint.MaxValue, Int256.UInt32MaxValue); } public static IEnumerable> ConvertFromTruncatingDoubleTestData() { - throw new NotImplementedException(); + yield return () => (int.MinValue, Int256.Int32MinValue); + yield return () => (short.MinValue, Int256.Int16MinValue); + yield return () => (sbyte.MinValue, Int256.SByteMinValue); + yield return () => (1f, Int256.One); + yield return () => (byte.MaxValue, Int256.ByteMaxValue); + yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); + yield return () => (short.MaxValue, Int256.Int16MaxValue); + yield return () => (ushort.MaxValue, Int256.UInt16MaxValue); + yield return () => (int.MaxValue, Int256.Int32MaxValue); + yield return () => (uint.MaxValue, Int256.UInt32MaxValue); } } From 5626bf9b34461fab4e7f390b3662a557d86c1644 Mon Sep 17 00:00:00 2001 From: crookseta Date: Sun, 19 Jul 2026 21:27:26 -0500 Subject: [PATCH 67/74] -Added Tests for UInt512 conversions. --- .../Data/UInt256DataSources.cs | 11 +- .../Data/UInt512DataSources.cs | 740 +++++++++++++++--- 2 files changed, 650 insertions(+), 101 deletions(-) diff --git a/src/MissingValues.Tests/Data/UInt256DataSources.cs b/src/MissingValues.Tests/Data/UInt256DataSources.cs index 84400c0..46482e7 100644 --- a/src/MissingValues.Tests/Data/UInt256DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt256DataSources.cs @@ -1404,9 +1404,6 @@ public class UInt256DataSources 781377183594418599030564404241984000000000000000000.0d); } - // TODO: Add test for BigInteger conversion - // public static IEnumerable> ConvertToCheckedBigIntegerTestData(); - public static IEnumerable> ConvertToCheckedQuadTestData() { yield return () => (UInt256.One, Quad.One); @@ -1418,7 +1415,6 @@ public class UInt256DataSources yield return () => (UInt256.UInt32MaxValue, Quad.UInt32MaxValue); yield return () => (UInt256.Int64MaxValue, Quad.Int64MaxValue); yield return () => (UInt256.UInt64MaxValue, Quad.UInt64MaxValue); - // TODO: Also test for higher numeric values. } public static IEnumerable> ConvertToSaturatingQuadTestData() @@ -1458,7 +1454,8 @@ public class UInt256DataSources yield return () => (UInt256.UInt32MaxValue, Octo.UInt32MaxValue); yield return () => (UInt256.Int64MaxValue, Octo.Int64MaxValue); yield return () => (UInt256.UInt64MaxValue, Octo.UInt64MaxValue); - // TODO: Also test for higher numeric values. + yield return () => (UInt256.Int128MaxValue, Octo.Int128MaxValue); + yield return () => (UInt256.UInt128MaxValue, Octo.UInt128MaxValue); } public static IEnumerable> ConvertToSaturatingOctoTestData() @@ -1472,6 +1469,8 @@ public class UInt256DataSources yield return () => (UInt256.UInt32MaxValue, Octo.UInt32MaxValue); yield return () => (UInt256.Int64MaxValue, Octo.Int64MaxValue); yield return () => (UInt256.UInt64MaxValue, Octo.UInt64MaxValue); + yield return () => (UInt256.Int128MaxValue, Octo.Int128MaxValue); + yield return () => (UInt256.UInt128MaxValue, Octo.UInt128MaxValue); } public static IEnumerable> ConvertToTruncatingOctoTestData() @@ -1485,6 +1484,8 @@ public class UInt256DataSources yield return () => (UInt256.UInt32MaxValue, Octo.UInt32MaxValue); yield return () => (UInt256.Int64MaxValue, Octo.Int64MaxValue); yield return () => (UInt256.UInt64MaxValue, Octo.UInt64MaxValue); + yield return () => (UInt256.Int128MaxValue, Octo.Int128MaxValue); + yield return () => (UInt256.UInt128MaxValue, Octo.UInt128MaxValue); } public static IEnumerable> ConvertFromCheckedByteTestData() diff --git a/src/MissingValues.Tests/Data/UInt512DataSources.cs b/src/MissingValues.Tests/Data/UInt512DataSources.cs index ba1e324..fa0815c 100644 --- a/src/MissingValues.Tests/Data/UInt512DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt512DataSources.cs @@ -7,6 +7,7 @@ using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; +using MissingValues.Tests.Extensions; namespace MissingValues.Tests.Data; @@ -1032,246 +1033,515 @@ public class UInt512DataSources public static IEnumerable> ConvertToCheckedByteTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, 1); + yield return () => (UInt512.ByteMaxValue, byte.MaxValue); } public static IEnumerable> ConvertToSaturatingByteTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, 1); + yield return () => (UInt512.ByteMaxValue, byte.MaxValue); + yield return () => (UInt512.MaxValue, byte.MaxValue); + yield return () => (UInt512.ByteMaxValue + UInt512.One, byte.MaxValue); } public static IEnumerable> ConvertToTruncatingByteTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, 1); + yield return () => (UInt512.ByteMaxValue, byte.MaxValue); + yield return () => (UInt512.MaxValue, byte.MaxValue); + yield return () => (UInt512.ByteMaxValue + UInt512.One, 0); } public static IEnumerable> ConvertToCheckedUInt16TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, 1); + yield return () => (UInt512.ByteMaxValue, byte.MaxValue); + yield return () => (UInt512.UInt16MaxValue, ushort.MaxValue); } public static IEnumerable> ConvertToSaturatingUInt16TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, 1); + yield return () => (UInt512.ByteMaxValue, byte.MaxValue); + yield return () => (UInt512.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt512.MaxValue, ushort.MaxValue); + yield return () => (UInt512.UInt16MaxValue + UInt512.One, ushort.MaxValue); } public static IEnumerable> ConvertToTruncatingUInt16TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, 1); + yield return () => (UInt512.ByteMaxValue, byte.MaxValue); + yield return () => (UInt512.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt512.MaxValue, ushort.MaxValue); + yield return () => (UInt512.UInt16MaxValue + UInt512.One, 0); } public static IEnumerable> ConvertToCheckedUInt32TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, 1); + yield return () => (UInt512.ByteMaxValue, byte.MaxValue); + yield return () => (UInt512.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt512.UInt32MaxValue, uint.MaxValue); } public static IEnumerable> ConvertToSaturatingUInt32TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, 1); + yield return () => (UInt512.ByteMaxValue, byte.MaxValue); + yield return () => (UInt512.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt512.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt512.MaxValue, uint.MaxValue); + yield return () => (UInt512.UInt32MaxValue + UInt512.One, uint.MaxValue); } public static IEnumerable> ConvertToTruncatingUInt32TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, 1); + yield return () => (UInt512.ByteMaxValue, byte.MaxValue); + yield return () => (UInt512.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt512.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt512.MaxValue, uint.MaxValue); + yield return () => (UInt512.UInt32MaxValue + UInt512.One, 0); } public static IEnumerable> ConvertToCheckedUInt64TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, 1U); + yield return () => (UInt512.ByteMaxValue, byte.MaxValue); + yield return () => (UInt512.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt512.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt512.UInt64MaxValue, ulong.MaxValue); } public static IEnumerable> ConvertToSaturatingUInt64TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, 1U); + yield return () => (UInt512.ByteMaxValue, byte.MaxValue); + yield return () => (UInt512.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt512.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt512.UInt64MaxValue, ulong.MaxValue); + yield return () => (UInt512.MaxValue, ulong.MaxValue); + yield return () => (UInt512.UInt64MaxValue + UInt512.One, ulong.MaxValue); } public static IEnumerable> ConvertToTruncatingUInt64TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, 1U); + yield return () => (UInt512.ByteMaxValue, byte.MaxValue); + yield return () => (UInt512.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt512.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt512.UInt64MaxValue, ulong.MaxValue); + yield return () => (UInt512.MaxValue, ulong.MaxValue); + yield return () => (UInt512.UInt64MaxValue + UInt512.One, 0); } public static IEnumerable> ConvertToCheckedUInt128TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, UInt128.One); + yield return () => (UInt512.ByteMaxValue, byte.MaxValue); + yield return () => (UInt512.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt512.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt512.UInt64MaxValue, ulong.MaxValue); + yield return () => (UInt512.UInt128MaxValue, UInt128.MaxValue); } public static IEnumerable> ConvertToSaturatingUInt128TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, UInt128.One); + yield return () => (UInt512.ByteMaxValue, byte.MaxValue); + yield return () => (UInt512.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt512.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt512.UInt64MaxValue, ulong.MaxValue); + yield return () => (UInt512.UInt128MaxValue, UInt128.MaxValue); + yield return () => (UInt512.MaxValue, UInt128.MaxValue); + yield return () => (UInt512.UInt128MaxValue + UInt512.One, UInt128.MaxValue); } public static IEnumerable> ConvertToTruncatingUInt128TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, UInt128.One); + yield return () => (UInt512.ByteMaxValue, byte.MaxValue); + yield return () => (UInt512.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt512.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt512.UInt64MaxValue, ulong.MaxValue); + yield return () => (UInt512.UInt128MaxValue, UInt128.MaxValue); + yield return () => (UInt512.MaxValue, UInt128.MaxValue); + yield return () => (UInt512.UInt128MaxValue + UInt512.One, UInt128.Zero); } public static IEnumerable> ConvertToCheckedUInt256TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, UInt256.One); + yield return () => (UInt512.ByteMaxValue, UInt256.ByteMaxValue); + yield return () => (UInt512.UInt16MaxValue, UInt256.UInt16MaxValue); + yield return () => (UInt512.UInt32MaxValue, UInt256.UInt32MaxValue); + yield return () => (UInt512.UInt64MaxValue, UInt256.UInt64MaxValue); + yield return () => (UInt512.UInt128MaxValue, UInt256.UInt128MaxValue); + yield return () => (UInt512.UInt256MaxValue, UInt256.MaxValue); } public static IEnumerable> ConvertToSaturatingUInt256TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, UInt256.One); + yield return () => (UInt512.ByteMaxValue, UInt256.ByteMaxValue); + yield return () => (UInt512.UInt16MaxValue, UInt256.UInt16MaxValue); + yield return () => (UInt512.UInt32MaxValue, UInt256.UInt32MaxValue); + yield return () => (UInt512.UInt64MaxValue, UInt256.UInt64MaxValue); + yield return () => (UInt512.UInt128MaxValue, UInt256.UInt128MaxValue); + yield return () => (UInt512.UInt256MaxValue, UInt256.MaxValue); + yield return () => (UInt512.MaxValue, UInt256.MaxValue); + yield return () => (UInt512.UInt256MaxValue + UInt512.One, UInt256.MaxValue); } public static IEnumerable> ConvertToTruncatingUInt256TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, UInt256.One); + yield return () => (UInt512.ByteMaxValue, UInt256.ByteMaxValue); + yield return () => (UInt512.UInt16MaxValue, UInt256.UInt16MaxValue); + yield return () => (UInt512.UInt32MaxValue, UInt256.UInt32MaxValue); + yield return () => (UInt512.UInt64MaxValue, UInt256.UInt64MaxValue); + yield return () => (UInt512.UInt128MaxValue, UInt256.UInt128MaxValue); + yield return () => (UInt512.UInt256MaxValue, UInt256.MaxValue); + yield return () => (UInt512.MaxValue, UInt256.MaxValue); + yield return () => (UInt512.UInt256MaxValue + UInt512.One, UInt256.Zero); } public static IEnumerable> ConvertToCheckedSByteTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, 1); + yield return () => (UInt512.SByteMaxValue, sbyte.MaxValue); } public static IEnumerable> ConvertToSaturatingSByteTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, 1); + yield return () => (UInt512.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt512.MaxValue, sbyte.MaxValue); + yield return () => (UInt512.SByteMaxValue + UInt512.One, sbyte.MaxValue); } public static IEnumerable> ConvertToTruncatingSByteTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, 1); + yield return () => (UInt512.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt512.MaxValue, unchecked((sbyte)0xFF)); + yield return () => (UInt512.SByteMaxValue + UInt512.One, unchecked((sbyte)0x80)); } public static IEnumerable> ConvertToCheckedInt16TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, 1); + yield return () => (UInt512.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt512.Int16MaxValue, short.MaxValue); } public static IEnumerable> ConvertToSaturatingInt16TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, 1); + yield return () => (UInt512.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt512.Int16MaxValue, short.MaxValue); + yield return () => (UInt512.MaxValue, short.MaxValue); + yield return () => (UInt512.Int16MaxValue + UInt512.One, short.MaxValue); } public static IEnumerable> ConvertToTruncatingInt16TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, 1); + yield return () => (UInt512.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt512.Int16MaxValue, short.MaxValue); + yield return () => (UInt512.MaxValue, unchecked((short)0xFFFF)); + yield return () => (UInt512.Int16MaxValue + UInt512.One, unchecked((short)0x8000)); } public static IEnumerable> ConvertToCheckedInt32TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, 1); + yield return () => (UInt512.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt512.Int16MaxValue, short.MaxValue); + yield return () => (UInt512.Int32MaxValue, int.MaxValue); } public static IEnumerable> ConvertToSaturatingInt32TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, 1); + yield return () => (UInt512.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt512.Int16MaxValue, short.MaxValue); + yield return () => (UInt512.Int32MaxValue, int.MaxValue); + yield return () => (UInt512.MaxValue, int.MaxValue); + yield return () => (UInt512.Int32MaxValue + UInt512.One, int.MaxValue); } public static IEnumerable> ConvertToTruncatingInt32TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, 1); + yield return () => (UInt512.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt512.Int16MaxValue, short.MaxValue); + yield return () => (UInt512.Int32MaxValue, int.MaxValue); + yield return () => (UInt512.MaxValue, unchecked((int)0xFFFF_FFFF)); + yield return () => (UInt512.Int32MaxValue + UInt512.One, unchecked((int)0x8000_0000)); } public static IEnumerable> ConvertToCheckedInt64TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, 1); + yield return () => (UInt512.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt512.Int16MaxValue, short.MaxValue); + yield return () => (UInt512.Int32MaxValue, int.MaxValue); + yield return () => (UInt512.Int64MaxValue, long.MaxValue); } public static IEnumerable> ConvertToSaturatingInt64TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, 1); + yield return () => (UInt512.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt512.Int16MaxValue, short.MaxValue); + yield return () => (UInt512.Int32MaxValue, int.MaxValue); + yield return () => (UInt512.Int64MaxValue, long.MaxValue); + yield return () => (UInt512.MaxValue, long.MaxValue); + yield return () => (UInt512.Int64MaxValue + UInt512.One, long.MaxValue); } public static IEnumerable> ConvertToTruncatingInt64TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, 1); + yield return () => (UInt512.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt512.Int16MaxValue, short.MaxValue); + yield return () => (UInt512.Int32MaxValue, int.MaxValue); + yield return () => (UInt512.Int64MaxValue, long.MaxValue); + yield return () => (UInt512.MaxValue, unchecked((long)0xFFFF_FFFF_FFFF_FFFF)); + yield return () => (UInt512.Int64MaxValue + UInt512.One, unchecked((long)0x8000_0000_0000_0000)); } public static IEnumerable> ConvertToCheckedInt128TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, Int128.One); + yield return () => (UInt512.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt512.Int16MaxValue, short.MaxValue); + yield return () => (UInt512.Int32MaxValue, int.MaxValue); + yield return () => (UInt512.Int64MaxValue, long.MaxValue); + yield return () => (UInt512.Int128MaxValue, Int128.MaxValue); } public static IEnumerable> ConvertToSaturatingInt128TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, Int128.One); + yield return () => (UInt512.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt512.Int16MaxValue, short.MaxValue); + yield return () => (UInt512.Int32MaxValue, int.MaxValue); + yield return () => (UInt512.Int64MaxValue, long.MaxValue); + yield return () => (UInt512.Int128MaxValue, Int128.MaxValue); + yield return () => (UInt512.MaxValue, Int128.MaxValue); + yield return () => (UInt512.Int128MaxValue + UInt512.One, Int128.MaxValue); } public static IEnumerable> ConvertToTruncatingInt128TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, Int128.One); + yield return () => (UInt512.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt512.Int16MaxValue, short.MaxValue); + yield return () => (UInt512.Int32MaxValue, int.MaxValue); + yield return () => (UInt512.Int64MaxValue, long.MaxValue); + yield return () => (UInt512.Int128MaxValue, Int128.MaxValue); + yield return () => (UInt512.MaxValue, new Int128(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); + yield return () => (UInt512.Int128MaxValue + UInt512.One, new Int128(0x8000_0000_0000_0000, 0x0000_0000_0000_0000)); } public static IEnumerable> ConvertToCheckedInt256TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, Int256.One); + yield return () => (UInt512.SByteMaxValue, Int256.SByteMaxValue); + yield return () => (UInt512.Int16MaxValue, Int256.Int16MaxValue); + yield return () => (UInt512.Int32MaxValue, Int256.Int32MaxValue); + yield return () => (UInt512.Int64MaxValue, Int256.Int64MaxValue); + yield return () => (UInt512.Int128MaxValue, Int256.Int128MaxValue); + yield return () => (UInt512.Int256MaxValue, Int256.MaxValue); } public static IEnumerable> ConvertToSaturatingInt256TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, Int256.One); + yield return () => (UInt512.SByteMaxValue, Int256.SByteMaxValue); + yield return () => (UInt512.Int16MaxValue, Int256.Int16MaxValue); + yield return () => (UInt512.Int32MaxValue, Int256.Int32MaxValue); + yield return () => (UInt512.Int64MaxValue, Int256.Int64MaxValue); + yield return () => (UInt512.Int128MaxValue, Int256.Int128MaxValue); + yield return () => (UInt512.Int256MaxValue, Int256.MaxValue); + yield return () => (UInt512.MaxValue, Int256.MaxValue); + yield return () => (UInt512.Int256MaxValue + UInt512.One, Int256.MaxValue); } public static IEnumerable> ConvertToTruncatingInt256TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, Int256.One); + yield return () => (UInt512.SByteMaxValue, Int256.SByteMaxValue); + yield return () => (UInt512.Int16MaxValue, Int256.Int16MaxValue); + yield return () => (UInt512.Int32MaxValue, Int256.Int32MaxValue); + yield return () => (UInt512.Int64MaxValue, Int256.Int64MaxValue); + yield return () => (UInt512.Int128MaxValue, Int256.Int128MaxValue); + yield return () => (UInt512.Int256MaxValue, Int256.MaxValue); + yield return () => (UInt512.MaxValue, new Int256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); + yield return () => (UInt512.Int256MaxValue + UInt512.One, new Int256(0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); } public static IEnumerable> ConvertToCheckedInt512TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, Int512.One); + yield return () => (UInt512.SByteMaxValue, Int512.SByteMaxValue); + yield return () => (UInt512.Int16MaxValue, Int512.Int16MaxValue); + yield return () => (UInt512.Int32MaxValue, Int512.Int32MaxValue); + yield return () => (UInt512.Int64MaxValue, Int512.Int64MaxValue); + yield return () => (UInt512.Int128MaxValue, Int512.Int128MaxValue); + yield return () => (UInt512.Int256MaxValue, Int512.Int256MaxValue); + yield return () => (UInt512.Int512MaxValue, Int512.MaxValue); } public static IEnumerable> ConvertToSaturatingInt512TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, Int512.One); + yield return () => (UInt512.SByteMaxValue, Int512.SByteMaxValue); + yield return () => (UInt512.Int16MaxValue, Int512.Int16MaxValue); + yield return () => (UInt512.Int32MaxValue, Int512.Int32MaxValue); + yield return () => (UInt512.Int64MaxValue, Int512.Int64MaxValue); + yield return () => (UInt512.Int128MaxValue, Int512.Int128MaxValue); + yield return () => (UInt512.Int256MaxValue, Int512.Int256MaxValue); + yield return () => (UInt512.Int512MaxValue, Int512.MaxValue); + yield return () => (UInt512.MaxValue, Int512.MaxValue); + yield return () => (UInt512.Int512MaxValue + UInt512.One, Int512.MaxValue); } public static IEnumerable> ConvertToTruncatingInt512TestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, Int512.One); + yield return () => (UInt512.SByteMaxValue, Int512.SByteMaxValue); + yield return () => (UInt512.Int16MaxValue, Int512.Int16MaxValue); + yield return () => (UInt512.Int32MaxValue, Int512.Int32MaxValue); + yield return () => (UInt512.Int64MaxValue, Int512.Int64MaxValue); + yield return () => (UInt512.Int128MaxValue, Int512.Int128MaxValue); + yield return () => (UInt512.Int256MaxValue, Int512.Int256MaxValue); + yield return () => (UInt512.Int512MaxValue, Int512.MaxValue); + yield return () => (UInt512.MaxValue, new Int512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); + yield return () => (UInt512.Int512MaxValue + UInt512.One, new Int512(0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); } public static IEnumerable> ConvertToCheckedBigIntegerTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, UInt128.One); + yield return () => (UInt512.ByteMaxValue, byte.MaxValue); + yield return () => (UInt512.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt512.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt512.UInt64MaxValue, ulong.MaxValue); + yield return () => (UInt512.UInt128MaxValue, UInt128.MaxValue); + yield return () => (UInt512.UInt256MaxValue, BigInteger.Parse("115792089237316195423570985008687907853269984665640564039457584007913129639935")); + yield return () => (UInt512.MaxValue, BigInteger.Parse("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095")); } public static IEnumerable> ConvertToSaturatingBigIntegerTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, UInt128.One); + yield return () => (UInt512.ByteMaxValue, byte.MaxValue); + yield return () => (UInt512.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt512.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt512.UInt64MaxValue, ulong.MaxValue); + yield return () => (UInt512.UInt128MaxValue, UInt128.MaxValue); + yield return () => (UInt512.UInt256MaxValue, BigInteger.Parse("115792089237316195423570985008687907853269984665640564039457584007913129639935")); + yield return () => (UInt512.MaxValue, BigInteger.Parse("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095")); } public static IEnumerable> ConvertToTruncatingBigIntegerTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, UInt128.One); + yield return () => (UInt512.ByteMaxValue, byte.MaxValue); + yield return () => (UInt512.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt512.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt512.UInt64MaxValue, ulong.MaxValue); + yield return () => (UInt512.UInt128MaxValue, UInt128.MaxValue); + yield return () => (UInt512.UInt256MaxValue, BigInteger.Parse("115792089237316195423570985008687907853269984665640564039457584007913129639935")); + yield return () => (UInt512.MaxValue, BigInteger.Parse("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095")); } public static IEnumerable> ConvertToCheckedHalfTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, Half.One); + yield return () => (UInt512.ByteMaxValue, (Half)byte.MaxValue); + yield return () => (UInt512.SByteMaxValue, (Half)sbyte.MaxValue); + yield return () => (UInt512.Int16MaxValue, (Half)short.MaxValue); } public static IEnumerable> ConvertToSaturatingHalfTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, Half.One); + yield return () => (UInt512.ByteMaxValue, (Half)byte.MaxValue); + yield return () => (UInt512.SByteMaxValue, (Half)sbyte.MaxValue); + yield return () => (UInt512.Int16MaxValue, (Half)short.MaxValue); + yield return () => (UInt512.UInt16MaxValue, Half.MaxValue); + yield return () => (UInt512.MaxValue, Half.MaxValue); } public static IEnumerable> ConvertToTruncatingHalfTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, Half.One); + yield return () => (UInt512.ByteMaxValue, (Half)byte.MaxValue); + yield return () => (UInt512.SByteMaxValue, (Half)sbyte.MaxValue); + yield return () => (UInt512.Int16MaxValue, (Half)short.MaxValue); + yield return () => (UInt512.UInt16MaxValue, Half.MaxValue); + yield return () => (UInt512.MaxValue, Half.MaxValue); } public static IEnumerable> ConvertToCheckedSingleTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, 1f); + yield return () => (UInt512.ByteMaxValue, byte.MaxValue); + yield return () => (UInt512.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt512.Int16MaxValue, short.MaxValue); + yield return () => (UInt512.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt512.Int32MaxValue, int.MaxValue); + yield return () => (UInt512.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt512.Int64MaxValue, long.MaxValue); + yield return () => (UInt512.UInt64MaxValue, ulong.MaxValue); } public static IEnumerable> ConvertToSaturatingSingleTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, 1f); + yield return () => (UInt512.ByteMaxValue, byte.MaxValue); + yield return () => (UInt512.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt512.Int16MaxValue, short.MaxValue); + yield return () => (UInt512.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt512.Int32MaxValue, int.MaxValue); + yield return () => (UInt512.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt512.Int64MaxValue, long.MaxValue); + yield return () => (UInt512.UInt64MaxValue, ulong.MaxValue); } public static IEnumerable> ConvertToTruncatingSingleTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, 1f); + yield return () => (UInt512.ByteMaxValue, byte.MaxValue); + yield return () => (UInt512.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt512.Int16MaxValue, short.MaxValue); + yield return () => (UInt512.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt512.Int32MaxValue, int.MaxValue); + yield return () => (UInt512.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt512.Int64MaxValue, long.MaxValue); + yield return () => (UInt512.UInt64MaxValue, ulong.MaxValue); } public static IEnumerable> ConvertToCheckedDoubleTestData() { + yield return () => (UInt512.One, 1d); + yield return () => (UInt512.ByteMaxValue, byte.MaxValue); + yield return () => (UInt512.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt512.Int16MaxValue, short.MaxValue); + yield return () => (UInt512.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt512.Int32MaxValue, int.MaxValue); + yield return () => (UInt512.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt512.Int64MaxValue, long.MaxValue); + yield return () => (UInt512.UInt64MaxValue, ulong.MaxValue); + yield return () => (UInt512.Int128MaxValue, (double)Int128.MaxValue); + yield return () => (UInt512.UInt128MaxValue, (double)UInt128.MaxValue); + yield return () => (UInt512.Parse("781377183594418599030564404241984000000000000000000"), 781377183594418599030564404241984000000000000000000.0d); yield return () => (UInt512.Parse("693167423530203714894603546035770925859109268843954143792619895153655326951406405759993601526034894524347802740350892957243539455"), @@ -1280,6 +1550,18 @@ public class UInt512DataSources public static IEnumerable> ConvertToSaturatingDoubleTestData() { + yield return () => (UInt512.One, 1d); + yield return () => (UInt512.ByteMaxValue, byte.MaxValue); + yield return () => (UInt512.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt512.Int16MaxValue, short.MaxValue); + yield return () => (UInt512.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt512.Int32MaxValue, int.MaxValue); + yield return () => (UInt512.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt512.Int64MaxValue, long.MaxValue); + yield return () => (UInt512.UInt64MaxValue, ulong.MaxValue); + yield return () => (UInt512.Int128MaxValue, (double)Int128.MaxValue); + yield return () => (UInt512.UInt128MaxValue, (double)UInt128.MaxValue); + yield return () => (UInt512.Parse("781377183594418599030564404241984000000000000000000"), 781377183594418599030564404241984000000000000000000.0d); yield return () => (UInt512.Parse("693167423530203714894603546035770925859109268843954143792619895153655326951406405759993601526034894524347802740350892957243539455"), @@ -1288,6 +1570,18 @@ public class UInt512DataSources public static IEnumerable> ConvertToTruncatingDoubleTestData() { + yield return () => (UInt512.One, 1d); + yield return () => (UInt512.ByteMaxValue, byte.MaxValue); + yield return () => (UInt512.SByteMaxValue, sbyte.MaxValue); + yield return () => (UInt512.Int16MaxValue, short.MaxValue); + yield return () => (UInt512.UInt16MaxValue, ushort.MaxValue); + yield return () => (UInt512.Int32MaxValue, int.MaxValue); + yield return () => (UInt512.UInt32MaxValue, uint.MaxValue); + yield return () => (UInt512.Int64MaxValue, long.MaxValue); + yield return () => (UInt512.UInt64MaxValue, ulong.MaxValue); + yield return () => (UInt512.Int128MaxValue, (double)Int128.MaxValue); + yield return () => (UInt512.UInt128MaxValue, (double)UInt128.MaxValue); + yield return () => (UInt512.Parse("781377183594418599030564404241984000000000000000000"), 781377183594418599030564404241984000000000000000000.0d); yield return () => (UInt512.Parse("693167423530203714894603546035770925859109268843954143792619895153655326951406405759993601526034894524347802740350892957243539455"), @@ -1296,241 +1590,495 @@ public class UInt512DataSources public static IEnumerable> ConvertToCheckedQuadTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, Quad.One); + yield return () => (UInt512.ByteMaxValue, Quad.ByteMaxValue); + yield return () => (UInt512.SByteMaxValue, Quad.SByteMaxValue); + yield return () => (UInt512.Int16MaxValue, Quad.Int16MaxValue); + yield return () => (UInt512.UInt16MaxValue, Quad.UInt16MaxValue); + yield return () => (UInt512.Int32MaxValue, Quad.Int32MaxValue); + yield return () => (UInt512.UInt32MaxValue, Quad.UInt32MaxValue); + yield return () => (UInt512.Int64MaxValue, Quad.Int64MaxValue); + yield return () => (UInt512.UInt64MaxValue, Quad.UInt64MaxValue); } public static IEnumerable> ConvertToSaturatingQuadTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, Quad.One); + yield return () => (UInt512.ByteMaxValue, Quad.ByteMaxValue); + yield return () => (UInt512.SByteMaxValue, Quad.SByteMaxValue); + yield return () => (UInt512.Int16MaxValue, Quad.Int16MaxValue); + yield return () => (UInt512.UInt16MaxValue, Quad.UInt16MaxValue); + yield return () => (UInt512.Int32MaxValue, Quad.Int32MaxValue); + yield return () => (UInt512.UInt32MaxValue, Quad.UInt32MaxValue); + yield return () => (UInt512.Int64MaxValue, Quad.Int64MaxValue); + yield return () => (UInt512.UInt64MaxValue, Quad.UInt64MaxValue); } public static IEnumerable> ConvertToTruncatingQuadTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, Quad.One); + yield return () => (UInt512.ByteMaxValue, Quad.ByteMaxValue); + yield return () => (UInt512.SByteMaxValue, Quad.SByteMaxValue); + yield return () => (UInt512.Int16MaxValue, Quad.Int16MaxValue); + yield return () => (UInt512.UInt16MaxValue, Quad.UInt16MaxValue); + yield return () => (UInt512.Int32MaxValue, Quad.Int32MaxValue); + yield return () => (UInt512.UInt32MaxValue, Quad.UInt32MaxValue); + yield return () => (UInt512.Int64MaxValue, Quad.Int64MaxValue); + yield return () => (UInt512.UInt64MaxValue, Quad.UInt64MaxValue); } public static IEnumerable> ConvertToCheckedOctoTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, Octo.One); + yield return () => (UInt512.ByteMaxValue, Octo.ByteMaxValue); + yield return () => (UInt512.SByteMaxValue, Octo.SByteMaxValue); + yield return () => (UInt512.Int16MaxValue, Octo.Int16MaxValue); + yield return () => (UInt512.UInt16MaxValue, Octo.UInt16MaxValue); + yield return () => (UInt512.Int32MaxValue, Octo.Int32MaxValue); + yield return () => (UInt512.UInt32MaxValue, Octo.UInt32MaxValue); + yield return () => (UInt512.Int64MaxValue, Octo.Int64MaxValue); + yield return () => (UInt512.UInt64MaxValue, Octo.UInt64MaxValue); + yield return () => (UInt512.Int128MaxValue, Octo.Int128MaxValue); + yield return () => (UInt512.UInt128MaxValue, Octo.UInt128MaxValue); } public static IEnumerable> ConvertToSaturatingOctoTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, Octo.One); + yield return () => (UInt512.ByteMaxValue, Octo.ByteMaxValue); + yield return () => (UInt512.SByteMaxValue, Octo.SByteMaxValue); + yield return () => (UInt512.Int16MaxValue, Octo.Int16MaxValue); + yield return () => (UInt512.UInt16MaxValue, Octo.UInt16MaxValue); + yield return () => (UInt512.Int32MaxValue, Octo.Int32MaxValue); + yield return () => (UInt512.UInt32MaxValue, Octo.UInt32MaxValue); + yield return () => (UInt512.Int64MaxValue, Octo.Int64MaxValue); + yield return () => (UInt512.UInt64MaxValue, Octo.UInt64MaxValue); + yield return () => (UInt512.Int128MaxValue, Octo.Int128MaxValue); + yield return () => (UInt512.UInt128MaxValue, Octo.UInt128MaxValue); } public static IEnumerable> ConvertToTruncatingOctoTestData() { - throw new NotImplementedException(); + yield return () => (UInt512.One, Octo.One); + yield return () => (UInt512.ByteMaxValue, Octo.ByteMaxValue); + yield return () => (UInt512.SByteMaxValue, Octo.SByteMaxValue); + yield return () => (UInt512.Int16MaxValue, Octo.Int16MaxValue); + yield return () => (UInt512.UInt16MaxValue, Octo.UInt16MaxValue); + yield return () => (UInt512.Int32MaxValue, Octo.Int32MaxValue); + yield return () => (UInt512.UInt32MaxValue, Octo.UInt32MaxValue); + yield return () => (UInt512.Int64MaxValue, Octo.Int64MaxValue); + yield return () => (UInt512.UInt64MaxValue, Octo.UInt64MaxValue); + yield return () => (UInt512.Int128MaxValue, Octo.Int128MaxValue); + yield return () => (UInt512.UInt128MaxValue, Octo.UInt128MaxValue); } public static IEnumerable> ConvertFromCheckedByteTestData() { - throw new NotImplementedException(); + yield return () => (1, UInt512.One); + yield return () => (byte.MaxValue, UInt512.ByteMaxValue); } public static IEnumerable> ConvertFromSaturatingByteTestData() { - throw new NotImplementedException(); + yield return () => (1, UInt512.One); + yield return () => (byte.MaxValue, UInt512.ByteMaxValue); } public static IEnumerable> ConvertFromTruncatingByteTestData() { - throw new NotImplementedException(); + yield return () => (1, UInt512.One); + yield return () => (byte.MaxValue, UInt512.ByteMaxValue); } public static IEnumerable> ConvertFromCheckedUInt16TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt512.One); + yield return () => (byte.MaxValue, UInt512.ByteMaxValue); + yield return () => (ushort.MaxValue, UInt512.UInt16MaxValue); } public static IEnumerable> ConvertFromSaturatingUInt16TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt512.One); + yield return () => (byte.MaxValue, UInt512.ByteMaxValue); + yield return () => (ushort.MaxValue, UInt512.UInt16MaxValue); } public static IEnumerable> ConvertFromTruncatingUInt16TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt512.One); + yield return () => (byte.MaxValue, UInt512.ByteMaxValue); + yield return () => (ushort.MaxValue, UInt512.UInt16MaxValue); } public static IEnumerable> ConvertFromCheckedUInt32TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt512.One); + yield return () => (byte.MaxValue, UInt512.ByteMaxValue); + yield return () => (ushort.MaxValue, UInt512.UInt16MaxValue); + yield return () => (uint.MaxValue, UInt512.UInt32MaxValue); } public static IEnumerable> ConvertFromSaturatingUInt32TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt512.One); + yield return () => (byte.MaxValue, UInt512.ByteMaxValue); + yield return () => (ushort.MaxValue, UInt512.UInt16MaxValue); + yield return () => (uint.MaxValue, UInt512.UInt32MaxValue); } public static IEnumerable> ConvertFromTruncatingUInt32TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt512.One); + yield return () => (byte.MaxValue, UInt512.ByteMaxValue); + yield return () => (ushort.MaxValue, UInt512.UInt16MaxValue); + yield return () => (uint.MaxValue, UInt512.UInt32MaxValue); } public static IEnumerable> ConvertFromCheckedUInt64TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt512.One); + yield return () => (byte.MaxValue, UInt512.ByteMaxValue); + yield return () => (ushort.MaxValue, UInt512.UInt16MaxValue); + yield return () => (uint.MaxValue, UInt512.UInt32MaxValue); + yield return () => (ulong.MaxValue, UInt512.UInt64MaxValue); } public static IEnumerable> ConvertFromSaturatingUInt64TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt512.One); + yield return () => (byte.MaxValue, UInt512.ByteMaxValue); + yield return () => (ushort.MaxValue, UInt512.UInt16MaxValue); + yield return () => (uint.MaxValue, UInt512.UInt32MaxValue); + yield return () => (ulong.MaxValue, UInt512.UInt64MaxValue); } public static IEnumerable> ConvertFromTruncatingUInt64TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt512.One); + yield return () => (byte.MaxValue, UInt512.ByteMaxValue); + yield return () => (ushort.MaxValue, UInt512.UInt16MaxValue); + yield return () => (uint.MaxValue, UInt512.UInt32MaxValue); + yield return () => (ulong.MaxValue, UInt512.UInt64MaxValue); } public static IEnumerable> ConvertFromCheckedUInt128TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt512.One); + yield return () => (byte.MaxValue, UInt512.ByteMaxValue); + yield return () => (ushort.MaxValue, UInt512.UInt16MaxValue); + yield return () => (uint.MaxValue, UInt512.UInt32MaxValue); + yield return () => (ulong.MaxValue, UInt512.UInt64MaxValue); + yield return () => (UInt128.MaxValue, UInt512.UInt128MaxValue); } public static IEnumerable> ConvertFromSaturatingUInt128TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt512.One); + yield return () => (byte.MaxValue, UInt512.ByteMaxValue); + yield return () => (ushort.MaxValue, UInt512.UInt16MaxValue); + yield return () => (uint.MaxValue, UInt512.UInt32MaxValue); + yield return () => (ulong.MaxValue, UInt512.UInt64MaxValue); + yield return () => (UInt128.MaxValue, UInt512.UInt128MaxValue); } public static IEnumerable> ConvertFromTruncatingUInt128TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt512.One); + yield return () => (byte.MaxValue, UInt512.ByteMaxValue); + yield return () => (ushort.MaxValue, UInt512.UInt16MaxValue); + yield return () => (uint.MaxValue, UInt512.UInt32MaxValue); + yield return () => (ulong.MaxValue, UInt512.UInt64MaxValue); + yield return () => (UInt128.MaxValue, UInt512.UInt128MaxValue); } public static IEnumerable> ConvertFromCheckedSByteTestData() { - throw new NotImplementedException(); + yield return () => (1, UInt512.One); + yield return () => (sbyte.MaxValue, UInt512.SByteMaxValue); } public static IEnumerable> ConvertFromSaturatingSByteTestData() { - throw new NotImplementedException(); + yield return () => (sbyte.MinValue, UInt512.Zero); + yield return () => (1, UInt512.One); + yield return () => (sbyte.MaxValue, UInt512.SByteMaxValue); } public static IEnumerable> ConvertFromTruncatingSByteTestData() { - throw new NotImplementedException(); + yield return () => (sbyte.MinValue, new UInt512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF80)); + yield return () => (1, UInt512.One); + yield return () => (sbyte.MaxValue, UInt512.SByteMaxValue); } public static IEnumerable> ConvertFromCheckedInt16TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt512.One); + yield return () => (sbyte.MaxValue, UInt512.SByteMaxValue); + yield return () => (short.MaxValue, UInt512.Int16MaxValue); } public static IEnumerable> ConvertFromSaturatingInt16TestData() { - throw new NotImplementedException(); + yield return () => (short.MinValue, UInt512.Zero); + yield return () => (sbyte.MinValue, UInt512.Zero); + yield return () => (1, UInt512.One); + yield return () => (sbyte.MaxValue, UInt512.SByteMaxValue); + yield return () => (short.MaxValue, UInt512.Int16MaxValue); } public static IEnumerable> ConvertFromTruncatingInt16TestData() { - throw new NotImplementedException(); + yield return () => (short.MinValue, new UInt512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_8000)); + yield return () => (sbyte.MinValue, new UInt512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF80)); + yield return () => (1, UInt512.One); + yield return () => (sbyte.MaxValue, UInt512.SByteMaxValue); + yield return () => (short.MaxValue, UInt512.Int16MaxValue); } public static IEnumerable> ConvertFromCheckedInt32TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt512.One); + yield return () => (sbyte.MaxValue, UInt512.SByteMaxValue); + yield return () => (short.MaxValue, UInt512.Int16MaxValue); + yield return () => (int.MaxValue, UInt512.Int32MaxValue); } public static IEnumerable> ConvertFromSaturatingInt32TestData() { - throw new NotImplementedException(); + yield return () => (int.MinValue, UInt512.Zero); + yield return () => (short.MinValue, UInt512.Zero); + yield return () => (sbyte.MinValue, UInt512.Zero); + yield return () => (1, UInt512.One); + yield return () => (sbyte.MaxValue, UInt512.SByteMaxValue); + yield return () => (short.MaxValue, UInt512.Int16MaxValue); + yield return () => (int.MaxValue, UInt512.Int32MaxValue); } public static IEnumerable> ConvertFromTruncatingInt32TestData() { - throw new NotImplementedException(); + yield return () => (int.MinValue, new UInt512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_8000_0000)); + yield return () => (short.MinValue, new UInt512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_8000)); + yield return () => (sbyte.MinValue, new UInt512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF80)); + yield return () => (1, UInt512.One); + yield return () => (sbyte.MaxValue, UInt512.SByteMaxValue); + yield return () => (short.MaxValue, UInt512.Int16MaxValue); + yield return () => (int.MaxValue, UInt512.Int32MaxValue); } public static IEnumerable> ConvertFromCheckedInt64TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt512.One); + yield return () => (sbyte.MaxValue, UInt512.SByteMaxValue); + yield return () => (short.MaxValue, UInt512.Int16MaxValue); + yield return () => (int.MaxValue, UInt512.Int32MaxValue); + yield return () => (long.MaxValue, UInt512.Int64MaxValue); } public static IEnumerable> ConvertFromSaturatingInt64TestData() { - throw new NotImplementedException(); + yield return () => (long.MinValue, UInt512.Zero); + yield return () => (int.MinValue, UInt512.Zero); + yield return () => (short.MinValue, UInt512.Zero); + yield return () => (sbyte.MinValue, UInt512.Zero); + yield return () => (1, UInt512.One); + yield return () => (sbyte.MaxValue, UInt512.SByteMaxValue); + yield return () => (short.MaxValue, UInt512.Int16MaxValue); + yield return () => (int.MaxValue, UInt512.Int32MaxValue); + yield return () => (long.MaxValue, UInt512.Int64MaxValue); } public static IEnumerable> ConvertFromTruncatingInt64TestData() { - throw new NotImplementedException(); + yield return () => (long.MinValue, new UInt512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000)); + yield return () => (int.MinValue, new UInt512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_8000_0000)); + yield return () => (short.MinValue, new UInt512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_8000)); + yield return () => (sbyte.MinValue, new UInt512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF80)); + yield return () => (1, UInt512.One); + yield return () => (sbyte.MaxValue, UInt512.SByteMaxValue); + yield return () => (short.MaxValue, UInt512.Int16MaxValue); + yield return () => (int.MaxValue, UInt512.Int32MaxValue); + yield return () => (long.MaxValue, UInt512.Int64MaxValue); } public static IEnumerable> ConvertFromCheckedInt128TestData() { - throw new NotImplementedException(); + yield return () => (1, UInt512.One); + yield return () => (sbyte.MaxValue, UInt512.SByteMaxValue); + yield return () => (short.MaxValue, UInt512.Int16MaxValue); + yield return () => (int.MaxValue, UInt512.Int32MaxValue); + yield return () => (long.MaxValue, UInt512.Int64MaxValue); + yield return () => (Int128.MaxValue, UInt512.Int128MaxValue); } public static IEnumerable> ConvertFromSaturatingInt128TestData() { - throw new NotImplementedException(); + yield return () => (Int128.MinValue, UInt512.Zero); + yield return () => (long.MinValue, UInt512.Zero); + yield return () => (int.MinValue, UInt512.Zero); + yield return () => (short.MinValue, UInt512.Zero); + yield return () => (sbyte.MinValue, UInt512.Zero); + yield return () => (1, UInt512.One); + yield return () => (sbyte.MaxValue, UInt512.SByteMaxValue); + yield return () => (short.MaxValue, UInt512.Int16MaxValue); + yield return () => (int.MaxValue, UInt512.Int32MaxValue); + yield return () => (long.MaxValue, UInt512.Int64MaxValue); + yield return () => (Int128.MaxValue, UInt512.Int128MaxValue); } public static IEnumerable> ConvertFromTruncatingInt128TestData() { - throw new NotImplementedException(); + yield return () => (Int128.MinValue, new UInt512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000, 0x0000_0000_0000_0000)); + yield return () => (long.MinValue, new UInt512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0x8000_0000_0000_0000)); + yield return () => (int.MinValue, new UInt512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_8000_0000)); + yield return () => (short.MinValue, new UInt512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_8000)); + yield return () => (sbyte.MinValue, new UInt512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF80)); + yield return () => (1, UInt512.One); + yield return () => (sbyte.MaxValue, UInt512.SByteMaxValue); + yield return () => (short.MaxValue, UInt512.Int16MaxValue); + yield return () => (int.MaxValue, UInt512.Int32MaxValue); + yield return () => (long.MaxValue, UInt512.Int64MaxValue); + yield return () => (Int128.MaxValue, UInt512.Int128MaxValue); } public static IEnumerable> ConvertFromCheckedBigIntegerTestData() { - throw new NotImplementedException(); + yield return () => (BigInteger.One, UInt512.One); + yield return () => ((BigInteger)byte.MaxValue, UInt512.ByteMaxValue); + yield return () => ((BigInteger)sbyte.MaxValue, UInt512.SByteMaxValue); + yield return () => ((BigInteger)short.MaxValue, UInt512.Int16MaxValue); + yield return () => ((BigInteger)ushort.MaxValue, UInt512.UInt16MaxValue); + yield return () => ((BigInteger)int.MaxValue, UInt512.Int32MaxValue); + yield return () => ((BigInteger)uint.MaxValue, UInt512.UInt32MaxValue); + yield return () => ((BigInteger)long.MaxValue, UInt512.Int64MaxValue); + yield return () => ((BigInteger)ulong.MaxValue, UInt512.UInt64MaxValue); + yield return () => ((BigInteger)Int128.MaxValue, UInt512.Int128MaxValue); + yield return () => ((BigInteger)UInt128.MaxValue, UInt512.UInt128MaxValue); + yield return () => (BigInteger.Parse("115792089237316195423570985008687907853269984665640564039457584007913129639935"), UInt512.UInt256MaxValue); + yield return () => (BigInteger.Parse("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095"), UInt512.MaxValue); } public static IEnumerable> ConvertFromSaturatingBigIntegerTestData() { - throw new NotImplementedException(); + yield return () => (BigInteger.One, UInt512.One); + yield return () => ((BigInteger)byte.MaxValue, UInt512.ByteMaxValue); + yield return () => ((BigInteger)sbyte.MaxValue, UInt512.SByteMaxValue); + yield return () => ((BigInteger)short.MaxValue, UInt512.Int16MaxValue); + yield return () => ((BigInteger)ushort.MaxValue, UInt512.UInt16MaxValue); + yield return () => ((BigInteger)int.MaxValue, UInt512.Int32MaxValue); + yield return () => ((BigInteger)uint.MaxValue, UInt512.UInt32MaxValue); + yield return () => ((BigInteger)long.MaxValue, UInt512.Int64MaxValue); + yield return () => ((BigInteger)ulong.MaxValue, UInt512.UInt64MaxValue); + yield return () => ((BigInteger)Int128.MaxValue, UInt512.Int128MaxValue); + yield return () => ((BigInteger)UInt128.MaxValue, UInt512.UInt128MaxValue); + yield return () => (BigInteger.Parse("115792089237316195423570985008687907853269984665640564039457584007913129639935"), UInt512.UInt256MaxValue); + yield return () => (BigInteger.Parse("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095"), UInt512.MaxValue); + yield return () => (BigInteger.Parse("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096"), UInt512.MaxValue); } public static IEnumerable> ConvertFromTruncatingBigIntegerTestData() { - throw new NotImplementedException(); + yield return () => (BigInteger.One, UInt512.One); + yield return () => ((BigInteger)byte.MaxValue, UInt512.ByteMaxValue); + yield return () => ((BigInteger)sbyte.MaxValue, UInt512.SByteMaxValue); + yield return () => ((BigInteger)short.MaxValue, UInt512.Int16MaxValue); + yield return () => ((BigInteger)ushort.MaxValue, UInt512.UInt16MaxValue); + yield return () => ((BigInteger)int.MaxValue, UInt512.Int32MaxValue); + yield return () => ((BigInteger)uint.MaxValue, UInt512.UInt32MaxValue); + yield return () => ((BigInteger)long.MaxValue, UInt512.Int64MaxValue); + yield return () => ((BigInteger)ulong.MaxValue, UInt512.UInt64MaxValue); + yield return () => ((BigInteger)Int128.MaxValue, UInt512.Int128MaxValue); + yield return () => ((BigInteger)UInt128.MaxValue, UInt512.UInt128MaxValue); + yield return () => (BigInteger.Parse("115792089237316195423570985008687907853269984665640564039457584007913129639935"), UInt512.UInt256MaxValue); + yield return () => (BigInteger.Parse("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095"), UInt512.MaxValue); + yield return () => (BigInteger.Parse("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096"), UInt512.Zero); } public static IEnumerable> ConvertFromCheckedHalfTestData() { - throw new NotImplementedException(); + yield return () => (Half.One, UInt512.One); + yield return () => (byte.MaxValue, UInt512.ByteMaxValue); + yield return () => (sbyte.MaxValue, UInt512.SByteMaxValue); } public static IEnumerable> ConvertFromSaturatingHalfTestData() { - throw new NotImplementedException(); + yield return () => (Half.MinValue, UInt512.Zero); + yield return () => (Half.One, UInt512.One); + yield return () => (byte.MaxValue, UInt512.ByteMaxValue); + yield return () => (sbyte.MaxValue, UInt512.SByteMaxValue); } public static IEnumerable> ConvertFromTruncatingHalfTestData() { - throw new NotImplementedException(); + yield return () => (Half.MinValue, UInt512.Zero); + yield return () => (Half.One, UInt512.One); + yield return () => (byte.MaxValue, UInt512.ByteMaxValue); + yield return () => (sbyte.MaxValue, UInt512.SByteMaxValue); } public static IEnumerable> ConvertFromCheckedSingleTestData() { - throw new NotImplementedException(); + yield return () => (1f, UInt512.One); + yield return () => (byte.MaxValue, UInt512.ByteMaxValue); + yield return () => (sbyte.MaxValue, UInt512.SByteMaxValue); + yield return () => (short.MaxValue, UInt512.Int16MaxValue); + yield return () => (ushort.MaxValue, UInt512.UInt16MaxValue); } public static IEnumerable> ConvertFromSaturatingSingleTestData() { - throw new NotImplementedException(); + yield return () => (float.MinValue, UInt512.Zero); + yield return () => (1f, UInt512.One); + yield return () => (byte.MaxValue, UInt512.ByteMaxValue); + yield return () => (sbyte.MaxValue, UInt512.SByteMaxValue); + yield return () => (short.MaxValue, UInt512.Int16MaxValue); + yield return () => (ushort.MaxValue, UInt512.UInt16MaxValue); } public static IEnumerable> ConvertFromTruncatingSingleTestData() { - throw new NotImplementedException(); + yield return () => (float.MinValue, UInt512.Zero); + yield return () => (1f, UInt512.One); + yield return () => (byte.MaxValue, UInt512.ByteMaxValue); + yield return () => (sbyte.MaxValue, UInt512.SByteMaxValue); + yield return () => (short.MaxValue, UInt512.Int16MaxValue); + yield return () => (ushort.MaxValue, UInt512.UInt16MaxValue); } public static IEnumerable> ConvertFromCheckedDoubleTestData() { - throw new NotImplementedException(); + yield return () => (1d, UInt512.One); + yield return () => (byte.MaxValue, UInt512.ByteMaxValue); + yield return () => (sbyte.MaxValue, UInt512.SByteMaxValue); + yield return () => (short.MaxValue, UInt512.Int16MaxValue); + yield return () => (ushort.MaxValue, UInt512.UInt16MaxValue); + yield return () => (int.MaxValue, UInt512.Int32MaxValue); + yield return () => (uint.MaxValue, UInt512.UInt32MaxValue); } public static IEnumerable> ConvertFromSaturatingDoubleTestData() { - throw new NotImplementedException(); + yield return () => (double.MinValue, UInt512.Zero); + yield return () => (1d, UInt512.One); + yield return () => (byte.MaxValue, UInt512.ByteMaxValue); + yield return () => (sbyte.MaxValue, UInt512.SByteMaxValue); + yield return () => (short.MaxValue, UInt512.Int16MaxValue); + yield return () => (ushort.MaxValue, UInt512.UInt16MaxValue); + yield return () => (int.MaxValue, UInt512.Int32MaxValue); + yield return () => (uint.MaxValue, UInt512.UInt32MaxValue); } public static IEnumerable> ConvertFromTruncatingDoubleTestData() { - throw new NotImplementedException(); + yield return () => (double.MinValue, UInt512.Zero); + yield return () => (1d, UInt512.One); + yield return () => (byte.MaxValue, UInt512.ByteMaxValue); + yield return () => (sbyte.MaxValue, UInt512.SByteMaxValue); + yield return () => (short.MaxValue, UInt512.Int16MaxValue); + yield return () => (ushort.MaxValue, UInt512.UInt16MaxValue); + yield return () => (int.MaxValue, UInt512.Int32MaxValue); + yield return () => (uint.MaxValue, UInt512.UInt32MaxValue); } } From 818f5e8e65eb22fd5ce9956c61b16edd8d891640 Mon Sep 17 00:00:00 2001 From: crookseta Date: Mon, 20 Jul 2026 20:20:38 -0500 Subject: [PATCH 68/74] -Added Tests for Int512 conversions. --- .../Data/Int256DataSources.cs | 8 +- .../Data/Int512DataSources.cs | 878 +++++++++++++++--- 2 files changed, 775 insertions(+), 111 deletions(-) diff --git a/src/MissingValues.Tests/Data/Int256DataSources.cs b/src/MissingValues.Tests/Data/Int256DataSources.cs index 33473a4..a976966 100644 --- a/src/MissingValues.Tests/Data/Int256DataSources.cs +++ b/src/MissingValues.Tests/Data/Int256DataSources.cs @@ -2127,7 +2127,7 @@ public class Int256DataSources yield return () => (int.MinValue, Int256.Int32MinValue); yield return () => (short.MinValue, Int256.Int16MinValue); yield return () => (sbyte.MinValue, Int256.SByteMinValue); - yield return () => (1, Int256.One); + yield return () => (Int128.One, Int256.One); yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); yield return () => (short.MaxValue, Int256.Int16MaxValue); yield return () => (int.MaxValue, Int256.Int32MaxValue); @@ -2282,7 +2282,7 @@ public class Int256DataSources yield return () => (int.MinValue, Int256.Int32MinValue); yield return () => (short.MinValue, Int256.Int16MinValue); yield return () => (sbyte.MinValue, Int256.SByteMinValue); - yield return () => (1f, Int256.One); + yield return () => (1d, Int256.One); yield return () => (byte.MaxValue, Int256.ByteMaxValue); yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); yield return () => (short.MaxValue, Int256.Int16MaxValue); @@ -2296,7 +2296,7 @@ public class Int256DataSources yield return () => (int.MinValue, Int256.Int32MinValue); yield return () => (short.MinValue, Int256.Int16MinValue); yield return () => (sbyte.MinValue, Int256.SByteMinValue); - yield return () => (1f, Int256.One); + yield return () => (1d, Int256.One); yield return () => (byte.MaxValue, Int256.ByteMaxValue); yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); yield return () => (short.MaxValue, Int256.Int16MaxValue); @@ -2310,7 +2310,7 @@ public class Int256DataSources yield return () => (int.MinValue, Int256.Int32MinValue); yield return () => (short.MinValue, Int256.Int16MinValue); yield return () => (sbyte.MinValue, Int256.SByteMinValue); - yield return () => (1f, Int256.One); + yield return () => (1d, Int256.One); yield return () => (byte.MaxValue, Int256.ByteMaxValue); yield return () => (sbyte.MaxValue, Int256.SByteMaxValue); yield return () => (short.MaxValue, Int256.Int16MaxValue); diff --git a/src/MissingValues.Tests/Data/Int512DataSources.cs b/src/MissingValues.Tests/Data/Int512DataSources.cs index 8d6f4ec..39ae06c 100644 --- a/src/MissingValues.Tests/Data/Int512DataSources.cs +++ b/src/MissingValues.Tests/Data/Int512DataSources.cs @@ -2,6 +2,7 @@ using System.Numerics; using System.Runtime.CompilerServices; using MissingValues.Tests.Data.Sources; +using MissingValues.Tests.Extensions; namespace MissingValues.Tests.Data; @@ -121,7 +122,7 @@ public class Int512DataSources yield return () => (Int512.One, Int512.NegativeOne, Int512.NegativeOne, false); yield return () => (Int512.NegativeOne, Int512.NegativeOne, Int512.One, false); yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 2), new Int512(0, 0, 0, 0, 0, 0, 0, 3), new Int512(0, 0, 0, 0, 0, 0, 0, 6), false); - yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue), new Int256(0, 0, 0, 2), new Int256(0, 0, 1, ulong.MaxValue - 1), false); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue), new Int512(0, 0, 0, 0, 0, 0, 0, 2), new Int512(0, 0, 0, 0, 0, 0, 1, ulong.MaxValue - 1), false); yield return () => ( new Int512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue), new Int512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue), @@ -199,7 +200,7 @@ public class Int512DataSources yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 4), new Int512(0, 0, 0, 0, 0, 0, 0, 2), new Int512(0, 0, 0, 0, 0, 0, 0, 2)); yield return () => (Int512.MaxValue, Int512.One, Int512.MaxValue); yield return () => (Int512.MinValue, Int512.One, Int512.MinValue); - yield return () => (Int512.Zero, Int512.MaxValue, Int256.Zero); + yield return () => (Int512.Zero, Int512.MaxValue, Int512.Zero); yield return () => (Int512.MaxValue, Int512.MaxValue, Int512.One); yield return () => (Int512.MinValue, Int512.MinValue, Int512.One); yield return () => (new Int512(0, 0, 0, 0, 0, 0, 1, 0), new Int512(0, 0, 0, 0, 0, 1, 0, 0), Int512.Zero); @@ -247,7 +248,7 @@ public class Int512DataSources yield return () => (Int512.One, Int512.NegativeOne, Int512.NegativeOne); yield return () => (Int512.NegativeOne, Int512.NegativeOne, Int512.One); yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, 2), new Int512(0, 0, 0, 0, 0, 0, 0, 3), new Int512(0, 0, 0, 0, 0, 0, 0, 6)); - yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue), new Int256(0, 0, 0, 2), new Int256(0, 0, 1, ulong.MaxValue - 1)); + yield return () => (new Int512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue), new Int512(0, 0, 0, 0, 0, 0, 0, 2), new Int512(0, 0, 0, 0, 0, 0, 1, ulong.MaxValue - 1)); yield return () => ( new Int512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue), new Int512(0, 0, 0, 0, 0, 0, 0, ulong.MaxValue), @@ -645,7 +646,7 @@ public class Int512DataSources public static IEnumerable> ParseTestData() { yield return () => ("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048", NumberStyles.Integer, CultureInfo.InvariantCulture, Int512.MinValue); - yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968", NumberStyles.Integer, CultureInfo.InvariantCulture, Int256.MinValue); + yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968", NumberStyles.Integer, CultureInfo.InvariantCulture, Int512.Int256MinValue); yield return () => ("-170141183460469231731687303715884105728", NumberStyles.Integer, CultureInfo.InvariantCulture, Int128.MinValue); yield return () => ("-9223372036854775808", NumberStyles.Integer, CultureInfo.InvariantCulture, long.MinValue); yield return () => ("-1", NumberStyles.Integer, CultureInfo.InvariantCulture, Int512.NegativeOne); @@ -717,7 +718,7 @@ public class Int512DataSources public static IEnumerable> ParseSpanTestData() { yield return () => ("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int512.MinValue); - yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int256.MinValue); + yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int512.Int256MinValue); yield return () => ("-170141183460469231731687303715884105728".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int128.MinValue); yield return () => ("-9223372036854775808".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, long.MinValue); yield return () => ("-1".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int512.NegativeOne); @@ -789,7 +790,7 @@ public class Int512DataSources public static IEnumerable> ParseUtf8TestData() { yield return () => ("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int512.MinValue); - yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int256.MinValue); + yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int512.Int256MinValue); yield return () => ("-170141183460469231731687303715884105728"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int128.MinValue); yield return () => ("-9223372036854775808"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, long.MinValue); yield return () => ("-1"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, Int512.NegativeOne); @@ -862,7 +863,7 @@ public class Int512DataSources { yield return () => ("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042049", NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); yield return () => ("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048", NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int512.MinValue); - yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968", NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int256.MinValue); + yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968", NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int512.Int256MinValue); yield return () => ("-170141183460469231731687303715884105728", NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int128.MinValue); yield return () => ("-9223372036854775808", NumberStyles.Integer, CultureInfo.InvariantCulture, true, long.MinValue); yield return () => ("-1", NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int512.NegativeOne); @@ -941,7 +942,7 @@ public class Int512DataSources { yield return () => ("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042049".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); yield return () => ("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int512.MinValue); - yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int256.MinValue); + yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int512.Int256MinValue); yield return () => ("-170141183460469231731687303715884105728".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int128.MinValue); yield return () => ("-9223372036854775808".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, long.MinValue); yield return () => ("-1".ToCharArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int512.NegativeOne); @@ -1020,7 +1021,7 @@ public class Int512DataSources { yield return () => ("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042049"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, false, default); yield return () => ("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int512.MinValue); - yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int256.MinValue); + yield return () => ("-57896044618658097711785492504343953926634992332820282019728792003956564819968"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int512.Int256MinValue); yield return () => ("-170141183460469231731687303715884105728"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int128.MinValue); yield return () => ("-9223372036854775808"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, long.MinValue); yield return () => ("-1"u8.ToArray(), NumberStyles.Integer, CultureInfo.InvariantCulture, true, Int512.NegativeOne); @@ -1097,8 +1098,8 @@ public class Int512DataSources public static IEnumerable> ToStringTestData() { - yield return () => (Int256.MaxValue, "e25", CultureInfo.InvariantCulture, "5.7896044618658097711785493e+76"); - yield return () => (Int256.MinValue, "e25", CultureInfo.InvariantCulture, "-5.7896044618658097711785493e+76"); + yield return () => (Int512.Int256MaxValue, "e25", CultureInfo.InvariantCulture, "5.7896044618658097711785493e+76"); + yield return () => (Int512.Int256MinValue, "e25", CultureInfo.InvariantCulture, "-5.7896044618658097711785493e+76"); yield return () => (Int512.MaxValue, "e25", CultureInfo.InvariantCulture, "6.7039039649712985497870125e+153"); yield return () => (Int512.MinValue, "e25", CultureInfo.InvariantCulture, "-6.7039039649712985497870125e+153"); yield return () => (Int512.MinValue, "F3", CultureInfo.InvariantCulture, "-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048.000"); @@ -1386,246 +1387,606 @@ public class Int512DataSources public static IEnumerable> ConvertToCheckedByteTestData() { - throw new NotImplementedException(); + yield return () => (Int512.One, 1); + yield return () => (Int512.ByteMaxValue, byte.MaxValue); } public static IEnumerable> ConvertToSaturatingByteTestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, 0); + yield return () => (Int512.One, 1); + yield return () => (Int512.ByteMaxValue, byte.MaxValue); + yield return () => (Int512.MaxValue, byte.MaxValue); + yield return () => (Int512.ByteMaxValue + Int512.One, byte.MaxValue); } public static IEnumerable> ConvertToTruncatingByteTestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, 0); + yield return () => (Int512.NegativeOne, 0xFF); + yield return () => (Int512.One, 1); + yield return () => (Int512.ByteMaxValue, byte.MaxValue); + yield return () => (Int512.MaxValue, byte.MaxValue); + yield return () => (Int512.ByteMaxValue + Int512.One, 0); } public static IEnumerable> ConvertToCheckedUInt16TestData() { - throw new NotImplementedException(); + yield return () => (Int512.One, 1); + yield return () => (Int512.ByteMaxValue, byte.MaxValue); + yield return () => (Int512.UInt16MaxValue, ushort.MaxValue); } public static IEnumerable> ConvertToSaturatingUInt16TestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, 0); + yield return () => (Int512.One, 1); + yield return () => (Int512.ByteMaxValue, byte.MaxValue); + yield return () => (Int512.UInt16MaxValue, ushort.MaxValue); + yield return () => (Int512.MaxValue, ushort.MaxValue); + yield return () => (Int512.UInt16MaxValue + Int512.One, ushort.MaxValue); } public static IEnumerable> ConvertToTruncatingUInt16TestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, 0); + yield return () => (Int512.NegativeOne, 0xFFFF); + yield return () => (Int512.One, 1); + yield return () => (Int512.ByteMaxValue, byte.MaxValue); + yield return () => (Int512.UInt16MaxValue, ushort.MaxValue); + yield return () => (Int512.MaxValue, ushort.MaxValue); + yield return () => (Int512.UInt16MaxValue + Int512.One, 0); } public static IEnumerable> ConvertToCheckedUInt32TestData() { - throw new NotImplementedException(); + yield return () => (Int512.One, 1); + yield return () => (Int512.ByteMaxValue, byte.MaxValue); + yield return () => (Int512.UInt16MaxValue, ushort.MaxValue); + yield return () => (Int512.UInt32MaxValue, uint.MaxValue); } public static IEnumerable> ConvertToSaturatingUInt32TestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, 0); + yield return () => (Int512.One, 1); + yield return () => (Int512.ByteMaxValue, byte.MaxValue); + yield return () => (Int512.UInt16MaxValue, ushort.MaxValue); + yield return () => (Int512.UInt32MaxValue, uint.MaxValue); + yield return () => (Int512.MaxValue, uint.MaxValue); + yield return () => (Int512.UInt32MaxValue + Int512.One, uint.MaxValue); } public static IEnumerable> ConvertToTruncatingUInt32TestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, 0); + yield return () => (Int512.NegativeOne, 0xFFFF_FFFF); + yield return () => (Int512.One, 1); + yield return () => (Int512.ByteMaxValue, byte.MaxValue); + yield return () => (Int512.UInt16MaxValue, ushort.MaxValue); + yield return () => (Int512.UInt32MaxValue, uint.MaxValue); + yield return () => (Int512.MaxValue, uint.MaxValue); + yield return () => (Int512.UInt32MaxValue + Int512.One, 0); } public static IEnumerable> ConvertToCheckedUInt64TestData() { - throw new NotImplementedException(); + yield return () => (Int512.One, 1); + yield return () => (Int512.ByteMaxValue, byte.MaxValue); + yield return () => (Int512.UInt16MaxValue, ushort.MaxValue); + yield return () => (Int512.UInt32MaxValue, uint.MaxValue); + yield return () => (Int512.UInt64MaxValue, ulong.MaxValue); } public static IEnumerable> ConvertToSaturatingUInt64TestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, 0); + yield return () => (Int512.One, 1); + yield return () => (Int512.ByteMaxValue, byte.MaxValue); + yield return () => (Int512.UInt16MaxValue, ushort.MaxValue); + yield return () => (Int512.UInt32MaxValue, uint.MaxValue); + yield return () => (Int512.UInt64MaxValue, ulong.MaxValue); + yield return () => (Int512.MaxValue, ulong.MaxValue); + yield return () => (Int512.UInt64MaxValue + Int512.One, ulong.MaxValue); } public static IEnumerable> ConvertToTruncatingUInt64TestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, 0); + yield return () => (Int512.NegativeOne, 0xFFFF_FFFF_FFFF_FFFF); + yield return () => (Int512.One, 1); + yield return () => (Int512.ByteMaxValue, byte.MaxValue); + yield return () => (Int512.UInt16MaxValue, ushort.MaxValue); + yield return () => (Int512.UInt32MaxValue, uint.MaxValue); + yield return () => (Int512.UInt64MaxValue, ulong.MaxValue); + yield return () => (Int512.MaxValue, ulong.MaxValue); + yield return () => (Int512.UInt64MaxValue + Int512.One, 0); } public static IEnumerable> ConvertToCheckedUInt128TestData() { - throw new NotImplementedException(); + yield return () => (Int512.One, UInt128.One); + yield return () => (Int512.ByteMaxValue, byte.MaxValue); + yield return () => (Int512.UInt16MaxValue, ushort.MaxValue); + yield return () => (Int512.UInt32MaxValue, uint.MaxValue); + yield return () => (Int512.UInt64MaxValue, ulong.MaxValue); + yield return () => (Int512.UInt128MaxValue, UInt128.MaxValue); } public static IEnumerable> ConvertToSaturatingUInt128TestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, UInt128.Zero); + yield return () => (Int512.One, UInt128.One); + yield return () => (Int512.ByteMaxValue, byte.MaxValue); + yield return () => (Int512.UInt16MaxValue, ushort.MaxValue); + yield return () => (Int512.UInt32MaxValue, uint.MaxValue); + yield return () => (Int512.UInt64MaxValue, ulong.MaxValue); + yield return () => (Int512.UInt128MaxValue, UInt128.MaxValue); + yield return () => (Int512.MaxValue, UInt128.MaxValue); + yield return () => (Int512.UInt128MaxValue + Int512.One, UInt128.MaxValue); } public static IEnumerable> ConvertToTruncatingUInt128TestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, UInt128.Zero); + yield return () => (Int512.NegativeOne, new UInt128(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF)); + yield return () => (Int512.One, UInt128.One); + yield return () => (Int512.ByteMaxValue, byte.MaxValue); + yield return () => (Int512.UInt16MaxValue, ushort.MaxValue); + yield return () => (Int512.UInt32MaxValue, uint.MaxValue); + yield return () => (Int512.UInt64MaxValue, ulong.MaxValue); + yield return () => (Int512.UInt128MaxValue, UInt128.MaxValue); + yield return () => (Int512.MaxValue, UInt128.MaxValue); + yield return () => (Int512.UInt128MaxValue + Int512.One, UInt128.Zero); } public static IEnumerable> ConvertToCheckedUInt256TestData() { - throw new NotImplementedException(); + yield return () => (Int512.One, UInt256.One); + yield return () => (Int512.ByteMaxValue, UInt256.ByteMaxValue); + yield return () => (Int512.UInt16MaxValue, UInt256.UInt16MaxValue); + yield return () => (Int512.UInt32MaxValue, UInt256.UInt32MaxValue); + yield return () => (Int512.UInt64MaxValue, UInt256.UInt64MaxValue); + yield return () => (Int512.UInt128MaxValue, UInt256.UInt128MaxValue); + yield return () => (Int512.UInt256MaxValue, UInt256.MaxValue); } public static IEnumerable> ConvertToSaturatingUInt256TestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, UInt256.Zero); + yield return () => (Int512.One, UInt256.One); + yield return () => (Int512.ByteMaxValue, UInt256.ByteMaxValue); + yield return () => (Int512.UInt16MaxValue, UInt256.UInt16MaxValue); + yield return () => (Int512.UInt32MaxValue, UInt256.UInt32MaxValue); + yield return () => (Int512.UInt64MaxValue, UInt256.UInt64MaxValue); + yield return () => (Int512.UInt128MaxValue, UInt256.UInt128MaxValue); + yield return () => (Int512.UInt256MaxValue, UInt256.MaxValue); } public static IEnumerable> ConvertToTruncatingUInt256TestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, UInt256.Zero); + yield return () => (Int512.NegativeOne, UInt256.MaxValue); + yield return () => (Int512.One, UInt256.One); + yield return () => (Int512.ByteMaxValue, UInt256.ByteMaxValue); + yield return () => (Int512.UInt16MaxValue, UInt256.UInt16MaxValue); + yield return () => (Int512.UInt32MaxValue, UInt256.UInt32MaxValue); + yield return () => (Int512.UInt64MaxValue, UInt256.UInt64MaxValue); + yield return () => (Int512.UInt128MaxValue, UInt256.UInt128MaxValue); + yield return () => (Int512.UInt256MaxValue, UInt256.MaxValue); } public static IEnumerable> ConvertToCheckedUInt512TestData() { - throw new NotImplementedException(); + yield return () => (Int512.One, UInt512.One); + yield return () => (Int512.ByteMaxValue, UInt512.ByteMaxValue); + yield return () => (Int512.UInt16MaxValue, UInt512.UInt16MaxValue); + yield return () => (Int512.UInt32MaxValue, UInt512.UInt32MaxValue); + yield return () => (Int512.UInt64MaxValue, UInt512.UInt64MaxValue); + yield return () => (Int512.UInt128MaxValue, UInt512.UInt128MaxValue); + yield return () => (Int512.UInt256MaxValue, UInt512.UInt256MaxValue); + yield return () => (Int512.MaxValue, UInt512.Int512MaxValue); } public static IEnumerable> ConvertToSaturatingUInt512TestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, UInt512.Zero); + yield return () => (Int512.One, UInt512.One); + yield return () => (Int512.ByteMaxValue, UInt512.ByteMaxValue); + yield return () => (Int512.UInt16MaxValue, UInt512.UInt16MaxValue); + yield return () => (Int512.UInt32MaxValue, UInt512.UInt32MaxValue); + yield return () => (Int512.UInt64MaxValue, UInt512.UInt64MaxValue); + yield return () => (Int512.UInt128MaxValue, UInt512.UInt128MaxValue); + yield return () => (Int512.UInt256MaxValue, UInt512.UInt256MaxValue); + yield return () => (Int512.MaxValue, UInt512.Int512MaxValue); } public static IEnumerable> ConvertToTruncatingUInt512TestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, new UInt512(0x8000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000, 0x0000_0000_0000_0000)); + yield return () => (Int512.NegativeOne, UInt512.MaxValue); + yield return () => (Int512.ByteMaxValue, UInt512.ByteMaxValue); + yield return () => (Int512.UInt16MaxValue, UInt512.UInt16MaxValue); + yield return () => (Int512.UInt32MaxValue, UInt512.UInt32MaxValue); + yield return () => (Int512.UInt64MaxValue, UInt512.UInt64MaxValue); + yield return () => (Int512.UInt128MaxValue, UInt512.UInt128MaxValue); + yield return () => (Int512.UInt256MaxValue, UInt512.UInt256MaxValue); + yield return () => (Int512.MaxValue, UInt512.Int512MaxValue); } public static IEnumerable> ConvertToCheckedSByteTestData() { - throw new NotImplementedException(); + yield return () => (Int512.SByteMinValue, sbyte.MinValue); + yield return () => (Int512.One, 1); + yield return () => (Int512.SByteMaxValue, sbyte.MaxValue); } public static IEnumerable> ConvertToSaturatingSByteTestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, sbyte.MinValue); + yield return () => (Int512.SByteMinValue, sbyte.MinValue); + yield return () => (Int512.One, 1); + yield return () => (Int512.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int512.MaxValue, sbyte.MaxValue); } public static IEnumerable> ConvertToTruncatingSByteTestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, 0); + yield return () => (Int512.SByteMinValue, sbyte.MinValue); + yield return () => (Int512.One, 1); + yield return () => (Int512.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int512.MaxValue, -1); } public static IEnumerable> ConvertToCheckedInt16TestData() { - throw new NotImplementedException(); + yield return () => (Int512.Int16MinValue, short.MinValue); + yield return () => (Int512.SByteMinValue, sbyte.MinValue); + yield return () => (Int512.One, 1); + yield return () => (Int512.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int512.Int16MaxValue, short.MaxValue); } public static IEnumerable> ConvertToSaturatingInt16TestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, short.MinValue); + yield return () => (Int512.Int16MinValue, short.MinValue); + yield return () => (Int512.SByteMinValue, sbyte.MinValue); + yield return () => (Int512.One, 1); + yield return () => (Int512.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int512.Int16MaxValue, short.MaxValue); + yield return () => (Int512.MaxValue, short.MaxValue); } public static IEnumerable> ConvertToTruncatingInt16TestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, 0); + yield return () => (Int512.Int16MinValue, short.MinValue); + yield return () => (Int512.SByteMinValue, sbyte.MinValue); + yield return () => (Int512.One, 1); + yield return () => (Int512.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int512.Int16MaxValue, short.MaxValue); + yield return () => (Int512.MaxValue, -1); } public static IEnumerable> ConvertToCheckedInt32TestData() { - throw new NotImplementedException(); + yield return () => (Int512.Int32MinValue, int.MinValue); + yield return () => (Int512.Int16MinValue, short.MinValue); + yield return () => (Int512.SByteMinValue, sbyte.MinValue); + yield return () => (Int512.One, 1); + yield return () => (Int512.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int512.Int16MaxValue, short.MaxValue); + yield return () => (Int512.Int32MaxValue, int.MaxValue); } public static IEnumerable> ConvertToSaturatingInt32TestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, int.MinValue); + yield return () => (Int512.Int32MinValue, int.MinValue); + yield return () => (Int512.Int16MinValue, short.MinValue); + yield return () => (Int512.SByteMinValue, sbyte.MinValue); + yield return () => (Int512.One, 1); + yield return () => (Int512.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int512.Int16MaxValue, short.MaxValue); + yield return () => (Int512.Int32MaxValue, int.MaxValue); + yield return () => (Int512.MaxValue, int.MaxValue); } public static IEnumerable> ConvertToTruncatingInt32TestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, 0); + yield return () => (Int512.Int32MinValue, int.MinValue); + yield return () => (Int512.Int16MinValue, short.MinValue); + yield return () => (Int512.SByteMinValue, sbyte.MinValue); + yield return () => (Int512.One, 1); + yield return () => (Int512.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int512.Int16MaxValue, short.MaxValue); + yield return () => (Int512.Int32MaxValue, int.MaxValue); + yield return () => (Int512.MaxValue, -1); } public static IEnumerable> ConvertToCheckedInt64TestData() { - throw new NotImplementedException(); + yield return () => (Int512.Int64MinValue, long.MinValue); + yield return () => (Int512.Int32MinValue, int.MinValue); + yield return () => (Int512.Int16MinValue, short.MinValue); + yield return () => (Int512.SByteMinValue, sbyte.MinValue); + yield return () => (Int512.One, 1); + yield return () => (Int512.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int512.Int16MaxValue, short.MaxValue); + yield return () => (Int512.Int32MaxValue, int.MaxValue); + yield return () => (Int512.Int64MaxValue, long.MaxValue); } public static IEnumerable> ConvertToSaturatingInt64TestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, long.MinValue); + yield return () => (Int512.Int64MinValue, long.MinValue); + yield return () => (Int512.Int32MinValue, int.MinValue); + yield return () => (Int512.Int16MinValue, short.MinValue); + yield return () => (Int512.SByteMinValue, sbyte.MinValue); + yield return () => (Int512.One, 1); + yield return () => (Int512.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int512.Int16MaxValue, short.MaxValue); + yield return () => (Int512.Int32MaxValue, int.MaxValue); + yield return () => (Int512.Int64MaxValue, long.MaxValue); + yield return () => (Int512.MaxValue, long.MaxValue); } public static IEnumerable> ConvertToTruncatingInt64TestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, 0); + yield return () => (Int512.Int64MinValue, long.MinValue); + yield return () => (Int512.Int32MinValue, int.MinValue); + yield return () => (Int512.Int16MinValue, short.MinValue); + yield return () => (Int512.SByteMinValue, sbyte.MinValue); + yield return () => (Int512.One, 1); + yield return () => (Int512.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int512.Int16MaxValue, short.MaxValue); + yield return () => (Int512.Int32MaxValue, int.MaxValue); + yield return () => (Int512.Int64MaxValue, long.MaxValue); + yield return () => (Int512.MaxValue, -1); } public static IEnumerable> ConvertToCheckedInt128TestData() { - throw new NotImplementedException(); + yield return () => (Int512.Int128MinValue, Int128.MinValue); + yield return () => (Int512.Int64MinValue, long.MinValue); + yield return () => (Int512.Int32MinValue, int.MinValue); + yield return () => (Int512.Int16MinValue, short.MinValue); + yield return () => (Int512.SByteMinValue, sbyte.MinValue); + yield return () => (Int512.One, Int128.One); + yield return () => (Int512.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int512.Int16MaxValue, short.MaxValue); + yield return () => (Int512.Int32MaxValue, int.MaxValue); + yield return () => (Int512.Int64MaxValue, long.MaxValue); + yield return () => (Int512.Int128MaxValue, Int128.MaxValue); } public static IEnumerable> ConvertToSaturatingInt128TestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, Int128.MinValue); + yield return () => (Int512.Int128MinValue, Int128.MinValue); + yield return () => (Int512.Int64MinValue, long.MinValue); + yield return () => (Int512.Int32MinValue, int.MinValue); + yield return () => (Int512.Int16MinValue, short.MinValue); + yield return () => (Int512.SByteMinValue, sbyte.MinValue); + yield return () => (Int512.One, Int128.One); + yield return () => (Int512.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int512.Int16MaxValue, short.MaxValue); + yield return () => (Int512.Int32MaxValue, int.MaxValue); + yield return () => (Int512.Int64MaxValue, long.MaxValue); + yield return () => (Int512.Int128MaxValue, Int128.MaxValue); + yield return () => (Int512.MaxValue, Int128.MaxValue); } public static IEnumerable> ConvertToTruncatingInt128TestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, Int128.Zero); + yield return () => (Int512.Int128MinValue, Int128.MinValue); + yield return () => (Int512.Int64MinValue, long.MinValue); + yield return () => (Int512.Int32MinValue, int.MinValue); + yield return () => (Int512.Int16MinValue, short.MinValue); + yield return () => (Int512.SByteMinValue, sbyte.MinValue); + yield return () => (Int512.One, Int128.One); + yield return () => (Int512.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int512.Int16MaxValue, short.MaxValue); + yield return () => (Int512.Int32MaxValue, int.MaxValue); + yield return () => (Int512.Int64MaxValue, long.MaxValue); + yield return () => (Int512.Int128MaxValue, Int128.MaxValue); + yield return () => (Int512.MaxValue, Int128.NegativeOne); } public static IEnumerable> ConvertToCheckedInt256TestData() { - throw new NotImplementedException(); + yield return () => (Int512.Int256MinValue, Int256.MinValue); + yield return () => (Int512.Int128MinValue, Int256.Int128MinValue); + yield return () => (Int512.Int64MinValue, Int256.Int64MinValue); + yield return () => (Int512.Int32MinValue, Int256.Int32MinValue); + yield return () => (Int512.Int16MinValue, Int256.Int16MinValue); + yield return () => (Int512.SByteMinValue, Int256.SByteMinValue); + yield return () => (Int512.One, Int256.One); + yield return () => (Int512.SByteMaxValue, Int256.SByteMaxValue); + yield return () => (Int512.Int16MaxValue, Int256.Int16MaxValue); + yield return () => (Int512.Int32MaxValue, Int256.Int32MaxValue); + yield return () => (Int512.Int64MaxValue, Int256.Int64MaxValue); + yield return () => (Int512.Int128MaxValue, Int256.Int128MaxValue); + yield return () => (Int512.Int256MaxValue, Int256.MaxValue); } public static IEnumerable> ConvertToSaturatingInt256TestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, Int256.MinValue); + yield return () => (Int512.Int256MinValue, Int256.MinValue); + yield return () => (Int512.Int128MinValue, Int256.Int128MinValue); + yield return () => (Int512.Int64MinValue, Int256.Int64MinValue); + yield return () => (Int512.Int32MinValue, Int256.Int32MinValue); + yield return () => (Int512.Int16MinValue, Int256.Int16MinValue); + yield return () => (Int512.SByteMinValue, Int256.SByteMinValue); + yield return () => (Int512.One, Int256.One); + yield return () => (Int512.SByteMaxValue, Int256.SByteMaxValue); + yield return () => (Int512.Int16MaxValue, Int256.Int16MaxValue); + yield return () => (Int512.Int32MaxValue, Int256.Int32MaxValue); + yield return () => (Int512.Int64MaxValue, Int256.Int64MaxValue); + yield return () => (Int512.Int128MaxValue, Int256.Int128MaxValue); + yield return () => (Int512.Int256MaxValue, Int256.MaxValue); + yield return () => (Int512.MaxValue, Int256.MaxValue); } public static IEnumerable> ConvertToTruncatingInt256TestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, Int256.Zero); + yield return () => (Int512.Int256MinValue, Int256.MinValue); + yield return () => (Int512.Int128MinValue, Int256.Int128MinValue); + yield return () => (Int512.Int64MinValue, Int256.Int64MinValue); + yield return () => (Int512.Int32MinValue, Int256.Int32MinValue); + yield return () => (Int512.Int16MinValue, Int256.Int16MinValue); + yield return () => (Int512.SByteMinValue, Int256.SByteMinValue); + yield return () => (Int512.One, Int256.One); + yield return () => (Int512.SByteMaxValue, Int256.SByteMaxValue); + yield return () => (Int512.Int16MaxValue, Int256.Int16MaxValue); + yield return () => (Int512.Int32MaxValue, Int256.Int32MaxValue); + yield return () => (Int512.Int64MaxValue, Int256.Int64MaxValue); + yield return () => (Int512.Int128MaxValue, Int256.Int128MaxValue); + yield return () => (Int512.Int256MaxValue, Int256.MaxValue); + yield return () => (Int512.MaxValue, Int256.NegativeOne); } public static IEnumerable> ConvertToCheckedBigIntegerTestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, BigInteger.Parse("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048")); + yield return () => (Int512.Int256MinValue, BigInteger.Parse("-57896044618658097711785492504343953926634992332820282019728792003956564819968")); + yield return () => (Int512.Int128MinValue, Int128.MinValue); + yield return () => (Int512.Int64MinValue, long.MinValue); + yield return () => (Int512.Int32MinValue, int.MinValue); + yield return () => (Int512.Int16MinValue, short.MinValue); + yield return () => (Int512.SByteMinValue, sbyte.MinValue); + yield return () => (Int512.One, BigInteger.One); + yield return () => (Int512.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int512.Int16MaxValue, short.MaxValue); + yield return () => (Int512.Int32MaxValue, int.MaxValue); + yield return () => (Int512.Int64MaxValue, long.MaxValue); + yield return () => (Int512.Int128MaxValue, Int128.MaxValue); + yield return () => (Int512.Int256MaxValue, BigInteger.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819967")); + yield return () => (Int512.MaxValue, BigInteger.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047")); } public static IEnumerable> ConvertToSaturatingBigIntegerTestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, BigInteger.Parse("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048")); + yield return () => (Int512.Int256MinValue, BigInteger.Parse("-57896044618658097711785492504343953926634992332820282019728792003956564819968")); + yield return () => (Int512.Int128MinValue, Int128.MinValue); + yield return () => (Int512.Int64MinValue, long.MinValue); + yield return () => (Int512.Int32MinValue, int.MinValue); + yield return () => (Int512.Int16MinValue, short.MinValue); + yield return () => (Int512.SByteMinValue, sbyte.MinValue); + yield return () => (Int512.One, BigInteger.One); + yield return () => (Int512.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int512.Int16MaxValue, short.MaxValue); + yield return () => (Int512.Int32MaxValue, int.MaxValue); + yield return () => (Int512.Int64MaxValue, long.MaxValue); + yield return () => (Int512.Int128MaxValue, Int128.MaxValue); + yield return () => (Int512.Int256MaxValue, BigInteger.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819967")); + yield return () => (Int512.MaxValue, BigInteger.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047")); } public static IEnumerable> ConvertToTruncatingBigIntegerTestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, BigInteger.Parse("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048")); + yield return () => (Int512.Int256MinValue, BigInteger.Parse("-57896044618658097711785492504343953926634992332820282019728792003956564819968")); + yield return () => (Int512.Int128MinValue, Int128.MinValue); + yield return () => (Int512.Int64MinValue, long.MinValue); + yield return () => (Int512.Int32MinValue, int.MinValue); + yield return () => (Int512.Int16MinValue, short.MinValue); + yield return () => (Int512.SByteMinValue, sbyte.MinValue); + yield return () => (Int512.One, BigInteger.One); + yield return () => (Int512.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int512.Int16MaxValue, short.MaxValue); + yield return () => (Int512.Int32MaxValue, int.MaxValue); + yield return () => (Int512.Int64MaxValue, long.MaxValue); + yield return () => (Int512.Int128MaxValue, Int128.MaxValue); + yield return () => (Int512.Int256MaxValue, BigInteger.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819967")); + yield return () => (Int512.MaxValue, BigInteger.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047")); } public static IEnumerable> ConvertToCheckedHalfTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Int16MinValue, (Half)short.MinValue); + yield return () => (Int512.SByteMinValue, (Half)sbyte.MinValue); + yield return () => (Int512.One, Half.One); + yield return () => (Int512.SByteMaxValue, (Half)sbyte.MaxValue); + yield return () => (Int512.Int16MaxValue, (Half)short.MaxValue); } public static IEnumerable> ConvertToSaturatingHalfTestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, Half.MinValue); + yield return () => (Int512.Int16MinValue, (Half)short.MinValue); + yield return () => (Int512.SByteMinValue, (Half)sbyte.MinValue); + yield return () => (Int512.One, Half.One); + yield return () => (Int512.SByteMaxValue, (Half)sbyte.MaxValue); + yield return () => (Int512.Int16MaxValue, (Half)short.MaxValue); + yield return () => (Int512.MaxValue, Half.MaxValue); } public static IEnumerable> ConvertToTruncatingHalfTestData() { - throw new NotImplementedException(); + yield return () => (Int512.MinValue, Half.MinValue); + yield return () => (Int512.Int16MinValue, (Half)short.MinValue); + yield return () => (Int512.SByteMinValue, (Half)sbyte.MinValue); + yield return () => (Int512.One, Half.One); + yield return () => (Int512.SByteMaxValue, (Half)sbyte.MaxValue); + yield return () => (Int512.Int16MaxValue, (Half)short.MaxValue); + yield return () => (Int512.MaxValue, Half.MaxValue); } public static IEnumerable> ConvertToCheckedSingleTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Int32MinValue, int.MinValue); + yield return () => (Int512.Int16MinValue, short.MinValue); + yield return () => (Int512.SByteMinValue, sbyte.MinValue); + yield return () => (Int512.One, 1f); + yield return () => (Int512.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int512.Int16MaxValue, short.MaxValue); + yield return () => (Int512.Int32MaxValue, int.MaxValue); } public static IEnumerable> ConvertToSaturatingSingleTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Int32MinValue, int.MinValue); + yield return () => (Int512.Int16MinValue, short.MinValue); + yield return () => (Int512.SByteMinValue, sbyte.MinValue); + yield return () => (Int512.One, 1f); + yield return () => (Int512.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int512.Int16MaxValue, short.MaxValue); + yield return () => (Int512.Int32MaxValue, int.MaxValue); } public static IEnumerable> ConvertToTruncatingSingleTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Int32MinValue, int.MinValue); + yield return () => (Int512.Int16MinValue, short.MinValue); + yield return () => (Int512.SByteMinValue, sbyte.MinValue); + yield return () => (Int512.One, 1f); + yield return () => (Int512.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int512.Int16MaxValue, short.MaxValue); + yield return () => (Int512.Int32MaxValue, int.MaxValue); } public static IEnumerable> ConvertToCheckedDoubleTestData() { + yield return () => (Int512.Int64MinValue, long.MinValue); + yield return () => (Int512.Int32MinValue, int.MinValue); + yield return () => (Int512.Int16MinValue, short.MinValue); + yield return () => (Int512.SByteMinValue, sbyte.MinValue); + yield return () => (Int512.One, 1d); + yield return () => (Int512.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int512.Int16MaxValue, short.MaxValue); + yield return () => (Int512.Int32MaxValue, int.MaxValue); + yield return () => (Int512.Int64MaxValue, long.MaxValue); + yield return () => (Int512.Parse("781377183594418599030564404241984000000000000000000"), 781377183594418599030564404241984000000000000000000.0d); yield return () => (Int512.Parse("-781377183594418599030564404241984000000000000000000"), @@ -1636,6 +1997,16 @@ public class Int512DataSources public static IEnumerable> ConvertToSaturatingDoubleTestData() { + yield return () => (Int512.Int64MinValue, long.MinValue); + yield return () => (Int512.Int32MinValue, int.MinValue); + yield return () => (Int512.Int16MinValue, short.MinValue); + yield return () => (Int512.SByteMinValue, sbyte.MinValue); + yield return () => (Int512.One, 1d); + yield return () => (Int512.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int512.Int16MaxValue, short.MaxValue); + yield return () => (Int512.Int32MaxValue, int.MaxValue); + yield return () => (Int512.Int64MaxValue, long.MaxValue); + yield return () => (Int512.Parse("781377183594418599030564404241984000000000000000000"), 781377183594418599030564404241984000000000000000000.0d); yield return () => (Int512.Parse("-781377183594418599030564404241984000000000000000000"), @@ -1648,6 +2019,16 @@ public class Int512DataSources public static IEnumerable> ConvertToTruncatingDoubleTestData() { + yield return () => (Int512.Int64MinValue, long.MinValue); + yield return () => (Int512.Int32MinValue, int.MinValue); + yield return () => (Int512.Int16MinValue, short.MinValue); + yield return () => (Int512.SByteMinValue, sbyte.MinValue); + yield return () => (Int512.One, 1d); + yield return () => (Int512.SByteMaxValue, sbyte.MaxValue); + yield return () => (Int512.Int16MaxValue, short.MaxValue); + yield return () => (Int512.Int32MaxValue, int.MaxValue); + yield return () => (Int512.Int64MaxValue, long.MaxValue); + yield return () => (Int512.Parse("781377183594418599030564404241984000000000000000000"), 781377183594418599030564404241984000000000000000000.0d); yield return () => (Int512.Parse("-781377183594418599030564404241984000000000000000000"), @@ -1660,241 +2041,524 @@ public class Int512DataSources public static IEnumerable> ConvertToCheckedQuadTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Int64MinValue, Quad.Int64MinValue); + yield return () => (Int512.Int32MinValue, Quad.Int32MinValue); + yield return () => (Int512.Int16MinValue, Quad.Int16MinValue); + yield return () => (Int512.SByteMinValue, Quad.SByteMinValue); + yield return () => (Int512.One, Quad.One); + yield return () => (Int512.SByteMaxValue, Quad.SByteMaxValue); + yield return () => (Int512.Int16MaxValue, Quad.Int16MaxValue); + yield return () => (Int512.Int32MaxValue, Quad.Int32MaxValue); + yield return () => (Int512.Int64MaxValue, Quad.Int64MaxValue); } public static IEnumerable> ConvertToSaturatingQuadTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Int64MinValue, Quad.Int64MinValue); + yield return () => (Int512.Int32MinValue, Quad.Int32MinValue); + yield return () => (Int512.Int16MinValue, Quad.Int16MinValue); + yield return () => (Int512.SByteMinValue, Quad.SByteMinValue); + yield return () => (Int512.One, Quad.One); + yield return () => (Int512.SByteMaxValue, Quad.SByteMaxValue); + yield return () => (Int512.Int16MaxValue, Quad.Int16MaxValue); + yield return () => (Int512.Int32MaxValue, Quad.Int32MaxValue); + yield return () => (Int512.Int64MaxValue, Quad.Int64MaxValue); } public static IEnumerable> ConvertToTruncatingQuadTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Int64MinValue, Quad.Int64MinValue); + yield return () => (Int512.Int32MinValue, Quad.Int32MinValue); + yield return () => (Int512.Int16MinValue, Quad.Int16MinValue); + yield return () => (Int512.SByteMinValue, Quad.SByteMinValue); + yield return () => (Int512.One, Quad.One); + yield return () => (Int512.SByteMaxValue, Quad.SByteMaxValue); + yield return () => (Int512.Int16MaxValue, Quad.Int16MaxValue); + yield return () => (Int512.Int32MaxValue, Quad.Int32MaxValue); + yield return () => (Int512.Int64MaxValue, Quad.Int64MaxValue); } public static IEnumerable> ConvertToCheckedOctoTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Int64MinValue, Octo.Int64MinValue); + yield return () => (Int512.Int32MinValue, Octo.Int32MinValue); + yield return () => (Int512.Int16MinValue, Octo.Int16MinValue); + yield return () => (Int512.SByteMinValue, Octo.SByteMinValue); + yield return () => (Int512.One, Octo.One); + yield return () => (Int512.SByteMaxValue, Octo.SByteMaxValue); + yield return () => (Int512.Int16MaxValue, Octo.Int16MaxValue); + yield return () => (Int512.Int32MaxValue, Octo.Int32MaxValue); + yield return () => (Int512.Int64MaxValue, Octo.Int64MaxValue); } public static IEnumerable> ConvertToSaturatingOctoTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Int64MinValue, Octo.Int64MinValue); + yield return () => (Int512.Int32MinValue, Octo.Int32MinValue); + yield return () => (Int512.Int16MinValue, Octo.Int16MinValue); + yield return () => (Int512.SByteMinValue, Octo.SByteMinValue); + yield return () => (Int512.One, Octo.One); + yield return () => (Int512.SByteMaxValue, Octo.SByteMaxValue); + yield return () => (Int512.Int16MaxValue, Octo.Int16MaxValue); + yield return () => (Int512.Int32MaxValue, Octo.Int32MaxValue); + yield return () => (Int512.Int64MaxValue, Octo.Int64MaxValue); } public static IEnumerable> ConvertToTruncatingOctoTestData() { - throw new NotImplementedException(); + yield return () => (Int512.Int64MinValue, Octo.Int64MinValue); + yield return () => (Int512.Int32MinValue, Octo.Int32MinValue); + yield return () => (Int512.Int16MinValue, Octo.Int16MinValue); + yield return () => (Int512.SByteMinValue, Octo.SByteMinValue); + yield return () => (Int512.One, Octo.One); + yield return () => (Int512.SByteMaxValue, Octo.SByteMaxValue); + yield return () => (Int512.Int16MaxValue, Octo.Int16MaxValue); + yield return () => (Int512.Int32MaxValue, Octo.Int32MaxValue); + yield return () => (Int512.Int64MaxValue, Octo.Int64MaxValue); } public static IEnumerable> ConvertFromCheckedByteTestData() { - throw new NotImplementedException(); + yield return () => (1, Int512.One); + yield return () => (byte.MaxValue, Int512.ByteMaxValue); } public static IEnumerable> ConvertFromSaturatingByteTestData() { - throw new NotImplementedException(); + yield return () => (1, Int512.One); + yield return () => (byte.MaxValue, Int512.ByteMaxValue); } public static IEnumerable> ConvertFromTruncatingByteTestData() { - throw new NotImplementedException(); + yield return () => (1, Int512.One); + yield return () => (byte.MaxValue, Int512.ByteMaxValue); } public static IEnumerable> ConvertFromCheckedUInt16TestData() { - throw new NotImplementedException(); + yield return () => (1, Int512.One); + yield return () => (byte.MaxValue, Int512.ByteMaxValue); + yield return () => (ushort.MaxValue, Int512.UInt16MaxValue); } public static IEnumerable> ConvertFromSaturatingUInt16TestData() { - throw new NotImplementedException(); + yield return () => (1, Int512.One); + yield return () => (byte.MaxValue, Int512.ByteMaxValue); + yield return () => (ushort.MaxValue, Int512.UInt16MaxValue); } public static IEnumerable> ConvertFromTruncatingUInt16TestData() { - throw new NotImplementedException(); + yield return () => (1, Int512.One); + yield return () => (byte.MaxValue, Int512.ByteMaxValue); + yield return () => (ushort.MaxValue, Int512.UInt16MaxValue); } public static IEnumerable> ConvertFromCheckedUInt32TestData() { - throw new NotImplementedException(); + yield return () => (1, Int512.One); + yield return () => (byte.MaxValue, Int512.ByteMaxValue); + yield return () => (ushort.MaxValue, Int512.UInt16MaxValue); + yield return () => (uint.MaxValue, Int512.UInt32MaxValue); } public static IEnumerable> ConvertFromSaturatingUInt32TestData() { - throw new NotImplementedException(); + yield return () => (1, Int512.One); + yield return () => (byte.MaxValue, Int512.ByteMaxValue); + yield return () => (ushort.MaxValue, Int512.UInt16MaxValue); + yield return () => (uint.MaxValue, Int512.UInt32MaxValue); } public static IEnumerable> ConvertFromTruncatingUInt32TestData() { - throw new NotImplementedException(); + yield return () => (1, Int512.One); + yield return () => (byte.MaxValue, Int512.ByteMaxValue); + yield return () => (ushort.MaxValue, Int512.UInt16MaxValue); + yield return () => (uint.MaxValue, Int512.UInt32MaxValue); } public static IEnumerable> ConvertFromCheckedUInt64TestData() { - throw new NotImplementedException(); + yield return () => (1, Int512.One); + yield return () => (byte.MaxValue, Int512.ByteMaxValue); + yield return () => (ushort.MaxValue, Int512.UInt16MaxValue); + yield return () => (uint.MaxValue, Int512.UInt32MaxValue); + yield return () => (ulong.MaxValue, Int512.UInt64MaxValue); } public static IEnumerable> ConvertFromSaturatingUInt64TestData() { - throw new NotImplementedException(); + yield return () => (1, Int512.One); + yield return () => (byte.MaxValue, Int512.ByteMaxValue); + yield return () => (ushort.MaxValue, Int512.UInt16MaxValue); + yield return () => (uint.MaxValue, Int512.UInt32MaxValue); + yield return () => (ulong.MaxValue, Int512.UInt64MaxValue); } public static IEnumerable> ConvertFromTruncatingUInt64TestData() { - throw new NotImplementedException(); + yield return () => (1, Int512.One); + yield return () => (byte.MaxValue, Int512.ByteMaxValue); + yield return () => (ushort.MaxValue, Int512.UInt16MaxValue); + yield return () => (uint.MaxValue, Int512.UInt32MaxValue); + yield return () => (ulong.MaxValue, Int512.UInt64MaxValue); } public static IEnumerable> ConvertFromCheckedUInt128TestData() { - throw new NotImplementedException(); + yield return () => (1, Int512.One); + yield return () => (byte.MaxValue, Int512.ByteMaxValue); + yield return () => (ushort.MaxValue, Int512.UInt16MaxValue); + yield return () => (uint.MaxValue, Int512.UInt32MaxValue); + yield return () => (ulong.MaxValue, Int512.UInt64MaxValue); + yield return () => (UInt128.MaxValue, Int512.UInt128MaxValue); } public static IEnumerable> ConvertFromSaturatingUInt128TestData() { - throw new NotImplementedException(); + yield return () => (1, Int512.One); + yield return () => (byte.MaxValue, Int512.ByteMaxValue); + yield return () => (ushort.MaxValue, Int512.UInt16MaxValue); + yield return () => (uint.MaxValue, Int512.UInt32MaxValue); + yield return () => (ulong.MaxValue, Int512.UInt64MaxValue); + yield return () => (UInt128.MaxValue, Int512.UInt128MaxValue); } public static IEnumerable> ConvertFromTruncatingUInt128TestData() { - throw new NotImplementedException(); + yield return () => (1, Int512.One); + yield return () => (byte.MaxValue, Int512.ByteMaxValue); + yield return () => (ushort.MaxValue, Int512.UInt16MaxValue); + yield return () => (uint.MaxValue, Int512.UInt32MaxValue); + yield return () => (ulong.MaxValue, Int512.UInt64MaxValue); + yield return () => (UInt128.MaxValue, Int512.UInt128MaxValue); } public static IEnumerable> ConvertFromCheckedSByteTestData() { - throw new NotImplementedException(); + yield return () => (sbyte.MinValue, Int512.SByteMinValue); + yield return () => (1, Int512.One); + yield return () => (sbyte.MaxValue, Int512.SByteMaxValue); } public static IEnumerable> ConvertFromSaturatingSByteTestData() { - throw new NotImplementedException(); + yield return () => (sbyte.MinValue, Int512.SByteMinValue); + yield return () => (1, Int512.One); + yield return () => (sbyte.MaxValue, Int512.SByteMaxValue); } public static IEnumerable> ConvertFromTruncatingSByteTestData() { - throw new NotImplementedException(); + yield return () => (sbyte.MinValue, Int512.SByteMinValue); + yield return () => (1, Int512.One); + yield return () => (sbyte.MaxValue, Int512.SByteMaxValue); } public static IEnumerable> ConvertFromCheckedInt16TestData() { - throw new NotImplementedException(); + yield return () => (short.MinValue, Int512.Int16MinValue); + yield return () => (sbyte.MinValue, Int512.SByteMinValue); + yield return () => (1, Int512.One); + yield return () => (sbyte.MaxValue, Int512.SByteMaxValue); + yield return () => (short.MaxValue, Int512.Int16MaxValue); } public static IEnumerable> ConvertFromSaturatingInt16TestData() { - throw new NotImplementedException(); + yield return () => (short.MinValue, Int512.Int16MinValue); + yield return () => (sbyte.MinValue, Int512.SByteMinValue); + yield return () => (1, Int512.One); + yield return () => (sbyte.MaxValue, Int512.SByteMaxValue); + yield return () => (short.MaxValue, Int512.Int16MaxValue); } public static IEnumerable> ConvertFromTruncatingInt16TestData() { - throw new NotImplementedException(); + yield return () => (short.MinValue, Int512.Int16MinValue); + yield return () => (sbyte.MinValue, Int512.SByteMinValue); + yield return () => (1, Int512.One); + yield return () => (sbyte.MaxValue, Int512.SByteMaxValue); + yield return () => (short.MaxValue, Int512.Int16MaxValue); } public static IEnumerable> ConvertFromCheckedInt32TestData() { - throw new NotImplementedException(); + yield return () => (int.MinValue, Int512.Int32MinValue); + yield return () => (short.MinValue, Int512.Int16MinValue); + yield return () => (sbyte.MinValue, Int512.SByteMinValue); + yield return () => (1, Int512.One); + yield return () => (sbyte.MaxValue, Int512.SByteMaxValue); + yield return () => (short.MaxValue, Int512.Int16MaxValue); + yield return () => (int.MaxValue, Int512.Int32MaxValue); } public static IEnumerable> ConvertFromSaturatingInt32TestData() { - throw new NotImplementedException(); + yield return () => (int.MinValue, Int512.Int32MinValue); + yield return () => (short.MinValue, Int512.Int16MinValue); + yield return () => (sbyte.MinValue, Int512.SByteMinValue); + yield return () => (1, Int512.One); + yield return () => (sbyte.MaxValue, Int512.SByteMaxValue); + yield return () => (short.MaxValue, Int512.Int16MaxValue); + yield return () => (int.MaxValue, Int512.Int32MaxValue); } public static IEnumerable> ConvertFromTruncatingInt32TestData() { - throw new NotImplementedException(); + yield return () => (int.MinValue, Int512.Int32MinValue); + yield return () => (short.MinValue, Int512.Int16MinValue); + yield return () => (sbyte.MinValue, Int512.SByteMinValue); + yield return () => (1, Int512.One); + yield return () => (sbyte.MaxValue, Int512.SByteMaxValue); + yield return () => (short.MaxValue, Int512.Int16MaxValue); + yield return () => (int.MaxValue, Int512.Int32MaxValue); } public static IEnumerable> ConvertFromCheckedInt64TestData() { - throw new NotImplementedException(); + yield return () => (long.MinValue, Int512.Int64MinValue); + yield return () => (int.MinValue, Int512.Int32MinValue); + yield return () => (short.MinValue, Int512.Int16MinValue); + yield return () => (sbyte.MinValue, Int512.SByteMinValue); + yield return () => (1, Int512.One); + yield return () => (sbyte.MaxValue, Int512.SByteMaxValue); + yield return () => (short.MaxValue, Int512.Int16MaxValue); + yield return () => (int.MaxValue, Int512.Int32MaxValue); + yield return () => (long.MaxValue, Int512.Int64MaxValue); } public static IEnumerable> ConvertFromSaturatingInt64TestData() { - throw new NotImplementedException(); + yield return () => (long.MinValue, Int512.Int64MinValue); + yield return () => (int.MinValue, Int512.Int32MinValue); + yield return () => (short.MinValue, Int512.Int16MinValue); + yield return () => (sbyte.MinValue, Int512.SByteMinValue); + yield return () => (1, Int512.One); + yield return () => (sbyte.MaxValue, Int512.SByteMaxValue); + yield return () => (short.MaxValue, Int512.Int16MaxValue); + yield return () => (int.MaxValue, Int512.Int32MaxValue); + yield return () => (long.MaxValue, Int512.Int64MaxValue); } public static IEnumerable> ConvertFromTruncatingInt64TestData() { - throw new NotImplementedException(); + yield return () => (long.MinValue, Int512.Int64MinValue); + yield return () => (int.MinValue, Int512.Int32MinValue); + yield return () => (short.MinValue, Int512.Int16MinValue); + yield return () => (sbyte.MinValue, Int512.SByteMinValue); + yield return () => (1, Int512.One); + yield return () => (sbyte.MaxValue, Int512.SByteMaxValue); + yield return () => (short.MaxValue, Int512.Int16MaxValue); + yield return () => (int.MaxValue, Int512.Int32MaxValue); + yield return () => (long.MaxValue, Int512.Int64MaxValue); } public static IEnumerable> ConvertFromCheckedInt128TestData() { - throw new NotImplementedException(); + yield return () => (Int128.MinValue, Int512.Int128MinValue); + yield return () => (long.MinValue, Int512.Int64MinValue); + yield return () => (int.MinValue, Int512.Int32MinValue); + yield return () => (short.MinValue, Int512.Int16MinValue); + yield return () => (sbyte.MinValue, Int512.SByteMinValue); + yield return () => (Int128.One, Int512.One); + yield return () => (sbyte.MaxValue, Int512.SByteMaxValue); + yield return () => (short.MaxValue, Int512.Int16MaxValue); + yield return () => (int.MaxValue, Int512.Int32MaxValue); + yield return () => (long.MaxValue, Int512.Int64MaxValue); + yield return () => (Int128.MaxValue, Int512.Int128MaxValue); } public static IEnumerable> ConvertFromSaturatingInt128TestData() { - throw new NotImplementedException(); + yield return () => (Int128.MinValue, Int512.Int128MinValue); + yield return () => (long.MinValue, Int512.Int64MinValue); + yield return () => (int.MinValue, Int512.Int32MinValue); + yield return () => (short.MinValue, Int512.Int16MinValue); + yield return () => (sbyte.MinValue, Int512.SByteMinValue); + yield return () => (Int128.One, Int512.One); + yield return () => (sbyte.MaxValue, Int512.SByteMaxValue); + yield return () => (short.MaxValue, Int512.Int16MaxValue); + yield return () => (int.MaxValue, Int512.Int32MaxValue); + yield return () => (long.MaxValue, Int512.Int64MaxValue); + yield return () => (Int128.MaxValue, Int512.Int128MaxValue); } public static IEnumerable> ConvertFromTruncatingInt128TestData() { - throw new NotImplementedException(); + yield return () => (Int128.MinValue, Int512.Int128MinValue); + yield return () => (long.MinValue, Int512.Int64MinValue); + yield return () => (int.MinValue, Int512.Int32MinValue); + yield return () => (short.MinValue, Int512.Int16MinValue); + yield return () => (sbyte.MinValue, Int512.SByteMinValue); + yield return () => (Int128.One, Int512.One); + yield return () => (sbyte.MaxValue, Int512.SByteMaxValue); + yield return () => (short.MaxValue, Int512.Int16MaxValue); + yield return () => (int.MaxValue, Int512.Int32MaxValue); + yield return () => (long.MaxValue, Int512.Int64MaxValue); + yield return () => (Int128.MaxValue, Int512.Int128MaxValue); } public static IEnumerable> ConvertFromCheckedBigIntegerTestData() { - throw new NotImplementedException(); + yield return () => (BigInteger.Parse("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048"), Int512.MinValue); + yield return () => (BigInteger.Parse("-57896044618658097711785492504343953926634992332820282019728792003956564819968"), Int512.Int256MinValue); + yield return () => (Int128.MinValue, Int512.Int128MinValue); + yield return () => (long.MinValue, Int512.Int64MinValue); + yield return () => (int.MinValue, Int512.Int32MinValue); + yield return () => (short.MinValue, Int512.Int16MinValue); + yield return () => (sbyte.MinValue, Int512.SByteMinValue); + yield return () => (BigInteger.One, Int512.One); + yield return () => (sbyte.MaxValue, Int512.SByteMaxValue); + yield return () => (short.MaxValue, Int512.Int16MaxValue); + yield return () => (int.MaxValue, Int512.Int32MaxValue); + yield return () => (long.MaxValue, Int512.Int64MaxValue); + yield return () => (Int128.MaxValue, Int512.Int128MaxValue); + yield return () => (BigInteger.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819967"), Int512.Int256MaxValue); + yield return () => (BigInteger.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047"), Int512.MaxValue); } public static IEnumerable> ConvertFromSaturatingBigIntegerTestData() { - throw new NotImplementedException(); + yield return () => (BigInteger.Parse("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042049"), Int512.MinValue); + yield return () => (BigInteger.Parse("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048"), Int512.MinValue); + yield return () => (BigInteger.Parse("-57896044618658097711785492504343953926634992332820282019728792003956564819968"), Int512.Int256MinValue); + yield return () => (Int128.MinValue, Int512.Int128MinValue); + yield return () => (long.MinValue, Int512.Int64MinValue); + yield return () => (int.MinValue, Int512.Int32MinValue); + yield return () => (short.MinValue, Int512.Int16MinValue); + yield return () => (sbyte.MinValue, Int512.SByteMinValue); + yield return () => (BigInteger.One, Int512.One); + yield return () => (sbyte.MaxValue, Int512.SByteMaxValue); + yield return () => (short.MaxValue, Int512.Int16MaxValue); + yield return () => (int.MaxValue, Int512.Int32MaxValue); + yield return () => (long.MaxValue, Int512.Int64MaxValue); + yield return () => (Int128.MaxValue, Int512.Int128MaxValue); + yield return () => (BigInteger.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819967"), Int512.Int256MaxValue); + yield return () => (BigInteger.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047"), Int512.MaxValue); + yield return () => (BigInteger.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048"), Int512.MaxValue); } public static IEnumerable> ConvertFromTruncatingBigIntegerTestData() { - throw new NotImplementedException(); + yield return () => (BigInteger.Parse("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042049"), Int512.MaxValue); + yield return () => (BigInteger.Parse("-6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048"), Int512.MinValue); + yield return () => (BigInteger.Parse("-57896044618658097711785492504343953926634992332820282019728792003956564819968"), Int512.Int256MinValue); + yield return () => (Int128.MinValue, Int512.Int128MinValue); + yield return () => (long.MinValue, Int512.Int64MinValue); + yield return () => (int.MinValue, Int512.Int32MinValue); + yield return () => (short.MinValue, Int512.Int16MinValue); + yield return () => (sbyte.MinValue, Int512.SByteMinValue); + yield return () => (BigInteger.One, Int512.One); + yield return () => (sbyte.MaxValue, Int512.SByteMaxValue); + yield return () => (short.MaxValue, Int512.Int16MaxValue); + yield return () => (int.MaxValue, Int512.Int32MaxValue); + yield return () => (long.MaxValue, Int512.Int64MaxValue); + yield return () => (Int128.MaxValue, Int512.Int128MaxValue); + yield return () => (BigInteger.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819967"), Int512.Int256MaxValue); + yield return () => (BigInteger.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042047"), Int512.MaxValue); + yield return () => (BigInteger.Parse("6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048"), Int512.MinValue); } public static IEnumerable> ConvertFromCheckedHalfTestData() { - throw new NotImplementedException(); + yield return () => (sbyte.MinValue, Int512.SByteMinValue); + yield return () => (Half.One, Int512.One); + yield return () => (byte.MaxValue, Int512.ByteMaxValue); + yield return () => (sbyte.MaxValue, Int512.SByteMaxValue); } public static IEnumerable> ConvertFromSaturatingHalfTestData() { - throw new NotImplementedException(); + yield return () => (sbyte.MinValue, Int512.SByteMinValue); + yield return () => (Half.One, Int512.One); + yield return () => (byte.MaxValue, Int512.ByteMaxValue); + yield return () => (sbyte.MaxValue, Int512.SByteMaxValue); } public static IEnumerable> ConvertFromTruncatingHalfTestData() { - throw new NotImplementedException(); + yield return () => (sbyte.MinValue, Int512.SByteMinValue); + yield return () => (Half.One, Int512.One); + yield return () => (byte.MaxValue, Int512.ByteMaxValue); + yield return () => (sbyte.MaxValue, Int512.SByteMaxValue); } public static IEnumerable> ConvertFromCheckedSingleTestData() { - throw new NotImplementedException(); + yield return () => (short.MinValue, Int512.Int16MinValue); + yield return () => (sbyte.MinValue, Int512.SByteMinValue); + yield return () => (1f, Int512.One); + yield return () => (byte.MaxValue, Int512.ByteMaxValue); + yield return () => (sbyte.MaxValue, Int512.SByteMaxValue); + yield return () => (short.MaxValue, Int512.Int16MaxValue); + yield return () => (ushort.MaxValue, Int512.UInt16MaxValue); } public static IEnumerable> ConvertFromSaturatingSingleTestData() { - throw new NotImplementedException(); + yield return () => (short.MinValue, Int512.Int16MinValue); + yield return () => (sbyte.MinValue, Int512.SByteMinValue); + yield return () => (1f, Int512.One); + yield return () => (byte.MaxValue, Int512.ByteMaxValue); + yield return () => (sbyte.MaxValue, Int512.SByteMaxValue); + yield return () => (short.MaxValue, Int512.Int16MaxValue); + yield return () => (ushort.MaxValue, Int512.UInt16MaxValue); } public static IEnumerable> ConvertFromTruncatingSingleTestData() { - throw new NotImplementedException(); + yield return () => (short.MinValue, Int512.Int16MinValue); + yield return () => (sbyte.MinValue, Int512.SByteMinValue); + yield return () => (1f, Int512.One); + yield return () => (byte.MaxValue, Int512.ByteMaxValue); + yield return () => (sbyte.MaxValue, Int512.SByteMaxValue); + yield return () => (short.MaxValue, Int512.Int16MaxValue); + yield return () => (ushort.MaxValue, Int512.UInt16MaxValue); } public static IEnumerable> ConvertFromCheckedDoubleTestData() { - throw new NotImplementedException(); + yield return () => (int.MinValue, Int512.Int32MinValue); + yield return () => (short.MinValue, Int512.Int16MinValue); + yield return () => (sbyte.MinValue, Int512.SByteMinValue); + yield return () => (1d, Int512.One); + yield return () => (byte.MaxValue, Int512.ByteMaxValue); + yield return () => (sbyte.MaxValue, Int512.SByteMaxValue); + yield return () => (short.MaxValue, Int512.Int16MaxValue); + yield return () => (ushort.MaxValue, Int512.UInt16MaxValue); + yield return () => (int.MaxValue, Int512.Int32MaxValue); + yield return () => (uint.MaxValue, Int512.UInt32MaxValue); } public static IEnumerable> ConvertFromSaturatingDoubleTestData() { - throw new NotImplementedException(); + yield return () => (int.MinValue, Int512.Int32MinValue); + yield return () => (short.MinValue, Int512.Int16MinValue); + yield return () => (sbyte.MinValue, Int512.SByteMinValue); + yield return () => (1d, Int512.One); + yield return () => (byte.MaxValue, Int512.ByteMaxValue); + yield return () => (sbyte.MaxValue, Int512.SByteMaxValue); + yield return () => (short.MaxValue, Int512.Int16MaxValue); + yield return () => (ushort.MaxValue, Int512.UInt16MaxValue); + yield return () => (int.MaxValue, Int512.Int32MaxValue); + yield return () => (uint.MaxValue, Int512.UInt32MaxValue); } public static IEnumerable> ConvertFromTruncatingDoubleTestData() { - throw new NotImplementedException(); + yield return () => (int.MinValue, Int512.Int32MinValue); + yield return () => (short.MinValue, Int512.Int16MinValue); + yield return () => (sbyte.MinValue, Int512.SByteMinValue); + yield return () => (1d, Int512.One); + yield return () => (byte.MaxValue, Int512.ByteMaxValue); + yield return () => (sbyte.MaxValue, Int512.SByteMaxValue); + yield return () => (short.MaxValue, Int512.Int16MaxValue); + yield return () => (ushort.MaxValue, Int512.UInt16MaxValue); + yield return () => (int.MaxValue, Int512.Int32MaxValue); + yield return () => (uint.MaxValue, Int512.UInt32MaxValue); } } From 1baf14ed249e6dc3c7edf57659781f26fce2eb7c Mon Sep 17 00:00:00 2001 From: crookseta Date: Tue, 21 Jul 2026 16:38:07 -0500 Subject: [PATCH 69/74] -Added Tests for Quad->(unsigned integer) conversions. --- .../Data/QuadDataSources.cs | 160 +++++++++++++++--- .../Extensions/QuadExtensions.cs | 3 + 2 files changed, 142 insertions(+), 21 deletions(-) diff --git a/src/MissingValues.Tests/Data/QuadDataSources.cs b/src/MissingValues.Tests/Data/QuadDataSources.cs index c7380c8..08f7f80 100644 --- a/src/MissingValues.Tests/Data/QuadDataSources.cs +++ b/src/MissingValues.Tests/Data/QuadDataSources.cs @@ -899,107 +899,225 @@ public class QuadDataSources public static IEnumerable> ConvertToCheckedByteTestData() { - throw new NotImplementedException(); + yield return () => (Quad.Half, 0); + yield return () => (Quad.One, 1); + yield return () => (Quad.ByteMaxValue, byte.MaxValue); } public static IEnumerable> ConvertToSaturatingByteTestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeOne, 0); + yield return () => (Quad.Half, 0); + yield return () => (Quad.One, 1); + yield return () => (Quad.ByteMaxValue, byte.MaxValue); + yield return () => (Quad.MaxValue, byte.MaxValue); } public static IEnumerable> ConvertToTruncatingByteTestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeOne, 0); + yield return () => (Quad.Half, 0); + yield return () => (Quad.One, 1); + yield return () => (Quad.ByteMaxValue, byte.MaxValue); + yield return () => (Quad.MaxValue, byte.MaxValue); } public static IEnumerable> ConvertToCheckedUInt16TestData() { - throw new NotImplementedException(); + yield return () => (Quad.Half, 0); + yield return () => (Quad.One, 1); + yield return () => (Quad.ByteMaxValue, byte.MaxValue); + yield return () => (Quad.UInt16MaxValue, ushort.MaxValue); } public static IEnumerable> ConvertToSaturatingUInt16TestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeOne, 0); + yield return () => (Quad.Half, 0); + yield return () => (Quad.One, 1); + yield return () => (Quad.ByteMaxValue, byte.MaxValue); + yield return () => (Quad.UInt16MaxValue, ushort.MaxValue); + yield return () => (Quad.MaxValue, ushort.MaxValue); } public static IEnumerable> ConvertToTruncatingUInt16TestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeOne, 0); + yield return () => (Quad.Half, 0); + yield return () => (Quad.One, 1); + yield return () => (Quad.ByteMaxValue, byte.MaxValue); + yield return () => (Quad.UInt16MaxValue, ushort.MaxValue); + yield return () => (Quad.MaxValue, ushort.MaxValue); } public static IEnumerable> ConvertToCheckedUInt32TestData() { - throw new NotImplementedException(); + yield return () => (Quad.Half, 0); + yield return () => (Quad.One, 1); + yield return () => (Quad.ByteMaxValue, byte.MaxValue); + yield return () => (Quad.UInt16MaxValue, ushort.MaxValue); + yield return () => (Quad.UInt32MaxValue, uint.MaxValue); } public static IEnumerable> ConvertToSaturatingUInt32TestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeOne, 0); + yield return () => (Quad.Half, 0); + yield return () => (Quad.One, 1); + yield return () => (Quad.ByteMaxValue, byte.MaxValue); + yield return () => (Quad.UInt16MaxValue, ushort.MaxValue); + yield return () => (Quad.UInt32MaxValue, uint.MaxValue); + yield return () => (Quad.MaxValue, uint.MaxValue); } public static IEnumerable> ConvertToTruncatingUInt32TestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeOne, 0); + yield return () => (Quad.Half, 0); + yield return () => (Quad.One, 1); + yield return () => (Quad.ByteMaxValue, byte.MaxValue); + yield return () => (Quad.UInt16MaxValue, ushort.MaxValue); + yield return () => (Quad.UInt32MaxValue, uint.MaxValue); + yield return () => (Quad.MaxValue, uint.MaxValue); } public static IEnumerable> ConvertToCheckedUInt64TestData() { - throw new NotImplementedException(); + yield return () => (Quad.Half, 0); + yield return () => (Quad.One, 1); + yield return () => (Quad.ByteMaxValue, byte.MaxValue); + yield return () => (Quad.UInt16MaxValue, ushort.MaxValue); + yield return () => (Quad.UInt32MaxValue, uint.MaxValue); + yield return () => (Quad.UInt64MaxValue, ulong.MaxValue); } public static IEnumerable> ConvertToSaturatingUInt64TestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeOne, 0); + yield return () => (Quad.Half, 0); + yield return () => (Quad.One, 1); + yield return () => (Quad.ByteMaxValue, byte.MaxValue); + yield return () => (Quad.UInt16MaxValue, ushort.MaxValue); + yield return () => (Quad.UInt32MaxValue, uint.MaxValue); + yield return () => (Quad.UInt64MaxValue, ulong.MaxValue); + yield return () => (Quad.MaxValue, ulong.MaxValue); } public static IEnumerable> ConvertToTruncatingUInt64TestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeOne, 0); + yield return () => (Quad.Half, 0); + yield return () => (Quad.One, 1); + yield return () => (Quad.ByteMaxValue, byte.MaxValue); + yield return () => (Quad.UInt16MaxValue, ushort.MaxValue); + yield return () => (Quad.UInt32MaxValue, uint.MaxValue); + yield return () => (Quad.UInt64MaxValue, ulong.MaxValue); + yield return () => (Quad.MaxValue, ulong.MaxValue); } public static IEnumerable> ConvertToCheckedUInt128TestData() { - throw new NotImplementedException(); + yield return () => (Quad.Half, UInt128.Zero); + yield return () => (Quad.One, UInt128.One); + yield return () => (Quad.ByteMaxValue, byte.MaxValue); + yield return () => (Quad.UInt16MaxValue, ushort.MaxValue); + yield return () => (Quad.UInt32MaxValue, uint.MaxValue); + yield return () => (Quad.UInt64MaxValue, ulong.MaxValue); } public static IEnumerable> ConvertToSaturatingUInt128TestData() { - throw new NotImplementedException(); + yield return () => (Quad.Half, UInt128.Zero); + yield return () => (Quad.One, UInt128.One); + yield return () => (Quad.ByteMaxValue, byte.MaxValue); + yield return () => (Quad.UInt16MaxValue, ushort.MaxValue); + yield return () => (Quad.UInt32MaxValue, uint.MaxValue); + yield return () => (Quad.UInt64MaxValue, ulong.MaxValue); + yield return () => (Quad.TwoOver128, UInt128.MaxValue); } public static IEnumerable> ConvertToTruncatingUInt128TestData() { - throw new NotImplementedException(); + yield return () => (Quad.Half, UInt128.Zero); + yield return () => (Quad.One, UInt128.One); + yield return () => (Quad.ByteMaxValue, byte.MaxValue); + yield return () => (Quad.UInt16MaxValue, ushort.MaxValue); + yield return () => (Quad.UInt32MaxValue, uint.MaxValue); + yield return () => (Quad.UInt64MaxValue, ulong.MaxValue); + yield return () => (Quad.TwoOver128, UInt128.MaxValue); } public static IEnumerable> ConvertToCheckedUInt256TestData() { - throw new NotImplementedException(); + yield return () => (Quad.Half, UInt256.Zero); + yield return () => (Quad.One, UInt256.One); + yield return () => (Quad.ByteMaxValue, UInt256.ByteMaxValue); + yield return () => (Quad.UInt16MaxValue, UInt256.UInt16MaxValue); + yield return () => (Quad.UInt32MaxValue, UInt256.UInt32MaxValue); + yield return () => (Quad.UInt64MaxValue, UInt256.UInt64MaxValue); + yield return () => (Quad.TwoOver128, UInt256.UInt128MaxValue + UInt256.One); } public static IEnumerable> ConvertToSaturatingUInt256TestData() { - throw new NotImplementedException(); + yield return () => (Quad.Half, UInt256.Zero); + yield return () => (Quad.One, UInt256.One); + yield return () => (Quad.ByteMaxValue, UInt256.ByteMaxValue); + yield return () => (Quad.UInt16MaxValue, UInt256.UInt16MaxValue); + yield return () => (Quad.UInt32MaxValue, UInt256.UInt32MaxValue); + yield return () => (Quad.UInt64MaxValue, UInt256.UInt64MaxValue); + yield return () => (Quad.TwoOver128, UInt256.UInt128MaxValue + UInt256.One); + yield return () => (Quad.TwoOver256, UInt256.MaxValue); } public static IEnumerable> ConvertToTruncatingUInt256TestData() { - throw new NotImplementedException(); + yield return () => (Quad.Half, UInt256.Zero); + yield return () => (Quad.One, UInt256.One); + yield return () => (Quad.ByteMaxValue, UInt256.ByteMaxValue); + yield return () => (Quad.UInt16MaxValue, UInt256.UInt16MaxValue); + yield return () => (Quad.UInt32MaxValue, UInt256.UInt32MaxValue); + yield return () => (Quad.UInt64MaxValue, UInt256.UInt64MaxValue); + yield return () => (Quad.TwoOver128, UInt256.UInt128MaxValue + UInt256.One); + yield return () => (Quad.TwoOver256, UInt256.MaxValue); } public static IEnumerable> ConvertToCheckedUInt512TestData() { - throw new NotImplementedException(); + yield return () => (Quad.Half, UInt512.Zero); + yield return () => (Quad.One, UInt512.One); + yield return () => (Quad.ByteMaxValue, UInt512.ByteMaxValue); + yield return () => (Quad.UInt16MaxValue, UInt512.UInt16MaxValue); + yield return () => (Quad.UInt32MaxValue, UInt512.UInt32MaxValue); + yield return () => (Quad.UInt64MaxValue, UInt512.UInt64MaxValue); + yield return () => (Quad.TwoOver128, UInt512.UInt128MaxValue + UInt512.One); + yield return () => (Quad.TwoOver256, UInt512.UInt256MaxValue + UInt512.One); } public static IEnumerable> ConvertToSaturatingUInt512TestData() { - throw new NotImplementedException(); + yield return () => (Quad.Half, UInt512.Zero); + yield return () => (Quad.One, UInt512.One); + yield return () => (Quad.ByteMaxValue, UInt512.ByteMaxValue); + yield return () => (Quad.UInt16MaxValue, UInt512.UInt16MaxValue); + yield return () => (Quad.UInt32MaxValue, UInt512.UInt32MaxValue); + yield return () => (Quad.UInt64MaxValue, UInt512.UInt64MaxValue); + yield return () => (Quad.TwoOver128, UInt512.UInt128MaxValue + UInt512.One); + yield return () => (Quad.TwoOver256, UInt512.UInt256MaxValue + UInt512.One); + yield return () => (Quad.TwoOver512, UInt512.MaxValue); } public static IEnumerable> ConvertToTruncatingUInt512TestData() { - throw new NotImplementedException(); + yield return () => (Quad.Half, UInt512.Zero); + yield return () => (Quad.One, UInt512.One); + yield return () => (Quad.ByteMaxValue, UInt512.ByteMaxValue); + yield return () => (Quad.UInt16MaxValue, UInt512.UInt16MaxValue); + yield return () => (Quad.UInt32MaxValue, UInt512.UInt32MaxValue); + yield return () => (Quad.UInt64MaxValue, UInt512.UInt64MaxValue); + yield return () => (Quad.TwoOver128, UInt512.UInt128MaxValue + UInt512.One); + yield return () => (Quad.TwoOver256, UInt512.UInt256MaxValue + UInt512.One); + yield return () => (Quad.TwoOver512, UInt512.MaxValue); } public static IEnumerable> ConvertToCheckedSByteTestData() diff --git a/src/MissingValues.Tests/Extensions/QuadExtensions.cs b/src/MissingValues.Tests/Extensions/QuadExtensions.cs index e8ad497..a7d8c99 100644 --- a/src/MissingValues.Tests/Extensions/QuadExtensions.cs +++ b/src/MissingValues.Tests/Extensions/QuadExtensions.cs @@ -35,6 +35,9 @@ public static class QuadExtensions public static Quad UInt16MaxValue => Values.CreateFloat(0x400E_FFFE_0000_0000, 0x0000_0000_0000_0000); public static Quad UInt32MaxValue => Values.CreateFloat(0x401E_FFFF_FFFE_0000, 0x0000_0000_0000_0000); public static Quad UInt64MaxValue => Values.CreateFloat(0x403E_FFFF_FFFF_FFFF, 0xFFFE_0000_0000_0000); + public static Quad TwoOver128 => Values.CreateFloat(0x407F_0000_0000_0000, 0x0000_0000_0000_0000); + public static Quad TwoOver256 => Values.CreateFloat(0x40FF_0000_0000_0000, 0x0000_0000_0000_0000); + public static Quad TwoOver512 => Values.CreateFloat(0x41FF_0000_0000_0000, 0x0000_0000_0000_0000); public static Quad TwoOver127 => Values.CreateFloat(0x407E_0000_0000_0000, 0x0000_0000_0000_0000); public static Quad TwoOver255 => Values.CreateFloat(0x40FE_0000_0000_0000, 0x0000_0000_0000_0000); public static Quad TwoOver511 => Values.CreateFloat(0x41FE_0000_0000_0000, 0x0000_0000_0000_0000); From 328c8850a9bd2dd75576f21d64613be48280e6e5 Mon Sep 17 00:00:00 2001 From: crookseta Date: Wed, 22 Jul 2026 09:18:43 -0500 Subject: [PATCH 70/74] -Added Tests for Quad->(signed integer) conversions. --- .../Data/QuadDataSources.cs | 252 ++++++++++++++++-- 1 file changed, 231 insertions(+), 21 deletions(-) diff --git a/src/MissingValues.Tests/Data/QuadDataSources.cs b/src/MissingValues.Tests/Data/QuadDataSources.cs index 08f7f80..20192ae 100644 --- a/src/MissingValues.Tests/Data/QuadDataSources.cs +++ b/src/MissingValues.Tests/Data/QuadDataSources.cs @@ -1122,107 +1122,317 @@ public class QuadDataSources public static IEnumerable> ConvertToCheckedSByteTestData() { - throw new NotImplementedException(); + yield return () => (Quad.SByteMinValue, sbyte.MinValue); + yield return () => (Quad.NegativeOne, -1); + yield return () => (Quad.Half, 0); + yield return () => (Quad.One, 1); + yield return () => (Quad.SByteMaxValue, sbyte.MaxValue); } public static IEnumerable> ConvertToSaturatingSByteTestData() { - throw new NotImplementedException(); + yield return () => (Quad.MinValue, sbyte.MinValue); + yield return () => (Quad.SByteMinValue, sbyte.MinValue); + yield return () => (Quad.NegativeOne, -1); + yield return () => (Quad.Half, 0); + yield return () => (Quad.One, 1); + yield return () => (Quad.SByteMaxValue, sbyte.MaxValue); + yield return () => (Quad.MaxValue, sbyte.MaxValue); } public static IEnumerable> ConvertToTruncatingSByteTestData() { - throw new NotImplementedException(); + yield return () => (Quad.MinValue, sbyte.MinValue); + yield return () => (Quad.SByteMinValue, sbyte.MinValue); + yield return () => (Quad.NegativeOne, -1); + yield return () => (Quad.Half, 0); + yield return () => (Quad.One, 1); + yield return () => (Quad.SByteMaxValue, sbyte.MaxValue); + yield return () => (Quad.MaxValue, sbyte.MaxValue); } public static IEnumerable> ConvertToCheckedInt16TestData() { - throw new NotImplementedException(); + yield return () => (Quad.Int16MinValue, short.MinValue); + yield return () => (Quad.SByteMinValue, sbyte.MinValue); + yield return () => (Quad.NegativeOne, -1); + yield return () => (Quad.Half, 0); + yield return () => (Quad.One, 1); + yield return () => (Quad.SByteMaxValue, sbyte.MaxValue); + yield return () => (Quad.Int16MaxValue, short.MaxValue); } public static IEnumerable> ConvertToSaturatingInt16TestData() { - throw new NotImplementedException(); + yield return () => (Quad.MinValue, short.MinValue); + yield return () => (Quad.Int16MinValue, short.MinValue); + yield return () => (Quad.SByteMinValue, sbyte.MinValue); + yield return () => (Quad.NegativeOne, -1); + yield return () => (Quad.Half, 0); + yield return () => (Quad.One, 1); + yield return () => (Quad.SByteMaxValue, sbyte.MaxValue); + yield return () => (Quad.Int16MaxValue, short.MaxValue); + yield return () => (Quad.MaxValue, short.MaxValue); } public static IEnumerable> ConvertToTruncatingInt16TestData() { - throw new NotImplementedException(); + yield return () => (Quad.MinValue, short.MinValue); + yield return () => (Quad.Int16MinValue, short.MinValue); + yield return () => (Quad.SByteMinValue, sbyte.MinValue); + yield return () => (Quad.NegativeOne, -1); + yield return () => (Quad.Half, 0); + yield return () => (Quad.One, 1); + yield return () => (Quad.SByteMaxValue, sbyte.MaxValue); + yield return () => (Quad.Int16MaxValue, short.MaxValue); + yield return () => (Quad.MaxValue, short.MaxValue); } public static IEnumerable> ConvertToCheckedInt32TestData() { - throw new NotImplementedException(); + yield return () => (Quad.Int32MinValue, int.MinValue); + yield return () => (Quad.Int16MinValue, short.MinValue); + yield return () => (Quad.SByteMinValue, sbyte.MinValue); + yield return () => (Quad.NegativeOne, -1); + yield return () => (Quad.Half, 0); + yield return () => (Quad.One, 1); + yield return () => (Quad.SByteMaxValue, sbyte.MaxValue); + yield return () => (Quad.Int16MaxValue, short.MaxValue); + yield return () => (Quad.Int32MaxValue, int.MaxValue); } public static IEnumerable> ConvertToSaturatingInt32TestData() { - throw new NotImplementedException(); + yield return () => (Quad.MinValue, int.MinValue); + yield return () => (Quad.Int32MinValue, int.MinValue); + yield return () => (Quad.Int16MinValue, short.MinValue); + yield return () => (Quad.SByteMinValue, sbyte.MinValue); + yield return () => (Quad.NegativeOne, -1); + yield return () => (Quad.Half, 0); + yield return () => (Quad.One, 1); + yield return () => (Quad.SByteMaxValue, sbyte.MaxValue); + yield return () => (Quad.Int16MaxValue, short.MaxValue); + yield return () => (Quad.Int32MaxValue, int.MaxValue); + yield return () => (Quad.MaxValue, int.MaxValue); } public static IEnumerable> ConvertToTruncatingInt32TestData() { - throw new NotImplementedException(); + yield return () => (Quad.MinValue, int.MinValue); + yield return () => (Quad.Int32MinValue, int.MinValue); + yield return () => (Quad.Int16MinValue, short.MinValue); + yield return () => (Quad.SByteMinValue, sbyte.MinValue); + yield return () => (Quad.NegativeOne, -1); + yield return () => (Quad.Half, 0); + yield return () => (Quad.One, 1); + yield return () => (Quad.SByteMaxValue, sbyte.MaxValue); + yield return () => (Quad.Int16MaxValue, short.MaxValue); + yield return () => (Quad.Int32MaxValue, int.MaxValue); + yield return () => (Quad.MaxValue, int.MaxValue); } public static IEnumerable> ConvertToCheckedInt64TestData() { - throw new NotImplementedException(); + yield return () => (Quad.Int64MinValue, long.MinValue); + yield return () => (Quad.Int32MinValue, int.MinValue); + yield return () => (Quad.Int16MinValue, short.MinValue); + yield return () => (Quad.SByteMinValue, sbyte.MinValue); + yield return () => (Quad.NegativeOne, -1); + yield return () => (Quad.Half, 0); + yield return () => (Quad.One, 1); + yield return () => (Quad.SByteMaxValue, sbyte.MaxValue); + yield return () => (Quad.Int16MaxValue, short.MaxValue); + yield return () => (Quad.Int32MaxValue, int.MaxValue); + yield return () => (Quad.Int64MaxValue, long.MaxValue); } public static IEnumerable> ConvertToSaturatingInt64TestData() { - throw new NotImplementedException(); + yield return () => (Quad.MinValue, long.MinValue); + yield return () => (Quad.Int64MinValue, long.MinValue); + yield return () => (Quad.Int32MinValue, int.MinValue); + yield return () => (Quad.Int16MinValue, short.MinValue); + yield return () => (Quad.SByteMinValue, sbyte.MinValue); + yield return () => (Quad.NegativeOne, -1); + yield return () => (Quad.Half, 0); + yield return () => (Quad.One, 1); + yield return () => (Quad.SByteMaxValue, sbyte.MaxValue); + yield return () => (Quad.Int16MaxValue, short.MaxValue); + yield return () => (Quad.Int32MaxValue, int.MaxValue); + yield return () => (Quad.Int64MaxValue, long.MaxValue); + yield return () => (Quad.MaxValue, long.MaxValue); } public static IEnumerable> ConvertToTruncatingInt64TestData() { - throw new NotImplementedException(); + yield return () => (Quad.MinValue, long.MinValue); + yield return () => (Quad.Int64MinValue, long.MinValue); + yield return () => (Quad.Int32MinValue, int.MinValue); + yield return () => (Quad.Int16MinValue, short.MinValue); + yield return () => (Quad.SByteMinValue, sbyte.MinValue); + yield return () => (Quad.NegativeOne, -1); + yield return () => (Quad.Half, 0); + yield return () => (Quad.One, 1); + yield return () => (Quad.SByteMaxValue, sbyte.MaxValue); + yield return () => (Quad.Int16MaxValue, short.MaxValue); + yield return () => (Quad.Int32MaxValue, int.MaxValue); + yield return () => (Quad.Int64MaxValue, long.MaxValue); + yield return () => (Quad.MaxValue, long.MaxValue); } public static IEnumerable> ConvertToCheckedInt128TestData() { - throw new NotImplementedException(); + yield return () => (Quad.Int64MinValue, long.MinValue); + yield return () => (Quad.Int32MinValue, int.MinValue); + yield return () => (Quad.Int16MinValue, short.MinValue); + yield return () => (Quad.SByteMinValue, sbyte.MinValue); + yield return () => (Quad.NegativeOne, Int128.NegativeOne); + yield return () => (Quad.Half, Int128.Zero); + yield return () => (Quad.One, Int128.One); + yield return () => (Quad.SByteMaxValue, sbyte.MaxValue); + yield return () => (Quad.Int16MaxValue, short.MaxValue); + yield return () => (Quad.Int32MaxValue, int.MaxValue); + yield return () => (Quad.Int64MaxValue, long.MaxValue); } public static IEnumerable> ConvertToSaturatingInt128TestData() { - throw new NotImplementedException(); + yield return () => (Quad.MinValue, Int128.MinValue); + yield return () => (Quad.Int64MinValue, long.MinValue); + yield return () => (Quad.Int32MinValue, int.MinValue); + yield return () => (Quad.Int16MinValue, short.MinValue); + yield return () => (Quad.SByteMinValue, sbyte.MinValue); + yield return () => (Quad.NegativeOne, Int128.NegativeOne); + yield return () => (Quad.Half, Int128.Zero); + yield return () => (Quad.One, Int128.One); + yield return () => (Quad.SByteMaxValue, sbyte.MaxValue); + yield return () => (Quad.Int16MaxValue, short.MaxValue); + yield return () => (Quad.Int32MaxValue, int.MaxValue); + yield return () => (Quad.Int64MaxValue, long.MaxValue); + yield return () => (Quad.TwoOver127, Int128.MaxValue); + yield return () => (Quad.MaxValue, Int128.MaxValue); } public static IEnumerable> ConvertToTruncatingInt128TestData() { - throw new NotImplementedException(); + yield return () => (Quad.MinValue, Int128.MinValue); + yield return () => (Quad.Int64MinValue, long.MinValue); + yield return () => (Quad.Int32MinValue, int.MinValue); + yield return () => (Quad.Int16MinValue, short.MinValue); + yield return () => (Quad.SByteMinValue, sbyte.MinValue); + yield return () => (Quad.NegativeOne, Int128.NegativeOne); + yield return () => (Quad.Half, Int128.Zero); + yield return () => (Quad.One, Int128.One); + yield return () => (Quad.SByteMaxValue, sbyte.MaxValue); + yield return () => (Quad.Int16MaxValue, short.MaxValue); + yield return () => (Quad.Int32MaxValue, int.MaxValue); + yield return () => (Quad.Int64MaxValue, long.MaxValue); + yield return () => (Quad.TwoOver127, Int128.MaxValue); + yield return () => (Quad.MaxValue, Int128.MaxValue); } public static IEnumerable> ConvertToCheckedInt256TestData() { - throw new NotImplementedException(); + yield return () => (Quad.Int64MinValue, Int256.Int64MinValue); + yield return () => (Quad.Int32MinValue, Int256.Int32MinValue); + yield return () => (Quad.Int16MinValue, Int256.Int16MinValue); + yield return () => (Quad.SByteMinValue, Int256.SByteMinValue); + yield return () => (Quad.NegativeOne, Int256.NegativeOne); + yield return () => (Quad.Half, Int256.Zero); + yield return () => (Quad.One, Int256.One); + yield return () => (Quad.SByteMaxValue, Int256.SByteMaxValue); + yield return () => (Quad.Int16MaxValue, Int256.Int16MaxValue); + yield return () => (Quad.Int32MaxValue, Int256.Int32MaxValue); + yield return () => (Quad.Int64MaxValue, Int256.Int64MaxValue); } public static IEnumerable> ConvertToSaturatingInt256TestData() { - throw new NotImplementedException(); + yield return () => (Quad.MinValue, Int256.MinValue); + yield return () => (Quad.Int64MinValue, Int256.Int64MinValue); + yield return () => (Quad.Int32MinValue, Int256.Int32MinValue); + yield return () => (Quad.Int16MinValue, Int256.Int16MinValue); + yield return () => (Quad.SByteMinValue, Int256.SByteMinValue); + yield return () => (Quad.NegativeOne, Int256.NegativeOne); + yield return () => (Quad.Half, Int256.Zero); + yield return () => (Quad.One, Int256.One); + yield return () => (Quad.SByteMaxValue, Int256.SByteMaxValue); + yield return () => (Quad.Int16MaxValue, Int256.Int16MaxValue); + yield return () => (Quad.Int32MaxValue, Int256.Int32MaxValue); + yield return () => (Quad.Int64MaxValue, Int256.Int64MaxValue); + yield return () => (Quad.TwoOver127, Int256.Int128MaxValue + Int256.One); + yield return () => (Quad.MaxValue, Int256.MaxValue); } public static IEnumerable> ConvertToTruncatingInt256TestData() { - throw new NotImplementedException(); + yield return () => (Quad.MinValue, Int256.MinValue); + yield return () => (Quad.Int64MinValue, Int256.Int64MinValue); + yield return () => (Quad.Int32MinValue, Int256.Int32MinValue); + yield return () => (Quad.Int16MinValue, Int256.Int16MinValue); + yield return () => (Quad.SByteMinValue, Int256.SByteMinValue); + yield return () => (Quad.NegativeOne, Int256.NegativeOne); + yield return () => (Quad.Half, Int256.Zero); + yield return () => (Quad.One, Int256.One); + yield return () => (Quad.SByteMaxValue, Int256.SByteMaxValue); + yield return () => (Quad.Int16MaxValue, Int256.Int16MaxValue); + yield return () => (Quad.Int32MaxValue, Int256.Int32MaxValue); + yield return () => (Quad.Int64MaxValue, Int256.Int64MaxValue); + yield return () => (Quad.TwoOver127, Int256.Int128MaxValue + Int256.One); + yield return () => (Quad.MaxValue, Int256.MaxValue); } public static IEnumerable> ConvertToCheckedInt512TestData() { - throw new NotImplementedException(); + yield return () => (Quad.Int64MinValue, Int512.Int64MinValue); + yield return () => (Quad.Int32MinValue, Int512.Int32MinValue); + yield return () => (Quad.Int16MinValue, Int512.Int16MinValue); + yield return () => (Quad.SByteMinValue, Int512.SByteMinValue); + yield return () => (Quad.NegativeOne, Int512.NegativeOne); + yield return () => (Quad.Half, Int512.Zero); + yield return () => (Quad.One, Int512.One); + yield return () => (Quad.SByteMaxValue, Int512.SByteMaxValue); + yield return () => (Quad.Int16MaxValue, Int512.Int16MaxValue); + yield return () => (Quad.Int32MaxValue, Int512.Int32MaxValue); + yield return () => (Quad.Int64MaxValue, Int512.Int64MaxValue); } public static IEnumerable> ConvertToSaturatingInt512TestData() { - throw new NotImplementedException(); + yield return () => (Quad.MinValue, Int512.MinValue); + yield return () => (Quad.Int64MinValue, Int512.Int64MinValue); + yield return () => (Quad.Int32MinValue, Int512.Int32MinValue); + yield return () => (Quad.Int16MinValue, Int512.Int16MinValue); + yield return () => (Quad.SByteMinValue, Int512.SByteMinValue); + yield return () => (Quad.NegativeOne, Int512.NegativeOne); + yield return () => (Quad.Half, Int512.Zero); + yield return () => (Quad.One, Int512.One); + yield return () => (Quad.SByteMaxValue, Int512.SByteMaxValue); + yield return () => (Quad.Int16MaxValue, Int512.Int16MaxValue); + yield return () => (Quad.Int32MaxValue, Int512.Int32MaxValue); + yield return () => (Quad.Int64MaxValue, Int512.Int64MaxValue); + yield return () => (Quad.TwoOver127, Int512.Int128MaxValue + Int512.One); + yield return () => (Quad.TwoOver255, Int512.Int256MaxValue + Int512.One); + yield return () => (Quad.MaxValue, Int512.MaxValue); } public static IEnumerable> ConvertToTruncatingInt512TestData() { - throw new NotImplementedException(); + yield return () => (Quad.MinValue, Int512.MinValue); + yield return () => (Quad.Int64MinValue, Int512.Int64MinValue); + yield return () => (Quad.Int32MinValue, Int512.Int32MinValue); + yield return () => (Quad.Int16MinValue, Int512.Int16MinValue); + yield return () => (Quad.SByteMinValue, Int512.SByteMinValue); + yield return () => (Quad.NegativeOne, Int512.NegativeOne); + yield return () => (Quad.Half, Int512.Zero); + yield return () => (Quad.One, Int512.One); + yield return () => (Quad.SByteMaxValue, Int512.SByteMaxValue); + yield return () => (Quad.Int16MaxValue, Int512.Int16MaxValue); + yield return () => (Quad.Int32MaxValue, Int512.Int32MaxValue); + yield return () => (Quad.Int64MaxValue, Int512.Int64MaxValue); + yield return () => (Quad.TwoOver127, Int512.Int128MaxValue + Int512.One); + yield return () => (Quad.TwoOver255, Int512.Int256MaxValue + Int512.One); + yield return () => (Quad.MaxValue, Int512.MaxValue); } public static IEnumerable> ConvertToCheckedBigIntegerTestData() From 7c7aecef409a73ff3fe12d733e9a2a5cd8cc4277 Mon Sep 17 00:00:00 2001 From: crookseta Date: Thu, 23 Jul 2026 11:23:43 -0500 Subject: [PATCH 71/74] -Added Tests for remaining Quad conversions. --- .../Data/QuadDataSources.cs | 525 ++++++++++++++++-- .../Extensions/QuadExtensions.cs | 7 + 2 files changed, 475 insertions(+), 57 deletions(-) diff --git a/src/MissingValues.Tests/Data/QuadDataSources.cs b/src/MissingValues.Tests/Data/QuadDataSources.cs index 20192ae..152530f 100644 --- a/src/MissingValues.Tests/Data/QuadDataSources.cs +++ b/src/MissingValues.Tests/Data/QuadDataSources.cs @@ -1437,286 +1437,697 @@ public class QuadDataSources public static IEnumerable> ConvertToCheckedBigIntegerTestData() { - throw new NotImplementedException(); + yield return () => (Quad.DoubleMinValue, (BigInteger)double.MinValue); + yield return () => (Quad.SingleMinValue, (BigInteger)float.MinValue); + yield return () => (Quad.HalfMinValue, (BigInteger)Half.MinValue); + yield return () => (Quad.Int64MinValue, long.MinValue); + yield return () => (Quad.Int32MinValue, int.MinValue); + yield return () => (Quad.Int16MinValue, short.MinValue); + yield return () => (Quad.SByteMinValue, sbyte.MinValue); + yield return () => (Quad.NegativeOne, BigInteger.MinusOne); + yield return () => (Quad.Half, BigInteger.Zero); + yield return () => (Quad.One, BigInteger.One); + yield return () => (Quad.SByteMaxValue, sbyte.MaxValue); + yield return () => (Quad.Int16MaxValue, short.MaxValue); + yield return () => (Quad.Int32MaxValue, int.MaxValue); + yield return () => (Quad.Int64MaxValue, long.MaxValue); + yield return () => (Quad.HalfMaxValue, (BigInteger)Half.MaxValue); + yield return () => (Quad.SingleMaxValue, (BigInteger)float.MaxValue); + yield return () => (Quad.DoubleMaxValue, (BigInteger)double.MaxValue); } public static IEnumerable> ConvertToSaturatingBigIntegerTestData() { - throw new NotImplementedException(); + yield return () => (Quad.DoubleMinValue, (BigInteger)double.MinValue); + yield return () => (Quad.SingleMinValue, (BigInteger)float.MinValue); + yield return () => (Quad.HalfMinValue, (BigInteger)Half.MinValue); + yield return () => (Quad.Int64MinValue, long.MinValue); + yield return () => (Quad.Int32MinValue, int.MinValue); + yield return () => (Quad.Int16MinValue, short.MinValue); + yield return () => (Quad.SByteMinValue, sbyte.MinValue); + yield return () => (Quad.NegativeOne, BigInteger.MinusOne); + yield return () => (Quad.Half, BigInteger.Zero); + yield return () => (Quad.One, BigInteger.One); + yield return () => (Quad.SByteMaxValue, sbyte.MaxValue); + yield return () => (Quad.Int16MaxValue, short.MaxValue); + yield return () => (Quad.Int32MaxValue, int.MaxValue); + yield return () => (Quad.Int64MaxValue, long.MaxValue); + yield return () => (Quad.HalfMaxValue, (BigInteger)Half.MaxValue); + yield return () => (Quad.SingleMaxValue, (BigInteger)float.MaxValue); + yield return () => (Quad.DoubleMaxValue, (BigInteger)double.MaxValue); } public static IEnumerable> ConvertToTruncatingBigIntegerTestData() { - throw new NotImplementedException(); + yield return () => (Quad.DoubleMinValue, (BigInteger)double.MinValue); + yield return () => (Quad.SingleMinValue, (BigInteger)float.MinValue); + yield return () => (Quad.HalfMinValue, (BigInteger)Half.MinValue); + yield return () => (Quad.Int64MinValue, long.MinValue); + yield return () => (Quad.Int32MinValue, int.MinValue); + yield return () => (Quad.Int16MinValue, short.MinValue); + yield return () => (Quad.SByteMinValue, sbyte.MinValue); + yield return () => (Quad.NegativeOne, BigInteger.MinusOne); + yield return () => (Quad.Half, BigInteger.Zero); + yield return () => (Quad.One, BigInteger.One); + yield return () => (Quad.SByteMaxValue, sbyte.MaxValue); + yield return () => (Quad.Int16MaxValue, short.MaxValue); + yield return () => (Quad.Int32MaxValue, int.MaxValue); + yield return () => (Quad.Int64MaxValue, long.MaxValue); + yield return () => (Quad.HalfMaxValue, (BigInteger)Half.MaxValue); + yield return () => (Quad.SingleMaxValue, (BigInteger)float.MaxValue); + yield return () => (Quad.DoubleMaxValue, (BigInteger)double.MaxValue); } public static IEnumerable> ConvertToCheckedHalfTestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeInfinity, Half.NegativeInfinity); + yield return () => (Quad.HalfMinValue, Half.MinValue); + yield return () => (Quad.NegativeOne, Half.NegativeOne); + yield return () => (Quad.Half, (Half)0.5f); + yield return () => (Quad.One, Half.One); + yield return () => (Quad.HalfMaxValue, Half.MaxValue); + yield return () => (Quad.PositiveInfinity, Half.PositiveInfinity); } public static IEnumerable> ConvertToSaturatingHalfTestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeInfinity, Half.NegativeInfinity); + yield return () => (Quad.HalfMinValue, Half.MinValue); + yield return () => (Quad.NegativeOne, Half.NegativeOne); + yield return () => (Quad.Half, (Half)0.5f); + yield return () => (Quad.One, Half.One); + yield return () => (Quad.HalfMaxValue, Half.MaxValue); + yield return () => (Quad.PositiveInfinity, Half.PositiveInfinity); } public static IEnumerable> ConvertToTruncatingHalfTestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeInfinity, Half.NegativeInfinity); + yield return () => (Quad.HalfMinValue, Half.MinValue); + yield return () => (Quad.NegativeOne, Half.NegativeOne); + yield return () => (Quad.Half, (Half)0.5f); + yield return () => (Quad.One, Half.One); + yield return () => (Quad.HalfMaxValue, Half.MaxValue); + yield return () => (Quad.PositiveInfinity, Half.PositiveInfinity); } public static IEnumerable> ConvertToCheckedSingleTestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeInfinity, float.NegativeInfinity); + yield return () => (Quad.SingleMinValue, float.MinValue); + yield return () => (Quad.NegativeOne, -1f); + yield return () => (Quad.Half, 0.5f); + yield return () => (Quad.One, 1f); + yield return () => (Quad.SingleMaxValue, float.MaxValue); + yield return () => (Quad.PositiveInfinity, float.PositiveInfinity); } public static IEnumerable> ConvertToSaturatingSingleTestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeInfinity, float.NegativeInfinity); + yield return () => (Quad.SingleMinValue, float.MinValue); + yield return () => (Quad.NegativeOne, -1f); + yield return () => (Quad.Half, 0.5f); + yield return () => (Quad.One, 1f); + yield return () => (Quad.SingleMaxValue, float.MaxValue); + yield return () => (Quad.PositiveInfinity, float.PositiveInfinity); } public static IEnumerable> ConvertToTruncatingSingleTestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeInfinity, float.NegativeInfinity); + yield return () => (Quad.SingleMinValue, float.MinValue); + yield return () => (Quad.NegativeOne, -1f); + yield return () => (Quad.Half, 0.5f); + yield return () => (Quad.One, 1f); + yield return () => (Quad.SingleMaxValue, float.MaxValue); + yield return () => (Quad.PositiveInfinity, float.PositiveInfinity); } public static IEnumerable> ConvertToCheckedDoubleTestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeInfinity, double.NegativeInfinity); + yield return () => (Quad.DoubleMinValue, double.MinValue); + yield return () => (Quad.NegativeOne, -1d); + yield return () => (Quad.Half, 0.5d); + yield return () => (Quad.One, 1d); + yield return () => (Quad.DoubleMaxValue, double.MaxValue); + yield return () => (Quad.PositiveInfinity, double.PositiveInfinity); } public static IEnumerable> ConvertToSaturatingDoubleTestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeInfinity, double.NegativeInfinity); + yield return () => (Quad.DoubleMinValue, double.MinValue); + yield return () => (Quad.NegativeOne, -1d); + yield return () => (Quad.Half, 0.5d); + yield return () => (Quad.One, 1d); + yield return () => (Quad.DoubleMaxValue, double.MaxValue); + yield return () => (Quad.PositiveInfinity, double.PositiveInfinity); } public static IEnumerable> ConvertToTruncatingDoubleTestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeInfinity, double.NegativeInfinity); + yield return () => (Quad.DoubleMinValue, double.MinValue); + yield return () => (Quad.NegativeOne, -1d); + yield return () => (Quad.Half, 0.5d); + yield return () => (Quad.One, 1d); + yield return () => (Quad.DoubleMaxValue, double.MaxValue); + yield return () => (Quad.PositiveInfinity, double.PositiveInfinity); } public static IEnumerable> ConvertToCheckedOctoTestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeInfinity, Octo.NegativeInfinity); + yield return () => (Quad.NegativeOne, Octo.NegativeOne); + yield return () => (Quad.Half, Octo.Half); + yield return () => (Quad.One, Octo.One); + yield return () => (Quad.PositiveInfinity, Octo.PositiveInfinity); } public static IEnumerable> ConvertToSaturatingOctoTestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeInfinity, Octo.NegativeInfinity); + yield return () => (Quad.NegativeOne, Octo.NegativeOne); + yield return () => (Quad.Half, Octo.Half); + yield return () => (Quad.One, Octo.One); + yield return () => (Quad.PositiveInfinity, Octo.PositiveInfinity); } public static IEnumerable> ConvertToTruncatingOctoTestData() { - throw new NotImplementedException(); + yield return () => (Quad.NegativeInfinity, Octo.NegativeInfinity); + yield return () => (Quad.NegativeOne, Octo.NegativeOne); + yield return () => (Quad.Half, Octo.Half); + yield return () => (Quad.One, Octo.One); + yield return () => (Quad.PositiveInfinity, Octo.PositiveInfinity); } public static IEnumerable> ConvertFromCheckedByteTestData() { - throw new NotImplementedException(); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (byte.MaxValue, Quad.ByteMaxValue); } public static IEnumerable> ConvertFromSaturatingByteTestData() { - throw new NotImplementedException(); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (byte.MaxValue, Quad.ByteMaxValue); } public static IEnumerable> ConvertFromTruncatingByteTestData() { - throw new NotImplementedException(); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (byte.MaxValue, Quad.ByteMaxValue); } public static IEnumerable> ConvertFromCheckedUInt16TestData() { - throw new NotImplementedException(); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (byte.MaxValue, Quad.ByteMaxValue); + yield return () => (ushort.MaxValue, Quad.UInt16MaxValue); } public static IEnumerable> ConvertFromSaturatingUInt16TestData() { - throw new NotImplementedException(); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (byte.MaxValue, Quad.ByteMaxValue); + yield return () => (ushort.MaxValue, Quad.UInt16MaxValue); } public static IEnumerable> ConvertFromTruncatingUInt16TestData() { - throw new NotImplementedException(); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (byte.MaxValue, Quad.ByteMaxValue); + yield return () => (ushort.MaxValue, Quad.UInt16MaxValue); } public static IEnumerable> ConvertFromCheckedUInt32TestData() { - throw new NotImplementedException(); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (byte.MaxValue, Quad.ByteMaxValue); + yield return () => (ushort.MaxValue, Quad.UInt16MaxValue); + yield return () => (uint.MaxValue, Quad.UInt32MaxValue); } public static IEnumerable> ConvertFromSaturatingUInt32TestData() { - throw new NotImplementedException(); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (byte.MaxValue, Quad.ByteMaxValue); + yield return () => (ushort.MaxValue, Quad.UInt16MaxValue); + yield return () => (uint.MaxValue, Quad.UInt32MaxValue); } public static IEnumerable> ConvertFromTruncatingUInt32TestData() { - throw new NotImplementedException(); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (byte.MaxValue, Quad.ByteMaxValue); + yield return () => (ushort.MaxValue, Quad.UInt16MaxValue); + yield return () => (uint.MaxValue, Quad.UInt32MaxValue); } public static IEnumerable> ConvertFromCheckedUInt64TestData() { - throw new NotImplementedException(); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (byte.MaxValue, Quad.ByteMaxValue); + yield return () => (ushort.MaxValue, Quad.UInt16MaxValue); + yield return () => (uint.MaxValue, Quad.UInt32MaxValue); + yield return () => (ulong.MaxValue, Quad.UInt64MaxValue); } public static IEnumerable> ConvertFromSaturatingUInt64TestData() { - throw new NotImplementedException(); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (byte.MaxValue, Quad.ByteMaxValue); + yield return () => (ushort.MaxValue, Quad.UInt16MaxValue); + yield return () => (uint.MaxValue, Quad.UInt32MaxValue); + yield return () => (ulong.MaxValue, Quad.UInt64MaxValue); } public static IEnumerable> ConvertFromTruncatingUInt64TestData() { - throw new NotImplementedException(); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (byte.MaxValue, Quad.ByteMaxValue); + yield return () => (ushort.MaxValue, Quad.UInt16MaxValue); + yield return () => (uint.MaxValue, Quad.UInt32MaxValue); + yield return () => (ulong.MaxValue, Quad.UInt64MaxValue); } public static IEnumerable> ConvertFromCheckedUInt128TestData() { - throw new NotImplementedException(); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (byte.MaxValue, Quad.ByteMaxValue); + yield return () => (ushort.MaxValue, Quad.UInt16MaxValue); + yield return () => (uint.MaxValue, Quad.UInt32MaxValue); + yield return () => (ulong.MaxValue, Quad.UInt64MaxValue); + yield return () => (UInt128.MaxValue, Quad.TwoOver128); } public static IEnumerable> ConvertFromSaturatingUInt128TestData() { - throw new NotImplementedException(); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (byte.MaxValue, Quad.ByteMaxValue); + yield return () => (ushort.MaxValue, Quad.UInt16MaxValue); + yield return () => (uint.MaxValue, Quad.UInt32MaxValue); + yield return () => (ulong.MaxValue, Quad.UInt64MaxValue); + yield return () => (UInt128.MaxValue, Quad.TwoOver128); } public static IEnumerable> ConvertFromTruncatingUInt128TestData() { - throw new NotImplementedException(); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (byte.MaxValue, Quad.ByteMaxValue); + yield return () => (ushort.MaxValue, Quad.UInt16MaxValue); + yield return () => (uint.MaxValue, Quad.UInt32MaxValue); + yield return () => (ulong.MaxValue, Quad.UInt64MaxValue); + yield return () => (UInt128.MaxValue, Quad.TwoOver128); } public static IEnumerable> ConvertFromCheckedSByteTestData() { - throw new NotImplementedException(); + yield return () => (sbyte.MinValue, Quad.SByteMinValue); + yield return () => (-1, Quad.NegativeOne); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (sbyte.MaxValue, Quad.SByteMaxValue); } public static IEnumerable> ConvertFromSaturatingSByteTestData() { - throw new NotImplementedException(); + yield return () => (sbyte.MinValue, Quad.SByteMinValue); + yield return () => (-1, Quad.NegativeOne); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (sbyte.MaxValue, Quad.SByteMaxValue); } public static IEnumerable> ConvertFromTruncatingSByteTestData() { - throw new NotImplementedException(); + yield return () => (sbyte.MinValue, Quad.SByteMinValue); + yield return () => (-1, Quad.NegativeOne); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (sbyte.MaxValue, Quad.SByteMaxValue); } public static IEnumerable> ConvertFromCheckedInt16TestData() { - throw new NotImplementedException(); + yield return () => (short.MinValue, Quad.Int16MinValue); + yield return () => (sbyte.MinValue, Quad.SByteMinValue); + yield return () => (-1, Quad.NegativeOne); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (sbyte.MaxValue, Quad.SByteMaxValue); + yield return () => (short.MaxValue, Quad.Int16MaxValue); } public static IEnumerable> ConvertFromSaturatingInt16TestData() { - throw new NotImplementedException(); + yield return () => (short.MinValue, Quad.Int16MinValue); + yield return () => (sbyte.MinValue, Quad.SByteMinValue); + yield return () => (-1, Quad.NegativeOne); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (sbyte.MaxValue, Quad.SByteMaxValue); + yield return () => (short.MaxValue, Quad.Int16MaxValue); } public static IEnumerable> ConvertFromTruncatingInt16TestData() { - throw new NotImplementedException(); + yield return () => (short.MinValue, Quad.Int16MinValue); + yield return () => (sbyte.MinValue, Quad.SByteMinValue); + yield return () => (-1, Quad.NegativeOne); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (sbyte.MaxValue, Quad.SByteMaxValue); + yield return () => (short.MaxValue, Quad.Int16MaxValue); } public static IEnumerable> ConvertFromCheckedInt32TestData() { - throw new NotImplementedException(); + yield return () => (int.MinValue, Quad.Int32MinValue); + yield return () => (short.MinValue, Quad.Int16MinValue); + yield return () => (sbyte.MinValue, Quad.SByteMinValue); + yield return () => (-1, Quad.NegativeOne); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (sbyte.MaxValue, Quad.SByteMaxValue); + yield return () => (short.MaxValue, Quad.Int16MaxValue); + yield return () => (int.MaxValue, Quad.Int32MaxValue); } public static IEnumerable> ConvertFromSaturatingInt32TestData() { - throw new NotImplementedException(); + yield return () => (int.MinValue, Quad.Int32MinValue); + yield return () => (short.MinValue, Quad.Int16MinValue); + yield return () => (sbyte.MinValue, Quad.SByteMinValue); + yield return () => (-1, Quad.NegativeOne); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (sbyte.MaxValue, Quad.SByteMaxValue); + yield return () => (short.MaxValue, Quad.Int16MaxValue); + yield return () => (int.MaxValue, Quad.Int32MaxValue); } public static IEnumerable> ConvertFromTruncatingInt32TestData() { - throw new NotImplementedException(); + yield return () => (int.MinValue, Quad.Int32MinValue); + yield return () => (short.MinValue, Quad.Int16MinValue); + yield return () => (sbyte.MinValue, Quad.SByteMinValue); + yield return () => (-1, Quad.NegativeOne); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (sbyte.MaxValue, Quad.SByteMaxValue); + yield return () => (short.MaxValue, Quad.Int16MaxValue); + yield return () => (int.MaxValue, Quad.Int32MaxValue); } public static IEnumerable> ConvertFromCheckedInt64TestData() { - throw new NotImplementedException(); + yield return () => (long.MinValue, Quad.Int64MinValue); + yield return () => (int.MinValue, Quad.Int32MinValue); + yield return () => (short.MinValue, Quad.Int16MinValue); + yield return () => (sbyte.MinValue, Quad.SByteMinValue); + yield return () => (-1, Quad.NegativeOne); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (sbyte.MaxValue, Quad.SByteMaxValue); + yield return () => (short.MaxValue, Quad.Int16MaxValue); + yield return () => (int.MaxValue, Quad.Int32MaxValue); + yield return () => (long.MaxValue, Quad.Int64MaxValue); } public static IEnumerable> ConvertFromSaturatingInt64TestData() { - throw new NotImplementedException(); + yield return () => (long.MinValue, Quad.Int64MinValue); + yield return () => (int.MinValue, Quad.Int32MinValue); + yield return () => (short.MinValue, Quad.Int16MinValue); + yield return () => (sbyte.MinValue, Quad.SByteMinValue); + yield return () => (-1, Quad.NegativeOne); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (sbyte.MaxValue, Quad.SByteMaxValue); + yield return () => (short.MaxValue, Quad.Int16MaxValue); + yield return () => (int.MaxValue, Quad.Int32MaxValue); + yield return () => (long.MaxValue, Quad.Int64MaxValue); } public static IEnumerable> ConvertFromTruncatingInt64TestData() { - throw new NotImplementedException(); + yield return () => (long.MinValue, Quad.Int64MinValue); + yield return () => (int.MinValue, Quad.Int32MinValue); + yield return () => (short.MinValue, Quad.Int16MinValue); + yield return () => (sbyte.MinValue, Quad.SByteMinValue); + yield return () => (-1, Quad.NegativeOne); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (sbyte.MaxValue, Quad.SByteMaxValue); + yield return () => (short.MaxValue, Quad.Int16MaxValue); + yield return () => (int.MaxValue, Quad.Int32MaxValue); + yield return () => (long.MaxValue, Quad.Int64MaxValue); } public static IEnumerable> ConvertFromCheckedInt128TestData() { - throw new NotImplementedException(); + yield return () => (long.MinValue, Quad.Int64MinValue); + yield return () => (int.MinValue, Quad.Int32MinValue); + yield return () => (short.MinValue, Quad.Int16MinValue); + yield return () => (sbyte.MinValue, Quad.SByteMinValue); + yield return () => (-1, Quad.NegativeOne); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (sbyte.MaxValue, Quad.SByteMaxValue); + yield return () => (short.MaxValue, Quad.Int16MaxValue); + yield return () => (int.MaxValue, Quad.Int32MaxValue); + yield return () => (long.MaxValue, Quad.Int64MaxValue); + yield return () => (Int128.MaxValue, Quad.TwoOver127); } public static IEnumerable> ConvertFromSaturatingInt128TestData() { - throw new NotImplementedException(); + yield return () => (long.MinValue, Quad.Int64MinValue); + yield return () => (int.MinValue, Quad.Int32MinValue); + yield return () => (short.MinValue, Quad.Int16MinValue); + yield return () => (sbyte.MinValue, Quad.SByteMinValue); + yield return () => (-1, Quad.NegativeOne); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (sbyte.MaxValue, Quad.SByteMaxValue); + yield return () => (short.MaxValue, Quad.Int16MaxValue); + yield return () => (int.MaxValue, Quad.Int32MaxValue); + yield return () => (long.MaxValue, Quad.Int64MaxValue); + yield return () => (Int128.MaxValue, Quad.TwoOver127); } public static IEnumerable> ConvertFromTruncatingInt128TestData() { - throw new NotImplementedException(); + yield return () => (long.MinValue, Quad.Int64MinValue); + yield return () => (int.MinValue, Quad.Int32MinValue); + yield return () => (short.MinValue, Quad.Int16MinValue); + yield return () => (sbyte.MinValue, Quad.SByteMinValue); + yield return () => (-1, Quad.NegativeOne); + yield return () => (0, Quad.Zero); + yield return () => (1, Quad.One); + yield return () => (sbyte.MaxValue, Quad.SByteMaxValue); + yield return () => (short.MaxValue, Quad.Int16MaxValue); + yield return () => (int.MaxValue, Quad.Int32MaxValue); + yield return () => (long.MaxValue, Quad.Int64MaxValue); + yield return () => (Int128.MaxValue, Quad.TwoOver127); } public static IEnumerable> ConvertFromCheckedBigIntegerTestData() { - throw new NotImplementedException(); + yield return () => ((BigInteger)double.MinValue, Quad.DoubleMinValue); + yield return () => ((BigInteger)float.MinValue, Quad.SingleMinValue); + yield return () => ((BigInteger)Half.MinValue, Quad.HalfMinValue); + yield return () => (long.MinValue, Quad.Int64MinValue); + yield return () => (int.MinValue, Quad.Int32MinValue); + yield return () => (short.MinValue, Quad.Int16MinValue); + yield return () => (sbyte.MinValue, Quad.SByteMinValue); + yield return () => (BigInteger.MinusOne, Quad.NegativeOne); + yield return () => (BigInteger.Zero, Quad.Zero); + yield return () => (BigInteger.One, Quad.One); + yield return () => (sbyte.MaxValue, Quad.SByteMaxValue); + yield return () => (short.MaxValue, Quad.Int16MaxValue); + yield return () => (int.MaxValue, Quad.Int32MaxValue); + yield return () => (long.MaxValue, Quad.Int64MaxValue); + yield return () => ((BigInteger)Half.MaxValue, Quad.HalfMaxValue); + yield return () => ((BigInteger)float.MaxValue, Quad.SingleMaxValue); + yield return () => ((BigInteger)double.MaxValue, Quad.DoubleMaxValue); } public static IEnumerable> ConvertFromSaturatingBigIntegerTestData() { - throw new NotImplementedException(); + yield return () => ((BigInteger)double.MinValue, Quad.DoubleMinValue); + yield return () => ((BigInteger)float.MinValue, Quad.SingleMinValue); + yield return () => ((BigInteger)Half.MinValue, Quad.HalfMinValue); + yield return () => (long.MinValue, Quad.Int64MinValue); + yield return () => (int.MinValue, Quad.Int32MinValue); + yield return () => (short.MinValue, Quad.Int16MinValue); + yield return () => (sbyte.MinValue, Quad.SByteMinValue); + yield return () => (BigInteger.MinusOne, Quad.NegativeOne); + yield return () => (BigInteger.Zero, Quad.Zero); + yield return () => (BigInteger.One, Quad.One); + yield return () => (sbyte.MaxValue, Quad.SByteMaxValue); + yield return () => (short.MaxValue, Quad.Int16MaxValue); + yield return () => (int.MaxValue, Quad.Int32MaxValue); + yield return () => (long.MaxValue, Quad.Int64MaxValue); + yield return () => ((BigInteger)Half.MaxValue, Quad.HalfMaxValue); + yield return () => ((BigInteger)float.MaxValue, Quad.SingleMaxValue); + yield return () => ((BigInteger)double.MaxValue, Quad.DoubleMaxValue); } public static IEnumerable> ConvertFromTruncatingBigIntegerTestData() { - throw new NotImplementedException(); + yield return () => ((BigInteger)double.MinValue, Quad.DoubleMinValue); + yield return () => ((BigInteger)float.MinValue, Quad.SingleMinValue); + yield return () => ((BigInteger)Half.MinValue, Quad.HalfMinValue); + yield return () => (long.MinValue, Quad.Int64MinValue); + yield return () => (int.MinValue, Quad.Int32MinValue); + yield return () => (short.MinValue, Quad.Int16MinValue); + yield return () => (sbyte.MinValue, Quad.SByteMinValue); + yield return () => (BigInteger.MinusOne, Quad.NegativeOne); + yield return () => (BigInteger.Zero, Quad.Zero); + yield return () => (BigInteger.One, Quad.One); + yield return () => (sbyte.MaxValue, Quad.SByteMaxValue); + yield return () => (short.MaxValue, Quad.Int16MaxValue); + yield return () => (int.MaxValue, Quad.Int32MaxValue); + yield return () => (long.MaxValue, Quad.Int64MaxValue); + yield return () => ((BigInteger)Half.MaxValue, Quad.HalfMaxValue); + yield return () => ((BigInteger)float.MaxValue, Quad.SingleMaxValue); + yield return () => ((BigInteger)double.MaxValue, Quad.DoubleMaxValue); } public static IEnumerable> ConvertFromCheckedHalfTestData() { - throw new NotImplementedException(); + yield return () => (Half.NegativeInfinity, Quad.NegativeInfinity); + yield return () => (Half.MinValue, Quad.HalfMinValue); + yield return () => (Half.NegativeOne, Quad.NegativeOne); + yield return () => (-(Half)0.5f, Quad.NegativeHalf); + yield return () => (Half.Zero, Quad.Zero); + yield return () => ((Half)0.5f, Quad.Half); + yield return () => (Half.One, Quad.One); + yield return () => (Half.MaxValue, Quad.HalfMaxValue); + yield return () => (Half.PositiveInfinity, Quad.PositiveInfinity); } public static IEnumerable> ConvertFromSaturatingHalfTestData() { - throw new NotImplementedException(); + yield return () => (Half.NegativeInfinity, Quad.NegativeInfinity); + yield return () => (Half.MinValue, Quad.HalfMinValue); + yield return () => (Half.NegativeOne, Quad.NegativeOne); + yield return () => (-(Half)0.5f, Quad.NegativeHalf); + yield return () => (Half.Zero, Quad.Zero); + yield return () => ((Half)0.5f, Quad.Half); + yield return () => (Half.One, Quad.One); + yield return () => (Half.MaxValue, Quad.HalfMaxValue); + yield return () => (Half.PositiveInfinity, Quad.PositiveInfinity); } public static IEnumerable> ConvertFromTruncatingHalfTestData() { - throw new NotImplementedException(); + yield return () => (Half.NegativeInfinity, Quad.NegativeInfinity); + yield return () => (Half.MinValue, Quad.HalfMinValue); + yield return () => (Half.NegativeOne, Quad.NegativeOne); + yield return () => (-(Half)0.5f, Quad.NegativeHalf); + yield return () => (Half.Zero, Quad.Zero); + yield return () => ((Half)0.5f, Quad.Half); + yield return () => (Half.One, Quad.One); + yield return () => (Half.MaxValue, Quad.HalfMaxValue); + yield return () => (Half.PositiveInfinity, Quad.PositiveInfinity); } public static IEnumerable> ConvertFromCheckedSingleTestData() { - throw new NotImplementedException(); + yield return () => (float.NegativeInfinity, Quad.NegativeInfinity); + yield return () => (float.MinValue, Quad.SingleMinValue); + yield return () => (-1f, Quad.NegativeOne); + yield return () => (-0.5f, Quad.NegativeHalf); + yield return () => (0f, Quad.Zero); + yield return () => (0.5f, Quad.Half); + yield return () => (1f, Quad.One); + yield return () => (float.MaxValue, Quad.SingleMaxValue); + yield return () => (float.PositiveInfinity, Quad.PositiveInfinity); } public static IEnumerable> ConvertFromSaturatingSingleTestData() { - throw new NotImplementedException(); + yield return () => (float.NegativeInfinity, Quad.NegativeInfinity); + yield return () => (float.MinValue, Quad.SingleMinValue); + yield return () => (-1f, Quad.NegativeOne); + yield return () => (-0.5f, Quad.NegativeHalf); + yield return () => (0f, Quad.Zero); + yield return () => (0.5f, Quad.Half); + yield return () => (1f, Quad.One); + yield return () => (float.MaxValue, Quad.SingleMaxValue); + yield return () => (float.PositiveInfinity, Quad.PositiveInfinity); } public static IEnumerable> ConvertFromTruncatingSingleTestData() { - throw new NotImplementedException(); + yield return () => (float.NegativeInfinity, Quad.NegativeInfinity); + yield return () => (float.MinValue, Quad.SingleMinValue); + yield return () => (-1f, Quad.NegativeOne); + yield return () => (-0.5f, Quad.NegativeHalf); + yield return () => (0f, Quad.Zero); + yield return () => (0.5f, Quad.Half); + yield return () => (1f, Quad.One); + yield return () => (float.MaxValue, Quad.SingleMaxValue); + yield return () => (float.PositiveInfinity, Quad.PositiveInfinity); } public static IEnumerable> ConvertFromCheckedDoubleTestData() { - throw new NotImplementedException(); + yield return () => (double.NegativeInfinity, Quad.NegativeInfinity); + yield return () => (double.MinValue, Quad.DoubleMinValue); + yield return () => (-1d, Quad.NegativeOne); + yield return () => (-0.5d, Quad.NegativeHalf); + yield return () => (0d, Quad.Zero); + yield return () => (0.5d, Quad.Half); + yield return () => (1d, Quad.One); + yield return () => (double.MaxValue, Quad.DoubleMaxValue); + yield return () => (double.PositiveInfinity, Quad.PositiveInfinity); } public static IEnumerable> ConvertFromSaturatingDoubleTestData() { - throw new NotImplementedException(); + yield return () => (double.NegativeInfinity, Quad.NegativeInfinity); + yield return () => (double.MinValue, Quad.DoubleMinValue); + yield return () => (-1d, Quad.NegativeOne); + yield return () => (-0.5d, Quad.NegativeHalf); + yield return () => (0d, Quad.Zero); + yield return () => (0.5d, Quad.Half); + yield return () => (1d, Quad.One); + yield return () => (double.MaxValue, Quad.DoubleMaxValue); + yield return () => (double.PositiveInfinity, Quad.PositiveInfinity); } public static IEnumerable> ConvertFromTruncatingDoubleTestData() { - throw new NotImplementedException(); + yield return () => (double.NegativeInfinity, Quad.NegativeInfinity); + yield return () => (double.MinValue, Quad.DoubleMinValue); + yield return () => (-1d, Quad.NegativeOne); + yield return () => (-0.5d, Quad.NegativeHalf); + yield return () => (0d, Quad.Zero); + yield return () => (0.5d, Quad.Half); + yield return () => (1d, Quad.One); + yield return () => (double.MaxValue, Quad.DoubleMaxValue); + yield return () => (double.PositiveInfinity, Quad.PositiveInfinity); } } \ No newline at end of file diff --git a/src/MissingValues.Tests/Extensions/QuadExtensions.cs b/src/MissingValues.Tests/Extensions/QuadExtensions.cs index a7d8c99..d54a029 100644 --- a/src/MissingValues.Tests/Extensions/QuadExtensions.cs +++ b/src/MissingValues.Tests/Extensions/QuadExtensions.cs @@ -51,6 +51,13 @@ public static class QuadExtensions public static Quad Int64MaxValue => Values.CreateFloat(0x403D_FFFF_FFFF_FFFF, 0xFFFC_0000_0000_0000); public static Quad Int64MinValue => Values.CreateFloat(0xC03E_0000_0000_0000, 0x0000_0000_0000_0000); + public static Quad HalfMaxValue => Values.CreateFloat(0x400E_FFC0_0000_0000, 0x0000_0000_0000_0000); + public static Quad HalfMinValue => Values.CreateFloat(0xC00E_FFC0_0000_0000, 0x0000_0000_0000_0000); + public static Quad SingleMaxValue => Values.CreateFloat(0x407E_FFFF_FE00_0000, 0x0000_0000_0000_0000); + public static Quad SingleMinValue => Values.CreateFloat(0xC07E_FFFF_FE00_0000, 0x0000_0000_0000_0000); + public static Quad DoubleMaxValue => Values.CreateFloat(0x43FE_FFFF_FFFF_FFFF, 0xF000_0000_0000_0000); + public static Quad DoubleMinValue => Values.CreateFloat(0xC3FE_FFFF_FFFF_FFFF, 0xF000_0000_0000_0000); + public static Quad Delta => Values.CreateFloat(0x406F_0000_0000_0000, 0x0000_0000_0000_0000); } } \ No newline at end of file From b79867bb13a3631f699aa7615d99d6635e7619ba Mon Sep 17 00:00:00 2001 From: crookseta Date: Thu, 23 Jul 2026 21:18:53 -0500 Subject: [PATCH 72/74] -Use dedicated properties for certain values. --- .../Data/UInt256DataSources.cs | 18 +++++++++--------- .../Data/UInt512DataSources.cs | 18 +++++++++--------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/MissingValues.Tests/Data/UInt256DataSources.cs b/src/MissingValues.Tests/Data/UInt256DataSources.cs index 46482e7..d4f487c 100644 --- a/src/MissingValues.Tests/Data/UInt256DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt256DataSources.cs @@ -1246,7 +1246,7 @@ public class UInt256DataSources public static IEnumerable> ConvertToCheckedBigIntegerTestData() { - yield return () => (UInt256.One, UInt128.One); + yield return () => (UInt256.One, BigInteger.One); yield return () => (UInt256.ByteMaxValue, byte.MaxValue); yield return () => (UInt256.UInt16MaxValue, ushort.MaxValue); yield return () => (UInt256.UInt32MaxValue, uint.MaxValue); @@ -1257,7 +1257,7 @@ public class UInt256DataSources public static IEnumerable> ConvertToSaturatingBigIntegerTestData() { - yield return () => (UInt256.One, UInt128.One); + yield return () => (UInt256.One, BigInteger.One); yield return () => (UInt256.ByteMaxValue, byte.MaxValue); yield return () => (UInt256.UInt16MaxValue, ushort.MaxValue); yield return () => (UInt256.UInt32MaxValue, uint.MaxValue); @@ -1268,7 +1268,7 @@ public class UInt256DataSources public static IEnumerable> ConvertToTruncatingBigIntegerTestData() { - yield return () => (UInt256.One, UInt128.One); + yield return () => (UInt256.One, BigInteger.One); yield return () => (UInt256.ByteMaxValue, byte.MaxValue); yield return () => (UInt256.UInt16MaxValue, ushort.MaxValue); yield return () => (UInt256.UInt32MaxValue, uint.MaxValue); @@ -1580,7 +1580,7 @@ public class UInt256DataSources public static IEnumerable> ConvertFromCheckedUInt128TestData() { - yield return () => (1, UInt256.One); + yield return () => (UInt128.One, UInt256.One); yield return () => (byte.MaxValue, UInt256.ByteMaxValue); yield return () => (ushort.MaxValue, UInt256.UInt16MaxValue); yield return () => (uint.MaxValue, UInt256.UInt32MaxValue); @@ -1590,7 +1590,7 @@ public class UInt256DataSources public static IEnumerable> ConvertFromSaturatingUInt128TestData() { - yield return () => (1, UInt256.One); + yield return () => (UInt128.One, UInt256.One); yield return () => (byte.MaxValue, UInt256.ByteMaxValue); yield return () => (ushort.MaxValue, UInt256.UInt16MaxValue); yield return () => (uint.MaxValue, UInt256.UInt32MaxValue); @@ -1600,7 +1600,7 @@ public class UInt256DataSources public static IEnumerable> ConvertFromTruncatingUInt128TestData() { - yield return () => (1, UInt256.One); + yield return () => (UInt128.One, UInt256.One); yield return () => (byte.MaxValue, UInt256.ByteMaxValue); yield return () => (ushort.MaxValue, UInt256.UInt16MaxValue); yield return () => (uint.MaxValue, UInt256.UInt32MaxValue); @@ -1720,7 +1720,7 @@ public class UInt256DataSources public static IEnumerable> ConvertFromCheckedInt128TestData() { - yield return () => (1, UInt256.One); + yield return () => (Int128.One, UInt256.One); yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); yield return () => (short.MaxValue, UInt256.Int16MaxValue); yield return () => (int.MaxValue, UInt256.Int32MaxValue); @@ -1735,7 +1735,7 @@ public class UInt256DataSources yield return () => (int.MinValue, UInt256.Zero); yield return () => (short.MinValue, UInt256.Zero); yield return () => (sbyte.MinValue, UInt256.Zero); - yield return () => (1, UInt256.One); + yield return () => (Int128.One, UInt256.One); yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); yield return () => (short.MaxValue, UInt256.Int16MaxValue); yield return () => (int.MaxValue, UInt256.Int32MaxValue); @@ -1750,7 +1750,7 @@ public class UInt256DataSources yield return () => (int.MinValue, new UInt256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_8000_0000)); yield return () => (short.MinValue, new UInt256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_8000)); yield return () => (sbyte.MinValue, new UInt256(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF80)); - yield return () => (1, UInt256.One); + yield return () => (Int128.One, UInt256.One); yield return () => (sbyte.MaxValue, UInt256.SByteMaxValue); yield return () => (short.MaxValue, UInt256.Int16MaxValue); yield return () => (int.MaxValue, UInt256.Int32MaxValue); diff --git a/src/MissingValues.Tests/Data/UInt512DataSources.cs b/src/MissingValues.Tests/Data/UInt512DataSources.cs index fa0815c..cebb631 100644 --- a/src/MissingValues.Tests/Data/UInt512DataSources.cs +++ b/src/MissingValues.Tests/Data/UInt512DataSources.cs @@ -1427,7 +1427,7 @@ public class UInt512DataSources public static IEnumerable> ConvertToCheckedBigIntegerTestData() { - yield return () => (UInt512.One, UInt128.One); + yield return () => (UInt512.One, BigInteger.One); yield return () => (UInt512.ByteMaxValue, byte.MaxValue); yield return () => (UInt512.UInt16MaxValue, ushort.MaxValue); yield return () => (UInt512.UInt32MaxValue, uint.MaxValue); @@ -1439,7 +1439,7 @@ public class UInt512DataSources public static IEnumerable> ConvertToSaturatingBigIntegerTestData() { - yield return () => (UInt512.One, UInt128.One); + yield return () => (UInt512.One, BigInteger.One); yield return () => (UInt512.ByteMaxValue, byte.MaxValue); yield return () => (UInt512.UInt16MaxValue, ushort.MaxValue); yield return () => (UInt512.UInt32MaxValue, uint.MaxValue); @@ -1451,7 +1451,7 @@ public class UInt512DataSources public static IEnumerable> ConvertToTruncatingBigIntegerTestData() { - yield return () => (UInt512.One, UInt128.One); + yield return () => (UInt512.One, BigInteger.One); yield return () => (UInt512.ByteMaxValue, byte.MaxValue); yield return () => (UInt512.UInt16MaxValue, ushort.MaxValue); yield return () => (UInt512.UInt32MaxValue, uint.MaxValue); @@ -1764,7 +1764,7 @@ public class UInt512DataSources public static IEnumerable> ConvertFromCheckedUInt128TestData() { - yield return () => (1, UInt512.One); + yield return () => (UInt128.One, UInt512.One); yield return () => (byte.MaxValue, UInt512.ByteMaxValue); yield return () => (ushort.MaxValue, UInt512.UInt16MaxValue); yield return () => (uint.MaxValue, UInt512.UInt32MaxValue); @@ -1774,7 +1774,7 @@ public class UInt512DataSources public static IEnumerable> ConvertFromSaturatingUInt128TestData() { - yield return () => (1, UInt512.One); + yield return () => (UInt128.One, UInt512.One); yield return () => (byte.MaxValue, UInt512.ByteMaxValue); yield return () => (ushort.MaxValue, UInt512.UInt16MaxValue); yield return () => (uint.MaxValue, UInt512.UInt32MaxValue); @@ -1784,7 +1784,7 @@ public class UInt512DataSources public static IEnumerable> ConvertFromTruncatingUInt128TestData() { - yield return () => (1, UInt512.One); + yield return () => (UInt128.One, UInt512.One); yield return () => (byte.MaxValue, UInt512.ByteMaxValue); yield return () => (ushort.MaxValue, UInt512.UInt16MaxValue); yield return () => (uint.MaxValue, UInt512.UInt32MaxValue); @@ -1904,7 +1904,7 @@ public class UInt512DataSources public static IEnumerable> ConvertFromCheckedInt128TestData() { - yield return () => (1, UInt512.One); + yield return () => (Int128.One, UInt512.One); yield return () => (sbyte.MaxValue, UInt512.SByteMaxValue); yield return () => (short.MaxValue, UInt512.Int16MaxValue); yield return () => (int.MaxValue, UInt512.Int32MaxValue); @@ -1919,7 +1919,7 @@ public class UInt512DataSources yield return () => (int.MinValue, UInt512.Zero); yield return () => (short.MinValue, UInt512.Zero); yield return () => (sbyte.MinValue, UInt512.Zero); - yield return () => (1, UInt512.One); + yield return () => (Int128.One, UInt512.One); yield return () => (sbyte.MaxValue, UInt512.SByteMaxValue); yield return () => (short.MaxValue, UInt512.Int16MaxValue); yield return () => (int.MaxValue, UInt512.Int32MaxValue); @@ -1934,7 +1934,7 @@ public class UInt512DataSources yield return () => (int.MinValue, new UInt512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_8000_0000)); yield return () => (short.MinValue, new UInt512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_8000)); yield return () => (sbyte.MinValue, new UInt512(0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF_FFFF_FF80)); - yield return () => (1, UInt512.One); + yield return () => (Int128.One, UInt512.One); yield return () => (sbyte.MaxValue, UInt512.SByteMaxValue); yield return () => (short.MaxValue, UInt512.Int16MaxValue); yield return () => (int.MaxValue, UInt512.Int32MaxValue); From 41b7cb39fb39b982b0d30630e66d164f06be6f5e Mon Sep 17 00:00:00 2001 From: crookseta Date: Fri, 24 Jul 2026 10:43:45 -0500 Subject: [PATCH 73/74] -Fix type tested --- .../Numerics/QuadGenericMathTests.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs b/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs index a20c5a0..d1f0dff 100644 --- a/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/QuadGenericMathTests.cs @@ -936,17 +936,17 @@ await Assert.That(Float.Tanh(Float.Zero)) [Test, MethodDataSource(nameof(ConvertToSaturatingSByteTestData))] public async Task ConvertToSaturatingSByteTest(Float input, sbyte expected) => await Assert.That(sbyte.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToTruncatingSByteTestData))] public async Task ConvertToTruncatingByteTest(Float input, sbyte expected) => await Assert.That(sbyte.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertToCheckedInt16TestData))] public async Task ConvertToCheckedInt16Test(Float input, short expected) => await Assert.That(ushort.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertToSaturatingInt16TestData))] public async Task ConvertToSaturatingInt16Test(Float input, short expected) => await Assert.That(ushort.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertToTruncatingInt16TestData))] public async Task ConvertToTruncatingInt16Test(Float input, short expected) => await Assert.That(ushort.CreateTruncating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToCheckedInt16TestData))] public async Task ConvertToCheckedInt16Test(Float input, short expected) => await Assert.That(short.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt16TestData))] public async Task ConvertToSaturatingInt16Test(Float input, short expected) => await Assert.That(short.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt16TestData))] public async Task ConvertToTruncatingInt16Test(Float input, short expected) => await Assert.That(short.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertToCheckedInt32TestData))] public async Task ConvertToCheckedInt32Test(Float input, int expected) => await Assert.That(uint.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertToSaturatingInt32TestData))] public async Task ConvertToSaturatingInt32Test(Float input, int expected) => await Assert.That(uint.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertToTruncatingInt32TestData))] public async Task ConvertToTruncatingInt32Test(Float input, int expected) => await Assert.That(uint.CreateTruncating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToCheckedInt32TestData))] public async Task ConvertToCheckedInt32Test(Float input, int expected) => await Assert.That(int.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt32TestData))] public async Task ConvertToSaturatingInt32Test(Float input, int expected) => await Assert.That(int.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt32TestData))] public async Task ConvertToTruncatingInt32Test(Float input, int expected) => await Assert.That(int.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertToCheckedInt64TestData))] public async Task ConvertToCheckedInt64Test(Float input, long expected) => await Assert.That(ulong.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertToSaturatingInt64TestData))] public async Task ConvertToSaturatingInt64Test(Float input, long expected) => await Assert.That(ulong.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertToTruncatingInt64TestData))] public async Task ConvertToTruncatingInt64Test(Float input, long expected) => await Assert.That(ulong.CreateTruncating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToCheckedInt64TestData))] public async Task ConvertToCheckedInt64Test(Float input, long expected) => await Assert.That(long.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt64TestData))] public async Task ConvertToSaturatingInt64Test(Float input, long expected) => await Assert.That(long.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt64TestData))] public async Task ConvertToTruncatingInt64Test(Float input, long expected) => await Assert.That(long.CreateTruncating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToCheckedInt128TestData))] public async Task ConvertToCheckedInt128Test(Float input, Int128 expected) => await Assert.That(Int128.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToSaturatingInt128TestData))] public async Task ConvertToSaturatingInt128Test(Float input, Int128 expected) => await Assert.That(Int128.CreateSaturating(input)).IsEqualTo(expected); From f5dab93b0bc2f16b4aae34ee97dcaf749f49ecdf Mon Sep 17 00:00:00 2001 From: crookseta Date: Fri, 24 Jul 2026 14:01:44 -0500 Subject: [PATCH 74/74] -Fix Octo type tested --- .../Numerics/OctoGenericMathTests.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs b/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs index 6e91c14..a006344 100644 --- a/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs +++ b/src/MissingValues.Tests/Numerics/OctoGenericMathTests.cs @@ -577,17 +577,17 @@ public async Task SqrtTest() [Test, MethodDataSource(nameof(ConvertToSaturatingSByteTestData))] public async Task ConvertToSaturatingSByteTest(Float input, sbyte expected) => await Assert.That(sbyte.CreateSaturating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToTruncatingSByteTestData))] public async Task ConvertToTruncatingByteTest(Float input, sbyte expected) => await Assert.That(sbyte.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertToCheckedInt16TestData))] public async Task ConvertToCheckedInt16Test(Float input, short expected) => await Assert.That(ushort.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertToSaturatingInt16TestData))] public async Task ConvertToSaturatingInt16Test(Float input, short expected) => await Assert.That(ushort.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertToTruncatingInt16TestData))] public async Task ConvertToTruncatingInt16Test(Float input, short expected) => await Assert.That(ushort.CreateTruncating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToCheckedInt16TestData))] public async Task ConvertToCheckedInt16Test(Float input, short expected) => await Assert.That(short.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt16TestData))] public async Task ConvertToSaturatingInt16Test(Float input, short expected) => await Assert.That(short.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt16TestData))] public async Task ConvertToTruncatingInt16Test(Float input, short expected) => await Assert.That(short.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertToCheckedInt32TestData))] public async Task ConvertToCheckedInt32Test(Float input, int expected) => await Assert.That(uint.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertToSaturatingInt32TestData))] public async Task ConvertToSaturatingInt32Test(Float input, int expected) => await Assert.That(uint.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertToTruncatingInt32TestData))] public async Task ConvertToTruncatingInt32Test(Float input, int expected) => await Assert.That(uint.CreateTruncating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToCheckedInt32TestData))] public async Task ConvertToCheckedInt32Test(Float input, int expected) => await Assert.That(int.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt32TestData))] public async Task ConvertToSaturatingInt32Test(Float input, int expected) => await Assert.That(int.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt32TestData))] public async Task ConvertToTruncatingInt32Test(Float input, int expected) => await Assert.That(int.CreateTruncating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertToCheckedInt64TestData))] public async Task ConvertToCheckedInt64Test(Float input, long expected) => await Assert.That(ulong.CreateChecked(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertToSaturatingInt64TestData))] public async Task ConvertToSaturatingInt64Test(Float input, long expected) => await Assert.That(ulong.CreateSaturating(input)).IsEqualTo(expected); - [Test, MethodDataSource(nameof(ConvertToTruncatingInt64TestData))] public async Task ConvertToTruncatingInt64Test(Float input, long expected) => await Assert.That(ulong.CreateTruncating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToCheckedInt64TestData))] public async Task ConvertToCheckedInt64Test(Float input, long expected) => await Assert.That(long.CreateChecked(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToSaturatingInt64TestData))] public async Task ConvertToSaturatingInt64Test(Float input, long expected) => await Assert.That(long.CreateSaturating(input)).IsEqualTo(expected); + [Test, MethodDataSource(nameof(ConvertToTruncatingInt64TestData))] public async Task ConvertToTruncatingInt64Test(Float input, long expected) => await Assert.That(long.CreateTruncating(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToCheckedInt128TestData))] public async Task ConvertToCheckedInt128Test(Float input, Int128 expected) => await Assert.That(Int128.CreateChecked(input)).IsEqualTo(expected); [Test, MethodDataSource(nameof(ConvertToSaturatingInt128TestData))] public async Task ConvertToSaturatingInt128Test(Float input, Int128 expected) => await Assert.That(Int128.CreateSaturating(input)).IsEqualTo(expected);