UnityGame/Library/PackageCache/com.unity.test-framework.performance/Runtime/Statistics/ConfidenceLevelExtensions.cs
2024-10-27 10:53:47 +03:00

44 lines
1.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
namespace Unity.PerformanceTesting.Statistics
{
static class ConfidenceLevelExtensions
{
private static readonly Dictionary<ConfidenceLevel, (int value, int digits)> k_ConfidenceLevelDetails = CreateConfidenceLevelMapping();
/// <summary>
/// Calculates Z value (z-star) for confidence interval
/// </summary>
/// <param name="level">ConfidenceLevel for a confidence interval</param>
/// <param name="n">Sample size (n >= 3)</param>
public static double GetZValue(this ConfidenceLevel level, int n)
{
if (n <= 1)
throw new ArgumentOutOfRangeException(nameof(n), "n should be >= 2");
return StudentDistributionHelper.InverseTwoTailedStudent(1 - level.ToPercent(), n - 1);
}
static double ToPercent(this ConfidenceLevel level)
{
(int value, int digits) = k_ConfidenceLevelDetails[level];
return value / Math.Pow(10, digits);
}
static Dictionary<ConfidenceLevel, (int value, int length)> CreateConfidenceLevelMapping()
{
return Enum.GetValues(typeof(ConfidenceLevel))
.Cast<ConfidenceLevel>()
.ToDictionary(
confidenceLevel => confidenceLevel,
confidenceLevel =>
{
var textRepresentation = confidenceLevel.ToString().Substring(1);
return (int.Parse(textRepresentation), textRepresentation.Length);
});
}
}
}