From 723814c78e75a5b280a6c5bacc8afb91d0d8eae5 Mon Sep 17 00:00:00 2001 From: kzrnm Date: Thu, 21 Sep 2023 07:34:00 +0900 Subject: [PATCH] Add BigInteger.Multiply benchmark for dotnet/runtime#92208 --- .../Perf.BigInteger.cs | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/benchmarks/micro/libraries/System.Runtime.Numerics/Perf.BigInteger.cs b/src/benchmarks/micro/libraries/System.Runtime.Numerics/Perf.BigInteger.cs index f39b29320f0..7db5c9e3109 100644 --- a/src/benchmarks/micro/libraries/System.Runtime.Numerics/Perf.BigInteger.cs +++ b/src/benchmarks/micro/libraries/System.Runtime.Numerics/Perf.BigInteger.cs @@ -26,12 +26,12 @@ public BigInteger Ctor_ByteArray(BigIntegerData numberString) // the argument na [Benchmark] [ArgumentsSource(nameof(NumberStrings))] - public byte[] ToByteArray(BigIntegerData numberString) + public byte[] ToByteArray(BigIntegerData numberString) => numberString.Value.ToByteArray(); [Benchmark] [ArgumentsSource(nameof(NumberStrings))] - public BigInteger Parse(BigIntegerData numberString) + public BigInteger Parse(BigIntegerData numberString) => BigInteger.Parse(numberString.Text); [Benchmark] @@ -61,11 +61,6 @@ public BigInteger Add(BigIntegers arguments) public BigInteger Subtract(BigIntegers arguments) => BigInteger.Subtract(arguments.Left, arguments.Right); - [Benchmark] - [ArgumentsSource(nameof(ValuesSameSize))] - public BigInteger Multiply(BigIntegers arguments) - => BigInteger.Multiply(arguments.Left, arguments.Right); - [Benchmark] [ArgumentsSource(nameof(ValuesSameSize))] public BigInteger GreatestCommonDivisor(BigIntegers arguments) @@ -78,6 +73,17 @@ public IEnumerable ValuesHalfSize() yield return new BigIntegers(new[] { 65536, 65536 / 2 }); } + public IEnumerable ValuesSameOrHalfSize() + { + foreach (var item in ValuesSameSize()) yield return item; + foreach (var item in ValuesHalfSize()) yield return item; + } + + [Benchmark] + [ArgumentsSource(nameof(ValuesSameOrHalfSize))] + public BigInteger Multiply(BigIntegers arguments) + => BigInteger.Multiply(arguments.Left, arguments.Right); + [Benchmark] [ArgumentsSource(nameof(ValuesHalfSize))] public BigInteger Divide(BigIntegers arguments) @@ -115,11 +121,11 @@ public BigIntegerData(string numberString) public override string ToString() => Text; } - + public class BigIntegers { private readonly int[] _bitCounts; - + public BigInteger Left { get; } public BigInteger Right { get; } public BigInteger Other { get; } @@ -159,7 +165,7 @@ private static BigInteger CreateRandomInteger(Random random, int bits) // ensure actual bit count (remaining bits not set) // ensure positive value (highest-order bit not set) - value[value.Length - 1] &= (byte) (0xFF >> 8 - bits % 8); + value[value.Length - 1] &= (byte)(0xFF >> 8 - bits % 8); result = new BigInteger(value); }