Пример #1
0
        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));
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
 public TestPersistenceState()
     : base(Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()), 4)
 {
     interpreter = new CustomInterpreter();
 }