Пример #1
0
    public void TestSimpleInterval()
    {
        var a = IntervalUtility.ParseForInt32("(3.6, 100.9)", NumberStyles.Any, CultureInfo.InvariantCulture);

        Assert.AreEqual(4, a.MinValue);
        Assert.AreEqual(100, a.MaxValue);
        Assert.IsFalse(a.LeftOpen);
        Assert.IsFalse(a.RightOpen);
        Assert.IsFalse(a.IsInInterval(2));
        Assert.IsFalse(a.IsInInterval(3));
        Assert.IsTrue(a.IsInInterval(4));
        Assert.IsTrue(a.IsInInterval(5));
        Assert.IsTrue(a.IsInInterval(99));
        Assert.IsTrue(a.IsInInterval(100));
        Assert.IsFalse(a.IsInInterval(101));
        Assert.IsFalse(a.IsInInterval(102));

        a = IntervalUtility.ParseForInt32("[4, 9)", NumberStyles.Any, CultureInfo.InvariantCulture);
        Assert.AreEqual(4, a.MinValue);
        Assert.AreEqual(9, a.MaxValue);
        Assert.IsFalse(a.LeftOpen);
        Assert.IsTrue(a.RightOpen);
        Assert.IsFalse(a.IsInInterval(2));
        Assert.IsTrue(a.IsInInterval(4));
        Assert.IsTrue(a.IsInInterval(8));
        Assert.IsFalse(a.IsInInterval(9));
        Assert.IsFalse(a.IsInInterval(10));

        a = IntervalUtility.ParseForInt32("(-20, 30]", NumberStyles.Any, CultureInfo.InvariantCulture);
        Assert.AreEqual(-20, a.MinValue);
        Assert.AreEqual(30, a.MaxValue);
        Assert.IsTrue(a.LeftOpen);
        Assert.IsFalse(a.RightOpen);

        a = IntervalUtility.ParseForInt32("(20, )", NumberStyles.Any, CultureInfo.InvariantCulture);
        Assert.AreEqual(20, a.MinValue);
        Assert.AreEqual(int.MaxValue, a.MaxValue);
        Assert.IsTrue(a.LeftOpen);
        Assert.IsFalse(a.RightOpen);
        Assert.IsFalse(a.IsInInterval(int.MinValue));
        Assert.IsFalse(a.IsInInterval(4));
        Assert.IsFalse(a.IsInInterval(20));
        Assert.IsTrue(a.IsInInterval(21));
        Assert.IsTrue(a.IsInInterval(100000));
        Assert.IsTrue(a.IsInInterval(int.MaxValue));

        a = IntervalUtility.ParseForInt32($"(-Infinity, {Numbers.InfiniteSymbol}]", NumberStyles.Any, CultureInfo.InvariantCulture);
        Assert.AreEqual(int.MinValue, a.MinValue);
        Assert.AreEqual(int.MaxValue, a.MaxValue);
        Assert.IsFalse(a.LeftOpen);
        Assert.IsFalse(a.RightOpen);
        Assert.IsTrue(a.IsInInterval(int.MinValue));
        Assert.IsTrue(a.IsInInterval(-1024));
        Assert.IsTrue(a.IsInInterval(0));
        Assert.IsTrue(a.IsInInterval(int.MaxValue));

        var b = IntervalUtility.ParseForDouble($"(null, {Numbers.PositiveInfiniteSymbol}]", NumberStyles.Any, CultureInfo.InvariantCulture);

        Assert.AreEqual(double.NegativeInfinity, b.MinValue);
        Assert.AreEqual(double.PositiveInfinity, b.MaxValue);
        Assert.IsTrue(b.LeftOpen);
        Assert.IsTrue(b.RightOpen);
        Assert.IsTrue(b.IsInInterval(int.MinValue));
        Assert.IsTrue(b.IsInInterval(-1024));
        Assert.IsTrue(b.IsInInterval(0));
        Assert.IsTrue(b.IsInInterval(int.MaxValue));

        b = IntervalUtility.ParseForDouble("(3.1415926, 900]", NumberStyles.Any, CultureInfo.InvariantCulture);
        Assert.AreEqual(3.1415926, b.MinValue);
        Assert.AreEqual(900, b.MaxValue);
        Assert.IsTrue(b.LeftOpen);
        Assert.IsFalse(b.RightOpen);
        Assert.IsFalse(b.IsInInterval(int.MinValue));
        Assert.IsFalse(b.IsInInterval(3.1));
        Assert.IsTrue(b.IsInInterval(3.2));
        Assert.IsTrue(b.IsInInterval(900));
        Assert.IsFalse(b.IsInInterval(1920));
        Assert.IsFalse(b.IsInInterval(int.MaxValue));

        var c = IntervalUtility.ParseForNullableInt64($"(-1000, {Numbers.PositiveInfiniteSymbol}]", NumberStyles.Any, CultureInfo.InvariantCulture);

        Assert.AreEqual(-1000, c.MinValue);
        Assert.IsNull(c.MaxValue);
        Assert.IsTrue(c.LeftOpen);
        Assert.IsTrue(c.RightOpen);
        Assert.IsFalse(c.IsInInterval(int.MinValue));
        Assert.IsTrue(c.IsInInterval(-200));
        Assert.IsTrue(c.IsInInterval(0));
        Assert.IsTrue(c.IsInInterval(int.MaxValue));

        c = IntervalUtility.ParseForNullableInt64("[100, -2]", NumberStyles.Any, CultureInfo.InvariantCulture);
        Assert.AreEqual(100, c.MinValue);
        Assert.AreEqual(-2, c.MaxValue);
        Assert.IsFalse(c.LeftOpen);
        Assert.IsFalse(c.RightOpen);
        Assert.IsFalse(c.IsInInterval(3));
        Assert.IsFalse(c.IsInInterval(-200));

        var d = VersionSimpleInterval.Parse("[1.0.2, 3.4)");

        Assert.AreEqual("1.0.2", d.MinValue);
        Assert.AreEqual("3.4", d.MaxValue);
        Assert.IsFalse(d.LeftOpen);
        Assert.IsTrue(d.RightOpen);
        Assert.IsFalse(d.IsInInterval("1.0.0"));
        Assert.IsFalse(d.IsInInterval("1.0.1"));
        Assert.IsTrue(d.IsInInterval("1.0.2"));
        Assert.IsTrue(d.IsInInterval("1.0.2.0"));
        Assert.IsTrue(d.IsInInterval("1.1"));
        Assert.IsTrue(d.IsInInterval("1.1.0.0-beta2.717+abcdefg"));
        Assert.IsTrue(d.IsInInterval("1.1.0.0-rc1.0+hijklmn"));
        Assert.IsTrue(d.IsInInterval("2.0"));
        Assert.IsTrue(d.IsInInterval("3"));
        Assert.IsTrue(d.IsInInterval("3.3"));
        Assert.IsFalse(d.IsInInterval("3.4"));
        Assert.IsFalse(d.IsInInterval("3.4.0"));
        Assert.IsFalse(d.IsInInterval("3.4-preview"));
        Assert.IsFalse(d.IsInInterval("3.4.0-preview"));
        Assert.IsFalse(d.IsInInterval("3.5.0.1000"));

        d = VersionSimpleInterval.Parse("(NaN, 6.0]");
        Assert.IsNull(d.MinValue);
        Assert.AreEqual("6.0", d.MaxValue);
        Assert.IsTrue(d.LeftOpen);
        Assert.IsFalse(d.RightOpen);
        Assert.IsTrue(d.IsInInterval("0.1.0.0"));
        Assert.IsTrue(d.IsInInterval("2.0"));
        Assert.IsTrue(d.IsInInterval("6.0.0.0"));
        Assert.IsFalse(d.IsInInterval("6.2.0.100"));
    }
Пример #2
0
 /// <summary>
 /// Parses a version interval.
 /// </summary>
 /// <param name="s">The version interval string.</param>
 /// <returns>A version interval.</returns>
 public static VersionSimpleInterval Parse(string s)
 {
     return(IntervalUtility.Parse(s, (left, leftOpen, right, rightOpen) => new VersionSimpleInterval(left, right, leftOpen, rightOpen), ele => ele, null));
 }