A better unittest

Duncan Booth duncan at NOSPAMrcp.co.uk
Thu Apr 17 11:06:49 EDT 2003


[posted and mailed]

Thomas Heller <theller at python.net> wrote in news:he8xgr3g.fsf at python.net:

> This looks great, but has problems. It is slow. For some input, at
> least.
> 
> I didn't have enough patience to wait for the output of your script,
> instead I changed the 10000 character strings to 100 characters and then
> it only took some seconds.

I'm confused.
On my machine, the test.py with 10000 character strings has a total running 
time of about 1/2 second. Are you saying it takes significantly longer on 
your machine?
...
a little later
...
Ok, now I see the problem. When I tried applying your patch to unittest.py 
in Python 2.2.2, it complained, so I applied it to Python 2.3. Some change 
between the two means that the comparison code is blindingly fast on 2.3 
and depressingly slow on 2.2.
 
> 
> Maybe you should create a new method (failUnlessEqual_ShowDiff or so)
> which will do the fancy formatting.
> 
> Maybe the diff formatting should be put into the TestReport, so that
> at least the
>     FFFF
> line is printed more quickly, and the formatting doen afterwards.
> 
> Maybe a time limit should be introduced.
> 
The first one might be good. A better move though is just to replace the 
2.2.2 difflib with the one from 2.3 (and enable generators and add a python 
definition of enumerate). This brings the running time down to something a 
bit more manageable (although I haven't checked that it hasn't broken 
difflib for other purposes).

The difference code could actually be made much faster quite easily. If I 
added a search for the first difference, then I could do the ellipsis and 
truncating first and only pass what is left to difflib.

-- 
Duncan Booth                                             duncan at rcp.co.uk
int month(char *p){return(124864/((p[0]+p[1]-p[2]&0x1f)+1)%12)["\5\x8\3"
"\6\7\xb\1\x9\xa\2\0\4"];} // Who said my code was obscure?




More information about the Python-list mailing list