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 higher-order functions - they are a useful tool.