Exemplo n.º 1
0
 def test_no_header(self):
     """
     A program without a header is not a program.
     """
     with pytest.raises(RuntimeError):
         parser.parse_program("\n".join([
             "INBOX",
             "OUTBOX",
         ]))
Exemplo n.º 2
0
 def test_small_program(self):
     """
     A header followed by instructions is a valid program.
     """
     ops = parser.parse_program("\n".join([
         "-- HUMAN RESOURCE MACHINE PROGRAM --",
         "INBOX",
         "OUTBOX",
     ]))
     assert map(str, ops) == ['INBOX', 'OUTBOX']
Exemplo n.º 3
0
 def test_header_after_nonsense(self):
     """
     Anything before the header is ignored.
     """
     ops = parser.parse_program("\n".join([
         "This is an empty program.",
         "",
         "It is my empty program, but you can have it if you want.",
         "-- HUMAN RESOURCE MACHINE PROGRAM --",
     ]))
     assert ops == []
Exemplo n.º 4
0
 def test_small_program_after_nonsense(self):
     """
     A program can include documentation or whatever before the header.
     """
     ops = parser.parse_program("\n".join([
         "This is a small program that copies a single value from input",
         "to output.",
         "",
         "-- HUMAN RESOURCE MACHINE PROGRAM --",
         "INBOX",
         "OUTBOX",
     ]))
     assert map(str, ops) == ['INBOX', 'OUTBOX']
Exemplo n.º 5
0
 def test_memset(self):
     """
     A program can include some initial memory values.
     """
     ops = parser.parse_program("\n".join([
         "-- HUMAN RESOURCE MACHINE PROGRAM --",
         "COPYFROM 0",
         "OUTBOX",
         "COPYFROM 1",
         "OUTBOX",
         ".memset 0 1",
         ".memset 1 a",
     ]))
     assert map(str, ops) == [
         'COPYFROM 0', 'OUTBOX', 'COPYFROM 1', 'OUTBOX',
         '.memset 0 1', '.memset 1 a']
Exemplo n.º 6
0
 def test_addresses(self):
     """
     A memory operation can use direct or indirect addressing.
     """
     ops = parser.parse_program("\n".join([
         "-- HUMAN RESOURCE MACHINE PROGRAM --",
         "COPYFROM [0]",
         "OUTBOX",
         "COPYFROM 1",
         "OUTBOX",
         ".memset 0 2",
         ".memset 1 a",
         ".memset 2 b",
     ]))
     assert map(str, ops) == [
         'COPYFROM [0]', 'OUTBOX', 'COPYFROM 1', 'OUTBOX',
         '.memset 0 2', '.memset 1 a', '.memset 2 b']
Exemplo n.º 7
0
def entry_point(argv):
    try:
        program_filename = argv[1]
    except IndexError:
        print "I can't run a program if you don't give me one."
        return 1
    try:
        input_filename = argv[2]
    except IndexError:
        print "I can't run a program if you don't give me input."
        return 1
    try:
        memory_filename = argv[3]
    except IndexError:
        memory_filename = None
    program = parse_program(read(program_filename))
    input_data = parse_input_data(read(input_filename))
    assert memory_filename is None, "Not implemented yet."
    mainloop(program, input_data)
    return 0
Exemplo n.º 8
0
def program(*lines):
    instructions = ["-- HUMAN RESOURCE MACHINE PROGRAM --"] + list(lines)
    return parse_program("\n".join(instructions))
Exemplo n.º 9
0
 def test_empty_program(self):
     """
     An empty string is not a program.
     """
     with pytest.raises(RuntimeError):
         parser.parse_program("")
Exemplo n.º 10
0
 def test_header_only(self):
     """
     A header on its own is an empty program.
     """
     ops = parser.parse_program("-- HUMAN RESOURCE MACHINE PROGRAM --")
     assert ops == []