renamed functions to be descriptive of their strategy, added tests (some...

... of which are failing)

Also note the meta-programming here - making a list of the various implementations, then testing them all with the same loop.  This is possible due to first-class functions - they are a useful tool.