static void Main() { var watch = new Stopwatch(); Console.WriteLine("RankedSet Bulk Add and indexing"); Console.WriteLine($"{divs} increments of {(reps / divs)}"); Console.WriteLine("RankedSet Size;SortedSet Size;RankedSet Add;SortedSet Add;RankedSet ElementAt;SortedSet ELementAt;RankedSetLast;SortedSet Last"); for (int k1 = 0; k1 <= divs; ++k1) { int reps0 = k1 == 0 ? reps : (reps / divs) * k1; rs.Clear(); System.Threading.Thread.Sleep(200); watch.Reset(); watch.Start(); for (int ix = 0; ix < reps0; ++ix) { rs.Add(ix); } var loadRs = watch.ElapsedMilliseconds; ss.Clear(); System.Threading.Thread.Sleep(200); watch.Reset(); watch.Start(); for (int ix = 0; ix < reps0; ++ix) { ss.Add(ix); } var loadSs = watch.ElapsedMilliseconds; watch.Reset(); watch.Start(); var ss1 = ss.Last(); var lastSs = watch.ElapsedMilliseconds; watch.Reset(); watch.Start(); var ss2 = ss.ElementAt(reps0 - 1); var elAtSs = watch.ElapsedMilliseconds; watch.Reset(); watch.Start(); var rs1 = rs.Last(); var lastRs = watch.ElapsedMilliseconds; watch.Reset(); watch.Start(); var rs2 = rs.ElementAt(reps0 - 1); var elAtRs = watch.ElapsedMilliseconds; if (k1 > 0) { Console.WriteLine($"{rs.Count,8};{ss.Count,8};{loadRs,5};{loadSs,5};{lastRs,2};{lastSs,4};{elAtRs,2};{elAtSs,4}"); } } }
static void Main() { int maxN = 500000; var watch = new Stopwatch(); bool isPass1 = true; Console.WriteLine("Removals in Thousands,Set Size in Thousands,RankedSet,SortedSet"); for (int n = maxN / 10; n <= maxN;) { var c1 = new RankedSet <int>(); for (int i = 0; i < n; ++i) { c1.Add(i); } watch.Reset(); watch.Start(); c1.RemoveWhere(IsCull); var c1Time = watch.ElapsedMilliseconds; int c1Count = c1.Count; c1.Clear(); var c2 = new SortedSet <int>(); for (int i = 0; i < n; ++i) { c2.Add(i); } watch.Reset(); watch.Start(); c2.RemoveWhere(IsCull); var c2Time = watch.ElapsedMilliseconds; int c2Count = c2.Count; c2.Clear(); int removes = n * division / divisionCount; if (c1Count != n - removes || c2Count != n - removes) { Console.WriteLine($"*** ERROR *** {c1Count}, {c2Count}"); } if (isPass1) { isPass1 = false; } else { Console.WriteLine($"{removes/1000},{n/1000},{c1Time},{c2Time}"); n += maxN / 10; } } }