![]() |
|||
| HSG |
|
Python bietet die Möglichkeit, in einem 'frei hängendem String' sowohl Kommentare als auch Tests zu einer Funktion zu dokumentieren. Kopiert man in der Shell gemachte Tests 1:1 an diese Stelle, so kann die Methode testmod aus dem Modul doctest die dokumentierten Tests wiederholen und auswerten.
# -*- coding: iso-8859-1 -*-
# mk, 11.9.08
from math import sqrt
def quadglei(a,b,c):
""" Rückgabe: [Anzahl der Lösungen, Lösungen], [3]=unendl.
>>> quadglei(0,0,0)
[3]
>>> quadglei(0,0,1)
[0]
>>> quadglei(0,1,2)
[1, -2.0]
>>> quadglei(7,7,-84)
[2, -4.0, 3.0]
>>> quadglei(1,2,-3)
[2, -3.0, 1.0]
>>> quadglei(10,1,0.025)
[1, -0.050000000000000003]
>>> (abs(quadglei(10,1,0.025)[1]--0.05)<1e-10)
True
>>> quadglei(10,1,1)
[0]
"""
if a==0:
if b==0:
if c==0:
return [3]
else:
return [0]
else:
x = float(-c)/b
return [1,x]
else:
d = b*b-4*a*c
if d>0:
wd = sqrt(d)
x1 = (-b-wd)/float(2*a)
x2 = (-b+wd)/float(2*a)
return [2,x1,x2]
else:
if d==0:
x = -b/float(2*a)
return [1,x]
else:
return [0]
if __name__ == "__main__":
import doctest
doctest.testmod(verbose=True)
from ct0 import *
def test_FIRST():
"""
FIRST-Mengen der Kunert-Grammatik
"""
assert FIRST('A',G1) == {'a'}
assert FIRST('S',G1) == {'b'}
assert FIRST('Z',G1) == {'b'}
def test_FOLLOW():
"""
FOLLOW-Mengen der Kunert-Grammatik
"""
assert FOLLOW('A',G1) == {'a'}
assert FOLLOW('S',G1) == {'b','c','$'}
assert FOLLOW('Z',G1) == {'$'}
pytest-Lauf
mk@x2:~/1112/13Inf1$ py.test
============================= test session starts ==============================
platform linux2 -- Python 3.2.2 -- pytest-2.1.3
collected 3 items
ct0_test.py ..
test_sample.py F
=================================== FAILURES ===================================
_________________________________ test_answer __________________________________
def test_answer():
> assert func(3) == 5
E assert 4 == 5
E + where 4 = func(3)
test_sample.py:6: AssertionError
====================== 1 failed, 2 passed in 0.47 seconds ======================
mk@x2:~/1112/13Inf1$