From: Tim Vieira Date: Fri, 5 Jul 2013 23:25:59 +0000 (-0400) Subject: use doctests X-Git-Url: https://hydra-www.ietfng.org/gitweb/?a=commitdiff_plain;h=1f32b130e9930e30a20d535d5bd03af1a9441d8e;p=dyna2 use doctests --- diff --git a/run-doctests.py b/run-doctests.py new file mode 100644 index 0000000..8eb36a3 --- /dev/null +++ b/run-doctests.py @@ -0,0 +1,29 @@ +from path import path +from cStringIO import StringIO + +import sys +sys.path.append('src/Dyna/Backend/Python') + +from dyna_doctest import run +from utils import red, green + +failures = [] +for x in path('test/repl').glob("*.dynadoc"): + print x, + with file(x) as f: + g = StringIO() + if run(f.read(), g): + failures.append([x, g.getvalue()]) + print red % 'fail' + else: + print green % 'pass' + +for f, log in failures: + print + print '================================================' + print f + print '================================================' + print log + +if failures: + exit(1) diff --git a/src/Dyna/Backend/Python/Selftest.hs b/src/Dyna/Backend/Python/Selftest.hs index 652750c..67a3dc3 100644 --- a/src/Dyna/Backend/Python/Selftest.hs +++ b/src/Dyna/Backend/Python/Selftest.hs @@ -80,11 +80,11 @@ test_End_To_End = map mkExample [ "simple", "equalities", "fib-limit", "dijkstra", "papa2", "matrixops" , "factorial-bc", "geom", "lists", "dijkstra-backpointers" ] -test_REPL :: [Test] -test_REPL = map (\n -> testProgramRuns n ("./test/repl/"++n) []) - [ "aggregator-conflict" - , "retract-rule" - , "late-aggregator-assignment" ] +--test_REPL :: [Test] +--test_REPL = map (\n -> testProgramRuns n ("./test/repl/"++n) []) +-- [ "aggregator-conflict" +-- , "retract-rule" +-- , "late-aggregator-assignment" ] ------------------------------------------------------------------------}}} -- Harness toplevel {{{ diff --git a/src/Dyna/Backend/Python/dyna-doctest.py b/src/Dyna/Backend/Python/dyna_doctest.py old mode 100755 new mode 100644 similarity index 78% rename from src/Dyna/Backend/Python/dyna-doctest.py rename to src/Dyna/Backend/Python/dyna_doctest.py index 6522705..d3cd5ad --- a/src/Dyna/Backend/Python/dyna-doctest.py +++ b/src/Dyna/Backend/Python/dyna_doctest.py @@ -33,17 +33,21 @@ def clean(x): return re.compile('(\s*)$', re.MULTILINE).sub('', re.sub('\033\[\d+m', '', strip_comments(x)).strip()) -def run(code): +def run(code, out=None): + + if out is None: + out = sys.stdout + interp = Interpreter() repl = REPL(interp) errors = 0 for cmd, expect in extract(code): if not clean(cmd): - print + print >> out continue - print yellow % '> %s' % cmd + print >> out, yellow % '> %s' % cmd if clean(cmd) == '*resume*': repl.cmdloop() @@ -62,22 +66,21 @@ def run(code): continue if expect != got: - print green % expect - print red % got + print >> out, green % expect + print >> out, red % got errors += 1 else: - print - print got + print >> out + print >> out, got - print + print >> out if not errors: - print green % 'PASS!' - print + print >> out, green % 'PASS!' + return 0 else: - print yellow % '>>>', red % '%s errors' % errors - print - sys.exit(1) + print >> out, yellow % '>>>', red % '%s errors' % errors + return 1 if __name__ == '__main__': diff --git a/test/repl/colon-equals.doctest b/test/repl/colon-equals.dynadoc similarity index 100% rename from test/repl/colon-equals.doctest rename to test/repl/colon-equals.dynadoc diff --git a/test/repl/equals-errors.doctest b/test/repl/equals-errors.dynadoc similarity index 100% rename from test/repl/equals-errors.doctest rename to test/repl/equals-errors.dynadoc diff --git a/test/repl/load.dynadoc b/test/repl/load.dynadoc index 1036591..aa00c51 100644 --- a/test/repl/load.dynadoc +++ b/test/repl/load.dynadoc @@ -59,5 +59,3 @@ tree(0) = ['ROOT', ['S', ['NP', 'George'], ['VP', ['V', ['V', 'love'], '-s'], [' > query sentence_length(10) sentence_length(10) = 9. - -> *resume* diff --git a/test/repl/retract-bc.dynadoc b/test/repl/retract-bc.dynadoc index f6ba303..0055bc6 100644 --- a/test/repl/retract-bc.dynadoc +++ b/test/repl/retract-bc.dynadoc @@ -38,12 +38,3 @@ f(5) = null. > sol Solution empty. - -> :- backchain g/2. -| g(X,Y) dict= X*Y. -| h(1,2). h(2,3). -| f(X,Y) = h(X,Y), g(X,Y). - -> query g(1,2) -> rules -> retract_rule 6 \ No newline at end of file diff --git a/test/repl/retract-rule.doctest b/test/repl/retract-rule.dynadoc similarity index 100% rename from test/repl/retract-rule.doctest rename to test/repl/retract-rule.dynadoc