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)
def test_it_tokenizes_expressions(self): self.assertEquals(interpreter.tokenize('(1 2 32)'), ["(", "1", "2", "32", ")"]) self.assertEquals(interpreter.tokenize('(+ 2 32)'), ["(", "+", "2", "32", ")"])
def test_tokenize_single_atom(self): assert_equals(['foo'], tokenize('foo'))
def test_tokenize_list(self): source = '(foo 1 2)' tokens = ['(', 'foo', '1', '2', ')'] assert_equals(tokens, tokenize(source))