public void Parse_AShortExpression_ValidateResult() { var input = "(13+4)-(12+1)"; var tokens = CustomInterpreter.Lex(input); var parsed = CustomInterpreter.Parse(tokens); Assert.That(parsed.Value, Is.EqualTo(4)); }
public static async Task MethodsAsHandlers() { using var interpreter = new CustomInterpreter(); var entry1 = interpreter.CreateLogEntry(new BinaryOperationCommand { X = 40, Y = 2, Type = BinaryOperation.Add }, 1L); Equal(1L, entry1.Term); Equal(0, interpreter.Value); Equal(0, await interpreter.InterpretAsync(entry1)); Equal(42, interpreter.Value); var entry2 = interpreter.CreateLogEntry(new UnaryOperationCommand { X = 42, Type = UnaryOperation.Negate }, 10L); Equal(10L, entry2.Term); Equal(1, await interpreter.InterpretAsync(entry2)); Equal(-42, interpreter.Value); }
public static async Task DelegatesAsHandlers() { var state = new StrongBox <int>(); Func <BinaryOperationCommand, CancellationToken, ValueTask> binaryOp = (command, token) => CustomInterpreter.DoBinaryOperation(ref state.Value, command, token); Func <UnaryOperationCommand, CancellationToken, ValueTask> unaryOp = (command, token) => CustomInterpreter.DoUnaryOperation(ref state.Value, command, token); Func <AssignCommand, CancellationToken, ValueTask> assignOp = (command, token) => { state.Value = command.Value; return(new ValueTask()); }; var interpreter = new CommandInterpreter.Builder() .Add(binaryOp) .Add(unaryOp) .Add(assignOp, new Formatter()) .Build(); var entry1 = interpreter.CreateLogEntry(new BinaryOperationCommand { X = 40, Y = 2, Type = BinaryOperation.Add }, 1L); Equal(1L, entry1.Term); Equal(0, state.Value); Equal(0, await interpreter.InterpretAsync(entry1)); Equal(42, state.Value); var entry2 = interpreter.CreateLogEntry(new UnaryOperationCommand { X = 42, Type = UnaryOperation.Negate }, 10L); Equal(10L, entry2.Term); Equal(1, await interpreter.InterpretAsync(entry2)); Equal(-42, state.Value); var entry3 = interpreter.CreateLogEntry(new AssignCommand { Value = int.MaxValue }, 68L); Equal(68L, entry3.Term); Equal(3, await interpreter.InterpretAsync(entry3)); Equal(int.MaxValue, state.Value); }
public TestPersistenceState() : base(Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()), 4) { interpreter = new CustomInterpreter(); }