From da1c6beec7d0bb6b972d88ecf9fb4eccbdf285a5 Mon Sep 17 00:00:00 2001 From: Jonathan Kliem Date: Mon, 22 Jun 2020 16:33:16 +0200 Subject: [PATCH 1/6] start from a "random" random seed for doctesting --- src/sage/doctest/forker.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sage/doctest/forker.py b/src/sage/doctest/forker.py index c93d1f2d995..34753a32a0e 100644 --- a/src/sage/doctest/forker.py +++ b/src/sage/doctest/forker.py @@ -848,7 +848,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() warnings.showwarning = showwarning_with_traceback self.running_doctest_digest = hashlib.md5() self.test = test From b7b836d789e034433d62f331f33fbc1821c0deaa Mon Sep 17 00:00:00 2001 From: Jonathan Kliem Date: Tue, 23 Jun 2020 23:04:48 +0200 Subject: [PATCH 2/6] make random seed reproducible --- src/bin/sage-runtests | 1 + src/sage/doctest/control.py | 6 ++ src/sage/doctest/forker.py | 2 +- src/sage/doctest/reporting.py | 2 + src/sage/doctest/test.py | 133 ++++++++++++++++--------- src/sage/doctest/tests/random_seed.rst | 4 + 6 files changed, 98 insertions(+), 50 deletions(-) create mode 100644 src/sage/doctest/tests/random_seed.rst diff --git a/src/bin/sage-runtests b/src/bin/sage-runtests index 3248f09b0dc..af9e5541c1b 100755 --- a/src/bin/sage-runtests +++ b/src/bin/sage-runtests @@ -71,6 +71,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", 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") diff --git a/src/sage/doctest/control.py b/src/sage/doctest/control.py index a90b45981bb..4d6ee2a775b 100644 --- a/src/sage/doctest/control.py +++ b/src/sage/doctest/control.py @@ -29,6 +29,7 @@ import re import types import sage.misc.flatten +import sage.misc.randstate as randstate from sage.structure.sage_object import SageObject from sage.env import DOT_SAGE, SAGE_LIB, SAGE_SRC, SAGE_LOCAL, SAGE_EXTCODE from sage.misc.temporary_file import tmp_dir @@ -98,6 +99,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 @@ -412,6 +414,10 @@ def __init__(self, options, args): self.load_stats(options.stats_path) self._init_warn_long() + if self.options.random_seed is None: + randstate.set_random_seed() + self.options.random_seed = randstate.initial_seed() + def __del__(self): if getattr(self, 'logfile', None) is not None: self.logfile.close() diff --git a/src/sage/doctest/forker.py b/src/sage/doctest/forker.py index 34753a32a0e..e5c1fe47263 100644 --- a/src/sage/doctest/forker.py +++ b/src/sage/doctest/forker.py @@ -848,7 +848,7 @@ def run(self, test, compileflags=None, out=None, clear_globs=True): TestResults(failed=0, attempted=4) """ self.setters = {} - randstate.set_random_seed() + randstate.set_random_seed(self.options.random_seed) warnings.showwarning = showwarning_with_traceback self.running_doctest_digest = hashlib.md5() self.test = test diff --git a/src/sage/doctest/reporting.py b/src/sage/doctest/reporting.py index 60571e9044e..6def44f32a9 100644 --- a/src/sage/doctest/reporting.py +++ b/src/sage/doctest/reporting.py @@ -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 diff --git a/src/sage/doctest/test.py b/src/sage/doctest/test.py index df3ad0108b8..2131002ae11 100644 --- a/src/sage/doctest/test.py +++ b/src/sage/doctest/test.py @@ -23,20 +23,20 @@ Check that :trac:`2235` has been fixed:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "longtime.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "longtime.rst"], **kwds) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 longtime.rst + sage -t --warn-long 0.0 --random_seed=0 longtime.rst [0 tests, ...s] ---------------------------------------------------------------------- All tests passed! ---------------------------------------------------------------------- ... 0 - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "-l", "longtime.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "-l", "longtime.rst"], **kwds) # long time Running doctests... Doctesting 1 file. - sage -t --long --warn-long 0.0 longtime.rst + sage -t --long --warn-long 0.0 --random_seed=0 longtime.rst [1 test, ...s] ---------------------------------------------------------------------- All tests passed! @@ -46,10 +46,10 @@ Check handling of tolerances:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "tolerance.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "tolerance.rst"], **kwds) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 tolerance.rst + sage -t --warn-long 0.0 --random_seed=0 tolerance.rst ********************************************************************** File "tolerance.rst", line ..., in sage.doctest.tests.tolerance Failed example: @@ -115,10 +115,10 @@ Test the ``--initial`` option:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "-i", "initial.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "-i", "initial.rst"], **kwds) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 initial.rst + sage -t --warn-long 0.0 --random_seed=0 initial.rst ********************************************************************** File "initial.rst", line 4, in sage.doctest.tests.initial Failed example: @@ -138,17 +138,17 @@ ********************************************************************** ... ---------------------------------------------------------------------- - sage -t --warn-long 0.0 initial.rst # 5 doctests failed + sage -t --warn-long 0.0 --random_seed=0 initial.rst # 5 doctests failed ---------------------------------------------------------------------- ... 1 Test the ``--exitfirst`` option:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--exitfirst", "initial.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "--exitfirst", "initial.rst"], **kwds) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 initial.rst + sage -t --warn-long 0.0 --random_seed=0 initial.rst ********************************************************************** File "initial.rst", line 4, in sage.doctest.tests.initial Failed example: @@ -160,7 +160,7 @@ ********************************************************************** ... ---------------------------------------------------------------------- - sage -t --warn-long 0.0 initial.rst # 1 doctest failed + sage -t --warn-long 0.0 --random_seed=0 initial.rst # 1 doctest failed ---------------------------------------------------------------------- ... 1 @@ -170,26 +170,26 @@ sage: from copy import deepcopy sage: kwds2 = deepcopy(kwds) sage: kwds2['env']['SAGE_TIMEOUT'] = "3" - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "99seconds.rst"], **kwds2) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "99seconds.rst"], **kwds2) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 99seconds.rst + sage -t --warn-long 0.0 --random_seed=0 99seconds.rst Timed out ********************************************************************** Tests run before process (pid=...) timed out: ... ---------------------------------------------------------------------- - sage -t --warn-long 0.0 99seconds.rst # Timed out + sage -t --warn-long 0.0 --random_seed=0 99seconds.rst # Timed out ---------------------------------------------------------------------- ... 4 Test handling of ``KeyboardInterrupt`` in doctests:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "keyboardinterrupt.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "keyboardinterrupt.rst"], **kwds) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 keyboardinterrupt.rst + sage -t --warn-long 0.0 --random_seed=0 keyboardinterrupt.rst ********************************************************************** File "keyboardinterrupt.rst", line 11, in sage.doctest.tests.keyboardinterrupt Failed example: @@ -201,14 +201,14 @@ ********************************************************************** ... ---------------------------------------------------------------------- - sage -t --warn-long 0.0 keyboardinterrupt.rst # 1 doctest failed + sage -t --warn-long 0.0 --random_seed=0 keyboardinterrupt.rst # 1 doctest failed ---------------------------------------------------------------------- ... 1 Interrupt the doctester:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "interrupt.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "interrupt.rst"], **kwds) # long time Running doctests... Doctesting 1 file. Killing test interrupt.rst @@ -253,10 +253,10 @@ Test a doctest failing with ``abort()``:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "abort.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "abort.rst"], **kwds) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 abort.rst + sage -t --warn-long 0.0 --random_seed=0 abort.rst Killed due to abort ********************************************************************** Tests run before process (pid=...) failed: @@ -269,17 +269,17 @@ ------------------------------------------------------------------------ ... ---------------------------------------------------------------------- - sage -t --warn-long 0.0 abort.rst # Killed due to abort + sage -t --warn-long 0.0 --random_seed=0 abort.rst # Killed due to abort ---------------------------------------------------------------------- ... 16 A different kind of crash:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "fail_and_die.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "fail_and_die.rst"], **kwds) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 fail_and_die.rst + sage -t --warn-long 0.0 --random_seed=0 fail_and_die.rst ********************************************************************** File "fail_and_die.rst", line 5, in sage.doctest.tests.fail_and_die Failed example: @@ -293,17 +293,17 @@ Tests run before process (pid=...) failed: ... ---------------------------------------------------------------------- - sage -t --warn-long 0.0 fail_and_die.rst # Killed due to kill signal + sage -t --warn-long 0.0 --random_seed=0 fail_and_die.rst # Killed due to kill signal ---------------------------------------------------------------------- ... 16 Test that ``sig_on_count`` is checked correctly:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "sig_on.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "sig_on.rst"], **kwds) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 sig_on.rst + sage -t --warn-long 0.0 --random_seed=0 sig_on.rst ********************************************************************** File "sig_on.rst", line 6, in sage.doctest.tests.sig_on Failed example: @@ -317,7 +317,7 @@ 1 of 5 in sage.doctest.tests.sig_on [3 tests, 1 failure, ...] ---------------------------------------------------------------------- - sage -t --warn-long 0.0 sig_on.rst # 1 doctest failed + sage -t --warn-long 0.0 --random_seed=0 sig_on.rst # 1 doctest failed ---------------------------------------------------------------------- ... 1 @@ -325,12 +325,12 @@ Test logfiles in serial and parallel mode (see :trac:`19271`):: sage: t = tmp_filename() - sage: subprocess.call(["sage", "-t", "--serial", "--warn-long", "0", "simple_failure.rst", "--logfile", t], stdout=open(os.devnull, "w"), **kwds) # long time + sage: subprocess.call(["sage", "-t", "--serial", "--warn-long", "0", "--random_seed=0", "simple_failure.rst", "--logfile", t], stdout=open(os.devnull, "w"), **kwds) # long time 1 sage: print(open(t).read()) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 simple_failure.rst + sage -t --warn-long 0.0 --random_seed=0 simple_failure.rst ********************************************************************** File "simple_failure.rst", line 7, in sage.doctest.tests.simple_failure Failed example: @@ -344,16 +344,16 @@ 1 of 5 in sage.doctest.tests.simple_failure [4 tests, 1 failure, ...] ---------------------------------------------------------------------- - sage -t --warn-long 0.0 simple_failure.rst # 1 doctest failed + sage -t --warn-long 0.0 --random_seed=0 simple_failure.rst # 1 doctest failed ---------------------------------------------------------------------- ... - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "simple_failure.rst", "--logfile", t], stdout=open(os.devnull, "w"), **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "simple_failure.rst", "--logfile", t], stdout=open(os.devnull, "w"), **kwds) # long time 1 sage: print(open(t).read()) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 simple_failure.rst + sage -t --warn-long 0.0 --random_seed=0 simple_failure.rst ********************************************************************** File "simple_failure.rst", line 7, in sage.doctest.tests.simple_failure Failed example: @@ -367,16 +367,16 @@ 1 of 5 in sage.doctest.tests.simple_failure [4 tests, 1 failure, ...] ---------------------------------------------------------------------- - sage -t --warn-long 0.0 simple_failure.rst # 1 doctest failed + sage -t --warn-long 0.0 --random_seed=0 simple_failure.rst # 1 doctest failed ---------------------------------------------------------------------- ... Test the ``--debug`` option:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--debug", "simple_failure.rst"], stdin=open(os.devnull), **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "--debug", "simple_failure.rst"], stdin=open(os.devnull), **kwds) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 simple_failure.rst + sage -t --warn-long 0.0 --random_seed=0 simple_failure.rst ********************************************************************** File "simple_failure.rst", line 7, in sage.doctest.tests.simple_failure Failed example: @@ -399,14 +399,14 @@ 1 of 5 in sage.doctest.tests.simple_failure [4 tests, 1 failure, ...] ---------------------------------------------------------------------- - sage -t --warn-long 0.0 simple_failure.rst # 1 doctest failed + sage -t --warn-long 0.0 --random_seed=0 simple_failure.rst # 1 doctest failed ---------------------------------------------------------------------- ... 1 Test running under gdb, without and with a timeout:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--gdb", "1second.rst"], stdin=open(os.devnull), **kwds) # long time, optional: gdb + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "--gdb", "1second.rst"], stdin=open(os.devnull), **kwds) # long time, optional: gdb exec gdb ... Running doctests... Doctesting 1 file... @@ -420,7 +420,7 @@ gdb might need a long time to start up, so we allow 30 seconds:: - sage: subprocess.call(["sage", "-t", "--gdb", "--warn-long", "0", "-T30", "99seconds.rst"], stdin=open(os.devnull), **kwds) # long time, optional: gdb + sage: subprocess.call(["sage", "-t", "--gdb", "--warn-long", "0", "--random_seed=0", "-T30", "99seconds.rst"], stdin=open(os.devnull), **kwds) # long time, optional: gdb exec gdb ... Running doctests... Timed out @@ -428,10 +428,10 @@ Test the ``--show-skipped`` option:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--show-skipped", "show_skipped.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "--show-skipped", "show_skipped.rst"], **kwds) # long time Running doctests ... Doctesting 1 file. - sage -t --warn-long 0.0 show_skipped.rst + sage -t --warn-long 0.0 --random_seed=0 show_skipped.rst 1 unlabeled test not run 2 tests not run due to known bugs 1 gap test not run @@ -447,10 +447,10 @@ Optional tests are run correctly:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--long", "--show-skipped", "--optional=sage,gap", "show_skipped.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--long", "--random_seed=0", "--show-skipped", "--optional=sage,gap", "show_skipped.rst"], **kwds) # long time Running doctests ... Doctesting 1 file. - sage -t --long --warn-long 0.0 show_skipped.rst + sage -t --long --warn-long 0.0 --random_seed=0 show_skipped.rst 1 unlabeled test not run 2 tests not run due to known bugs 1 not tested test not run @@ -462,10 +462,10 @@ ... 0 - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--long", "--show-skipped", "--optional=gAp", "show_skipped.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--long", "--random_seed=0", "--show-skipped", "--optional=gAp", "show_skipped.rst"], **kwds) # long time Running doctests ... Doctesting 1 file. - sage -t --long --warn-long 0.0 show_skipped.rst + sage -t --long --warn-long 0.0 --random_seed=0 show_skipped.rst 1 unlabeled test not run 2 tests not run due to known bugs 1 not tested test not run @@ -480,7 +480,7 @@ Test an invalid value for ``--optional``:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--optional=bad-option", "show_skipped.rst"], **kwds) + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "--optional=bad-option", "show_skipped.rst"], **kwds) Traceback (most recent call last): ... ValueError: invalid optional tag 'bad-option' @@ -494,10 +494,10 @@ sage: from copy import deepcopy sage: kwds2 = deepcopy(kwds) sage: kwds2['env']['DOCTEST_DELETE_FILE'] = F - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "atexit.rst"], **kwds2) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "atexit.rst"], **kwds2) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 atexit.rst + sage -t --warn-long 0.0 --random_seed=0 atexit.rst [3 tests, ... s] ---------------------------------------------------------------------- All tests passed! @@ -519,9 +519,44 @@ sage: ok = True sage: from sage.cpython.string import bytes_to_str sage: if system() == "Linux": - ....: P = subprocess.Popen(["sage", "-t", "--warn-long", "0", "--memlimit=2000", "memlimit.rst"], stdout=subprocess.PIPE, **kwds) + ....: P = subprocess.Popen(["sage", "-t", "--warn-long", "0", "--random_seed=0", "--memlimit=2000", "memlimit.rst"], stdout=subprocess.PIPE, **kwds) ....: out, err = P.communicate() ....: ok = ("MemoryError: failed to allocate" in bytes_to_str(out)) sage: ok or out True + +Test that random tests are reproducible:: + + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "random_seed.rst"], **kwds) # long time + Running doctests... + Doctesting 1 file. + sage -t --warn-long 0.0 --random_seed=0 random_seed.rst + ********************************************************************** + File "random_seed.rst", line 3, in sage.doctest.tests.random_seed + Failed example: + randint(5, 10) + Expected: + 9 + Got: + 5 + ********************************************************************** + 1 item had failures: + 1 of 2 in sage.doctest.tests.random_seed + [1 test, 1 failure, ...s] + ---------------------------------------------------------------------- + sage -t --warn-long 0.0 --random_seed=0 random_seed.rst # 1 doctest failed + ---------------------------------------------------------------------- + ... + 1 + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=1", "random_seed.rst"], **kwds) # long time + Running doctests... + Doctesting 1 file. + sage -t --warn-long 0.0 --random_seed=1 random_seed.rst + [1 test, ...s] + ---------------------------------------------------------------------- + All tests passed! + ---------------------------------------------------------------------- + ... + 0 + """ diff --git a/src/sage/doctest/tests/random_seed.rst b/src/sage/doctest/tests/random_seed.rst new file mode 100644 index 00000000000..d2caec53d3a --- /dev/null +++ b/src/sage/doctest/tests/random_seed.rst @@ -0,0 +1,4 @@ +We test that random tests are reproducible:: + + sage: randint(5, 10) + 9 From eedbe5ebea9c2b9da79404013c566fe17d0a3e20 Mon Sep 17 00:00:00 2001 From: Jonathan Kliem Date: Tue, 23 Jun 2020 23:26:19 +0200 Subject: [PATCH 3/6] document random_seed --- src/doc/en/developer/doctesting.rst | 53 ++++++++++++++++++++++++++- src/doc/en/reference/repl/options.rst | 1 + 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/src/doc/en/developer/doctesting.rst b/src/doc/en/developer/doctesting.rst index 70c715f7c42..b4c544358e1 100644 --- a/src/doc/en/developer/doctesting.rst +++ b/src/doc/en/developer/doctesting.rst @@ -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: @@ -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 diff --git a/src/doc/en/reference/repl/options.rst b/src/doc/en/reference/repl/options.rst index 3bc37ca1961..41975ccd577 100644 --- a/src/doc/en/reference/repl/options.rst +++ b/src/doc/en/reference/repl/options.rst @@ -135,6 +135,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 From 998b1b94ce1289ea92451a86e5f6191c37eaeb5a Mon Sep 17 00:00:00 2001 From: Jonathan Kliem Date: Wed, 24 Jun 2020 21:09:50 +0200 Subject: [PATCH 4/6] default random seed 0 for now --- src/sage/doctest/control.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/sage/doctest/control.py b/src/sage/doctest/control.py index 4d6ee2a775b..95e702e63c0 100644 --- a/src/sage/doctest/control.py +++ b/src/sage/doctest/control.py @@ -29,7 +29,6 @@ import re import types import sage.misc.flatten -import sage.misc.randstate as randstate from sage.structure.sage_object import SageObject from sage.env import DOT_SAGE, SAGE_LIB, SAGE_SRC, SAGE_LOCAL, SAGE_EXTCODE from sage.misc.temporary_file import tmp_dir @@ -415,8 +414,7 @@ def __init__(self, options, args): self._init_warn_long() if self.options.random_seed is None: - randstate.set_random_seed() - self.options.random_seed = randstate.initial_seed() + self.options.random_seed = 0 def __del__(self): if getattr(self, 'logfile', None) is not None: From 1d7b00e3fc2ebc1dc9982a2df91d15e3f12e9432 Mon Sep 17 00:00:00 2001 From: Jonathan Kliem Date: Wed, 24 Jun 2020 21:57:57 +0200 Subject: [PATCH 5/6] dash instead of underscore for command line options --- src/bin/sage-runtests | 2 +- src/doc/en/developer/doctesting.rst | 10 +-- src/sage/doctest/reporting.py | 2 +- src/sage/doctest/test.py | 108 ++++++++++++++-------------- 4 files changed, 61 insertions(+), 61 deletions(-) diff --git a/src/bin/sage-runtests b/src/bin/sage-runtests index af9e5541c1b..0cf0cc2dcef 100755 --- a/src/bin/sage-runtests +++ b/src/bin/sage-runtests @@ -71,7 +71,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", type=int, metavar="SEED", help="random seed for fuzzing doctests") + 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") diff --git a/src/doc/en/developer/doctesting.rst b/src/doc/en/developer/doctesting.rst index b4c544358e1..4e8c3138f7e 100644 --- a/src/doc/en/developer/doctesting.rst +++ b/src/doc/en/developer/doctesting.rst @@ -809,7 +809,7 @@ Doctests start from a random seed:: 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 + 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: @@ -823,7 +823,7 @@ Doctests start from a random seed:: 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 + 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 @@ -831,11 +831,11 @@ Doctests start from a random seed:: 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 + [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 + 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: @@ -849,7 +849,7 @@ This seed can be set explicitly to reproduce possible 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 + 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 diff --git a/src/sage/doctest/reporting.py b/src/sage/doctest/reporting.py index 6def44f32a9..ec6da712056 100644 --- a/src/sage/doctest/reporting.py +++ b/src/sage/doctest/reporting.py @@ -185,7 +185,7 @@ def report_head(self, source): if warnlong != 1.0: cmd += " %.1f"%(warnlong) seed = self.controller.options.random_seed - cmd += " --random_seed={}".format(seed) + cmd += " --random-seed={}".format(seed) cmd += " " + source.printpath return cmd diff --git a/src/sage/doctest/test.py b/src/sage/doctest/test.py index 2131002ae11..bd1b22bd5b6 100644 --- a/src/sage/doctest/test.py +++ b/src/sage/doctest/test.py @@ -23,20 +23,20 @@ Check that :trac:`2235` has been fixed:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "longtime.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random-seed=0", "longtime.rst"], **kwds) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 --random_seed=0 longtime.rst + sage -t --warn-long 0.0 --random-seed=0 longtime.rst [0 tests, ...s] ---------------------------------------------------------------------- All tests passed! ---------------------------------------------------------------------- ... 0 - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "-l", "longtime.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random-seed=0", "-l", "longtime.rst"], **kwds) # long time Running doctests... Doctesting 1 file. - sage -t --long --warn-long 0.0 --random_seed=0 longtime.rst + sage -t --long --warn-long 0.0 --random-seed=0 longtime.rst [1 test, ...s] ---------------------------------------------------------------------- All tests passed! @@ -46,10 +46,10 @@ Check handling of tolerances:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "tolerance.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random-seed=0", "tolerance.rst"], **kwds) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 --random_seed=0 tolerance.rst + sage -t --warn-long 0.0 --random-seed=0 tolerance.rst ********************************************************************** File "tolerance.rst", line ..., in sage.doctest.tests.tolerance Failed example: @@ -115,10 +115,10 @@ Test the ``--initial`` option:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "-i", "initial.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random-seed=0", "-i", "initial.rst"], **kwds) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 --random_seed=0 initial.rst + sage -t --warn-long 0.0 --random-seed=0 initial.rst ********************************************************************** File "initial.rst", line 4, in sage.doctest.tests.initial Failed example: @@ -138,17 +138,17 @@ ********************************************************************** ... ---------------------------------------------------------------------- - sage -t --warn-long 0.0 --random_seed=0 initial.rst # 5 doctests failed + sage -t --warn-long 0.0 --random-seed=0 initial.rst # 5 doctests failed ---------------------------------------------------------------------- ... 1 Test the ``--exitfirst`` option:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "--exitfirst", "initial.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random-seed=0", "--exitfirst", "initial.rst"], **kwds) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 --random_seed=0 initial.rst + sage -t --warn-long 0.0 --random-seed=0 initial.rst ********************************************************************** File "initial.rst", line 4, in sage.doctest.tests.initial Failed example: @@ -160,7 +160,7 @@ ********************************************************************** ... ---------------------------------------------------------------------- - sage -t --warn-long 0.0 --random_seed=0 initial.rst # 1 doctest failed + sage -t --warn-long 0.0 --random-seed=0 initial.rst # 1 doctest failed ---------------------------------------------------------------------- ... 1 @@ -170,26 +170,26 @@ sage: from copy import deepcopy sage: kwds2 = deepcopy(kwds) sage: kwds2['env']['SAGE_TIMEOUT'] = "3" - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "99seconds.rst"], **kwds2) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random-seed=0", "99seconds.rst"], **kwds2) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 --random_seed=0 99seconds.rst + sage -t --warn-long 0.0 --random-seed=0 99seconds.rst Timed out ********************************************************************** Tests run before process (pid=...) timed out: ... ---------------------------------------------------------------------- - sage -t --warn-long 0.0 --random_seed=0 99seconds.rst # Timed out + sage -t --warn-long 0.0 --random-seed=0 99seconds.rst # Timed out ---------------------------------------------------------------------- ... 4 Test handling of ``KeyboardInterrupt`` in doctests:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "keyboardinterrupt.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random-seed=0", "keyboardinterrupt.rst"], **kwds) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 --random_seed=0 keyboardinterrupt.rst + sage -t --warn-long 0.0 --random-seed=0 keyboardinterrupt.rst ********************************************************************** File "keyboardinterrupt.rst", line 11, in sage.doctest.tests.keyboardinterrupt Failed example: @@ -201,14 +201,14 @@ ********************************************************************** ... ---------------------------------------------------------------------- - sage -t --warn-long 0.0 --random_seed=0 keyboardinterrupt.rst # 1 doctest failed + sage -t --warn-long 0.0 --random-seed=0 keyboardinterrupt.rst # 1 doctest failed ---------------------------------------------------------------------- ... 1 Interrupt the doctester:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "interrupt.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random-seed=0", "interrupt.rst"], **kwds) # long time Running doctests... Doctesting 1 file. Killing test interrupt.rst @@ -253,10 +253,10 @@ Test a doctest failing with ``abort()``:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "abort.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random-seed=0", "abort.rst"], **kwds) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 --random_seed=0 abort.rst + sage -t --warn-long 0.0 --random-seed=0 abort.rst Killed due to abort ********************************************************************** Tests run before process (pid=...) failed: @@ -269,17 +269,17 @@ ------------------------------------------------------------------------ ... ---------------------------------------------------------------------- - sage -t --warn-long 0.0 --random_seed=0 abort.rst # Killed due to abort + sage -t --warn-long 0.0 --random-seed=0 abort.rst # Killed due to abort ---------------------------------------------------------------------- ... 16 A different kind of crash:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "fail_and_die.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random-seed=0", "fail_and_die.rst"], **kwds) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 --random_seed=0 fail_and_die.rst + sage -t --warn-long 0.0 --random-seed=0 fail_and_die.rst ********************************************************************** File "fail_and_die.rst", line 5, in sage.doctest.tests.fail_and_die Failed example: @@ -293,17 +293,17 @@ Tests run before process (pid=...) failed: ... ---------------------------------------------------------------------- - sage -t --warn-long 0.0 --random_seed=0 fail_and_die.rst # Killed due to kill signal + sage -t --warn-long 0.0 --random-seed=0 fail_and_die.rst # Killed due to kill signal ---------------------------------------------------------------------- ... 16 Test that ``sig_on_count`` is checked correctly:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "sig_on.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random-seed=0", "sig_on.rst"], **kwds) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 --random_seed=0 sig_on.rst + sage -t --warn-long 0.0 --random-seed=0 sig_on.rst ********************************************************************** File "sig_on.rst", line 6, in sage.doctest.tests.sig_on Failed example: @@ -317,7 +317,7 @@ 1 of 5 in sage.doctest.tests.sig_on [3 tests, 1 failure, ...] ---------------------------------------------------------------------- - sage -t --warn-long 0.0 --random_seed=0 sig_on.rst # 1 doctest failed + sage -t --warn-long 0.0 --random-seed=0 sig_on.rst # 1 doctest failed ---------------------------------------------------------------------- ... 1 @@ -325,12 +325,12 @@ Test logfiles in serial and parallel mode (see :trac:`19271`):: sage: t = tmp_filename() - sage: subprocess.call(["sage", "-t", "--serial", "--warn-long", "0", "--random_seed=0", "simple_failure.rst", "--logfile", t], stdout=open(os.devnull, "w"), **kwds) # long time + sage: subprocess.call(["sage", "-t", "--serial", "--warn-long", "0", "--random-seed=0", "simple_failure.rst", "--logfile", t], stdout=open(os.devnull, "w"), **kwds) # long time 1 sage: print(open(t).read()) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 --random_seed=0 simple_failure.rst + sage -t --warn-long 0.0 --random-seed=0 simple_failure.rst ********************************************************************** File "simple_failure.rst", line 7, in sage.doctest.tests.simple_failure Failed example: @@ -344,16 +344,16 @@ 1 of 5 in sage.doctest.tests.simple_failure [4 tests, 1 failure, ...] ---------------------------------------------------------------------- - sage -t --warn-long 0.0 --random_seed=0 simple_failure.rst # 1 doctest failed + sage -t --warn-long 0.0 --random-seed=0 simple_failure.rst # 1 doctest failed ---------------------------------------------------------------------- ... - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "simple_failure.rst", "--logfile", t], stdout=open(os.devnull, "w"), **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random-seed=0", "simple_failure.rst", "--logfile", t], stdout=open(os.devnull, "w"), **kwds) # long time 1 sage: print(open(t).read()) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 --random_seed=0 simple_failure.rst + sage -t --warn-long 0.0 --random-seed=0 simple_failure.rst ********************************************************************** File "simple_failure.rst", line 7, in sage.doctest.tests.simple_failure Failed example: @@ -367,16 +367,16 @@ 1 of 5 in sage.doctest.tests.simple_failure [4 tests, 1 failure, ...] ---------------------------------------------------------------------- - sage -t --warn-long 0.0 --random_seed=0 simple_failure.rst # 1 doctest failed + sage -t --warn-long 0.0 --random-seed=0 simple_failure.rst # 1 doctest failed ---------------------------------------------------------------------- ... Test the ``--debug`` option:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "--debug", "simple_failure.rst"], stdin=open(os.devnull), **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random-seed=0", "--debug", "simple_failure.rst"], stdin=open(os.devnull), **kwds) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 --random_seed=0 simple_failure.rst + sage -t --warn-long 0.0 --random-seed=0 simple_failure.rst ********************************************************************** File "simple_failure.rst", line 7, in sage.doctest.tests.simple_failure Failed example: @@ -399,14 +399,14 @@ 1 of 5 in sage.doctest.tests.simple_failure [4 tests, 1 failure, ...] ---------------------------------------------------------------------- - sage -t --warn-long 0.0 --random_seed=0 simple_failure.rst # 1 doctest failed + sage -t --warn-long 0.0 --random-seed=0 simple_failure.rst # 1 doctest failed ---------------------------------------------------------------------- ... 1 Test running under gdb, without and with a timeout:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "--gdb", "1second.rst"], stdin=open(os.devnull), **kwds) # long time, optional: gdb + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random-seed=0", "--gdb", "1second.rst"], stdin=open(os.devnull), **kwds) # long time, optional: gdb exec gdb ... Running doctests... Doctesting 1 file... @@ -420,7 +420,7 @@ gdb might need a long time to start up, so we allow 30 seconds:: - sage: subprocess.call(["sage", "-t", "--gdb", "--warn-long", "0", "--random_seed=0", "-T30", "99seconds.rst"], stdin=open(os.devnull), **kwds) # long time, optional: gdb + sage: subprocess.call(["sage", "-t", "--gdb", "--warn-long", "0", "--random-seed=0", "-T30", "99seconds.rst"], stdin=open(os.devnull), **kwds) # long time, optional: gdb exec gdb ... Running doctests... Timed out @@ -428,10 +428,10 @@ Test the ``--show-skipped`` option:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "--show-skipped", "show_skipped.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random-seed=0", "--show-skipped", "show_skipped.rst"], **kwds) # long time Running doctests ... Doctesting 1 file. - sage -t --warn-long 0.0 --random_seed=0 show_skipped.rst + sage -t --warn-long 0.0 --random-seed=0 show_skipped.rst 1 unlabeled test not run 2 tests not run due to known bugs 1 gap test not run @@ -447,10 +447,10 @@ Optional tests are run correctly:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--long", "--random_seed=0", "--show-skipped", "--optional=sage,gap", "show_skipped.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--long", "--random-seed=0", "--show-skipped", "--optional=sage,gap", "show_skipped.rst"], **kwds) # long time Running doctests ... Doctesting 1 file. - sage -t --long --warn-long 0.0 --random_seed=0 show_skipped.rst + sage -t --long --warn-long 0.0 --random-seed=0 show_skipped.rst 1 unlabeled test not run 2 tests not run due to known bugs 1 not tested test not run @@ -462,10 +462,10 @@ ... 0 - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--long", "--random_seed=0", "--show-skipped", "--optional=gAp", "show_skipped.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--long", "--random-seed=0", "--show-skipped", "--optional=gAp", "show_skipped.rst"], **kwds) # long time Running doctests ... Doctesting 1 file. - sage -t --long --warn-long 0.0 --random_seed=0 show_skipped.rst + sage -t --long --warn-long 0.0 --random-seed=0 show_skipped.rst 1 unlabeled test not run 2 tests not run due to known bugs 1 not tested test not run @@ -480,7 +480,7 @@ Test an invalid value for ``--optional``:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "--optional=bad-option", "show_skipped.rst"], **kwds) + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random-seed=0", "--optional=bad-option", "show_skipped.rst"], **kwds) Traceback (most recent call last): ... ValueError: invalid optional tag 'bad-option' @@ -494,10 +494,10 @@ sage: from copy import deepcopy sage: kwds2 = deepcopy(kwds) sage: kwds2['env']['DOCTEST_DELETE_FILE'] = F - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "atexit.rst"], **kwds2) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random-seed=0", "atexit.rst"], **kwds2) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 --random_seed=0 atexit.rst + sage -t --warn-long 0.0 --random-seed=0 atexit.rst [3 tests, ... s] ---------------------------------------------------------------------- All tests passed! @@ -519,7 +519,7 @@ sage: ok = True sage: from sage.cpython.string import bytes_to_str sage: if system() == "Linux": - ....: P = subprocess.Popen(["sage", "-t", "--warn-long", "0", "--random_seed=0", "--memlimit=2000", "memlimit.rst"], stdout=subprocess.PIPE, **kwds) + ....: P = subprocess.Popen(["sage", "-t", "--warn-long", "0", "--random-seed=0", "--memlimit=2000", "memlimit.rst"], stdout=subprocess.PIPE, **kwds) ....: out, err = P.communicate() ....: ok = ("MemoryError: failed to allocate" in bytes_to_str(out)) sage: ok or out @@ -527,10 +527,10 @@ Test that random tests are reproducible:: - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=0", "random_seed.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random-seed=0", -random_seed.rst"], **kwds) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 --random_seed=0 random_seed.rst + sage -t --warn-long 0.0 --random-seed=0 random_seed.rst ********************************************************************** File "random_seed.rst", line 3, in sage.doctest.tests.random_seed Failed example: @@ -544,14 +544,14 @@ 1 of 2 in sage.doctest.tests.random_seed [1 test, 1 failure, ...s] ---------------------------------------------------------------------- - sage -t --warn-long 0.0 --random_seed=0 random_seed.rst # 1 doctest failed + sage -t --warn-long 0.0 --random-seed=0 random_seed.rst # 1 doctest failed ---------------------------------------------------------------------- ... 1 - sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random_seed=1", "random_seed.rst"], **kwds) # long time + sage: subprocess.call(["sage", "-t", "--warn-long", "0", "--random-seed=1", "random_seed.rst"], **kwds) # long time Running doctests... Doctesting 1 file. - sage -t --warn-long 0.0 --random_seed=1 random_seed.rst + sage -t --warn-long 0.0 --random-seed=1 random_seed.rst [1 test, ...s] ---------------------------------------------------------------------- All tests passed! From 72d41161788684859c9065c9ab82661e05363a54 Mon Sep 17 00:00:00 2001 From: Jonathan Kliem Date: Mon, 22 Jun 2020 21:23:29 +0200 Subject: [PATCH 6/6] make algebras fuzz ready --- src/sage/algebras/quatalg/quaternion_algebra.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/sage/algebras/quatalg/quaternion_algebra.py b/src/sage/algebras/quatalg/quaternion_algebra.py index fed19456b1b..273653f23de 100644 --- a/src/sage/algebras/quatalg/quaternion_algebra.py +++ b/src/sage/algebras/quatalg/quaternion_algebra.py @@ -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() @@ -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())