public void BracketTest() { var parser = new ExpressionSerializer(); var expressionTree = parser.Deserialize("2/{2*2}"); var otherExpressionTree = parser.Deserialize("{2/2}*2"); Assert.IsFalse(expressionTree.Equals(otherExpressionTree)); }
public ExpressionModel(string expression, Action<ExpressionModel> onChange, params ExpressionRule[] rules) { selectionParent = null; selection = new List<ExpressionBase>(); identities = new List<Identity>(); serializer = new ExpressionSerializer(); analyzer = new ExpressionAnalyzer(); this.expression = serializer.Deserialize(expression); foreach (ExpressionRule rule in rules) { analyzer.Add(rule); } OnChanged = onChange; callOnChanged(); }
public void CloneTest() { var parser = new ExpressionSerializer(); var expressionTree = parser.Deserialize("a*b"); var complexExpressionTree = parser.Deserialize("sqrt(pi^2)+2-5*(3-2)+pi"); var crazyComplexExpressionTree = parser.Deserialize("sqrt(pi^2)+(-5)*2^6/--2*sqrt(2*5^5)"); var cloneExpressionTree = expressionTree.Clone(); var cloneComplexExpressionTree = complexExpressionTree.Clone(); var cloneCrazyComplexExpressionTree = crazyComplexExpressionTree.Clone(); Assert.IsTrue(expressionTree.Equals(cloneExpressionTree)); Assert.IsTrue(expressionTree == cloneExpressionTree); Assert.IsTrue(complexExpressionTree.Equals(cloneComplexExpressionTree)); Assert.IsTrue(complexExpressionTree == cloneComplexExpressionTree); Assert.IsTrue(crazyComplexExpressionTree == cloneCrazyComplexExpressionTree); Assert.IsTrue(crazyComplexExpressionTree.Equals(cloneCrazyComplexExpressionTree)); }
public void ExpressionSerializerCalculate() { var parser = new ExpressionSerializer(); Assert.AreEqual(2, parser.Deserialize("1+1").Calculate(), "1 + 1 = 2"); Assert.AreEqual(5, parser.Deserialize("--5").Calculate(), "--5 = 5"); Assert.AreEqual(2, parser.Deserialize("sqrt(-2^2)").Calculate(), "sqrt(-2^2) = 2"); Assert.AreEqual(2, parser.Deserialize("sqrt(sqrt(16))").Calculate(), "sqrt(sqrt(16)) = 2"); Assert.AreEqual(-Math.PI, parser.Deserialize("-pi").Calculate(), "-pi = " + -Math.PI); Assert.IsTrue(double.IsNaN(parser.Deserialize("sqrt(-1)").Calculate().Value), "sqrt(-1) = NaN"); Assert.AreEqual(Math.Pow(Math.PI, 2), parser.Deserialize("pi^2").Calculate(), "pi^2 = " + Math.Pow(Math.PI, 2)); Assert.AreEqual(4, parser.Deserialize("2^sqrt(4)").Calculate(), "2^sqrt(4) = 4"); Assert.AreEqual(24, parser.Deserialize("sqrt(4)*sqrt(9)*sqrt(16)").Calculate(), "sqrt(4) * sqrt(9) * sqrt(16) = 24"); Assert.AreEqual(-4, parser.Deserialize("-(2+2)").Calculate(), "-(2 + 2) = -4"); Assert.AreEqual(24, parser.Deserialize("(2+2)*(3+3)").Calculate(), "(2 + 2) * (3 + 3) = 24"); Assert.AreEqual(24, parser.Deserialize("-(2+2)*-(3+3)").Calculate(), "-(2 + 2) * -(3 + 3) = 24"); Assert.AreEqual(20, parser.Deserialize("2*sqrt(4)*5").Calculate(), "2 * sqrt(4) * 5 = 20"); Assert.AreEqual(-2, parser.Deserialize("-sqrt(4)").Calculate(), "-sqrt(2) = -2"); Assert.IsTrue(double.IsInfinity(parser.Deserialize("1/0").Calculate().Value), "1/0 = Infinity"); Assert.IsTrue(double.IsNaN(parser.Deserialize("0/0").Calculate().Value), "0/0 = NaN"); }
/// <summary> /// Sets up the model to complete the level. /// </summary> /// <param name="level">The desired level.</param> /// <param name="category">The desired category.</param> public void SetLevel(int level, int category) { User.CurrentLevelIndex = level; User.CurrentCategoryIndex = category; ExpressionSerializer serializer = new ExpressionSerializer(); int endValue = serializer.Deserialize(User.Categories[category][level].StarExpressions.Last()).Size; int startValue = serializer.Deserialize(User.Categories[category][level].StartExpression).Size; int currentValue = serializer.Deserialize(User.Categories[category][level].CurrentExpression).Size; ProgressBar = new ProgressbarStar(startValue, endValue, currentValue); StarExpressions = new List<ExpressionBase>(); foreach (string starExpression in User.CurrentLevel.StarExpressions) { ExpressionBase starExpressionBase = serializer.Deserialize(starExpression); StarExpressions.Add(starExpressionBase); ProgressBar.Add(starExpressionBase.Size); } ExprModel = new ExpressionModel(User.Categories[category][level].CurrentExpression, (m) => onExpressionChanged(m), Rules.ExponentToProductRule, Rules.ProductToExponentRule, Rules.VariableWithNegativeExponent, Rules.ReverseVariableWithNegativeExponent, Rules.ExponentProduct, Rules.CommonPowerParenthesisRule, Rules.ReverseCommonPowerParenthesisRule, Rules.SplittingFractions, Rules.ProductParenthesis, Rules.ReverseProductParenthesis, Rules.ParenthesisPowerRule, Rules.FractionToProductRule, Rules.SquareRootRule, Rules.RemoveParenthesisRule, Rules.ProductOfConstantAndFraction, Rules.FactorizeUnaryMinus, Rules.FactorizationRule, Rules.MultiplyOneRule, Rules.AddFractionWithCommonDenominatorRule, Rules.RemoveNull, Rules.MultiplyByNull, Rules.CalculateVariadicRule, Rules.CalculateBinaryRule, Rules.MultiplyMinusRule, Rules.DivisionEqualsOneRule, Rules.ProductOfFractions, Rules.VariablesEqualNull); UpdateLevelData(); onExpressionChanged(ExprModel); }
public ExpressionBase expr(string expression) { ExpressionSerializer serializer = new ExpressionSerializer(); return serializer.Deserialize(expression); }
public void ExpressionSerializerDeserialize() { var parser = new ExpressionSerializer(); var exp = parser.Deserialize("pi+1"); Assert.IsInstanceOfType(exp, typeof(VariadicOperatorExpression), "Root is Operator"); Assert.AreEqual(OperatorType.Add, (exp as VariadicOperatorExpression).Type, "Root operator is add"); Assert.IsInstanceOfType((exp as VariadicOperatorExpression)[0], typeof(ConstantExpression), "Root.Left is Constant"); Assert.AreEqual("Pi", ((exp as VariadicOperatorExpression)[0] as ConstantExpression).Value, "Root.Left is Pi"); Assert.IsInstanceOfType((exp as VariadicOperatorExpression)[1], typeof(NumericExpression), "Root.Right is Numeric"); Assert.AreEqual("1", ((exp as VariadicOperatorExpression)[1] as NumericExpression).Value, "Root.Right is 1"); }
public void ExpressionSerializerConstruct() { var parser = new ExpressionSerializer(); Assert.IsNotNull(parser, "Parser constructed"); }
public void ExpressionSerializerSerialize() { var parser = new ExpressionSerializer(); ExpressionBase exp; exp = new BinaryOperatorExpression( new NumericExpression(1), new NumericExpression(1), OperatorType.Add); Assert.AreEqual("{1}+{1}", parser.Serialize(exp), "{1}+{1}"); exp = new BinaryOperatorExpression( new NumericExpression(1), new NumericExpression(1), OperatorType.Divide); Assert.AreEqual("{1}/{1}", parser.Serialize(exp), "{1}/{1}"); exp = new BinaryOperatorExpression( new NumericExpression(1), new NumericExpression(1), OperatorType.Multiply); Assert.AreEqual("{1}*{1}", parser.Serialize(exp), "{1}*{1}"); exp = new BinaryOperatorExpression( new NumericExpression(1), new NumericExpression(1), OperatorType.Power); Assert.AreEqual("{1}^{1}", parser.Serialize(exp), "{1}^{1}"); exp = new BinaryOperatorExpression( new NumericExpression(1), new NumericExpression(1), OperatorType.Subtract); Assert.AreEqual("{1}-{1}", parser.Serialize(exp), "{1}-{1}"); }
public void ExpressionSerializerDeserializeToSerialize() { var parser = new ExpressionSerializer(); var exp = parser.Deserialize("1 + 1"); Assert.AreEqual("{1}+{1}", parser.Serialize(exp), "'1 + 1' = '{1}+{1}'"); }