private static void TestSearchMatches(ISearchAlgorithm<int[]> searcher, char[] s, char[] key, int expectedCount)
        {
            if (s.Length < 1)
            {
                throw new ArgumentException("s.Length < 1");
            }
            if (key.Length < 1)
            {
                throw new ArgumentException("key.Length < 1");
            }
            var keyLen = key.Length;
            var matchIndices = searcher.SearchAll(s, key);

            // Try to catch invalid indices early by
            // comparing result length with expected count
            Assert.AreEqual(expectedCount, matchIndices.Length);

            // For each match, compare every character to key
            foreach (var start in matchIndices)
            {
                var match = s.Skip(start).Take(keyLen).ToArray();

                // Try to catch invalid match without evaluating chars
                // by comparing match length against search key length
                Assert.AreEqual(keyLen, match.Length);
                for (int ci = 0; ci < keyLen; ci++)
                {
                    Assert.AreEqual(key[ci], match[ci]);
                }
            }
        }