Mercurial > hg
view contrib/bdiff-torture.py @ 41138:8ddc5d8bea25
tests: support passing testcase after .t paths that have path separators
This probably could have been implemented by changing the regex above this bit
of code, but I wasn't sure if it would end up handling various OSes correctly,
so I decided to go with this version instead.
Previously:
$ tests/run-tests.py tests/test-ssh.t -l
running 2 tests using 2 parallel processes
..
# Ran 2 tests, 0 skipped, 0 failed.
$ tests/run-tests.py tests/test-ssh.t#sshv1 -l
running 0 tests using 0 parallel processes
# Ran 0 tests, 0 skipped, 0 failed.
Now:
$ tests/run-tests.py tests/test-ssh.t -l
running 2 tests using 2 parallel processes
..
# Ran 2 tests, 0 skipped, 0 failed.
$ tests/run-tests.py tests/test-ssh.t#sshv1 -l
running 1 tests using 1 parallel processes
.
# Ran 1 tests, 0 skipped, 0 failed.
Differential Revision: https://phab.mercurial-scm.org/D5535
author | Kyle Lippincott <spectral@google.com> |
---|---|
date | Tue, 08 Jan 2019 17:52:39 -0800 |
parents | 0c73634d0570 |
children | 876494fd967d |
line wrap: on
line source
# Randomized torture test generation for bdiff from __future__ import absolute_import, print_function import random import sys from mercurial import ( mdiff, ) def reducetest(a, b): tries = 0 reductions = 0 print("reducing...") while tries < 1000: a2 = "\n".join(l for l in a.splitlines() if random.randint(0, 100) > 0) + "\n" b2 = "\n".join(l for l in b.splitlines() if random.randint(0, 100) > 0) + "\n" if a2 == a and b2 == b: continue if a2 == b2: continue tries += 1 try: test1(a, b) except Exception as inst: reductions += 1 tries = 0 a = a2 b = b2 print("reduced:", reductions, len(a) + len(b), repr(a), repr(b)) try: test1(a, b) except Exception as inst: print("failed:", inst) sys.exit(0) def test1(a, b): d = mdiff.textdiff(a, b) if not d: raise ValueError("empty") c = mdiff.patches(a, [d]) if c != b: raise ValueError("bad") def testwrap(a, b): try: test1(a, b) return except Exception as inst: pass print("exception:", inst) reducetest(a, b) def test(a, b): testwrap(a, b) testwrap(b, a) def rndtest(size, noise): a = [] src = " aaaaaaaabbbbccd" for x in xrange(size): a.append(src[random.randint(0, len(src) - 1)]) while True: b = [c for c in a if random.randint(0, 99) > noise] b2 = [] for c in b: b2.append(c) while random.randint(0, 99) < noise: b2.append(src[random.randint(0, len(src) - 1)]) if b2 != a: break a = "\n".join(a) + "\n" b = "\n".join(b2) + "\n" test(a, b) maxvol = 10000 startsize = 2 while True: size = startsize count = 0 while size < maxvol: print(size) volume = 0 while volume < maxvol: rndtest(size, 2) volume += size count += 2 size *= 2 maxvol *= 4 startsize *= 4