Esempio n. 1
0
            int IComparer <SymbolAndPower> .Compare(SymbolAndPower x, SymbolAndPower y)
            {
                if (Math.Sign(x.Power) != Math.Sign(y.Power))
                {
                    return(-1 * x.Power.CompareTo(y.Power));
                }

                var indexOfX = Array.IndexOf(Order, x.Symbol);
                var indexOfY = Array.IndexOf(Order, y.Symbol);

                if (indexOfX < 0 && indexOfY < 0)
                {
                    return(string.Compare(x.Symbol, y.Symbol, StringComparison.Ordinal));
                }

                return(indexOfX.CompareTo(indexOfY));
            }
Esempio n. 2
0
        internal static ErrorCase <IReadOnlyList <SymbolAndPower> > CreateForSymbol(string text)
        {
            IReadOnlyList <SymbolAndPower> expected = new SymbolAndPower[0];

            return(new ErrorCase <IReadOnlyList <SymbolAndPower> >(text, 0, expected, 0, null));
        }
Esempio n. 3
0
            internal void Append(SymbolAndPower symbolAndPower, SymbolFormat symbolFormat)
            {
                this.Append(symbolAndPower.Symbol);
                if (symbolAndPower.Power == 1)
                {
                    return;
                }

                switch (symbolFormat)
                {
                case SymbolFormat.SignedHatPowers:
                    this.Append('^');
                    this.Append(symbolAndPower.Power.ToString(CultureInfo.InvariantCulture));
                    break;

                case SymbolFormat.FractionHatPowers:
                {
                    var power = Math.Abs(symbolAndPower.Power);
                    if (power == 1)
                    {
                        return;
                    }

                    this.Append('^');
                    this.Append(power.ToString(CultureInfo.InvariantCulture));
                    break;
                }

                case SymbolFormat.SignedSuperScript:
                {
                    if (symbolAndPower.Power == 1)
                    {
                        return;
                    }

                    if (symbolAndPower.Power < 0)
                    {
                        this.Append(SuperScript.Minus);
                    }

                    this.Append(SuperScript.GetChar(Math.Abs(symbolAndPower.Power)));
                    break;
                }

                case SymbolFormat.Default:
                case SymbolFormat.FractionSuperScript:
                {
                    var power = Math.Abs(symbolAndPower.Power);
                    if (power == 1)
                    {
                        return;
                    }

                    this.Append(SuperScript.GetChar(Math.Abs(symbolAndPower.Power)));
                    break;
                }

                default:
                    throw new ArgumentOutOfRangeException(nameof(symbolFormat), symbolFormat, null);
                }
            }