Skip to content
This repository has been archived by the owner on Jan 30, 2023. It is now read-only.

Commit

Permalink
Merge branch 'public/29968' of git://trac.sagemath.org/sage into publ…
Browse files Browse the repository at this point in the history
…ic/29968-reb
  • Loading branch information
Jonathan Kliem committed Jul 11, 2020
2 parents 02b0be1 + 72d4116 commit 95a2fef
Show file tree
Hide file tree
Showing 9 changed files with 155 additions and 57 deletions.
1 change: 1 addition & 0 deletions src/bin/sage-runtests
Expand Up @@ -70,6 +70,7 @@ if __name__ == "__main__":
'if "build" is listed, will also run tests specific to Sage\'s build/packaging system; '
'if set to "all", then all tests will be run')
parser.add_option("--randorder", type=int, metavar="SEED", help="randomize order of tests")
parser.add_option("--random-seed", dest="random_seed", type=int, metavar="SEED", help="random seed for fuzzing doctests")
parser.add_option("--global-iterations", "--global_iterations", type=int, default=0, help="repeat the whole testing process this many times")
parser.add_option("--file-iterations", "--file_iterations", type=int, default=0, help="repeat each file this many times, stopping on the first failure")

Expand Down
53 changes: 52 additions & 1 deletion src/doc/en/developer/doctesting.rst
Expand Up @@ -803,6 +803,57 @@ You can also pass in an explicit amount of time::
Finally, you can disable any warnings about long tests with
``--warn-long 0``.

Doctests start from a random seed::

[kliem@sage sage-9.2]$ sage -t src/sage/doctest/tests/random_seed.rst
Running doctests with ID 2020-06-23-23-22-59-49f37a55.
...
Doctesting 1 file.
sage -t --warn-long 89.5 --random-seed=112986622569797306072457879734474628454 src/sage/doctest/tests/random_seed.rst
**********************************************************************
File "src/sage/doctest/tests/random_seed.rst", line 3, in sage.doctest.tests.random_seed
Failed example:
randint(5, 10)
Expected:
9
Got:
8
**********************************************************************
1 item had failures:
1 of 2 in sage.doctest.tests.random_seed
[1 test, 1 failure, 0.00 s]
----------------------------------------------------------------------
sage -t --warn-long 89.5 --random-seed=112986622569797306072457879734474628454 src/sage/doctest/tests/random_seed.rst # 1 doctest failed
----------------------------------------------------------------------
Total time for all tests: 0.0 seconds
cpu time: 0.0 seconds
cumulative wall time: 0.0 seconds

This seed can be set explicitly to reproduce possible failures::

[kliem@sage sage-9.2]$ sage -t --warn-long 89.5 --random-seed=112986622569797306072457879734474628454 src/sage/doctest/tests/random_seed.rst
Running doctests with ID 2020-06-23-23-24-28-14a52269.
...
Doctesting 1 file.
sage -t --warn-long 89.5 --random-seed=112986622569797306072457879734474628454 src/sage/doctest/tests/random_seed.rst
**********************************************************************
File "src/sage/doctest/tests/random_seed.rst", line 3, in sage.doctest.tests.random_seed
Failed example:
randint(5, 10)
Expected:
9
Got:
8
**********************************************************************
1 item had failures:
1 of 2 in sage.doctest.tests.random_seed
[1 test, 1 failure, 0.00 s]
----------------------------------------------------------------------
sage -t --warn-long 89.5 --random-seed=112986622569797306072457879734474628454 src/sage/doctest/tests/random_seed.rst # 1 doctest failed
----------------------------------------------------------------------
Total time for all tests: 0.0 seconds
cpu time: 0.0 seconds
cumulative wall time: 0.0 seconds

.. _section-optional-doctest-flag:

Expand Down Expand Up @@ -861,7 +912,7 @@ If you want Sage to detect external software or other capabilities
(such as magma, latex, internet) automatically and run all of the
relevant tests, then add ``external``::

