Files
git.stella-ops.org/src/Policy/__Tests/StellaOps.Policy.Determinization.Tests/DecayedConfidenceCalculatorTests.cs
2026-01-07 09:43:12 +02:00

115 lines
2.8 KiB
C#

using FluentAssertions;
using Microsoft.Extensions.Logging.Abstractions;
using StellaOps.Policy.Determinization.Scoring;
using Xunit;
namespace StellaOps.Policy.Determinization.Tests;
public class DecayedConfidenceCalculatorTests
{
private readonly DecayedConfidenceCalculator _calculator;
public DecayedConfidenceCalculatorTests()
{
_calculator = new DecayedConfidenceCalculator(NullLogger<DecayedConfidenceCalculator>.Instance);
}
[Fact]
public void Calculate_ZeroAge_ReturnsBaseConfidence()
{
// Arrange
var baseConfidence = 0.8;
var ageDays = 0.0;
// Act
var result = _calculator.Calculate(baseConfidence, ageDays);
// Assert
result.Should().Be(baseConfidence);
}
[Fact]
public void Calculate_HalfLife_ReturnsHalfConfidence()
{
// Arrange
var baseConfidence = 1.0;
var halfLifeDays = 14.0;
var ageDays = 14.0;
// Act
var result = _calculator.Calculate(baseConfidence, ageDays, halfLifeDays);
// Assert
result.Should().BeApproximately(0.5, 0.01);
}
[Fact]
public void Calculate_TwoHalfLives_ReturnsQuarterConfidence()
{
// Arrange
var baseConfidence = 1.0;
var halfLifeDays = 14.0;
var ageDays = 28.0;
// Act
var result = _calculator.Calculate(baseConfidence, ageDays, halfLifeDays);
// Assert
result.Should().BeApproximately(0.25, 0.01);
}
[Fact]
public void Calculate_VeryOld_ReturnsFloor()
{
// Arrange
var baseConfidence = 1.0;
var halfLifeDays = 14.0;
var ageDays = 200.0;
var floor = 0.1;
// Act
var result = _calculator.Calculate(baseConfidence, ageDays, halfLifeDays, floor);
// Assert
result.Should().Be(floor);
}
[Fact]
public void CalculateDecayFactor_ZeroAge_ReturnsOne()
{
// Act
var factor = _calculator.CalculateDecayFactor(0.0);
// Assert
factor.Should().Be(1.0);
}
[Fact]
public void CalculateDecayFactor_HalfLife_ReturnsHalf()
{
// Act
var factor = _calculator.CalculateDecayFactor(14.0, 14.0);
// Assert
factor.Should().BeApproximately(0.5, 0.01);
}
[Theory]
[InlineData(-0.1)]
[InlineData(1.1)]
public void Calculate_InvalidBaseConfidence_ThrowsArgumentOutOfRange(double invalidConfidence)
{
// Act & Assert
var act = () => _calculator.Calculate(invalidConfidence, 10.0);
act.Should().Throw<ArgumentOutOfRangeException>();
}
[Fact]
public void Calculate_NegativeAge_ThrowsArgumentOutOfRange()
{
// Act & Assert
var act = () => _calculator.Calculate(0.8, -1.0);
act.Should().Throw<ArgumentOutOfRangeException>();
}
}