Simple example using doctests.
This file just contains doctests both using plain python and IPython prompts. All tests should be loaded by nose.
Some ipython tests...
In [1]: import os
In [3]: 2+3 Out[3]: 5
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]: ‘hi’ Out[7]: ‘hi’
In [8]: print repr(_) ‘hi’
In [7]: 3+4 Out[7]: 7
In [8]: _+3 Out[8]: 10
In [9]: ipfunc() Out[9]: ‘ipfunc’
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’
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’
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
A function where we ignore the output of ALL examples.
Examples:
# all-random
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.
>>> 1+3 junk goes here...>>> 1+3 klasdfj;>>> 1+2 again, anything goes blah...
A function with some random output.
Normal examples are verified as usual: >>> 1+3 4
But if you put ‘# random’ in the output, it is ignored: >>> 1+3 junk goes here... # random
>>> 1+2
again, anything goes #random
if multiline, the random mark is only needed once.
>>> 1+2
You can also put the random marker at the end:
# random
>>> 1+2
# random
.. or at the beginning.
More correct input is properly verified: >>> ranfunc() ‘ranfunc’