public void ItComposesPrnForComplexIfStatement(string operation) { var logger = new LoggerConfiguration().CreateLogger(); var lexer = new Lexer(logger); var sequence = lexer.ParseTokens(new StringReader($@"program test var ,a begin m: if [a == 1 {operation} ![a == 2]] then goto m end")).ToList(); var executor = new BasicExecutor(); var labels = lexer.Labels.ToList(); var prn = executor.PrnComposer.GetPrn(sequence, labels); //m: a 1 == a 2 == not or _m1 CondFalse m Uncond _m1: Assert.AreEqual(16, prn.Count); Assert.AreEqual(true, prn[0] is LabelToken); Assert.AreEqual(":", prn[1].Substring); Assert.AreEqual(true, prn[2] is IdentifierToken); Assert.AreEqual(true, prn[3] is ConstantToken <float>); Assert.AreEqual("==", prn[4].Substring); Assert.AreEqual(true, prn[5] is IdentifierToken); Assert.AreEqual(true, prn[6] is ConstantToken <float>); Assert.AreEqual("==", prn[7].Substring); Assert.AreEqual("!", prn[8].Substring); Assert.AreEqual(operation, prn[9].Substring); Assert.AreEqual(true, prn[10] is LabelToken); Assert.AreEqual(true, prn[11] is ConditionalFalseJumpOperation); Assert.AreEqual(true, prn[12] is LabelToken); Assert.AreEqual(true, prn[13] is UnconditionalJumpOperation); Assert.AreEqual(true, prn[14] is LabelToken); Assert.AreEqual(":", prn[15].Substring); Assert.IsTrue(labels.Any(x => x.Name == "_m2")); }
public static void Main(string[] args) { var executor = new BasicExecutor(TaskScheduler.Current); var disruptor = new Disruptor <StubEvent>(() => new StubEvent(-1), 1024, TaskScheduler.Current); var ringBuffer = disruptor.Start(); // Construct 2 batch event processors. var handler1 = new DynamicHandler(); var processor1 = new BatchEventProcessor <StubEvent>(ringBuffer, ringBuffer.NewBarrier(), handler1); var handler2 = new DynamicHandler(); var processor2 = new BatchEventProcessor <StubEvent>(ringBuffer, ringBuffer.NewBarrier(processor1.Sequence), handler2); // Dynamically add both sequences to the ring buffer ringBuffer.AddGatingSequences(processor1.Sequence, processor2.Sequence); // Start the new batch processors. executor.Execute(processor1.Run); executor.Execute(processor2.Run); // Remove a processor. // Stop the processor processor2.Halt(); // Wait for shutdown the complete handler2.WaitShutdown(); // Remove the gating sequence from the ring buffer ringBuffer.RemoveGatingSequence(processor2.Sequence); }
public void ItComposesPrnForAssignmentArithmeticExp() { var logger = new LoggerConfiguration().CreateLogger(); var lexer = new Lexer(logger); var sequence = lexer.ParseTokens(new StringReader(@"program test var ,a begin a = (2 + 8) * ((3 + 4) / 2) end")).ToList(); var executor = new BasicExecutor(); var prn = executor.PrnComposer.GetPrn(sequence); //a 2 8 + 3 4 + 2 / * = Assert.AreEqual(11, prn.Count); Assert.AreEqual(true, prn[0] is IdentifierToken); Assert.AreEqual(true, prn[1] is ConstantToken <float>); Assert.AreEqual(true, prn[2] is ConstantToken <float>); Assert.AreEqual("+", prn[3].Substring); Assert.AreEqual(true, prn[4] is ConstantToken <float>); Assert.AreEqual(true, prn[5] is ConstantToken <float>); Assert.AreEqual("+", prn[6].Substring); Assert.AreEqual(true, prn[7] is ConstantToken <float>); Assert.AreEqual("/", prn[8].Substring); Assert.AreEqual("*", prn[9].Substring); Assert.AreEqual("=", prn[10].Substring); }
public async Task ShouldBuildDisruptor() { var ringBuffer = RingBuffer <Event> .CreateSingleProducer(() => new Event(100), 16384, new BlockingWaitStrategy()); var executor = new BasicExecutor(TaskScheduler.Default); var consumerRepository = new ConsumerRepository(); var handlerA = new EventHandlerA(); var handlerABarrier = ringBuffer.NewBarrier(new ISequence[0]); var handlerAEventProcessor = new EventProcessor <Event>(ringBuffer, handlerABarrier, handlerA); consumerRepository.Add(handlerAEventProcessor, handlerA, handlerABarrier); var handlerB = new CleanerHandler(); var handlerBBarrier = ringBuffer.NewBarrier(new ISequence[] { handlerAEventProcessor.Sequence }); var handlerBEventProcessor = new EventProcessor <Event>(ringBuffer, handlerBBarrier, handlerB); consumerRepository.Add(handlerBEventProcessor, handlerB, handlerBBarrier); foreach (var consumerInfo in consumerRepository) { consumerInfo.Start(executor); } var next = ringBuffer.Next(); var ev = ringBuffer[next]; ringBuffer.Publish(next); await Task.Delay(50); Assert.AreEqual(2, ev.Counter); Assert.AreEqual(0, ev.Data.Sum(i => i)); }
public ServerBootstrap() : base() { UseProxies = true; WorkersShareFiber(true); BufferBytes = NetworkConstants.DEFAULT_BUFFER_SIZE; Workers = 2; InternalExecutor = new BasicExecutor(); }
public void ItComposesPrnForLoop() { var logger = new LoggerConfiguration().CreateLogger(); var lexer = new Lexer(logger); var sequence = lexer.ParseTokens(new StringReader(@" begin do i=1 to 10 b = b - 1 next end")).ToList(); var executor = new BasicExecutor(logger); var labels = lexer.Labels.ToList(); var store = new VariableStore(); var prn = executor.PrnComposer.GetPrn(sequence, labels, store); //i 1 = _m1: _r1 c = i _r1 <= _m2 COND b b 1 - = i i 1 + = _m1 UNCOND _m2: Assert.AreEqual(27, prn.Count); Assert.AreEqual(true, prn[0] is IdentifierToken); Assert.AreEqual(true, prn[1] is ConstantToken <float>); Assert.AreEqual("=", prn[2].Substring); Assert.AreEqual(true, prn[3] is LabelToken); Assert.AreEqual(":", prn[4].Substring); Assert.AreEqual(true, prn[5] is IdentifierToken); Assert.AreEqual(true, prn[6] is ConstantToken <float>); Assert.AreEqual("=", prn[7].Substring); Assert.AreEqual(true, prn[8] is IdentifierToken); Assert.AreEqual(true, prn[9] is IdentifierToken); Assert.AreEqual("<=", prn[10].Substring); Assert.AreEqual(true, prn[11] is LabelToken); Assert.AreEqual(true, prn[12] is ConditionalFalseJumpOperation); Assert.AreEqual(true, prn[13] is IdentifierToken); Assert.AreEqual(true, prn[14] is IdentifierToken); Assert.AreEqual(true, prn[15] is ConstantToken <float>); Assert.AreEqual("-", prn[16].Substring); Assert.AreEqual("=", prn[17].Substring); Assert.AreEqual(true, prn[18] is IdentifierToken); Assert.AreEqual(true, prn[19] is IdentifierToken); Assert.AreEqual(true, prn[20] is ConstantToken <float>); Assert.AreEqual("+", prn[21].Substring); Assert.AreEqual("=", prn[22].Substring); Assert.AreEqual(true, prn[23] is LabelToken); Assert.AreEqual(true, prn[24] is UnconditionalJumpOperation); Assert.AreEqual(true, prn[25] is LabelToken); Assert.AreEqual(":", prn[26].Substring); }
public void ItComposesPrnForAssignment() { var sequence = GetSequence(new Token[] { new IdentifierToken("a"), new StringToken("="), new ConstantToken <float>(2.0f) }, "a"); var executor = new BasicExecutor(); var prn = executor.PrnComposer.GetPrn(sequence); Assert.AreEqual(3, prn.Count); Assert.AreEqual(true, prn[0] is IdentifierToken); Assert.AreEqual(true, prn[1] is ConstantToken <float>); Assert.AreEqual("=", prn[2].Substring); }
public void ItComposesPrnForWriteStatement() { var logger = new LoggerConfiguration().CreateLogger(); var lexer = new Lexer(logger); var sequence = lexer.ParseTokens(new StringReader(@" begin writel(a) end")).ToList(); var executor = new BasicExecutor(); var labels = lexer.Labels.ToList(); var prn = executor.PrnComposer.GetPrn(sequence, labels); //a RD Assert.AreEqual(2, prn.Count); Assert.AreEqual(true, prn[0] is IdentifierToken); Assert.AreEqual(true, prn[1] is WriteOperation); }
public void ItComposesPrnForAssignmentUnaryMinus() { var a = new IdentifierToken("a"); var sequence = GetSequence(new Token[] { a, new StringToken("="), new ConstantToken <float>(2.0f), new StringToken(Environment.NewLine), new IdentifierToken("b"), new StringToken("="), new StringToken("-"), a }, "a", "b"); var executor = new BasicExecutor(); var prn = executor.PrnComposer.GetPrn(sequence); Assert.AreEqual(7, prn.Count); Assert.AreEqual(true, prn[0] is IdentifierToken); Assert.AreEqual(true, prn[1] is ConstantToken <float>); Assert.AreEqual("=", prn[2].Substring); Assert.AreEqual(true, prn[3] is IdentifierToken); Assert.AreEqual(true, prn[4] is IdentifierToken); Assert.AreEqual("@", prn[5].Substring); Assert.AreEqual("=", prn[6].Substring); }
public void ItExecutesLoop() { var logger = new LoggerConfiguration().CreateLogger(); //Arrange var i = new IdentifierToken("i"); var j = new IdentifierToken("j"); var res = new IdentifierToken("sum"); var lexer = new Lexer(logger); var sequence = lexer.ParseTokens(new StringReader(@" begin do i=1 to 5 do j=2 to 7 sum = sum + i*j next next end")).ToList(); var store = new VariableStore() { [i] = new ConstantToken <float>(0), [j] = new ConstantToken <float>(0), [res] = new ConstantToken <float>(0) }; var prnProvider = new BasicExecutor(logger); var labels = lexer.Labels.ToList(); var prn = prnProvider.PrnComposer.GetPrn(sequence, labels, store); var executor = new PrnExpressionExecutor(); //Act var result = executor.ComputeExpression(prn, store); //Assert Assert.AreEqual(5 + 1, store[i].Value); Assert.AreEqual(7 + 1, store[j].Value); Assert.AreEqual(405, store[res].Value); }
public void ItComposesPrnForMultiLineAssignment() { var logger = new LoggerConfiguration().CreateLogger(); var lexer = new Lexer(logger); var sequence = lexer.ParseTokens(new StringReader(@"program test var ,a begin a = 2 a = 3 end")).ToList(); var executor = new BasicExecutor(); var prn = executor.PrnComposer.GetPrn(sequence); //a 2 = a 3 = Assert.AreEqual(6, prn.Count); Assert.AreEqual(true, prn[0] is IdentifierToken); Assert.AreEqual(true, prn[1] is ConstantToken <float>); Assert.AreEqual("=", prn[2].Substring); Assert.AreEqual(true, prn[3] is IdentifierToken); Assert.AreEqual(true, prn[4] is ConstantToken <float>); Assert.AreEqual("=", prn[5].Substring); }
public ClientBootstrap() { Workers = 2; InternalExecutor = new BasicExecutor(); }