File: Sdk\CollectionTracker_aot.cs
Web Access
Project: src\src\Microsoft.DotNet.XUnitAssert\src\Microsoft.DotNet.XUnitAssert.csproj (xunit.assert)
#if XUNIT_AOT
#if XUNIT_NULLABLE
#nullable enable
#else
// In case this is source-imported with global nullable enabled but no XUNIT_NULLABLE
#pragma warning disable CS8603
#pragma warning disable CS8619
#endif

using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;

namespace Xunit.Sdk
{
	partial class CollectionTracker
	{
#if XUNIT_NULLABLE
		static AssertEqualityResult? CheckIfSetsAreEqual(
			CollectionTracker? x,
			CollectionTracker? y,
			IEqualityComparer? itemComparer)
#else
		static AssertEqualityResult CheckIfSetsAreEqual(
			CollectionTracker x,
			CollectionTracker y,
			IEqualityComparer itemComparer)
#endif
		{
			if (x == null || y == null)
				return null;

			var elementTypeX = ArgumentFormatter.GetSetElementType(x.InnerEnumerable);
			var elementTypeY = ArgumentFormatter.GetSetElementType(y.InnerEnumerable);

			if (elementTypeX == null || elementTypeY == null)
				return null;

			if (elementTypeX != elementTypeY)
				return AssertEqualityResult.ForResult(false, x.InnerEnumerable, y.InnerEnumerable);

			if (itemComparer == null)
				return null;

			return AssertEqualityResult.ForResult(
				CompareTypedSets(
					(ISet<object>)x.InnerEnumerable,
					(ISet<object>)y.InnerEnumerable,
					(IEqualityComparer<object>)itemComparer
				),
				x.InnerEnumerable,
				y.InnerEnumerable
			);
		}

#if XUNIT_NULLABLE
		static (Type?, MethodInfo?) GetAssertEqualityComparerMetadata(IEqualityComparer itemComparer) =>
#else
		static (Type, MethodInfo) GetAssertEqualityComparerMetadata(IEqualityComparer itemComparer) =>
#endif
			(null, null);
	}
}

#endif  // XUNIT_AOT