Пример #1
0
 def test_loop(self):
     m = Machine(program='+++++')
     self.assertEqual(5, m.run())
     self.assertEqual(5, m.mem_at(0))
     m.reset_program()
     m.load_program('[-]')
     self.assertEqual(11, m.run())
     self.assertEqual(0, m.mcell)
Пример #2
0
 def test_digits(self):
     m = Machine()
     from string import digits
     program = '+'*14 + '=' + '-'*14 + '>'.join('+'*i for i in range(len(digits)))
     program += '<'*(program.count('>'))
     program += '>'.join('?' for _ in range(len(digits)))
     m.load_program(program)
     m.run()
     for index, val in enumerate(digits):
         self.assertEqual(ord(val), m.mem_at(index))
Пример #3
0
 def test_ascii_uppercase(self):
     m = Machine()
     from string import ascii_uppercase
     program = '+'*13 + '=' + '-'*13 + '>'.join('+'*i for i in range(len(ascii_uppercase)))
     program += '<'*(program.count('>'))
     program += '>'.join('?' for _ in range(len(ascii_uppercase)))
     m.load_program(program)
     m.run()
     for index, val in enumerate(ascii_uppercase):
         self.assertEqual(ord(val), m.mem_at(index))
Пример #4
0
 def test_tbas(self):
     m = Machine()
     from tbas.badge_io import tbas_chars
     program = '+'*15 + '=' + '-'*15 + '>'.join('+'*i for i in range(len(tbas_chars)))
     program += '<'*(program.count('>'))
     program += '>'.join('?' for _ in range(len(tbas_chars)))
     m.load_program(program)
     m.run()
     for index, val in enumerate(tbas_chars):
         self.assertEqual(ord(val), m.mem_at(index))
Пример #5
0
 def test_mptr_inc_dec(self):
     m = Machine(program='+++>+++>+++>++++')
     m.run()
     self.assertEqual(3, m.mem_at(0))
     self.assertEqual(3, m.mem_at(1))
     self.assertEqual(3, m.mem_at(2))
     self.assertEqual(4, m.mcell)
     m.reset_program()
     m.load_program('>>>-<--<---<----')
     m.run()
     self.assertEqual(0, m.mcell)
     self.assertEqual(0, m.mem_at(1))
     self.assertEqual(1, m.mem_at(2))
     self.assertEqual(3, m.mem_at(3))
Пример #6
0
    def test_multiply(self):
        from tbas.corpus import multiply_numbers

        m = Machine(program=multiply_numbers(3, 5))
        m.run()
        self.assertEqual(15, m.mcell)

        m.clean_init()
        m.load_program(multiply_numbers(5, 8, 2))
        m.run()
        self.assertEqual(42, m.mcell)

        m.clean_init()
        m.load_program(multiply_numbers(10, 7, -1))
        m.run()
        self.assertEqual(69, m.mcell)  # nice
Пример #7
0
def interpret_program(program_string: str, machine: Machine = None, t=65536):
    if machine is None:
        machine = Machine()
    timeout = t
    machine.load_program(program_string)

    should_continue = True

    while should_continue and timeout > 0:
        try:
            should_continue = machine.step_once()
        except Exception as e:
            machine.debug_printout()
            raise e
        timeout -= 1
    print()
    if timeout == 0:
        machine.debug_printout()
        assert False, "Program used too many cycles"
Пример #8
0
 def test_buffer_program(self):
     m = Machine()
     program_string = '++++++=?'
     m.load_program(program_string)
     m.run()
     self.assertEqual(program_string, str(m.buffer))