Exemplo n.º 1
0
def check(prog, ins, outs):
    mins = ins
    ins = list(ins)
    nout = b""

    def puts(s):
        nonlocal nout
        nout += s

    def getc():
        nonlocal ins
        if len(ins) > 0:
            res = ins[0]
            ins = ins[1:]
            return res
        else:
            return -1

    def ungetc(c):
        nonlocal ins
        ins = [c] + ins

    interpreter.puts = puts
    interpreter.getc = getc
    interpreter.ungetc = ungetc

    program, rem = interpreter.parse(interpreter.tokenize(prog))
    if len(rem) != 0:
        eexit('parse failure: token remains', rem)
    interpreter.interpret(program)

    if nout != outs:
        sys.stderr.buffer.write(
            b'test failed\nprogram: %s\ninput: %s\noutput: %s\nexpect: %s\n' %
            (bytes(map(ord, prog)), mins, nout, outs))
        exit(-1)
Exemplo n.º 2
0
 def test_it_tokenizes_expressions(self):
     self.assertEquals(interpreter.tokenize('(1 2 32)'), ["(", "1", "2", "32", ")"])
     self.assertEquals(interpreter.tokenize('(+ 2 32)'), ["(", "+", "2", "32", ")"])
Exemplo n.º 3
0
 def test_tokenize_single_atom(self):
     assert_equals(['foo'], tokenize('foo'))
Exemplo n.º 4
0
 def test_it_tokenizes_expressions(self):
     self.assertEquals(interpreter.tokenize('(1 2 32)'),
                       ["(", "1", "2", "32", ")"])
     self.assertEquals(interpreter.tokenize('(+ 2 32)'),
                       ["(", "+", "2", "32", ")"])
Exemplo n.º 5
0
 def test_tokenize_list(self):
     source = '(foo 1 2)'
     tokens = ['(', 'foo', '1', '2', ')']
     assert_equals(tokens, tokenize(source))