This commit is contained in:
parent
e88e4bd81c
commit
eaca525ec2
12 changed files with 2229 additions and 1 deletions
115
src/semver.tests/SemanticVersionComparerTests.cs
Normal file
115
src/semver.tests/SemanticVersionComparerTests.cs
Normal file
|
|
@ -0,0 +1,115 @@
|
|||
// Copyright (c) The Geekeey Authors
|
||||
// SPDX-License-Identifier: EUPL-1.2
|
||||
|
||||
namespace Geekeey.SemVer.Tests;
|
||||
|
||||
internal sealed class SemanticVersionComparerTests
|
||||
{
|
||||
[Test]
|
||||
[Arguments("1.0.0", "2.0.0", -1)]
|
||||
[Arguments("2.0.0", "1.0.0", 1)]
|
||||
[Arguments("1.0.0", "1.1.0", -1)]
|
||||
[Arguments("1.1.0", "1.0.0", 1)]
|
||||
[Arguments("1.0.0", "1.0.1", -1)]
|
||||
[Arguments("1.0.1", "1.0.0", 1)]
|
||||
[Arguments("1.0.0-alpha", "1.0.0", -1)]
|
||||
[Arguments("1.0.0", "1.0.0-alpha", 1)]
|
||||
[Arguments("1.0.0-alpha", "1.0.0-alpha.1", -1)]
|
||||
[Arguments("1.0.0-alpha.1", "1.0.0-alpha.beta", -1)]
|
||||
[Arguments("1.0.0-alpha.beta", "1.0.0-beta", -1)]
|
||||
[Arguments("1.0.0-beta", "1.0.0-beta.2", -1)]
|
||||
[Arguments("1.0.0-beta.2", "1.0.0-beta.11", -1)]
|
||||
[Arguments("1.0.0-beta.11", "1.0.0-rc.1", -1)]
|
||||
[Arguments("1.0.0-rc.1", "1.0.0", -1)]
|
||||
[Arguments("1.0.0-alpha.5", "1.0.0-alpha.10", -1)]
|
||||
[Arguments("1.0.0-alpha.10", "1.0.0-alpha.5", 1)]
|
||||
[Arguments("1.0.0-alpha.beta", "1.0.0-alpha.5", 1)]
|
||||
[Arguments("1.0.0-alpha.5", "1.0.0-alpha.beta", -1)]
|
||||
[Arguments("1.0.0-alpha.1.2", "1.0.0-alpha.1.2.3", -1)]
|
||||
[Arguments("1.0.0-alpha.1.2.3", "1.0.0-alpha.1.2", 1)]
|
||||
[Arguments("1.0.0-alpha-b", "1.0.0-alpha-a", 1)]
|
||||
[Arguments("1.0.0-0.3.7", "1.0.0-x.7.z.92", -1)]
|
||||
[Arguments("1.0.0-x.7.z.92", "1.0.0-0.3.7", 1)]
|
||||
[Arguments("1.0.0+build.1", "1.0.0+build.2", 0)]
|
||||
[Arguments("1.0.0-alpha+build.1", "1.0.0-alpha+build.2", 0)]
|
||||
public async Task I_can_compare_by_precedence(string v1Str, string v2Str, int expected)
|
||||
{
|
||||
var v1 = SemanticVersion.Parse(v1Str);
|
||||
var v2 = SemanticVersion.Parse(v2Str);
|
||||
var result = SemanticVersionComparer.Priority.Compare(v1, v2);
|
||||
await Assert.That(Math.Sign(result)).IsEqualTo(expected);
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Arguments("1.0.0+build.1", "1.0.0+build.2", 0)]
|
||||
[Arguments("1.0.0-alpha+build.1", "1.0.0-alpha+build.2", 0)]
|
||||
public async Task I_can_confirm_precedence_ignores_metadata(string v1Str, string v2Str, int expected)
|
||||
{
|
||||
var v1 = SemanticVersion.Parse(v1Str);
|
||||
var v2 = SemanticVersion.Parse(v2Str);
|
||||
var result = SemanticVersionComparer.Priority.Compare(v1, v2);
|
||||
await Assert.That(result).IsEqualTo(expected);
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Arguments("1.0.0", "1.0.0+build.1", -1)]
|
||||
[Arguments("1.0.0+build.1", "1.0.0", 1)]
|
||||
[Arguments("1.0.0+build.1", "1.0.0+build.2", -1)]
|
||||
[Arguments("1.0.0+build.1.1", "1.0.0+build.1", 1)]
|
||||
[Arguments("1.0.0+a.b", "1.0.0+a.a", 1)]
|
||||
[Arguments("1.0.0+a.a", "1.0.0+a.b", -1)]
|
||||
[Arguments("1.0.0+a.b", "1.0.0+a.b.c", -1)]
|
||||
[Arguments("1.0.0+a.b.c", "1.0.0+a.b", 1)]
|
||||
[Arguments("1.0.0+1.2.3", "1.0.0+1.2.4", -1)]
|
||||
[Arguments("1.0.0+1.2.4", "1.0.0+1.2.3", 1)]
|
||||
[Arguments("1.0.0+01", "1.0.0+1", -1)]
|
||||
public async Task I_can_compare_by_sort_order(string v1Str, string v2Str, int expected)
|
||||
{
|
||||
var v1 = SemanticVersion.Parse(v1Str);
|
||||
var v2 = SemanticVersion.Parse(v2Str);
|
||||
var result = SemanticVersionComparer.SortOrder.Compare(v1, v2);
|
||||
await Assert.That(Math.Sign(result)).IsEqualTo(expected);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task I_can_confirm_precedence_equality_ignores_metadata()
|
||||
{
|
||||
var v1 = SemanticVersion.Parse("1.0.0-alpha+build.1");
|
||||
var v2 = SemanticVersion.Parse("1.0.0-alpha+build.2");
|
||||
|
||||
await Assert.That(SemanticVersionComparer.Priority.Equals(v1, v2)).IsTrue();
|
||||
await Assert.That(SemanticVersionComparer.Priority.GetHashCode(v1)).IsEqualTo(SemanticVersionComparer.Priority.GetHashCode(v2));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task I_can_confirm_sort_order_equality_includes_metadata()
|
||||
{
|
||||
var v1 = SemanticVersion.Parse("1.0.0-alpha+build.1");
|
||||
var v2 = SemanticVersion.Parse("1.0.0-alpha+build.2");
|
||||
|
||||
await Assert.That(SemanticVersionComparer.SortOrder.Equals(v1, v2)).IsFalse();
|
||||
await Assert.That(SemanticVersionComparer.SortOrder.GetHashCode(v1)).IsNotEqualTo(SemanticVersionComparer.SortOrder.GetHashCode(v2));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task I_can_confirm_equality_for_identical_versions()
|
||||
{
|
||||
var v1 = SemanticVersion.Parse("1.0.0-alpha.1");
|
||||
var v2 = SemanticVersion.Parse("1.0.0-alpha.1");
|
||||
|
||||
await Assert.That(SemanticVersionComparer.Priority.Equals(v1, v2)).IsTrue();
|
||||
await Assert.That(SemanticVersionComparer.SortOrder.Equals(v1, v2)).IsTrue();
|
||||
await Assert.That(SemanticVersionComparer.Priority.GetHashCode(v1)).IsEqualTo(SemanticVersionComparer.Priority.GetHashCode(v2));
|
||||
await Assert.That(SemanticVersionComparer.SortOrder.GetHashCode(v1)).IsEqualTo(SemanticVersionComparer.SortOrder.GetHashCode(v2));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task I_can_confirm_equality_for_different_versions()
|
||||
{
|
||||
var v1 = SemanticVersion.Parse("1.0.0-alpha.1");
|
||||
var v2 = SemanticVersion.Parse("1.0.0-alpha.2");
|
||||
|
||||
await Assert.That(SemanticVersionComparer.Priority.Equals(v1, v2)).IsFalse();
|
||||
await Assert.That(SemanticVersionComparer.SortOrder.Equals(v1, v2)).IsFalse();
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue