dtexample.py
159 lines
| 2.7 KiB
| text/x-python
|
PythonLexer
Fernando Perez
|
r1334 | """Simple example using doctests. | ||
This file just contains doctests both using plain python and IPython prompts. | ||||
All tests should be loaded by nose. | ||||
""" | ||||
def pyfunc(): | ||||
"""Some pure python tests... | ||||
>>> pyfunc() | ||||
'pyfunc' | ||||
>>> import os | ||||
>>> 2+3 | ||||
5 | ||||
>>> for i in range(3): | ||||
... print i, | ||||
... print i+1, | ||||
... | ||||
0 1 1 2 2 3 | ||||
""" | ||||
return 'pyfunc' | ||||
Fernando Perez
|
r1430 | |||
Fernando Perez
|
r1334 | def ipfunc(): | ||
"""Some ipython tests... | ||||
In [1]: import os | ||||
In [2]: cd / | ||||
/ | ||||
In [3]: 2+3 | ||||
Out[3]: 5 | ||||
In [26]: for i in range(3): | ||||
....: print i, | ||||
....: print i+1, | ||||
....: | ||||
0 1 1 2 2 3 | ||||
Examples that access the operating system work: | ||||
In [1]: !echo hello | ||||
hello | ||||
In [2]: !echo hello > /tmp/foo | ||||
In [3]: !cat /tmp/foo | ||||
hello | ||||
In [4]: rm -f /tmp/foo | ||||
It's OK to use '_' for the last result, but do NOT try to use IPython's | ||||
numbered history of _NN outputs, since those won't exist under the | ||||
doctest environment: | ||||
In [7]: 3+4 | ||||
Out[7]: 7 | ||||
In [8]: _+3 | ||||
Out[8]: 10 | ||||
In [9]: ipfunc() | ||||
Out[9]: 'ipfunc' | ||||
""" | ||||
return 'ipfunc' | ||||
Fernando Perez
|
r1378 | |||
Fernando Perez
|
r1428 | def ranfunc(): | ||
"""A function with some random output. | ||||
Fernando Perez
|
r1378 | |||
Fernando Perez
|
r1430 | Normal examples are verified as usual: | ||
Fernando Perez
|
r1428 | >>> 1+3 | ||
Fernando Perez
|
r1429 | 4 | ||
Fernando Perez
|
r1378 | |||
Fernando Perez
|
r1429 | But if you put '# random' in the output, it is ignored: | ||
Fernando Perez
|
r1428 | >>> 1+3 | ||
Fernando Perez
|
r1429 | junk goes here... # random | ||
Fernando Perez
|
r1378 | |||
Fernando Perez
|
r1428 | >>> 1+2 | ||
again, anything goes #random | ||||
Fernando Perez
|
r1429 | if multiline, the random mark is only needed once. | ||
Fernando Perez
|
r1378 | |||
Fernando Perez
|
r1429 | >>> 1+2 | ||
You can also put the random marker at the end: | ||||
# random | ||||
>>> 1+2 | ||||
# random | ||||
.. or at the beginning. | ||||
Fernando Perez
|
r1378 | |||
Fernando Perez
|
r1429 | More correct input is properly verified: | ||
Fernando Perez
|
r1428 | >>> ranfunc() | ||
'ranfunc' | ||||
""" | ||||
return 'ranfunc' | ||||
Fernando Perez
|
r1378 | |||
Fernando Perez
|
r1430 | def random_all(): | ||
"""A function where we ignore the output of ALL examples. | ||||
Fernando Perez
|
r1378 | |||
Fernando Perez
|
r1430 | Examples: | ||
Fernando Perez
|
r1378 | |||
Fernando Perez
|
r1430 | # all-random | ||
Fernando Perez
|
r1378 | |||
Fernando Perez
|
r1430 | This mark tells the testing machinery that all subsequent examples should | ||
be treated as random (ignoring their output). They are still executed, | ||||
so if a they raise an error, it will be detected as such, but their | ||||
output is completely ignored. | ||||
Fernando Perez
|
r1378 | |||
Fernando Perez
|
r1430 | >>> 1+3 | ||
junk goes here... | ||||
Fernando Perez
|
r1403 | |||
Fernando Perez
|
r1430 | >>> 1+3 | ||
klasdfj; | ||||
Fernando Perez
|
r1378 | |||
Fernando Perez
|
r1430 | >>> 1+2 | ||
again, anything goes | ||||
blah... | ||||
""" | ||||
pass | ||||
Fernando Perez
|
r1432 | |||
def iprand(): | ||||
"""Some ipython tests with random output. | ||||
In [7]: 3+4 | ||||
Out[7]: 7 | ||||
In [8]: print 'hello' | ||||
world # random | ||||
In [9]: iprand() | ||||
Out[9]: 'iprand' | ||||
""" | ||||
return 'iprand' | ||||
def iprand_all(): | ||||
"""Some ipython tests with fully random output. | ||||
# all-random | ||||
In [7]: 1 | ||||
Out[7]: 99 | ||||
In [8]: print 'hello' | ||||
world | ||||
In [9]: iprand_all() | ||||
Out[9]: 'junk' | ||||
""" | ||||
return 'iprand_all' | ||||