| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- using Admin.NET.Plugin.AiDOP.SmartOps;
- using Xunit;
- namespace Admin.NET.Plugin.AiDOP.Tests.SmartOps;
- public class SmartOpsImprovementEffectivenessTests
- {
- [Fact]
- public void Evaluate_InsufficientData_WhenFewerThanThreeSamples()
- {
- var result = SmartOpsImprovementEffectiveness.Evaluate(
- new[] { 1m, 2m },
- new[] { 3m, 4m, 5m },
- 10m,
- "higher_is_better");
- Assert.Equal(SmartOpsImprovementEffectiveness.InsufficientData, result.Conclusion);
- Assert.Equal(2, result.BeforeSamples);
- }
- [Fact]
- public void Evaluate_HigherIsBetter_EffectiveWhenMeanUpAndCloserToTarget()
- {
- var before = new[] { 70m, 72m, 71m };
- var after = new[] { 88m, 90m, 91m };
- var result = SmartOpsImprovementEffectiveness.Evaluate(before, after, 100m, "higher_is_better");
- Assert.Equal(SmartOpsImprovementEffectiveness.AutoEffective, result.Conclusion);
- Assert.Equal(3, result.BeforeSamples);
- Assert.Equal(3, result.AfterSamples);
- Assert.True(result.AfterMean > result.BeforeMean);
- }
- [Fact]
- public void Evaluate_LowerIsBetter_EffectiveWhenMeanDownAndCloserToTarget()
- {
- var before = new[] { 12m, 11m, 13m };
- var after = new[] { 8m, 7m, 7.5m };
- var result = SmartOpsImprovementEffectiveness.Evaluate(before, after, 6m, "lower_is_better");
- Assert.Equal(SmartOpsImprovementEffectiveness.AutoEffective, result.Conclusion);
- }
- [Fact]
- public void Evaluate_IneffectiveWhenMeanWorse()
- {
- var result = SmartOpsImprovementEffectiveness.Evaluate(
- new[] { 90m, 91m, 92m },
- new[] { 70m, 68m, 69m },
- 100m,
- "higher_is_better");
- Assert.Equal(SmartOpsImprovementEffectiveness.AutoIneffective, result.Conclusion);
- }
- [Fact]
- public void Evaluate_InconclusiveWhenUnchanged()
- {
- var values = new[] { 80m, 80m, 80m };
- var result = SmartOpsImprovementEffectiveness.Evaluate(values, values, 100m, "higher_is_better");
- Assert.Equal(SmartOpsImprovementEffectiveness.AutoInconclusive, result.Conclusion);
- Assert.Equal(0m, result.Delta);
- }
- [Fact]
- public void Evaluate_ReachedTargetCountsAsEffectiveEvenIfOvershoot()
- {
- var result = SmartOpsImprovementEffectiveness.Evaluate(
- new[] { 80m, 81m, 79m },
- new[] { 120m, 121m, 119m },
- 100m,
- "higher_is_better");
- Assert.Equal(SmartOpsImprovementEffectiveness.AutoEffective, result.Conclusion);
- }
- [Fact]
- public void Evaluate_InconclusiveWithoutTarget_DoesNotUseSignOnly()
- {
- var result = SmartOpsImprovementEffectiveness.Evaluate(
- new[] { 1m, 2m, 3m },
- new[] { 8m, 9m, 10m },
- null,
- "higher_is_better");
- Assert.Equal(SmartOpsImprovementEffectiveness.AutoInconclusive, result.Conclusion);
- }
- [Fact]
- public void Evaluate_IsDeterministic()
- {
- var before = new[] { 10m, 11m, 12m, 9m };
- var after = new[] { 6m, 5m, 5m, 4m };
- var a = SmartOpsImprovementEffectiveness.Evaluate(before, after, 5m, "lower_is_better");
- var b = SmartOpsImprovementEffectiveness.Evaluate(before, after, 5m, "lower_is_better");
- Assert.Equal(a, b);
- Assert.Equal(SmartOpsImprovementEffectiveness.AutoEffective, a.Conclusion);
- Assert.Equal(3, a.ConsecutiveOnTargetDays);
- Assert.Equal(75m, a.AchievementRate);
- }
- [Fact]
- public void TakeLastValid_KeepsLatestSeven()
- {
- var values = Enumerable.Range(1, 10).Select(x => (decimal?)x).Append(null);
- var taken = SmartOpsImprovementEffectiveness.TakeLastValid(values);
- Assert.Equal(new[] { 4m, 5m, 6m, 7m, 8m, 9m, 10m }, taken);
- }
- }
|