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.
Added changes from Jeremy that included rename for clarity and compact test approach for specific cases. Fixed false results for the two single loops that were not covering the case for 0.