Files
linux-packaging-mono/external/corefx/src/System.Collections/tests/StructuralComparisonsTests.cs
Xamarin Public Jenkins (auto-signing) 6bdd276d05 Imported Upstream version 5.0.0.42
Former-commit-id: fd56571888259555122d8a0f58c68838229cea2b
2017-04-10 11:41:01 +00:00

85 lines
3.5 KiB
C#

// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System.Collections.Generic;
using Xunit;
namespace System.Collections.Tests
{
public class StructuralComparisonsTests
{
[Fact]
public void StructuralComparer_ReturnsSameInstance()
{
Assert.Same(StructuralComparisons.StructuralComparer, StructuralComparisons.StructuralComparer);
}
public static IEnumerable<object[]> StructuralComparer_Compare_TestData()
{
yield return new object[] { null, null, 0 };
yield return new object[] { null, "abc", -1 };
yield return new object[] { "abc", null, 1 };
yield return new object[] { "abc", "abc", 0 };
yield return new object[] { "abc", "def", -1 };
yield return new object[] { "def", "abc", 1 };
yield return new object[] { new StructuralObject(), "abc", 5 };
yield return new object[] { new StructuralObject(), 123, -5 };
}
[Theory]
[MemberData(nameof(StructuralComparer_Compare_TestData))]
public void StructuralComparer_Compare(object x, object y, int expected)
{
Assert.Equal(expected, StructuralComparisons.StructuralComparer.Compare(x, y));
}
[Fact]
public void StructuralEqualityComparer_ReturnsSameInstance()
{
Assert.Same(StructuralComparisons.StructuralEqualityComparer, StructuralComparisons.StructuralEqualityComparer);
}
public static IEnumerable<object[]> StructuralEqualityComparer_Equals_TestData()
{
yield return new object[] { null, null, true };
yield return new object[] { null, "abc", false };
yield return new object[] { "abc", null, false };
yield return new object[] { "abc", "abc", true };
yield return new object[] { "def", "abc", false };
yield return new object[] { "abc", "def", false };
yield return new object[] { new StructuralObject(), "abc", true };
yield return new object[] { new StructuralObject(), 123, false };
}
[Theory]
[MemberData(nameof(StructuralEqualityComparer_Equals_TestData))]
public void StructuralEqualityComparer_Equals(object x, object y, bool expected)
{
Assert.Equal(expected, StructuralComparisons.StructuralEqualityComparer.Equals(x, y));
}
public static IEnumerable<object[]> StructuralEqualityComparer_GetHashCode_TestData()
{
yield return new object[] { null, 0 };
yield return new object[] { "abc", "abc".GetHashCode() };
yield return new object[] { new StructuralObject(), 5 };
}
[Theory]
[MemberData(nameof(StructuralEqualityComparer_GetHashCode_TestData))]
public void StructuralEqualityComparer_GetHashCode(object obj, int expected)
{
Assert.Equal(expected, StructuralComparisons.StructuralEqualityComparer.GetHashCode(obj));
}
private class StructuralObject : IStructuralEquatable, IStructuralComparable
{
public int CompareTo(object other, IComparer comparer) => other is string ? 5 : -5;
public bool Equals(object other, IEqualityComparer comparer) => other is string;
public int GetHashCode(IEqualityComparer comparer) => 5;
}
}
}