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")); }
/// <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)); }