From: Stephen Toub Date: Fri, 12 Apr 2019 02:11:51 +0000 (-0400) Subject: Update Version comparison operator tests (dotnet/corefx#36799) X-Git-Tag: submit/tizen/20210909.063632~11031^2~1906 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=badcdfcada7115fbe76face0e1da1424e1068eca;p=platform%2Fupstream%2Fdotnet%2Fruntime.git Update Version comparison operator tests (dotnet/corefx#36799) * Update Version comparison operator tests Better validate the operators, and update the tests now that the operators won't throw for null. * Address PR feedback Commit migrated from https://github.com/dotnet/corefx/commit/599955ac3c2c6625c7baae46be301767b1f074d2 --- diff --git a/src/libraries/System.Runtime/tests/System/VersionTests.cs b/src/libraries/System.Runtime/tests/System/VersionTests.cs index ab8c571..45ded98 100644 --- a/src/libraries/System.Runtime/tests/System/VersionTests.cs +++ b/src/libraries/System.Runtime/tests/System/VersionTests.cs @@ -92,61 +92,85 @@ namespace System.Tests AssertExtensions.Throws("revision", () => new Version(0, 0, 0, -1)); } - public static IEnumerable CompareTo_TestData() + public static IEnumerable Comparison_TestData() { - yield return new object[] { new Version(1, 2), null, 1 }; - yield return new object[] { new Version(1, 2), new Version(1, 2), 0 }; - yield return new object[] { new Version(1, 2), new Version(1, 3), -1 }; - yield return new object[] { new Version(1, 2), new Version(1, 1), 1 }; - yield return new object[] { new Version(1, 2), new Version(2, 0), -1 }; - yield return new object[] { new Version(1, 2), new Version(1, 2, 1), -1 }; - yield return new object[] { new Version(1, 2), new Version(1, 2, 0, 1), -1 }; - yield return new object[] { new Version(1, 2), new Version(1, 0), 1 }; - yield return new object[] { new Version(1, 2), new Version(1, 0, 1), 1 }; - yield return new object[] { new Version(1, 2), new Version(1, 0, 0, 1), 1 }; - - yield return new object[] { new Version(3, 2, 1), new Version(2, 2, 1), 1 }; - yield return new object[] { new Version(3, 2, 1), new Version(3, 1, 1), 1 }; - yield return new object[] { new Version(3, 2, 1), new Version(3, 2, 0), 1 }; - - yield return new object[] { new Version(1, 2, 3, 4), new Version(1, 2, 3, 4), 0 }; - yield return new object[] { new Version(1, 2, 3, 4), new Version(1, 2, 3, 5), -1 }; - yield return new object[] { new Version(1, 2, 3, 4), new Version(1, 2, 3, 3), 1 }; - - yield return new object[] { new Version(1, 2, 3, 4), null, 1 }; + foreach (var input in new (Version v1, Version v2, int expectedSign)[] + { + (null, null, 0), + + (new Version(1, 2), null, 1), + (new Version(1, 2), new Version(1, 2), 0), + (new Version(1, 2), new Version(1, 3), -1), + (new Version(1, 2), new Version(1, 1), 1), + (new Version(1, 2), new Version(2, 0), -1), + (new Version(1, 2), new Version(1, 2, 1), -1), + (new Version(1, 2), new Version(1, 2, 0, 1), -1), + (new Version(1, 2), new Version(1, 0), 1), + (new Version(1, 2), new Version(1, 0, 1), 1), + (new Version(1, 2), new Version(1, 0, 0, 1), 1), + + (new Version(3, 2, 1), null, 1), + (new Version(3, 2, 1), new Version(2, 2, 1), 1), + (new Version(3, 2, 1), new Version(3, 1, 1), 1), + (new Version(3, 2, 1), new Version(3, 2, 0), 1), + + (new Version(1, 2, 3, 4), null, 1), + (new Version(1, 2, 3, 4), new Version(1, 2, 3, 4), 0), + (new Version(1, 2, 3, 4), new Version(1, 2, 3, 5), -1), + (new Version(1, 2, 3, 4), new Version(1, 2, 3, 3), 1) + }) + { + yield return new object[] { input.v1, input.v2, input.expectedSign }; + yield return new object[] { input.v2, input.v1, input.expectedSign * -1 }; + } } [Theory] - [MemberData(nameof(CompareTo_TestData))] - public void CompareTo_Other_ReturnsExpected(Version version1, object other, int expectedSign) + [MemberData(nameof(Comparison_TestData))] + public void CompareTo_ReturnsExpected(Version version1, Version version2, int expectedSign) { - if (version1 != null && other is Version version2) + Assert.Equal(expectedSign, Comparer.Default.Compare(version1, version2)); + if (version1 != null) { - if (expectedSign >= 0) - { - Assert.True(version1 >= version2); - Assert.False(version1 < version2); - } - if (expectedSign > 0) - { - Assert.True(version1 > version2); - Assert.False(version1 <= version2); - } - if (expectedSign <= 0) - { - Assert.True(version1 <= version2); - Assert.False(version1 > version2); - } - if (expectedSign < 0) - { - Assert.True(version1 < version2); - Assert.False(version1 >= version2); - } + Assert.Equal(expectedSign, Math.Sign(((IComparable)version1).CompareTo(version2))); + Assert.Equal(expectedSign, Math.Sign(version1.CompareTo((object)version2))); + Assert.Equal(expectedSign, Math.Sign(version1.CompareTo(version2))); } + } - IComparable comparable = version1; - Assert.Equal(expectedSign, Math.Sign(comparable.CompareTo(other))); - Assert.Equal(expectedSign, Math.Sign(version1.CompareTo(other))); + [ActiveIssue("https://github.com/dotnet/coreclr/pull/23898")] + [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "https://github.com/dotnet/coreclr/pull/23898")] + [Theory] + [MemberData(nameof(Comparison_TestData))] + public void ComparisonOperators_ReturnExpected(Version version1, Version version2, int expectedSign) + { + if (expectedSign < 0) + { + Assert.True(version1 < version2); + Assert.True(version1 <= version2); + Assert.False(version1 == version2); + Assert.False(version1 >= version2); + Assert.False(version1 > version2); + Assert.True(version1 != version2); + } + else if (expectedSign == 0) + { + Assert.False(version1 < version2); + Assert.True(version1 <= version2); + Assert.True(version1 == version2); + Assert.True(version1 >= version2); + Assert.False(version1 > version2); + Assert.False(version1 != version2); + } + else + { + Assert.False(version1 < version2); + Assert.False(version1 <= version2); + Assert.False(version1 == version2); + Assert.True(version1 >= version2); + Assert.True(version1 > version2); + Assert.True(version1 != version2); + } } [Theory] @@ -159,17 +183,6 @@ namespace System.Tests AssertExtensions.Throws(null, () => ((IComparable)version).CompareTo(other)); } - [Fact] - public void Comparisons_NullArgument_ThrowsArgumentNullException() - { - Version nullVersion = null; - Version nonNullVersion = new Version(1, 2); - AssertExtensions.Throws("v1", () => nonNullVersion >= nullVersion); - AssertExtensions.Throws("v1", () => nonNullVersion > nullVersion); - AssertExtensions.Throws("v1", () => nullVersion < nonNullVersion); - AssertExtensions.Throws("v1", () => nullVersion <= nonNullVersion); - } - public static IEnumerable Equals_TestData() { yield return new object[] { new Version(2, 3), new Version(2, 3), true };