Mercurial > hg
view contrib/bdiff-torture.py @ 40305:6519f5aee06f
tests: use regex instead of Python versions for archive hash changes
It turns out this behavior changed between versions of Python 3. Let's
just always accept either size or sha1, and move on.
Differential Revision: https://phab.mercurial-scm.org/D5104
author | Augie Fackler <augie@google.com> |
---|---|
date | Sun, 14 Oct 2018 08:55:30 -0400 |
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