/// <summary> /// Converts the value of the current <see cref="KspVersion"/> to its equivalent /// <see cref="KspVersionRange"/>. /// </summary> /// <returns> /// <para> /// A <see cref="KspVersionRange"/> which specifies a set of versions equivalent to the current /// <see cref="KspVersion"/>. /// </para> /// <para> /// For example, the version "1.0.0.0" would be equivalent to the range ["1.0.0.0", "1.0.0.0"], while the /// version "1.0" would be equivalent to the range ["1.0.0.0", "1.1.0.0"). Where '[' and ']' represent /// inclusive bounds and '(' and ')' represent exclusive bounds. /// </para> /// </returns> public KspVersionRange ToVersionRange() { KspVersionBound lower; KspVersionBound upper; if (IsBuildDefined) { lower = new KspVersionBound(this, inclusive: true); upper = new KspVersionBound(this, inclusive: true); } else if (IsPatchDefined) { lower = new KspVersionBound(new KspVersion(Major, Minor, Patch, 0), inclusive: true); upper = new KspVersionBound(new KspVersion(Major, Minor, Patch + 1, 0), inclusive: false); } else if (IsMinorDefined) { lower = new KspVersionBound(new KspVersion(Major, Minor, 0, 0), inclusive: true); upper = new KspVersionBound(new KspVersion(Major, Minor + 1, 0, 0), inclusive: false); } else if (IsMajorDefined) { lower = new KspVersionBound(new KspVersion(Major, 0, 0, 0), inclusive: true); upper = new KspVersionBound(new KspVersion(Major + 1, 0, 0, 0), inclusive: false); } else { lower = KspVersionBound.Unbounded; upper = KspVersionBound.Unbounded; } return(new KspVersionRange(lower, upper)); }
public void ParameterfulCtorWorksCorrectly() { // Act var result = new KspVersionBound(new KspVersion(1, 2, 3, 4), true); // Assert Assert.AreEqual(new KspVersion(1, 2, 3, 4), result.Value); Assert.IsTrue(result.Inclusive); }
public void ParameterlessCtorWorksCorrectly() { // Act var result = new KspVersionBound(); // Assert Assert.AreEqual(KspVersion.Any, result.Value); Assert.IsTrue(result.Inclusive); }
public KspVersionRange IntersectWith(KspVersionRange other) { if (ReferenceEquals(other, null)) { throw new ArgumentNullException("other"); } var highestLow = KspVersionBound.Highest(Lower, other.Lower); var lowestHigh = KspVersionBound.Lowest(Upper, other.Upper); return(IsEmpty(highestLow, lowestHigh) ? null : new KspVersionRange(highestLow, lowestHigh)); }
public KspVersionRange(KspVersionBound lower, KspVersionBound upper) { if (ReferenceEquals(lower, null)) throw new ArgumentNullException("lower"); if (ReferenceEquals(upper, null)) throw new ArgumentNullException("upper"); Lower = lower; Upper = upper; _string = DeriveString(this); }
public KspVersionRange(KspVersionBound lower, KspVersionBound upper) { if (ReferenceEquals(lower, null)) { throw new ArgumentNullException("lower"); } if (ReferenceEquals(upper, null)) { throw new ArgumentNullException("upper"); } Lower = lower; Upper = upper; _string = DeriveString(this); }
public void EqualityWorksCorrectly(KspVersionBound vb1, KspVersionBound vb2, bool areEqual) { // Act var genericEquals = vb1.Equals(vb2); var nonGenericEquals = vb1.Equals((object)vb2); var equalsOperator = vb1 == vb2; var notEqualsOperator = vb1 != vb2; var reverseEqualsOperator = vb2 == vb1; var reverseNotEqualsOperator = vb2 != vb1; // Assert Assert.AreEqual(areEqual, genericEquals); Assert.AreEqual(areEqual, nonGenericEquals); Assert.AreEqual(areEqual, equalsOperator); Assert.AreNotEqual(areEqual, notEqualsOperator); Assert.AreEqual(areEqual, reverseEqualsOperator); Assert.AreNotEqual(areEqual, reverseNotEqualsOperator); }
private static bool IsEmpty(KspVersionBound lower, KspVersionBound upper) { return(upper.Value < lower.Value || (lower.Value == upper.Value && (!lower.Inclusive || !upper.Inclusive))); }
/// <summary> /// Converts the value of the current <see cref="KspVersion"/> to its equivalent /// <see cref="KspVersionRange"/>. /// </summary> /// <returns> /// <para> /// A <see cref="KspVersionRange"/> which specifies a set of versions equivalent to the current /// <see cref="KspVersion"/>. /// </para> /// <para> /// For example, the version "1.0.0.0" would be equivalent to the range ["1.0.0.0", "1.0.0.0"], while the /// version "1.0" would be equivalent to the range ["1.0.0.0", "1.1.0.0"). Where '[' and ']' represent /// inclusive bounds and '(' and ')' represent exclusive bounds. /// </para> /// </returns> public KspVersionRange ToVersionRange() { KspVersionBound lower; KspVersionBound upper; if (IsBuildDefined) { lower = new KspVersionBound(this, inclusive: true); upper = new KspVersionBound(this, inclusive: true); } else if (IsPatchDefined) { lower = new KspVersionBound(new KspVersion(Major, Minor, Patch, 0), inclusive: true); upper = new KspVersionBound(new KspVersion(Major, Minor, Patch + 1, 0), inclusive: false); } else if (IsMinorDefined) { lower = new KspVersionBound(new KspVersion(Major, Minor, 0, 0), inclusive: true); upper = new KspVersionBound(new KspVersion(Major, Minor + 1, 0, 0), inclusive: false); } else if (IsMajorDefined) { lower = new KspVersionBound(new KspVersion(Major, 0, 0, 0), inclusive: true); upper = new KspVersionBound(new KspVersion(Major + 1, 0, 0, 0), inclusive: false); } else { lower = KspVersionBound.Unbounded; upper = KspVersionBound.Unbounded; } return new KspVersionRange(lower, upper); }
public void ReferenceEqualityWorksCorrectly() { // Arrange var sut = new KspVersionBound(); // Act var genericEquals = sut.Equals(sut); var nonGenericEquals = sut.Equals((object)sut); // Assert Assert.IsTrue(genericEquals); Assert.IsTrue(nonGenericEquals); }
public void NullEqualityWorksCorrectly() { // Act // ReSharper disable ConditionIsAlwaysTrueOrFalse var genericEquals = new KspVersionBound().Equals(null); var nonGenericEquals = new KspVersionBound().Equals((object)null); var equalsOperatorNullLeft = null == new KspVersionBound(); var equalsOperatorNullRight = new KspVersionBound() == null; var notEqualsOperatorNullLeft = null != new KspVersionBound(); var notEqualsOperatorNullRight = new KspVersionBound() != null; // ReSharper restore ConditionIsAlwaysTrueOrFalse // ASsert Assert.IsFalse(genericEquals); Assert.IsFalse(nonGenericEquals); Assert.IsFalse(equalsOperatorNullLeft); Assert.IsFalse(equalsOperatorNullRight); Assert.IsTrue(notEqualsOperatorNullLeft); Assert.IsTrue(notEqualsOperatorNullRight); }
public void GetHashCodeDoesNotThrow( [Random(0, int.MaxValue, 1)]int lowerMajor, [Random(0, int.MaxValue, 1)]int lowerMinor, [Random(0, int.MaxValue, 1)]int lowerPatch, [Random(0, int.MaxValue, 1)]int lowerBuilder, [Values(false, true)]bool lowerInclusive, [Random(0, int.MaxValue, 1)]int upperMajor, [Random(0, int.MaxValue, 1)]int upperMinor, [Random(0, int.MaxValue, 1)]int upperPatch, [Random(0, int.MaxValue, 1)]int upperBuilder, [Values(false, true)]bool upperInclusive ) { // Arrange var lower = new KspVersionBound( new KspVersion(lowerMajor, lowerMinor, lowerPatch, lowerBuilder), lowerInclusive ); var upper = new KspVersionBound( new KspVersion(upperMajor, upperMinor, upperPatch, upperBuilder), upperInclusive ); // Act // ReSharper disable once ReturnValueOfPureMethodIsNotUsed TestDelegate act = () => new KspVersionRange(lower, upper).GetHashCode(); // Assert Assert.That(act, Throws.Nothing); }
public void CtorWorksCorrectly() { // Arrange var lower = new KspVersionBound(new KspVersion(1, 2, 3, 4), false); var upper = new KspVersionBound(new KspVersion(5, 6, 7, 8), true); // Act var result = new KspVersionRange(lower, upper); // Assert Assert.That(result.Lower, Is.EqualTo(lower)); Assert.That(result.Upper, Is.EqualTo(upper)); }