List <Interval> GetIntervalsList()
        {
            List <Interval> intervals    = new List <Interval>();
            List <string>   intervalsStr = new List <string>();

            intervalsStr = IntervalString.Split('U').ToList();
            foreach (var interStr in intervalsStr)
            {
                intervals.Add(Interval.Parse(interStr));
            }

            return(intervals);
        }
        internal Intervals Subs(Function func)
        {
            List <string>   intervalsStr;
            List <Interval> intervals = new List <Interval>();

            if (func.Argument.Power == 1)
            {
                intervalsStr = IntervalString.Split('U').ToList();

                foreach (var interStr in intervalsStr)
                {
                    intervals.Add(Interval.Parse(interStr));
                }

                foreach (var interval in intervals)
                {
                    if (!interval.IsInfinityInterval)
                    {
                        Fraction leftBorder  = func.Eq(interval.LeftBorder);
                        Fraction rightBorder = func.Eq(interval.RightBorder);
                        interval.ChangeBorders(leftBorder, rightBorder);
                    }
                    else
                    {
                        Fraction border = func.Eq(interval.Border);
                        interval.ChangeBorderForInfinity(border);
                    }
                }
            }

            Intervals newIntervals = new Intervals(intervals);
            Intervals endInterval;

            if (func.ValuesRange != null)
            {
                endInterval = newIntervals * func.ValuesRange;
            }
            else
            {
                endInterval = newIntervals;
            }

            return(endInterval);
        }
 public Property SimpleTryParseStringOfComparablesIsEquivalentToComparerBasedOne(IntervalString <T, DefaultValueComparer <T> > intervalString) =>
 Result.From(() => (Interval <T> .TryParse(intervalString.String, out var interval), interval)).Equals(
 public Property FullTryParseSpanOfComparablesIsEquivalentToComparerBasedOne(IntervalString <T, DefaultValueComparer <T> > intervalString, Parser <T> parser) =>
 Result.From(() => (Interval <T> .TryParse(intervalString.Span, parser.TryParseSpan, out var interval), interval)).Equals(
 public Property SimpleParseStringOfComparablesIsEquivalentToComparerBasedOne(IntervalString <T, DefaultValueComparer <T> > intervalString) =>
 Result.From(() => Interval <T> .Parse(intervalString.String)).Equals(
     Result.From(() => Interval <T, DefaultValueComparer <T> > .Parse(intervalString.String))).ToProperty();
 public Property FullParseSpanOfComparablesIsEquivalentToComparerBasedOne(IntervalString <T, DefaultValueComparer <T> > intervalString, Parser <T> parser) =>
 Result.From(() => Interval <T> .Parse(intervalString.Span, parser.ParseSpan)).Equals(
     Result.From(() => Interval <T, DefaultValueComparer <T> > .Parse(intervalString.Span, parser.ParseSpan))).ToProperty();
        internal Intervals(List <Interval> intervals)
        {
            IntervalString    = string.Empty;
            IncludedPoints    = new List <Fraction>();
            NotIncludedPoints = new List <Fraction>();
            Points            = new List <Fraction>();
            IntervalsList     = intervals;

            foreach (var interval in intervals)
            {
                if (interval.IsInfinityInterval)
                {
                    if (interval.WichSide)
                    {
                        IntervalString += $"(-inf {interval.Border}{(interval.BorderIsIncluded ? "]" : ")")}U";
                    }
                    else
                    {
                        IntervalString += $"{(interval.BorderIsIncluded ? "[" : "(")}{interval.Border} +inf)";
                    }

                    if (interval.BorderIsIncluded)
                    {
                        IncludedPoints.Add(interval.Border);
                    }
                    else
                    {
                        NotIncludedPoints.Add(interval.Border);
                    }

                    Points.Add(interval.Border);
                }
                else
                {
                    if (!interval.LeftBorder.Equals(interval.RightBorder))
                    {
                        IntervalString += $"{(interval.LeftIsIncluded ? "[" : "(")}{interval.LeftBorder} {interval.RightBorder}{(interval.RightIsIncluded ? "]" : ")")}U";
                    }
                    else
                    {
                        IntervalString += $"{{{interval.LeftBorder}}}U";
                    }

                    if (interval.LeftIsIncluded)
                    {
                        IncludedPoints.Add(interval.LeftBorder);
                    }
                    else
                    {
                        NotIncludedPoints.Add(interval.LeftBorder);
                    }

                    if (interval.RightIsIncluded)
                    {
                        IncludedPoints.Add(interval.RightBorder);
                    }
                    else
                    {
                        NotIncludedPoints.Add(interval.RightBorder);
                    }

                    Points.Add(interval.LeftBorder);
                    Points.Add(interval.RightBorder);
                }
            }
            IntervalString = IntervalString.Trim('U');
        }
 public Property SimpleTryParseStringIsEquivalentToFullTryParseSpan(IntervalString <T, TComparer> intervalString) =>
 Result.From(() => (Interval <T, TComparer> .TryParse(intervalString.String, out var interval), interval)).Equals(
 public Property FullParseStringIsEquivalentToFullParseSpan(IntervalString <T, TComparer> intervalString, Parser <T> parser) =>
 Result.From(() => Interval <T, TComparer> .Parse(intervalString.String, parser.ParseString)).Equals(
     Result.From(() => Interval <T, TComparer> .Parse(intervalString.Span, parser.ParseSpan))).
 When(intervalString.String != null).
 Or(!parser.IsSupported);
 public Property SimpleParseStringIsEquivalentToFullParseString(IntervalString <T, TComparer> intervalString) =>
 Result.From(() => Interval <T, TComparer> .Parse(intervalString.String)).Equals(
     Result.From(() => Interval <T, TComparer> .Parse(intervalString.String, GetSimpleParser <Parse <T> >("Parse")))).
 When(intervalString.String != null);
 public Property SimpleParseSpanIsEquivalentToFullParseSpan(IntervalString <T, TComparer> intervalString) =>
 Result.From(() => Interval <T, TComparer> .Parse(intervalString.Span)).Equals(
     Result.From(() => Interval <T, TComparer> .Parse(intervalString.Span, GetSimpleParser <ParseSpan <T> >("Parse")))).ToProperty();