I'm now running the entire OASIS XSLT test suite. The raw numbers are 2742 tests run, 1367 fails, and 277 exceptions.
At first glance those numbers don't look great, I'll grant you, so let me gloss them a bit. Of the 277 exceptions, 93 are due to XSLT functions I haven't implemented yet - format-number(), generate-id(), id(), key() and lang(). I don't think I've ever used those functions in my life, so I'm not losing sleep over those at the moment. That does still leave nearly 200 other exceptions, which clearly I need to look at.
Of the failures, 352 are due to XSLT elements I haven't implemented - xsl:attribute-set, xsl:strip-space, xsl:preserve-space, xsl:key. Again, not overly worried about those yet. (Why are missing functions exceptions and missing elements fails? Implementation detail - I'll sort it out). A whopping 536 failures are because the reference output I'm comparing against isn't XML, it's either plain text or HTML so my simple minded test driver can't currently deal with it.
If we take those numbers out we get 1761 tests run, 479 fails, and 184 exceptions, which looks a bit better. A few of those fails are false negatives due to whitespace differences, attribute order differences, or non-significant differences in namespace declarations. The remaining failures don't all represent unique bugs (ie a mistake I've made) or misfeatures (ie something that, while the code is correct, does the wrong thing), so it doesn't feel overly daunting. Obviously, I'll keep chipping away at them.