public void testScan_multipleIterations()
        {
            using (Redis redis = new Redis()) {
                Redis.ScanResult result = null;
                string[]         keys   =
                {
                    "key1", "key2", "key3", "key4", "test1", "test2", "test3", "test4",
                    "key5", "key6", "key7", "key8", "test5", "test6", "test7", "test8",
                    "foo1", "foo2", "foo3", "foo4", "fuzz1", "fuzz2", "fuzz3", "fuzz4",
                    "foo5", "foo6", "foo7", "foo8", "fuzz5", "fuzz6", "fuzz7", "fuzz8",
                };
                foreach (string key in keys)
                {
                    redis.set(key, "scantest");
                }

                int iterations = 0;
                do
                {
                    result      = redis.scan(result == null ? 0L : result.nextCursor);
                    iterations += 1;

                    CollectionAssert.IsSubsetOf(result.results, keys);
                } while (result.nextCursor != 0);

                if (iterations == 1)
                {
                    Assert.Inconclusive("Unable to iterate multiple times. Add more keys or use COUNT option.");
                }
            }
        }
 public void testScan_emptyDatabase()
 {
     using (Redis redis = new Redis()) {
         Redis.ScanResult result = redis.scan();
         Assert.AreEqual(0L, result.nextCursor);
         CollectionAssert.IsSubsetOf(result.results, new string[] {});
     }
 }
        /// <summary>
        /// Enumerates all of the keys
        /// </summary>
        /// <param name="redis">The redis client</param>
        /// <returns>The keys in the database</returns>
        public static IEnumerable <string> allKeys(this Redis redis)
        {
            HashSet <string> existingKeys = new HashSet <string>();
            long             cursor       = 0L;

            do
            {
                Redis.ScanResult result = redis.scan(cursor);
                cursor = result.nextCursor;

                foreach (string newKey in result.results.Except(existingKeys))
                {
                    yield return(newKey);
                }
                existingKeys.UnionWith(result.results);
            } while (cursor != 0);
        }