コード例 #1
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));
        }
コード例 #2
0
ファイル: KspVersionRange.cs プロジェクト: Zor-X-L/CKAN
        public bool IsSupersetOf(KspVersionRange other)
        {
            if (ReferenceEquals(other, null))
                throw new ArgumentNullException("other");

            var lowerIsOkay = Lower.Value.IsAny
                || (Lower.Value < other.Lower.Value)
                || (Lower.Value == other.Lower.Value && (Lower.Inclusive || !other.Lower.Inclusive));

            var upperIsOkay = Upper.Value.IsAny
                || (other.Upper.Value < Upper.Value)
                || (other.Upper.Value == Upper.Value && (Upper.Inclusive || !other.Upper.Inclusive));

            return lowerIsOkay && upperIsOkay;
        }
コード例 #3
0
        public bool IsSupersetOf(KspVersionRange other)
        {
            if (ReferenceEquals(other, null))
            {
                throw new ArgumentNullException("other");
            }

            var lowerIsOkay = Lower.Value.IsAny ||
                              (Lower.Value < other.Lower.Value) ||
                              (Lower.Value == other.Lower.Value && (Lower.Inclusive || !other.Lower.Inclusive));

            var upperIsOkay = Upper.Value.IsAny ||
                              (other.Upper.Value < Upper.Value) ||
                              (other.Upper.Value == Upper.Value && (Upper.Inclusive || !other.Upper.Inclusive));

            return(lowerIsOkay && upperIsOkay);
        }
コード例 #4
0
        public bool Compatible(KspVersion gameVersion, CkanModule module)
        {
            var gameVersionRange = gameVersion.ToVersionRange();

            var moduleRange = KspVersionRange.Any;

            if (module.ksp_version != null)
            {
                moduleRange = module.ksp_version.ToVersionRange();
            }
            else if (module.ksp_version_min != null || module.ksp_version_max != null)
            {
                if (module.ksp_version_min != null && module.ksp_version_max != null)
                {
                    if (module.ksp_version_min <= module.ksp_version_max)
                    {
                        var minRange = module.ksp_version_min.ToVersionRange();
                        var maxRange = module.ksp_version_max.ToVersionRange();

                        moduleRange = new KspVersionRange(minRange.Lower, maxRange.Upper);
                    }
                    else
                    {
                        return false;
                    }
                }
                else if (module.ksp_version_min != null)
                {
                    var minRange = module.ksp_version_min.ToVersionRange();

                    moduleRange = new KspVersionRange(minRange.Lower, KspVersionBound.Unbounded);
                }
                else if (module.ksp_version_max != null)
                {
                    var maxRange = module.ksp_version_max.ToVersionRange();

                    moduleRange = new KspVersionRange(KspVersionBound.Unbounded, maxRange.Upper);
                }
            }
            else
            {
                return true;
            }

            return moduleRange.IsSupersetOf(gameVersionRange);
        }
コード例 #5
0
ファイル: StrictGameComparator.cs プロジェクト: KSP-CKAN/CKAN
        public override bool SingleVersionsCompatible(KspVersion gameVersion, CkanModule module)
        {
            var gameVersionRange = gameVersion.ToVersionRange();

            var moduleRange = KspVersionRange.Any;

            if (module.ksp_version != null)
            {
                moduleRange = module.ksp_version.ToVersionRange();
            }
            else if (module.ksp_version_min != null || module.ksp_version_max != null)
            {
                if (module.ksp_version_min != null && module.ksp_version_max != null)
                {
                    if (module.ksp_version_min <= module.ksp_version_max)
                    {
                        var minRange = module.ksp_version_min.ToVersionRange();
                        var maxRange = module.ksp_version_max.ToVersionRange();

                        moduleRange = new KspVersionRange(minRange.Lower, maxRange.Upper);
                    }
                    else
                    {
                        return false;
                    }
                }
                else if (module.ksp_version_min != null)
                {
                    var minRange = module.ksp_version_min.ToVersionRange();

                    moduleRange = new KspVersionRange(minRange.Lower, KspVersionBound.Unbounded);
                }
                else if (module.ksp_version_max != null)
                {
                    var maxRange = module.ksp_version_max.ToVersionRange();

                    moduleRange = new KspVersionRange(KspVersionBound.Unbounded, maxRange.Upper);
                }
            }
            else
            {
                return true;
            }

            return gameVersionRange.IntersectWith(moduleRange) != null;
        }
コード例 #6
0
ファイル: KspVersionRange.cs プロジェクト: Zor-X-L/CKAN
        private static string DeriveString(KspVersionRange versionRange)
        {
            var sb = new StringBuilder();

            sb.Append(versionRange.Lower.Inclusive ? '[' : '(');

            if (versionRange.Lower.Value != null)
                sb.Append(versionRange.Lower.Value);

            sb.Append(',');

            if (versionRange.Upper.Value != null)
                sb.Append(versionRange.Upper.Value);

            sb.Append(versionRange.Upper.Inclusive ? ']' : ')');

            return sb.ToString();
        }
