Пример #1
0
        /// <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));
        }
Пример #2
0
        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);
        }
Пример #3
0
        public void ParameterlessCtorWorksCorrectly()
        {
            // Act
            var result = new KspVersionBound();

            // Assert
            Assert.AreEqual(KspVersion.Any, result.Value);
            Assert.IsTrue(result.Inclusive);
        }
Пример #4
0
        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));
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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);
        }
Пример #8
0
 private static bool IsEmpty(KspVersionBound lower, KspVersionBound upper)
 {
     return(upper.Value < lower.Value ||
            (lower.Value == upper.Value && (!lower.Inclusive || !upper.Inclusive)));
 }
Пример #9
0
        /// <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);
        }
Пример #10
0
        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);
        }
Пример #11
0
        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);
        }
Пример #12
0
        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);
        }
Пример #13
0
        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));
        }