That's the reason I've hadn't issued a pull request yet, I want to add those tests first
I've modified a bit the FastRandom function (randomCharacterString is now truly random and does not follow any kind of pattern, and uses a local array rather than a StringBuilder, as we know beforehand how many characters do we need), and added a fix for FastRandom objects with seed "0" always returning "0".
Please be careful not to over-optimise. If something isn't performance critical it is better off being maintainable than slightly faster. Is the random string generator used much? I think it is only used to generate a world seed.
EDIT: I've been thinking and I can't really think a good test for the power function. I mean, it's just a bunch of multiplications!
The key to unit tests is you are testing behavior, not implementation. The pow method should have the same behaviour regardless of whether the implementation uses multiplication or emails a renowned mathematician.
Ideally you would test all possible inputs, but that is impractical. So instead you need to test a representative subset, with a focus on border values, such as 0 or Max Int. This is where knowledge of the implementation can help inform what values are border values.
One question that can help to consider is whether a change that breaks the contract of the method will cause a unit test to fail. If I, in a misguided attempt to improve performance, remove the if block for negative exp, or remove the incrementing of base, or change the method to always return 1, the unit tests should detect this. Or essentially, the existence of every line and behavior of the method should be supported by a test. Contrary wise, if I replace the implementation with a completely different one that still passes the tests I should be confident that it does everything a pow function needs to do.