diff options
author | Jiyoung Yun <jy910.yun@samsung.com> | 2016-11-23 19:09:09 +0900 |
---|---|---|
committer | Jiyoung Yun <jy910.yun@samsung.com> | 2016-11-23 19:09:09 +0900 |
commit | 4b4aad7217d3292650e77eec2cf4c198ea9c3b4b (patch) | |
tree | 98110734c91668dfdbb126fcc0e15ddbd93738ca /tests/src/JIT/Performance/CodeQuality/BenchI/Permutate/Permutate.cs | |
parent | fa45f57ed55137c75ac870356a1b8f76c84b229c (diff) | |
download | coreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.tar.gz coreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.tar.bz2 coreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.zip |
Imported Upstream version 1.1.0upstream/1.1.0
Diffstat (limited to 'tests/src/JIT/Performance/CodeQuality/BenchI/Permutate/Permutate.cs')
-rw-r--r-- | tests/src/JIT/Performance/CodeQuality/BenchI/Permutate/Permutate.cs | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchI/Permutate/Permutate.cs b/tests/src/JIT/Performance/CodeQuality/BenchI/Permutate/Permutate.cs new file mode 100644 index 0000000000..d7457cdbc1 --- /dev/null +++ b/tests/src/JIT/Performance/CodeQuality/BenchI/Permutate/Permutate.cs @@ -0,0 +1,116 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. +// + +using Microsoft.Xunit.Performance; +using System; +using System.Runtime.CompilerServices; +using Xunit; + +[assembly: OptimizeForBenchmarks] +[assembly: MeasureInstructionsRetired] + +public class Permutate +{ +#if DEBUG + public const int Iterations = 1; +#else + public const int Iterations = 20000; +#endif + + private int[] _permArray = new int[11]; + private static int s_pctr; + + private static + void Swap(int[] arr, int i, int j) + { + int t = arr[i]; + arr[i] = arr[j]; + arr[j] = t; + } + + private void Initialize() + { + for (int i = 1; i <= 7; i++) + { + _permArray[i] = i - 1; + } + } + + private void PermuteArray(int n) + { + int k; + s_pctr = s_pctr + 1; + if (n != 1) + { + PermuteArray(n - 1); + for (k = n - 1; k >= 1; k--) + { + Swap(_permArray, n, k); + PermuteArray(n - 1); + Swap(_permArray, n, k); + } + } + } + + private bool Validate() + { + int k = 0; + + for (int i = 0; i <= 6; i++) + { + for (int j = 1; j <= 7; j++) + { + if (_permArray[j] == i) + { + k = k + 1; + } + } + } + + return (k == 7); + } + + [MethodImpl(MethodImplOptions.NoInlining)] + private bool Bench() + { + Initialize(); + + for (int i = 0; i < Iterations; ++i) + { + s_pctr = 0; + PermuteArray(7); + } + + bool result = Validate(); + + return result; + } + + [Benchmark] + public static void Test() + { + Permutate P = new Permutate(); + foreach (var iteration in Benchmark.Iterations) + { + using (iteration.StartMeasurement()) + { + P.Bench(); + } + } + } + + private static bool TestBase() + { + Permutate P = new Permutate(); + bool result = P.Bench(); + return result; + } + + public static int Main() + { + bool result = TestBase(); + return (result ? 100 : -1); + } +} |