def test_print(self): # Hello world from https://en.wikipedia.org/wiki/Brainfuck output = StringIO.StringIO() run( "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>" "++.<<+++++++++++++++.>.+++.------.--------.>+.>.", stdout=output) self.assertEquals(output.getvalue(), "Hello World!\n")
def test_single_assignment(self): emit_output = StringIO.StringIO() run_output = StringIO.StringIO() emitter = Emitter(stdout=emit_output) python = """v1 = "a" """ builder = BFBuild(python, emit=emitter).emit_bf() run(emit_output.getvalue(), stdout=run_output)
def test_variable_to_variable(self): emit_output = StringIO.StringIO() run_output = StringIO.StringIO() emitter = Emitter(stdout=emit_output) python = """v1 = "a"\nv2 = v1 """ builder = BFBuild(python, emit=emitter).emit_bf() run(emit_output.getvalue(), stdout=run_output)
def test_underflow(self): memory_space = [] run("-" * 127, memory=memory_space) self.assertEquals(memory_space[0], -127) memory_space = [] run("-" * 128, memory=memory_space) self.assertEquals(memory_space[0], 127)
def test_if_true(self): emit_output = StringIO.StringIO() run_output = StringIO.StringIO() emitter = Emitter(stdout=emit_output) python = """if True:\n print "OK" """ builder = BFBuild(python, emit=emitter).emit_bf() run(emit_output.getvalue(), stdout=run_output) self.assertEqual(run_output.getvalue(), "OK\n")
def test_if_else_match_else(self): emit_output = StringIO.StringIO() run_output = StringIO.StringIO() emitter = Emitter(stdout=emit_output) python = ("if False:\n print 'IF'\n" "else:\n print 'ELSE'\n") builder = BFBuild(python, emit=emitter).emit_bf() run(emit_output.getvalue(), stdout=run_output) self.assertEqual(run_output.getvalue(), "ELSE\n")
def test_setting_integer(self): emit_output = StringIO.StringIO() run_output = StringIO.StringIO() emitter = Emitter(stdout=emit_output) python = """v1 = 57 """ builder = BFBuild(python, emit=emitter).emit_bf() memory_space = [] run(emit_output.getvalue(), stdout=run_output)
def test_single_static_output(self): emit_output = StringIO.StringIO() run_output = StringIO.StringIO() emitter = Emitter(stdout=emit_output) python = """print "Hello" """ builder = BFBuild(python, emit=emitter).emit_bf() run(emit_output.getvalue(), stdout=run_output) self.assertEqual(run_output.getvalue(), "Hello\n")
def test_loop(self): memory_space = [] run("+++[->+<]", memory=memory_space) self.assertEqual(memory_space[0], 0) self.assertEqual(memory_space[1], 3) memory_space = [] run(">++>+>+++>++[[-]<]", memory=memory_space) self.assertEqual(memory_space[0], 0) self.assertEqual(memory_space[1], 0) self.assertEqual(memory_space[2], 0) self.assertEqual(memory_space[3], 0) self.assertEqual(memory_space[4], 0)
def test_read_input(self): class Input(object): index = -1 def get_input(self): self.index += 1 return "Hello"[self.index] memory_space = [] run(",>,>,>,>,", input_reader=Input(), memory=memory_space) self.assertEqual(chr(memory_space[0]), "H") self.assertEqual(chr(memory_space[1]), "e") self.assertEqual(chr(memory_space[2]), "l") self.assertEqual(chr(memory_space[3]), "l") self.assertEqual(chr(memory_space[4]), "o")
def test_difference_in_if(self): emit_output = StringIO.StringIO() run_output = StringIO.StringIO() emitter = Emitter(stdout=emit_output) python = """if True != False:\n print "OK" """ builder = BFBuild(python, emit=emitter).emit_bf() run(emit_output.getvalue(), stdout=run_output) self.assertEquals("OK\n", run_output.getvalue()) emit_output = StringIO.StringIO() run_output = StringIO.StringIO() emitter = Emitter(stdout=emit_output) python = """if True != True:\n print "OK" """ builder = BFBuild(python, emit=emitter).emit_bf() run(emit_output.getvalue(), stdout=run_output) self.assertEquals("", run_output.getvalue())
def test_equality_true_false(self): emit_output = StringIO.StringIO() run_output = StringIO.StringIO() emitter = Emitter(stdout=emit_output) python = """foo = True == True\nprint foo""" builder = BFBuild(python, emit=emitter).emit_bf() memory_space = [] run(emit_output.getvalue(), stdout=run_output, memory=memory_space) self.assertEquals(1, ord(run_output.getvalue()[0])) emit_output = StringIO.StringIO() run_output = StringIO.StringIO() emitter = Emitter(stdout=emit_output) python = """foo = True == False\nprint foo""" builder = BFBuild(python, emit=emitter).emit_bf() memory_space = [] run(emit_output.getvalue(), stdout=run_output, memory=memory_space) self.assertEquals(0, ord(run_output.getvalue()[0]))
def test_memory(self): memory_space = [] run("", memory=memory_space) self.assertEqual(memory_space[0], 0) memory_space = [] run("++", memory=memory_space) self.assertEqual(memory_space[0], 2) memory_space = [] run("++-", memory=memory_space) self.assertEqual(memory_space[0], 1)
def test_pointer(self): memory_space = [] run(">-", memory=memory_space) self.assertEqual(memory_space[0], 0) self.assertEqual(memory_space[1], -1) memory_space = [] run(">>>+", memory=memory_space) self.assertEqual(memory_space[0], 0) self.assertEqual(memory_space[1], 0) self.assertEqual(memory_space[2], 0) self.assertEqual(memory_space[3], 1) memory_space = [] run(">>><<+", memory=memory_space) self.assertEqual(memory_space[0], 0) self.assertEqual(memory_space[1], 1) self.assertEqual(memory_space[2], 0) self.assertEqual(memory_space[3], 0)
def test_skipped_loop(self): memory_space = [] run("[+++[]++++]>+", memory=memory_space) self.assertEquals(memory_space[0], 0) self.assertEquals(memory_space[1], 1)