doctest fails to NORMALIZE_WHITESPACE ?
Tim Peters
tim.peters at gmail.com
Sat Dec 17 05:00:37 EST 2005
[David MacKay]
> Hello, I'm a python-list newbie. I've got a question about doctest; perhaps
> a bug report.
As things will turn out, it's just a question. That's common for newbies :-)
> I really like doctest, but sometimes doctest gives a failure when the output
> looks absolutely fine to me -- indeed, even after I have gone to considerable
> effort to make my documentation match the output perfectly.
>
> http://www.aims.ac.za/~mackay/python/compression/huffman/Huffman3.py
>
> The above file is an example.
>
> It's self-contained, so you can plop it into emacs and hit C-cC-c to run the
> doctests. One of them fails.
> The piece of source code concerned is here:
>
> >>> c = []; \
> c.append(node(0.5,1,'a')); \
> c.append(node(0.25,2,'b')); \
> c.append(node(0.125,3,'c')); \
> c.append(node(0.125,4,'d')); \
> iterate(c) ; reportcode(c) # doctest: +NORMALIZE_WHITESPACE, +ELLIPSIS
I'd probably write that more like so:
>>> c = [node(0.5,1,'a'), node(0.25,2,'b'), node(0.125,3,'c'),
node(0.125,4,'d')]
>>> iterate(c)
>>> reportcode(c) # doctest [etc]
When Python doesn't "look clean", it's not Python -- and backslash
continuation & semicolons often look like dirt to the experienced
Python's eye.
> #Symbol Count Codeword
> a (0.5) 1
> b (0.25) 01
> c (0.12) 000
> d (0.12) 001
> """
>
> And the output is:
>
> Failed example:
> c = []; c.append(node(0.5,1,'a')); c.append(node(0.25,2,'b')); c.append(node(0.125,3,'c')); c.append(node(0.125,4,'d')); iterate(c) ; reportcode(c) # doctest: +NORMALIZE_WHITESPACE, +ELLIPSIS
> Expected:
> #Symbol Count Codeword
> a (0.5) 1
> b (0.25) 01
> c (0.12) 000
> d (0.12) 001
> Got:
> <__main__.internalnode instance at 0xb7aee76c>
Well, there you go, right? There was certainly no
<__main__.internalnode instance at 0xb7aee76c>
line in the expected output. I don't know whether you _want_ to see
that line or not, but the doctest said you don't. That's why the test
fails. If you do want to see it, add, e.g.,
<__main__.internalnode instance at 0x...>
as the first line of the expected output.
> #Symbol Count Codeword
> a (0.5) 1
> b (0.25) 01
> c (0.12) 000
> d (0.12) 001
You have another problem here, alas: whether a "%2.2g" format rounds
0.125 to "0.12" or "0.13" varies across platforms. For example, if
you had run this on Windows, you would have seen:
c (0.13) 000
d (0.14) 001
for the last two lines.
> I have tried numerous tweaks, and am at a loss. I am wondering whether there
> is some big in doctest involving the "#" character in the output.
> Or maybe I made some silly mistake.
I think we're ready to vote on that now ;-)
> Any advice appreciated!
>
> Many thanks again to the authors of doctest, it gives a great feeling
> to write code in the way that doctest encourages. :-)
You're welcome!
More information about the Python-list
mailing list