]> gitweb.michael.orlitzky.com - dunshire.git/commitdiff
Build looping into the test suite and make doctests optional.
authorMichael Orlitzky <michael@orlitzky.com>
Fri, 11 Nov 2016 20:52:30 +0000 (15:52 -0500)
committerMichael Orlitzky <michael@orlitzky.com>
Sun, 13 Nov 2016 20:19:27 +0000 (15:19 -0500)
makefile
test/__init__.py
test/__main__.py

index 9f9798bf94eda41d74dfd7194f3773bcc6544f9d..49c43cea3c4312898d0f87c8e63ca22c1b2eeee3 100644 (file)
--- a/makefile
+++ b/makefile
@@ -16,14 +16,9 @@ doctest:
 check:
        PYTHONPATH="." test/__main__.py
 
-.PHONE: checkloop
+.PHONY: checkloop
 checkloop:
-       COUNT=0; \
-       while [ $$? -eq 0 ]; do \
-            COUNT=`expr $$COUNT + 1`; \
-            echo $$COUNT; \
-            PYTHONPATH="." test/__main__.py; \
-        done;
+       PYTHONPATH="." test/__main__.py --no-doctests --loop
 
 .PHONY: lint
 lint:
index 0f6f15c665da78f61effd04e9159e5bf50b9ef56..2e23a7c7dbec733dc994b611e137a33f419d036d 100644 (file)
@@ -18,17 +18,26 @@ from test import matrices_test
 from test import randomgen
 from test import symmetric_linear_game_test
 
-def build_suite():
+def build_suite(doctests=True):
     """
     Build our test suite, separately from running it.
+
+    Parameters
+    ----------
+
+    doctests : bool
+        Do you want to build the doctests, too? During random testing,
+        the answer may be "no."
+
     """
     suite = TestSuite()
-    suite.addTest(DocTestSuite(cones))
-    suite.addTest(DocTestSuite(errors, optionflags=ELLIPSIS))
-    suite.addTest(DocTestSuite(games, optionflags=ELLIPSIS))
-    suite.addTest(DocTestSuite(matrices, optionflags=ELLIPSIS))
-    suite.addTest(DocTestSuite(symmetric_linear_game_test))
-    suite.addTest(DocTestSuite(randomgen, optionflags=ELLIPSIS))
+    if doctests:
+        suite.addTest(DocTestSuite(cones))
+        suite.addTest(DocTestSuite(errors, optionflags=ELLIPSIS))
+        suite.addTest(DocTestSuite(games, optionflags=ELLIPSIS))
+        suite.addTest(DocTestSuite(matrices, optionflags=ELLIPSIS))
+        suite.addTest(DocTestSuite(symmetric_linear_game_test))
+        suite.addTest(DocTestSuite(randomgen, optionflags=ELLIPSIS))
     slg_tests = TestLoader().loadTestsFromModule(symmetric_linear_game_test)
     suite.addTest(slg_tests)
     mat_tests = TestLoader().loadTestsFromModule(matrices_test)
index b0598e7dbbff4fa082039b4c41bff1604e8c2506..aca4e64ec83a4f944e57ec67117c6d2de74db0db 100755 (executable)
@@ -2,9 +2,33 @@
 """
 An implementation of __main__() that allows us to "run this module."
 """
+from sys import argv
+
 from test import build_suite, run_suite
 
-if run_suite(build_suite()).wasSuccessful():
+# We take two command-line arguments. The first enables you to turn
+# off the doctests, which are deterministic. The second tells us to
+# repeat the test suite indefinitely rather than return the result
+# of running it once. The flags usually occur together so that we
+# don't waste time running the doctests in a loop.
+doctests = True
+loop = False
+
+if "--no-doctests" in argv:
+    doctests = False
+
+if "--loop" in argv:
+    loop = True
+
+# Running the test suite clobbers it! And deepcopy() doesn't work on a
+# suite that contains doctests! ARRRGRRGRRGRHG!!!!!! You're all idiots.
+result = run_suite(build_suite(doctests))
+
+if result.wasSuccessful() and not loop:
     exit(0)
-else:
-    exit(1)
+
+if loop:
+    while(result.wasSuccessful()):
+        result = run_suite(build_suite(doctests))
+
+exit(1)