I'm moving on to a next small unification -- random number generation. Like I said I think handling of it could be centralized, and this adds value only because of the repeatability of tests issue.
No problem, easy, but I notice half the code uses Random and half uses the MersenneTwisterRNG. I expect that's for a reason -- in some cases, something with better distribution characteristics than java.util.Random is needed. (Right? if not, this isn't really needed.) And I agree, this is far better than javax.security.SecureRandom. SecureRandom is about 100x slower than Random, whereas the MersenneTwisterRNG is only a few times slower -- and it's so fast it just doesn't matter anyhow. How about we standardize on MersenneTwisterRNG across the board? The only thing that totally annoys me about this implementation is that it writes some junk to System.out, but hey... Sean