public void TestSyntaxErrorUnexpectedRbracket() { using (var invalid = new MemoryStream(Encoding.Unicode.GetBytes("[++]]"))) { var interpreter = new Brainfuck(invalid); } }
public async Task BrainfuckCommandAsync(CommandContext ctx, [Description("Brainfuck code")] [RemainingText] string code) { if (await Brainfuck.Verify(code, out string reason)) { await RespondBasicSuccessAsync("Staring Execution..."); var cts = new CancellationTokenSource(); var loopTimer = new Timer((x) => cts.Cancel(), null, TimeSpan.FromSeconds(TimeoutSeconds), TimeSpan.FromMilliseconds(-1)); try { var res = await Brainfuck.Execute(ctx, ctx.Client.GetInteractivity(), code, cts.Token); if (res == "") { await RespondBasicSuccessAsync("No Output Detected"); } else { await ctx.RespondAsync(res); } } catch (OperationCanceledException) { await RespondBasicErrorAsync("Infinite Loop Detected."); } }
public void TestRuntimeError() { using (var invalid = new MemoryStream(Encoding.Unicode.GetBytes("[++]<<<"))) { var interpreter = new Brainfuck(invalid); interpreter.Evaluate(new BfContext()); } }
internal static string Start(string bfProgram) { var bf = new Brainfuck(bfProgram); bf.F**k(); return(bf._out); }
public void HelloWorld() { using (var output = new StringWriter()) { var action = Brainfuck.Compile("++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+."); action.Invoke(new byte[7], null, output); Assert.AreEqual("Hello World!", output.ToString()); } }
public void TestRot() { using (var fs = new FileStream("rot.bf", FileMode.Open, FileAccess.Read, FileShare.None)) { var interpreter = new Brainfuck(fs); interpreter.Evaluate(new BfContext()); Assert.AreEqual("n", actual: Writer.GetStringBuilder().ToString().Trim()); } }
private string Run(string program, string input = "") { var inputIndex = 0; var output = new StringBuilder(); Brainfuck.Run(program, () => inputIndex >= input.Length ? -1 : input[inputIndex++], c => output.Append(c)); Console.WriteLine(output); return(output.ToString()); }
static void Main(string[] args) { var memory = new byte[1024]; while (TryReadLine(out var line)) { try { var script = Brainfuck.Compile(line); script.Invoke(memory, Console.In, Console.Out); } catch (BrainfuckException err) { Console.Error.WriteLine($"Parser Exception: {err.Message}"); } } }
public async Task RunBrainf(CommandContext ctx, [RemainingText] string userInput) { await ctx.Message.CreateReactionAsync(CustomEmoji.Loading); var slice = userInput.ExtractCode().Split('!', 2); string program = slice[0]; string programInput = slice.Length > 1 ? slice[1] : ""; var message = new StringBuilder(); var bf = new Brainfuck(program, programInput); try { message.Append(await bf.RunAsync(3000)); await ctx.AutoReactAsync(true); } catch (Exception e) { switch (e) { case Brainfuck.BrainfuckException be: message.AppendLine($"Runtime exception: {be.Message}"); if (e.InnerException is not null) { message.AppendLine($"Inner exception: {e.InnerException}\n"); } message.AppendLine($"Memory at this point: {be.Memory}\n"); message.AppendLine($"Output up to this point:\n{bf.Output}"); break; case ArgumentException _: message.AppendLine("The provided program has invalid syntax."); break; default: throw; } await ctx.AutoReactAsync(false); } await ctx.Message.DeleteOwnReactionAsync(CustomEmoji.Loading); await ctx.RespondAsync(message.Length == 0? "*No output*" : $"```\n{message.ToString().Truncate(1990)}```"); }
public async Task RunBrainf([Remainder] string userInput) { await Context.Message.AddReactionAsync(CustomEmoji.ELoading, DefaultOptions); var slice = userInput.ExtractCode().Split('!', 2); string program = slice[0]; string programInput = slice.Length > 1 ? slice[1] : ""; var message = new StringBuilder(); var bf = new Brainfuck(program, programInput); try { message.Append(await bf.RunAsync(3000)); await AutoReactAsync(true); } catch (Exception e) { switch (e) { case Brainfuck.BrainfuckException be: message.AppendLine($"Runtime exception: {be.Message}"); if (e.InnerException != null) { message.AppendLine($"Inner exception: {e.InnerException}\n"); } message.AppendLine($"Memory at this point: {be.Memory}\n"); message.AppendLine($"Output up to this point:\n{bf.Output}"); break; case ArgumentException ae: message.AppendLine("The provided program has invalid syntax."); break; default: throw e; } await AutoReactAsync(false); } await Context.Message.RemoveReactionAsync(CustomEmoji.ELoading, Context.Client.CurrentUser, DefaultOptions); await ReplyAsync(message.Length == 0? "*No output*" : $"```\n{message.ToString().Truncate(1990)}```"); }
public void InvalidCharactersThrow() { Brainfuck.Compile("abc123"); }
public void UnmatchedBracketThrows() { Brainfuck.Compile("+++[+++"); }
internal static string F**k(string bfProgram) => Brainfuck.Start(bfProgram);