blob: 99bacda8e9385f93c782b7e3d7e7eeeb59a09e3f [file] [log] [blame]
Guido van Rossum8d691c82000-09-01 19:25:51 +00001"""Supporting definitions for the Python regression test."""
Guido van Rossum5c971671996-07-22 15:23:25 +00002
Guido van Rossum8d691c82000-09-01 19:25:51 +00003
4class Error(Exception):
5 """Base class for regression test exceptions."""
6
7class TestFailed(Error):
8 """Test failed."""
9
10class TestSkipped(Error):
11 """Test skipped.
12
13 This can be raised to indicate that a test was deliberatly
14 skipped, but not because a feature wasn't available. For
15 example, if some resource can't be used, such as the network
16 appears to be unavailable, this should be raised instead of
17 TestFailed.
18
19 """
20
Guido van Rossum5c971671996-07-22 15:23:25 +000021
Guido van Rossum228b8e81997-04-02 06:13:34 +000022verbose = 1 # Flag set to 0 by regrtest.py
Guido van Rossum8d691c82000-09-01 19:25:51 +000023use_large_resources = 1 # Flag set to 0 by regrtest.py
Guido van Rossum228b8e81997-04-02 06:13:34 +000024
Guido van Rossum5c971671996-07-22 15:23:25 +000025def unload(name):
26 import sys
27 try:
28 del sys.modules[name]
29 except KeyError:
30 pass
31
32def forget(modname):
33 unload(modname)
34 import sys, os
35 for dirname in sys.path:
36 try:
37 os.unlink(os.path.join(dirname, modname + '.pyc'))
38 except os.error:
39 pass
40
41FUZZ = 1e-6
42
43def fcmp(x, y): # fuzzy comparison function
44 if type(x) == type(0.0) or type(y) == type(0.0):
45 try:
46 x, y = coerce(x, y)
47 fuzz = (abs(x) + abs(y)) * FUZZ
48 if abs(x-y) <= fuzz:
49 return 0
50 except:
51 pass
52 elif type(x) == type(y) and type(x) in (type(()), type([])):
53 for i in range(min(len(x), len(y))):
54 outcome = fcmp(x[i], y[i])
55 if outcome <> 0:
56 return outcome
57 return cmp(len(x), len(y))
58 return cmp(x, y)
59
60TESTFN = '@test' # Filename used for testing
61from os import unlink
Guido van Rossume03c0501998-08-12 02:38:11 +000062
63def findfile(file, here=__file__):
64 import os
65 if os.path.isabs(file):
66 return file
67 import sys
68 path = sys.path
69 path = [os.path.dirname(here)] + path
70 for dn in path:
71 fn = os.path.join(dn, file)
72 if os.path.exists(fn): return fn
73 return file