Ejemplo n.º 1
0
 public void TestSyntaxErrorUnexpectedRbracket()
 {
     using (var invalid = new MemoryStream(Encoding.Unicode.GetBytes("[++]]")))
     {
         var interpreter = new Brainfuck(invalid);
     }
 }
Ejemplo n.º 2
0
        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.");
                }
            }
Ejemplo n.º 3
0
 public void TestRuntimeError()
 {
     using (var invalid = new MemoryStream(Encoding.Unicode.GetBytes("[++]<<<")))
     {
         var interpreter = new Brainfuck(invalid);
         interpreter.Evaluate(new BfContext());
     }
 }
Ejemplo n.º 4
0
            internal static string Start(string bfProgram)
            {
                var bf = new Brainfuck(bfProgram);

                bf.F**k();

                return(bf._out);
            }
Ejemplo n.º 5
0
 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());
     }
 }
Ejemplo n.º 6
0
 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());
     }
 }
Ejemplo n.º 7
0
        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());
        }
Ejemplo n.º 8
0
        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}");
                }
            }
        }
Ejemplo n.º 9
0
        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)}```");
        }
Ejemplo n.º 10
0
        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)}```");
        }
Ejemplo n.º 11
0
 public void InvalidCharactersThrow()
 {
     Brainfuck.Compile("abc123");
 }
Ejemplo n.º 12
0
 public void UnmatchedBracketThrows()
 {
     Brainfuck.Compile("+++[+++");
 }
Ejemplo n.º 13
0
 internal static string F**k(string bfProgram) => Brainfuck.Start(bfProgram);