summaryrefslogtreecommitdiff
path: root/Lib/test/test_string.py
blob: e0f799028a1b8318114453a42229279778c2070e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
from test.test_support import verbose, TestSkipped
from test import string_tests
import string, sys

# XXX: kludge... short circuit if strings don't have methods
try:
    ''.join
except AttributeError:
    raise TestSkipped

def test(name, input, output, *args):
    if verbose:
        print 'string.%s%s =? %s... ' % (name, (input,) + args, output),
    try:
        # Prefer string methods over string module functions
        try:
            f = getattr(input, name)
            value = apply(f, args)
        except AttributeError:
            f = getattr(string, name)
            value = apply(f, (input,) + args)
    except:
        value = sys.exc_type
        f = name
    if value == output:
        # if the original is returned make sure that
        # this doesn't happen with subclasses
        if value is input:
            class ssub(str):
                def __repr__(self):
                    return 'ssub(%r)' % str.__repr__(self)
            input = ssub(input)
            try:
                f = getattr(input, name)
                value = apply(f, args)
            except AttributeError:
                f = getattr(string, name)
                value = apply(f, (input,) + args)
            if value is input:
                if verbose:
                    print 'no'
                print '*',f, `input`, `output`, `value`
                return
    if value != output:
        if verbose:
            print 'no'
        print f, `input`, `output`, `value`
    else:
        if verbose:
            print 'yes'

string_tests.run_module_tests(test)
string_tests.run_method_tests(test)
string_tests.run_contains_tests(test)
string_tests.run_inplace_tests(str)

string.whitespace
string.lowercase
string.uppercase

# Float formatting
for prec in range(100):
    formatstring = '%%.%if' % prec
    value = 0.01
    for x in range(60):
        value = value * 3.141592655 / 3.0 * 10.0
        #print 'Overflow check for x=%i and prec=%i:' % \
        #      (x, prec),
        try:
            result = formatstring % value
        except OverflowError:
            # The formatfloat() code in stringobject.c and
            # unicodeobject.c uses a 120 byte buffer and switches from
            # 'f' formatting to 'g' at precision 50, so we expect
            # OverflowErrors for the ranges x < 50 and prec >= 67.
            if x >= 50 or \
               prec < 67:
                print '*** unexpected OverflowError for x=%i and prec=%i' % (x, prec)
            else:
                #print 'OverflowError'
                pass
        else:
            #print result
            pass