public void TestFastDictionary() { var facit = new Dictionary <int, string>(); var fast = new FastDictionary <int, string>(); for (int r = 0; r < 1000000; r++) { var rnd = PRNG.Next(0, 13); switch (rnd) { case 0: facit.Clear(); fast.Clear(); break; case 1: case 2: { // add/change using indexer int key; if (facit.Count > 2 && PRNG.Next(0, 100) < 20) { key = GetRandomKey(facit); } else { key = PRNG.Next(1, 1000); } facit[key] = key.ToString(); fast[key] = key.ToString(); break; } case 3: case 4: // add using Add() int b = PRNG.Next(1, 1000); if (facit.ContainsKey(b) == false) { facit.Add(b, b.ToString()); fast.Add(b, b.ToString()); } break; case 5: case 6: { // add using GetOrInit() int c = PRNG.Next(0, 1000); bool exists = facit.ContainsKey(c); ref var str = ref fast.GetOrInit(c, out bool wasCreated); Assert.AreEqual(exists, !wasCreated); str = c.ToString(); if (!exists) { facit[c] = c.ToString(); } break; }