@Test
    public void testEval() throws Exception {
        Class<?> thisClass = getClass();

        // Test parser
        BufferedReader parsedReader = new BufferedReader(new InputStreamReader(
            thisClass.getResourceAsStream(FUNCTEST_IL)));
        StringBuilder expected = new StringBuilder("(");
        String line;
        while ((line = parsedReader.readLine()) != null) {
            line = line.trim();
            if (line.length() > 0 && !line.matches("\\w*;.*")) {
                if (expected.charAt(expected.length() - 1) != '(' && line.charAt(0) != ')')
                    expected.append(" ");
                expected.append(line);
            }
        }
        expected.append(")");
        parsedReader.close();
        InputStream is = thisClass.getResourceAsStream(FUNCTEST_IL);
        TokenReader tr = new TokenReader(new InputStreamReader(is, "UTF-8"));
        Engine engine = Engine.newInstance();
        Parser p = new Parser(tr, engine.getSymbolTable());
        IndyObject result = p.getExprList();
        assertEquals(expected.toString(), result.toExprString());

        // Test engine
        InputStreamReader resultReader = new InputStreamReader(
            thisClass.getResourceAsStream(FUNCTEST_RESULT_TXT));
        expected = new StringBuilder();
        int c;
        while ((c = resultReader.read()) != -1)
            expected.append((char) c);
        resultReader.close();
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        PrintStream ps = new PrintStream(os);
        PrintStreamWrapper out = new PrintStreamWrapper(ps);
        engine.getCurrentBindings().bind(engine.symbol("out"), NIL, 0, out, 0);
        engine.progn(result.toArray());
        ps.close();
        assertEquals(expected.toString(), os.toString("UTF-8").replaceAll("\r\n", "\n"));
    }