From d4cfa9ac4111d44d8077ea9ee9d5c78723e482ad Mon Sep 17 00:00:00 2001 From: Tim Vieira Date: Thu, 27 Jun 2013 16:57:10 -0400 Subject: [PATCH] dyna doctest runnner. --- dyna-doctest | 3 ++ src/Dyna/Backend/Python/dyna-doctest.py | 43 +++++++++++++++++++++++++ test/repl/retract-rule.doctest | 32 ++++++++++++++++++ 3 files changed, 78 insertions(+) create mode 100755 dyna-doctest create mode 100755 src/Dyna/Backend/Python/dyna-doctest.py create mode 100644 test/repl/retract-rule.doctest diff --git a/dyna-doctest b/dyna-doctest new file mode 100755 index 0000000..6d8abd8 --- /dev/null +++ b/dyna-doctest @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +exec python ${DYNAHOME:-.}/src/Dyna/Backend/Python/dyna-doctest.py "$@" diff --git a/src/Dyna/Backend/Python/dyna-doctest.py b/src/Dyna/Backend/Python/dyna-doctest.py new file mode 100755 index 0000000..0a9caf3 --- /dev/null +++ b/src/Dyna/Backend/Python/dyna-doctest.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python +import re, sys + +sys.path.append('src/Dyna/Backend/Python') + +from interpreter import Interpreter +from repl import REPL +from cStringIO import StringIO + +from utils import red, green + + +def extract(code): + for block in re.compile('^:- ', re.MULTILINE).split(code): + for cmd, expect in re.findall('(.*?)\n([\w\W]*)$', block): + yield cmd, expect + + +def run(code): + interp = Interpreter() + repl = REPL(interp) + + for cmd, expect in extract(code): + print ':-', cmd + sys.stdout = x = StringIO() + try: + repl.onecmd(cmd) + finally: + sys.stdout = sys.__stdout__ + got = x.getvalue().strip() + expect = expect.strip() + if expect != got: + print green % expect + print red % got + else: + print x.getvalue().rstrip() + print + + +if __name__ == '__main__': + for filename in sys.argv[1:]: + with file(filename) as f: + run(f.read()) diff --git a/test/repl/retract-rule.doctest b/test/repl/retract-rule.doctest new file mode 100644 index 0000000..5e3313c --- /dev/null +++ b/test/repl/retract-rule.doctest @@ -0,0 +1,32 @@ +:- a += 1. +============= +a := 1 + +:- b += 1. +============= +b := 1 + +:- a += 1. +============= +a := 2 + +:- rules + +0: a += 1. + 1: b += 1. + 2: a += 1. + +:- sol + +Solution +======== +a := 2 +b := 1 + +:- retract_rule 0 +:- retract_rule 1 +:- sol + +Solution +======== +a := 1 -- 2.50.1