Published at 12:42, Thu 14 Feb 2008
A colleague approached me today regarding a unit test he was writing. He was constructing a series of test cases from a data structure; his code at the time used a multi-line string of which each line had several fields which together described a test to run.
He pointed to the right-most field, and said that for every test he already
had with a 1 in that field, he’d also like to run a test with a 0 in
that field. I looked at the other fields, and observed that for each field,
there was only a small set of values in use.
“How about just testing the cross product of all the sets?”, I suggested.
Then off to CPAN, and, hey, there’s Set::CrossProduct. Knock up
a Debian package for it, add it to our internal Apt repository, and we’re
done. How splendid.
I found it very pleasing how little effort was needed to get all that going. I think there are three factors that made it so straightforward:
It’s often useful to have some maths/computer-science background; in this case, it was important to be able to identify the situation as needing a cross product.
CPAN has, oh, everything. ’Nuff said.
Tools make it easy to package and deploy software (and without such tools, using smaller off-the-shelf third-party libraries for some particular task can end up needing more effort than reimplementing it)
As an aside, I also note that Perl 6 makes that task much easier. Subject to errors in my understanding of Perl 6, I think the code looks something like this:
my @cross_product = @@( [X] @field_lists );