public CommandParserTestFixture() { EscapeSequenceFormatter = new ExtendedNativeEscapeSequenceFormatter(); CommandParser = new CommandParser(EscapeSequenceFormatter) { { "get_setting", GetSetting }, { "set_setting", SetSetting }, { "setting", Setting } }; }
public ExpressionParserTestFixture() { AssignmentOperator = ("=", 1, AssociativityType.Right, (lhs, rhs) => (((Variable)lhs).Value = rhs)); EscapeSequenceFormatter = new ExtendedNativeEscapeSequenceFormatter(); CustomVariables = new Dictionary <string, Variable>(); Results = new List <object>(); ArithmeticUnaryOperators = new ExtendedDictionary <char, UnaryOperator>((value) => value.Identifier) { ('+', 1, AssociativityType.Right, (value) => + System.Convert.ToDouble(value)), ('-', 1, AssociativityType.Right, (value) => - System.Convert.ToDouble(value)), ('!', 1, AssociativityType.Right, (value) => { double tmp = System.Convert.ToDouble(value); return(tmp == 0D || tmp == double.NaN); }) }; ArithmeticBinaryOperators = new ExtendedDictionary <string, BinaryOperator>((value) => value.Identifier) { ("+", 4, AssociativityType.Left, (lhs, rhs) => lhs is string || rhs is string?(object)$"{lhs}{rhs}" : (object)(System.Convert.ToDouble(lhs) + System.Convert.ToDouble(rhs))), ("-", 4, AssociativityType.Left, (lhs, rhs) => System.Convert.ToDouble(lhs) - System.Convert.ToDouble(rhs)), ("*", 3, AssociativityType.Left, (lhs, rhs) => System.Convert.ToDouble(lhs) * System.Convert.ToDouble(rhs)), ("/", 3, AssociativityType.Left, (lhs, rhs) => System.Convert.ToDouble(lhs) / System.Convert.ToDouble(rhs)), ("%", 3, AssociativityType.Left, (lhs, rhs) => System.Convert.ToDouble(lhs) % System.Convert.ToDouble(rhs)), ("^", 2, AssociativityType.Right, (lhs, rhs) => Exponentiation(lhs, rhs)), ("//", 3, AssociativityType.Right, (lhs, rhs) => Math.Truncate(System.Convert.ToDouble(lhs) / System.Convert.ToDouble(rhs))), ("**", 2, AssociativityType.Right, (lhs, rhs) => Exponentiation(lhs, rhs)), ("==", 5, AssociativityType.Left, (lhs, rhs) => System.Convert.ToDouble(lhs) == System.Convert.ToDouble(lhs)), ("!=", 5, AssociativityType.Left, (lhs, rhs) => System.Convert.ToDouble(lhs) != System.Convert.ToDouble(lhs)), ("<", 5, AssociativityType.Left, (lhs, rhs) => System.Convert.ToDouble(lhs) < System.Convert.ToDouble(lhs)), (">", 5, AssociativityType.Left, (lhs, rhs) => System.Convert.ToDouble(lhs) > System.Convert.ToDouble(lhs)), ("<=", 5, AssociativityType.Left, (lhs, rhs) => System.Convert.ToDouble(lhs) <= System.Convert.ToDouble(lhs)), (">=", 5, AssociativityType.Left, (lhs, rhs) => System.Convert.ToDouble(lhs) >= System.Convert.ToDouble(lhs)) }; ArithmeticVariables = new ExtendedDictionary <string, Variable>((value) => value.Identifier) { ("T", 1000000000000.0), ("G", 1000000000.0), ("M", 1000000.0), ("k", 1000.0), ("h", 100.0), ("da", 10.0), ("d", 0.1), ("c", 0.01), ("m", 0.001), ("u", 0.000001), ("n", 0.000000001), ("p", 0.000000000001), ("math.pi", Math.PI), ("math.e", Math.E), ("phys.c", 299792458), ("phys.au", 149597870700) }; ArithmeticFunctions = new ExtendedDictionary <string, Function>((value) => value.Identifier) { ("ans", 0, 1, Ans), ("pi", 0, PI), ("abs", 1, (args) => Math.Abs(System.Convert.ToDouble(args[0]))), ("neg", 1, (args) => - Math.Abs(System.Convert.ToDouble(args[0]))), ("pow", 2, Exponentiation), ("root", 2, Root), ("sqrt", 1, (args) => Math.Sqrt(System.Convert.ToDouble(args[0]))), ("cbrt", 1, (args) => Root(args[0], 3)), ("log", 1, (args) => Math.Log(System.Convert.ToDouble(args[0]))), ("log10", 1, (args) => Math.Log10(System.Convert.ToDouble(args[0]))), ("sin", 1, (args) => Math.Sin(System.Convert.ToDouble(args[0]))), ("cos", 1, (args) => Math.Cos(System.Convert.ToDouble(args[0]))), ("tan", 1, (args) => Math.Tan(System.Convert.ToDouble(args[0]))), ("asin", 1, (args) => Math.Asin(System.Convert.ToDouble(args[0]))), ("acos", 1, (args) => Math.Acos(System.Convert.ToDouble(args[0]))), ("atan", 1, (args) => Math.Atan(System.Convert.ToDouble(args[0]))), ("sinh", 1, (args) => Math.Sinh(System.Convert.ToDouble(args[0]))), ("cosh", 1, (args) => Math.Cosh(System.Convert.ToDouble(args[0]))), ("tanh", 1, (args) => Math.Tanh(System.Convert.ToDouble(args[0]))), ("asinh", 1, (args) => Math.Asinh(System.Convert.ToDouble(args[0]))), ("acosh", 1, (args) => Math.Acosh(System.Convert.ToDouble(args[0]))), ("atanh", 1, (args) => Math.Atanh(System.Convert.ToDouble(args[0]))), ("min", 1, -1, Min), ("max", 1, -1, Max), ("strlen", 1, StringLength) }; ArithmeticShorthandOperator = ("*", 3, AssociativityType.Right, (lhs, rhs) => System.Convert.ToDouble(lhs) * System.Convert.ToDouble(rhs)); ArithmeticExpressionParser = new ExpressionParser(ArithmeticUnaryOperators, ArithmeticBinaryOperators, ArithmeticVariables, ArithmeticFunctions, CustomVariables, AssignmentOperator) { ShorthandOperator = ArithmeticShorthandOperator, EscapeSequenceFormatter = EscapeSequenceFormatter }; BitwiseVariables = new ExtendedDictionary <string, Variable>((value) => value.Identifier) { ("false", 0), ("true", 1) }; BitwiseFunctions = new ExtendedDictionary <string, Function>((value) => value.Identifier) { }; BitwiseUnaryOperators = new ExtendedDictionary <char, UnaryOperator>((value) => value.Identifier) { ('!', 1, AssociativityType.Right, (value) => System.Convert.ToInt32(value) != 0 ? 0 : 1), ('~', 1, AssociativityType.Right, (value) => ~System.Convert.ToInt32(value)) }; BitwiseBinaryOperators = new ExtendedDictionary <string, BinaryOperator>((value) => value.Identifier) { ("+", 5, AssociativityType.Left, (lhs, rhs) => System.Convert.ToInt32(lhs) | System.Convert.ToInt32(rhs)), ("*", 3, AssociativityType.Left, (lhs, rhs) => System.Convert.ToInt32(lhs) & System.Convert.ToInt32(rhs)), ("^", 4, AssociativityType.Left, (lhs, rhs) => System.Convert.ToInt32(lhs) ^ System.Convert.ToInt32(rhs)), ("<<", 2, AssociativityType.Right, (lhs, rhs) => System.Convert.ToInt32(lhs) << System.Convert.ToInt32(rhs)), (">>", 2, AssociativityType.Left, (lhs, rhs) => System.Convert.ToInt32(lhs) >> System.Convert.ToInt32(rhs)) }; BitwiseShorthandOperator = ("*", 3, AssociativityType.Right, (lhs, rhs) => System.Convert.ToInt32(lhs) & System.Convert.ToInt32(rhs)); BitwiseExpressionParser = new ExpressionParser(BitwiseUnaryOperators, BitwiseBinaryOperators, BitwiseVariables, BitwiseFunctions, CustomVariables, AssignmentOperator) { ShorthandOperator = BitwiseShorthandOperator, EscapeSequenceFormatter = EscapeSequenceFormatter }; }