private static void CheckLoad(IHashedDataStore dataStructure, Stopwatch watch)
        {
            Trace.WriteLine($"\tloading {Capacity} records into data structure");
            var beforeBytes = GC.GetTotalMemory(forceFullCollection: true);

            watch.Start();
            Enumerable.Range(start: 0, count: Capacity)
            .Select(i => i.ToString())
            .ToList()
            .ForEach(dataStructure.Add);
            watch.Stop();
            var    afterBytes = GC.GetTotalMemory(forceFullCollection: true);
            double usage      = afterBytes - beforeBytes;
            var    suffix     = "bytes";

            if (usage > 1024 * 1024)
            {
                usage /= (1024 * 1024D);
                suffix = "MB";
            }
            else if (usage > 1024)
            {
                usage /= (1024D);
                suffix = "KB";
            }
            Trace.WriteLine($"\tEstimated memory usage : {usage:F} {suffix}");
            Trace.WriteLine($"\tLoad time : {watch.Elapsed.TotalSeconds:F} seconds");
        }
 private static void CheckContains(IHashedDataStore dataStructure, Stopwatch watch)
 {
     Trace.WriteLine($"\tChecking {AmountToCheck} records for their presence in the data structure");
     watch.Start();
     for (var i = 0; i < AmountToCheck; i++)
     {
         dataStructure.Contains(i.ToString());
     }
     watch.Stop();
 }
        private static void TestDataStructure(IHashedDataStore dataStructure)
        {
            var watch = new Stopwatch();

            CheckLoad(dataStructure, watch);

            CheckContains(dataStructure, watch);

            var speed = AmountToCheck / watch.Elapsed.TotalMinutes;

            Trace.WriteLine($"\tCheck time : {watch.Elapsed.TotalSeconds:F} (or {speed / 1000000D:F} million records per minute)");
        }