Mercurial > cpython-lru_cache-weakref
view Lib/test/test_complex.py @ 17322:bd110eadc19a legacy-trunk
One-liner critical fix from Jim Fulton: Eric's string-method crusade
got the order backwards in a line (for .find()).
| author | Tim Peters <tim.peters@gmail.com> |
|---|---|
| date | Thu, 05 Apr 2001 22:26:23 +0000 |
| parents | 2c1be7924b04 |
| children | 64e1ea34b553 |
line wrap: on
line source
from test_support import TestFailed from random import random # XXX need many, many more tests here. nerrors = 0 def check_close_real(x, y, eps=1e-12): """Return true iff floats x and y "are close\"""" # put the one with larger magnitude second if abs(x) > abs(y): x, y = y, x if y == 0: return abs(x) < eps if x == 0: return abs(y) < eps # check that relative difference < eps return abs((x-y)/y) < eps def check_close(x, y, eps=1e-12): """Return true iff complexes x and y "are close\"""" return check_close_real(x.real, y.real, eps) and \ check_close_real(x.imag, y.imag, eps) def test_div(x, y): """Compute complex z=x*y, and check that z/x==y and z/y==x.""" global nerrors z = x * y if x != 0: q = z / x if not check_close(q, y): nerrors += 1 print `z`, "/", `x`, "==", `q`, "but expected", `y` if y != 0: q = z / y if not check_close(q, x): nerrors += 1 print `z`, "/", `y`, "==", `q`, "but expected", `x` simple_real = [float(i) for i in range(-5, 6)] simple_complex = [complex(x, y) for x in simple_real for y in simple_real] for x in simple_complex: for y in simple_complex: test_div(x, y) # A naive complex division algorithm (such as in 2.0) is very prone to # nonsense errors for these (overflows and underflows). test_div(complex(1e200, 1e200), 1+0j) test_div(complex(1e-200, 1e-200), 1+0j) # Just for fun. for i in range(100): test_div(complex(random(), random()), complex(random(), random())) try: z = 1.0 / (0+0j) except ZeroDivisionError: pass else: nerrors += 1 raise TestFailed("Division by complex 0 didn't raise ZeroDivisionError") if nerrors: raise TestFailed("%d tests failed" % nerrors)
