Refactor code structure for improved readability and maintainability; removed redundant code blocks and optimized function calls.
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
using FluentAssertions;
|
||||
using StellaOps.Scanner.Emit.Reachability;
|
||||
using Xunit;
|
||||
|
||||
namespace StellaOps.Scanner.Emit.Tests.Reachability;
|
||||
|
||||
public class ReachabilityLatticeTests
|
||||
{
|
||||
[Fact]
|
||||
public void StaticPath_YieldsConditional()
|
||||
{
|
||||
var result = ReachabilityLattice.Evaluate(new[]
|
||||
{
|
||||
new ReachabilityEvidence(ReachabilityEvidenceKind.StaticPath, "path1")
|
||||
});
|
||||
|
||||
result.State.Should().Be(ReachabilityState.Conditional);
|
||||
result.Score.Should().Be(0.5);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RuntimeHit_PromotesReachableAndAddsBonus()
|
||||
{
|
||||
var result = ReachabilityLattice.Evaluate(new[]
|
||||
{
|
||||
new ReachabilityEvidence(ReachabilityEvidenceKind.StaticPath),
|
||||
new ReachabilityEvidence(ReachabilityEvidenceKind.RuntimeHit)
|
||||
});
|
||||
|
||||
result.State.Should().Be(ReachabilityState.Reachable);
|
||||
result.Score.Should().Be(0.8);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RuntimeSinkHit_AddsAdditionalBonus()
|
||||
{
|
||||
var result = ReachabilityLattice.Evaluate(new[]
|
||||
{
|
||||
new ReachabilityEvidence(ReachabilityEvidenceKind.RuntimeHit),
|
||||
new ReachabilityEvidence(ReachabilityEvidenceKind.RuntimeSinkHit)
|
||||
});
|
||||
|
||||
result.State.Should().Be(ReachabilityState.Reachable);
|
||||
result.Score.Should().Be(1.0);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Guard_DemotesWhenNoRuntimeEvidence()
|
||||
{
|
||||
var result = ReachabilityLattice.Evaluate(new[]
|
||||
{
|
||||
new ReachabilityEvidence(ReachabilityEvidenceKind.StaticPath),
|
||||
new ReachabilityEvidence(ReachabilityEvidenceKind.Guard)
|
||||
});
|
||||
|
||||
result.State.Should().Be(ReachabilityState.Unknown);
|
||||
result.Score.Should().Be(0.3);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Mitigation_SetsUnreachableWhenNoRuntime()
|
||||
{
|
||||
var result = ReachabilityLattice.Evaluate(new[]
|
||||
{
|
||||
new ReachabilityEvidence(ReachabilityEvidenceKind.StaticPath),
|
||||
new ReachabilityEvidence(ReachabilityEvidenceKind.Mitigation)
|
||||
});
|
||||
|
||||
result.State.Should().Be(ReachabilityState.Unreachable);
|
||||
result.Score.Should().Be(0.2);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void OrderIndependentAndRounded()
|
||||
{
|
||||
var shuffled = new[]
|
||||
{
|
||||
new ReachabilityEvidence(ReachabilityEvidenceKind.Guard),
|
||||
new ReachabilityEvidence(ReachabilityEvidenceKind.StaticPath),
|
||||
new ReachabilityEvidence(ReachabilityEvidenceKind.RuntimeHit),
|
||||
};
|
||||
|
||||
var result = ReachabilityLattice.Evaluate(shuffled);
|
||||
|
||||
result.State.Should().Be(ReachabilityState.Reachable);
|
||||
result.Score.Should().Be(0.8);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user