public void OverrideConstTest() { IExpression exp = new Define(new Variable("π"), new Number(1)); ParameterCollection parameters = new ParameterCollection(); var answer = exp.Calculate(parameters); Assert.AreEqual(1.0, parameters["π"]); }
public void SimpDefineTest() { IExpression exp = new Define(new Variable("x"), new Number(1)); ParameterCollection parameters = new ParameterCollection(); var answer = exp.Calculate(parameters); Assert.AreEqual(1.0, parameters["x"]); Assert.AreEqual(double.NaN, answer); }
public void DefineExpTest() { var exp = new Define(new Variable("x"), new Mul(new Number(4), new Add(new Number(8), new Number(1)))); var parameters = new ExpressionParameters(); var answer = exp.Execute(parameters); Assert.Equal(36.0, parameters.Variables["x"]); Assert.Equal("The value '4 * (8 + 1)' was assigned to the variable 'x'.", answer); }
public void DefineExpTest() { IExpression exp = new Define(new Variable("x"), new Mul(new Number(4), new Add(new Number(8), new Number(1)))); ParameterCollection parameters = new ParameterCollection(); var answer = exp.Calculate(parameters); Assert.AreEqual(36, parameters["x"]); Assert.AreEqual(double.NaN, answer); }
public void DefineWithFuncTest() { IExpression exp = new Define(new Variable("x"), new Sin(new Number(1))); ParameterCollection parameters = new ParameterCollection(); ExpressionParameters expParams = new ExpressionParameters(AngleMeasurement.Radian, parameters); var answer = exp.Calculate(expParams); Assert.AreEqual(Math.Sin(1), parameters["x"]); Assert.AreEqual(double.NaN, answer); }
public void DefineWithFuncTest() { var exp = new Define(new Variable("x"), new Sin(new Number(1))); var parameters = new ParameterCollection(); var expParams = new ExpressionParameters(AngleMeasurement.Radian, parameters); var answer = exp.Execute(expParams); Assert.Equal(Math.Sin(1), parameters["x"]); Assert.Equal("The value 'sin(1)' was assigned to the variable 'x'.", answer); }
public void DefineFuncWithParamsTest() { var uf = new UserFunction("s", 1); var func = new Sin(new Variable("x")); var exp = new Define(uf, func); var parameters = new ExpressionParameters(); var result = exp.Execute(parameters); Assert.Equal(func, parameters.Functions[uf]); Assert.Equal("The expression 'sin(x)' was assigned to the function 's(x1)'.", result); }
public void DefineFuncTest() { var uf = new UserFunction("s", new IExpression[0], 0); var func = new Sin(new Number(1)); var exp = new Define(uf, func); var parameters = new ExpressionParameters(); var result = exp.Execute(parameters); Assert.Equal(func, parameters.Functions[uf]); Assert.Equal("The expression 'sin(1)' was assigned to the function 's()'.", result); }
public void CalculateWhileTest() { var parameters = new ExpressionParameters(); parameters.Variables.Add(new Parameter("x", 0)); var body = new Define(new Variable("x"), new Add(new Variable("x"), new Number(2))); var cond = new LessThan(new Variable("x"), new Number(10)); var @while = new While(body, cond); @while.Execute(parameters); Assert.Equal(10.0, parameters.Variables["x"]); }
public void CalculateForTest() { var parameters = new ExpressionParameters(); var init = new Define(new Variable("i"), new Number(0)); var cond = new LessThan(new Variable("i"), new Number(10)); var iter = new Define(new Variable("i"), new Add(new Variable("i"), new Number(1))); var @for = new For(new Variable("i"), init, cond, iter); @for.Execute(parameters); Assert.Equal(10.0, parameters.Variables["i"]); }
public void Define() { var define = new Define(new Variable("x"), new Add(new Number(2), new Number(2))); var expected = new Define(new Variable("x"), new Number(4)); SimpleTest(define, expected); }
public void SolveStringTest() { var lexer = new Mock<ILexer>(); var parser = new Mock<IParser>(); var simplifier = new Mock<ISimplifier>(); var strExp = "x := 1"; var exp = new Define(new Variable("x"), new Number(1)); var tokens = new List<IToken> { new FunctionToken(Functions.Define, 2), new SymbolToken(Symbols.OpenBracket), new VariableToken("x"), new SymbolToken(Symbols.Comma), new NumberToken(1), new SymbolToken(Symbols.CloseBracket) }; lexer.Setup(l => l.Tokenize(strExp)).Returns(() => tokens); parser.Setup(p => p.Parse(tokens)).Returns(() => exp); simplifier.Setup(s => s.Analyze(It.IsAny<Define>())).Returns<Define>(e => e); var processor = new Processor(lexer.Object, parser.Object, simplifier.Object, null); var result = processor.Solve<StringResult>(strExp); lexer.Verify(l => l.Tokenize(It.IsAny<string>()), Times.Once()); parser.Verify(p => p.Parse(It.IsAny<IEnumerable<IToken>>()), Times.Once()); Assert.Equal("The value '1' was assigned to the variable 'x'.", result.Result); }
public void OverrideConstTest() { var exp = new Define(new Variable("π"), new Number(1)); var parameters = new ExpressionParameters(); exp.Execute(parameters); Assert.Equal(1.0, parameters.Variables["π"]); }
public void SimpDefineTest() { var exp = new Define(new Variable("x"), new Number(1)); var parameters = new ExpressionParameters(); var answer = exp.Execute(parameters); Assert.Equal(1.0, parameters.Variables["x"]); Assert.Equal("The value '1' was assigned to the variable 'x'.", answer); }
/// <summary> /// Creates an expression object from <see cref="FunctionToken"/>. /// </summary> /// <param name="token">The function token.</param> /// <returns>An expression.</returns> protected virtual IExpression CreateFunction(FunctionToken token) { IExpression exp; switch (token.Function) { case Functions.Add: exp = new Add(); break; case Functions.Sub: exp = new Sub(); break; case Functions.Mul: exp = new Mul(); break; case Functions.Div: exp = new Div(); break; case Functions.Pow: exp = new Pow(); break; case Functions.Absolute: exp = new Abs(); break; case Functions.Sine: exp = new Sin(); break; case Functions.Cosine: exp = new Cos(); break; case Functions.Tangent: exp = new Tan(); break; case Functions.Cotangent: exp = new Cot(); break; case Functions.Secant: exp = new Sec(); break; case Functions.Cosecant: exp = new Csc(); break; case Functions.Arcsine: exp = new Arcsin(); break; case Functions.Arccosine: exp = new Arccos(); break; case Functions.Arctangent: exp = new Arctan(); break; case Functions.Arccotangent: exp = new Arccot(); break; case Functions.Arcsecant: exp = new Arcsec(); break; case Functions.Arccosecant: exp = new Arccsc(); break; case Functions.Sqrt: exp = new Sqrt(); break; case Functions.Root: exp = new Root(); break; case Functions.Ln: exp = new Ln(); break; case Functions.Lg: exp = new Lg(); break; case Functions.Lb: exp = new Lb(); break; case Functions.Log: exp = new Log(); break; case Functions.Sineh: exp = new Sinh(); break; case Functions.Cosineh: exp = new Cosh(); break; case Functions.Tangenth: exp = new Tanh(); break; case Functions.Cotangenth: exp = new Coth(); break; case Functions.Secanth: exp = new Sech(); break; case Functions.Cosecanth: exp = new Csch(); break; case Functions.Arsineh: exp = new Arsinh(); break; case Functions.Arcosineh: exp = new Arcosh(); break; case Functions.Artangenth: exp = new Artanh(); break; case Functions.Arcotangenth: exp = new Arcoth(); break; case Functions.Arsecanth: exp = new Arsech(); break; case Functions.Arcosecanth: exp = new Arcsch(); break; case Functions.Exp: exp = new Exp(); break; case Functions.GCD: exp = new GCD(); break; case Functions.LCM: exp = new LCM(); break; case Functions.Factorial: exp = new Fact(); break; case Functions.Sum: exp = new Sum(); break; case Functions.Product: exp = new Product(); break; case Functions.Round: exp = new Round(); break; case Functions.Floor: exp = new Floor(); break; case Functions.Ceil: exp = new Ceil(); break; case Functions.Derivative: exp = new Derivative(); break; case Functions.Simplify: exp = new Simplify(); break; case Functions.Del: exp = new Del(); break; case Functions.Define: exp = new Define(); break; case Functions.Vector: exp = new Vector(); break; case Functions.Matrix: exp = new Matrix(); break; case Functions.Transpose: exp = new Transpose(); break; case Functions.Determinant: exp = new Determinant(); break; case Functions.Inverse: exp = new Inverse(); break; case Functions.If: exp = new If(); break; case Functions.For: exp = new For(); break; case Functions.While: exp = new While(); break; case Functions.Undefine: exp = new Undefine(); break; case Functions.Im: exp = new Im(); break; case Functions.Re: exp = new Re(); break; case Functions.Phase: exp = new Phase(); break; case Functions.Conjugate: exp = new Conjugate(); break; case Functions.Reciprocal: exp = new Reciprocal(); break; case Functions.Min: exp = new Min(); break; case Functions.Max: exp = new Max(); break; case Functions.Avg: exp = new Avg(); break; case Functions.Count: exp = new Count(); break; case Functions.Var: exp = new Var(); break; case Functions.Varp: exp = new Varp(); break; case Functions.Stdev: exp = new Stdev(); break; case Functions.Stdevp: exp = new Stdevp(); break; default: exp = null; break; } var diff = exp as DifferentParametersExpression; if (diff != null) diff.ParametersCount = token.CountOfParams; return exp; }