<PackageReference Include="NUnit" Version="4.3.2" />

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; } } }