Some checks failed
default / dotnet-default-workflow (push) Failing after 33s
115 lines
No EOL
4.6 KiB
C#
115 lines
No EOL
4.6 KiB
C#
// 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();
|
|
}
|
|
} |