$ sage -t --optional=external src/sage/rings/real_mpfr.pyx
$ sage -t --optional=external src/sage/rings/real_mpfr.pyx
Running doctests with ID 2016-03-16-14-10-21-af2ebb67.
Using --optional=external
External software to be detected: cplex,gurobi,internet,latex,macaulay2,magma,maple,mathematica,matlab,octave,scilab
Expand Down
1 change: 1 addition & 0 deletions src/doc/en/reference/repl/options.rst
Expand Up @@ -134,6 +134,7 @@ Command-line options for Sage
run the lines which are unlabeled or labeled ``#optional`` or labeled
``#optional tag`` for any of the tags given.
- ``--randorder[=seed]`` -- randomize order of tests
- ``--random_seed[=seed]`` -- random seed for fuzzing doctests
- ``--short[=seconds]`` -- run as many doctests as possible in about 300
seconds (or the number of seconds given.) This runs the tests for each
module from the top of the file and skips tests once it exceeds the budget
Expand Down
12 changes: 6 additions & 6 deletions src/sage/algebras/quatalg/quaternion_algebra.py
Expand Up @@ -522,16 +522,16 @@ def random_element(self, *args, **kwds):
EXAMPLES::
sage: QuaternionAlgebra(QQ[sqrt(2)],-3,7).random_element()
sage: QuaternionAlgebra(QQ[sqrt(2)],-3,7).random_element() # random
(sqrt2 + 2)*i + (-12*sqrt2 - 2)*j + (-sqrt2 + 1)*k
sage: QuaternionAlgebra(-3,19).random_element()
sage: QuaternionAlgebra(-3,19).random_element() # random
-1 + 2*i - j - 6/5*k
sage: QuaternionAlgebra(GF(17)(2),3).random_element()
sage: QuaternionAlgebra(GF(17)(2),3).random_element() # random
14 + 10*i + 4*j + 7*k
Specify the numerator and denominator bounds::
sage: QuaternionAlgebra(-3,19).random_element(10^6,10^6)
sage: QuaternionAlgebra(-3,19).random_element(10^6,10^6) # random
-979933/553629 + 255525/657688*i - 3511/6929*j - 700105/258683*k
"""
K = self.base_ring()
Expand Down Expand Up @@ -1526,9 +1526,9 @@ def random_element(self, *args, **kwds):
EXAMPLES::
sage: QuaternionAlgebra(-11,-1).maximal_order().random_element()
sage: QuaternionAlgebra(-11,-1).maximal_order().random_element() # random
-4 - 4*i + j - k
sage: QuaternionAlgebra(-11,-1).maximal_order().random_element(-10,10)
sage: QuaternionAlgebra(-11,-1).maximal_order().random_element(-10,10) # random
-9/2 - 7/2*i - 7/2*j - 3/2*k
"""
return sum(ZZ.random_element(*args, **kwds) * b for b in self.basis())
Expand Down
4 changes: 4 additions & 0 deletions src/sage/doctest/control.py
Expand Up @@ -97,6 +97,7 @@ def __init__(self, **kwds):
self.long = False
self.warn_long = None
self.randorder = None
self.random_seed = 0
self.global_iterations = 1 # sage-runtests default is 0
self.file_iterations = 1 # sage-runtests default is 0
self.initial = False
Expand Down Expand Up @@ -411,6 +412,9 @@ def __init__(self, options, args):
self.load_stats(options.stats_path)
self._init_warn_long()

if self.options.random_seed is None:
self.options.random_seed = 0

def __del__(self):
if getattr(self, 'logfile', None) is not None:
self.logfile.close()
Expand Down
2 changes: 1 addition & 1 deletion src/sage/doctest/forker.py
Expand Up @@ -875,7 +875,7 @@ def run(self, test, compileflags=None, out=None, clear_globs=True):
TestResults(failed=0, attempted=4)
"""
self.setters = {}
randstate.set_random_seed(0)
randstate.set_random_seed(self.options.random_seed)
warnings.showwarning = showwarning_with_traceback
self.running_doctest_digest = hashlib.md5()
self.test = test
Expand Down
2 changes: 2 additions & 0 deletions src/sage/doctest/reporting.py
Expand Up @@ -184,6 +184,8 @@ def report_head(self, source):
cmd += " --warn-long"
if warnlong != 1.0:
cmd += " %.1f"%(warnlong)
seed = self.controller.options.random_seed
cmd += " --random-seed={}".format(seed)
cmd += " " + source.printpath
return cmd

Expand Down

0 comments on commit 95a2fef

Please sign in to comment.