コード例 #7
0
        private static string DeriveString(KspVersionRange versionRange)
        {
            var sb = new StringBuilder();

            sb.Append(versionRange.Lower.Inclusive ? '[' : '(');

            if (versionRange.Lower.Value != null)
            {
                sb.Append(versionRange.Lower.Value);
            }

            sb.Append(',');

            if (versionRange.Upper.Value != null)
            {
                sb.Append(versionRange.Upper.Value);
            }

            sb.Append(versionRange.Upper.Inclusive ? ']' : ')');

            return(sb.ToString());
        }
コード例 #8
0
ファイル: KspVersionTests.cs プロジェクト: Zor-X-L/CKAN
        public void ToVersionRangeWorksCorrectly(KspVersion version, KspVersionRange expectedRange)
        {
            // Act
            var result = version.ToVersionRange();

            // Assert
            Assert.AreEqual(expectedRange, result);
        }
コード例 #9
0
ファイル: KspVersionRangeTests.cs プロジェクト: Zor-X-L/CKAN
        public void NullEqualityWorksCorrectly()
        {
            // Arrange
            var sut = new KspVersionRange(new KspVersionBound(), new KspVersionBound());

            // Act
            // ReSharper disable ConditionIsAlwaysTrueOrFalse
            var genericEquals = sut.Equals(null);
            var nonGenericEquals = sut.Equals((object)null);
            var equalsOperatorNullLeft = null == sut;
            var equalsOperatorNullRight = sut == null;
            var notEqualsOperatorNullLeft = null != sut;
            var notEqualsOperatorNullRight = sut != null;
            // ReSharper restore ConditionIsAlwaysTrueOrFalse

            // ASsert
            Assert.IsFalse(genericEquals);
            Assert.IsFalse(nonGenericEquals);
            Assert.IsFalse(equalsOperatorNullLeft);
            Assert.IsFalse(equalsOperatorNullRight);
            Assert.IsTrue(notEqualsOperatorNullLeft);
            Assert.IsTrue(notEqualsOperatorNullRight);
        }
コード例 #10
0
ファイル: KspVersionRangeTests.cs プロジェクト: Zor-X-L/CKAN
        public void ReferenceEqualityWorksCorrectly()
        {
            // Arrange
            var sut = new KspVersionRange(new KspVersionBound(), new KspVersionBound());

            // Act
            var genericEquals = sut.Equals(sut);
            var nonGenericEquals = sut.Equals((object)sut);

            // Assert
            Assert.IsTrue(genericEquals);
            Assert.IsTrue(nonGenericEquals);
        }
コード例 #11
0
ファイル: KspVersionRangeTests.cs プロジェクト: Zor-X-L/CKAN
        public void EqualityWorksCorrectly(KspVersionRange vr1, KspVersionRange vr2, bool areEqual)
        {
            // Act
            var genericEquals = vr1.Equals(vr2);
            var nonGenericEquals = vr1.Equals((object)vr2);
            var equalsOperator = vr1 == vr2;
            var notEqualsOperator = vr1 != vr2;
            var reverseEqualsOperator = vr2 == vr1;
            var reverseNotEqualsOperator = vr2 != vr1;

            // 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);
        }
コード例 #12
0
ファイル: KspVersionRangeTests.cs プロジェクト: Zor-X-L/CKAN
        public void IsSupersetOfThrowsOnNullParameter()
        {
            // Arrange
            var sut = new KspVersionRange(new KspVersionBound(), new KspVersionBound());

            // Act
            TestDelegate act = () => sut.IsSupersetOf(null);

            // Assert
            Assert.That(act, Throws.Exception);
        }
コード例 #13
0
ファイル: KspVersionRangeTests.cs プロジェクト: Zor-X-L/CKAN
        public void IsSupersetOfWorksCorrectly(KspVersionRange left, KspVersionRange right, bool expected)
        {
            // Act
            var result = left.IsSupersetOf(right);

            // Assert
            Assert.That(result, Is.EqualTo(expected));
        }
コード例 #14
0
ファイル: KspVersionRangeTests.cs プロジェクト: Zor-X-L/CKAN
        public void ToStringWorksCorrectly(KspVersionRange vr, string expected)
        {
            // Act
            var result = vr.ToString();

            // Assert
            Assert.That(result, Is.EqualTo(expected));
        }
コード例 #15
0
ファイル: KspVersionRangeTests.cs プロジェクト: Zor-X-L/CKAN
        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));
        }