ComparisonState
struct ComparisonState
using NUnit.Framework.Internal;
using System.Runtime.CompilerServices;
namespace NUnit.Framework.Constraints.Comparers
{
internal readonly ref struct ComparisonState
{
[System.Runtime.CompilerServices.NullableContext(1)]
[System.Runtime.CompilerServices.Nullable(0)]
private readonly struct Comparison
{
public object X { get; }
public object Y { get; }
public Comparison(object x, object y)
{
X = x;
Y = y;
}
}
private readonly ImmutableStack<Comparison> _comparisons;
public bool TopLevelComparison { get; }
public ComparisonState(bool topLevelComparison)
{
this = new ComparisonState(topLevelComparison, ImmutableStack<Comparison>.Empty);
}
private ComparisonState(bool topLevelComparison, ImmutableStack<Comparison> comparisons)
{
TopLevelComparison = topLevelComparison;
_comparisons = comparisons;
}
[System.Runtime.CompilerServices.NullableContext(1)]
public ComparisonState PushComparison(object x, object y)
{
return new ComparisonState(false, _comparisons.Push(new Comparison(x, y)));
}
[System.Runtime.CompilerServices.NullableContext(1)]
public bool DidCompare(object x, object y)
{
foreach (Comparison comparison in _comparisons) {
if (comparison.X == x && comparison.Y == y)
return true;
}
return false;
}
}
}