public void Add2() { var a = new LruDictionary <int, string>(10); a.Add(1, "one", 3, onRemove: default); a.Add(2, "two", 4, onRemove: default); Assert.IsTrue(a.MaxSize == 10); Assert.IsTrue(a.CurrentSize == 7); Assert.IsTrue(a.Count == 2); }
public void Add1_Replace() { var a = new LruDictionary <int, string>(10); a.Add(1, "one", 3, onRemove: default); Assert.IsTrue(a.CurrentSize == 3); Assert.IsTrue(a.Count == 1); a.Add(1, "one", 5, onRemove: default); Assert.IsTrue(a.CurrentSize == 5); Assert.IsTrue(a.Count == 1); }
public void Remove2_Last() { var a = new LruDictionary <int, string>(15); a.Add(1, "one", 3, onRemove: default); a.Add(2, "two", 4, onRemove: default); Assert.IsTrue(a.Remove(2) == true); Assert.IsTrue(a.Count == 1); Assert.IsTrue(a.Remove(1) == true); Assert.IsTrue(a.Count == 0); }
public void Clear3() { var a = new LruDictionary <int, string>(20); a.Add(1, "one", 3, onRemove: default); a.Add(2, "two", 4, onRemove: default); a.Add(3, "three", 5, onRemove: default); Assert.IsTrue(a.CurrentSize == 12); Assert.IsTrue(a.Count == 3); a.Clear(); Assert.IsTrue(a.CurrentSize == 0); Assert.IsTrue(a.Count == 0); }
public void Add3_Overshoot() { var a = new LruDictionary <int, string>(15); a.Add(1, "one", 3, onRemove: default); a.Add(2, "two", 4, onRemove: default); a.Add(3, "three", 5, onRemove: default); Assert.IsTrue(a.CurrentSize == 12); Assert.IsTrue(a.Count == 3); a.Add(4, "four", 10, onRemove: default); Assert.IsTrue(a.CurrentSize == 15); Assert.IsTrue(a.Count == 2); }
public void Add3_Replace_Middle() { var a = new LruDictionary <int, string>(20); a.Add(1, "one", 3, onRemove: default); a.Add(2, "two", 4, onRemove: default); a.Add(3, "three", 5, onRemove: default); Assert.IsTrue(a.CurrentSize == 12); Assert.IsTrue(a.Count == 3); a.Add(2, "two", 6, onRemove: default); Assert.IsTrue(a.CurrentSize == 14); Assert.IsTrue(a.Count == 3); }
public void RandomInserts_1M_MultiThreaded() { var a = new LruDictionary <int, string>(1024 * 1024 * 1024); var start = new ManualResetEventSlim(false); var ts = new Task[4]; for (var i = 0; i < ts.Length; i++) { ts[i] = new Task(Do, TaskCreationOptions.LongRunning); ts[i].Start(); } var sw = new Stopwatch(); sw.Start(); start.Set(); Task.WhenAll(ts).Wait(); sw.Stop(); Console.WriteLine(sw.Elapsed); void Do() { start.Wait(); var r = new Random(); for (var i = 0; i < 1_000_000; i++) { a.Add(r.Next(), "foo", r.Next(1, 10 * 1024 * 1024), onRemove: default); } } }
public void Add_Size0() { var a = new LruDictionary <int, string>(10); a.Add(1, "one", 0, onRemove: default); Assert.IsTrue(a.CurrentSize == 0); }
public void TryGetValue() { var a = new LruDictionary <int, string>(15); a.Add(1, "one", 3, onRemove: default); a.Add(2, "two", 4, onRemove: default); Assert.IsTrue(a.TryGetValue(1, out string s1) && s1 == "one"); Assert.IsTrue(a.TryGetValue(2, out string s2) && s2 == "two"); Assert.IsTrue(!a.TryGetValue(3, out string s3)); a.Remove(1); Assert.IsTrue(!a.TryGetValue(1, out string s1a)); a.Remove(2); Assert.IsTrue(!a.TryGetValue(2, out string s2a)); }
public void ContainsKey() { var a = new LruDictionary <int, string>(15); a.Add(1, "one", 3, onRemove: default); a.Add(2, "two", 4, onRemove: default); Assert.IsTrue(a.ContainsKey(1)); Assert.IsTrue(a.ContainsKey(2)); Assert.IsTrue(!a.ContainsKey(3)); a.Remove(1); Assert.IsTrue(!a.ContainsKey(1)); a.Remove(2); Assert.IsTrue(!a.ContainsKey(2)); }
public void Remove3_Middle() { var a = new LruDictionary <int, string>(15); a.Add(1, "one", 3, onRemove: default); a.Add(2, "two", 4, onRemove: default); a.Add(3, "three", 5, onRemove: default); Assert.IsTrue(a.Remove(2) == true); Assert.IsTrue(a.Count == 2); Assert.IsTrue(a.Remove(1) == true); Assert.IsTrue(a.Count == 1); Assert.IsTrue(a.Remove(3) == true); Assert.IsTrue(a.Count == 0); }
public void Add_NegativeSize() { var a = new LruDictionary <int, string>(10); Assert.Catch(() => { a.Add(1, "one", -1, onRemove: default); }); }
public void Add_SizeTooBig() { var a = new LruDictionary <int, string>(10); Assert.Catch(() => { a.Add(1, "one", 11, onRemove: default); }); }
public void Remove1_Callback_Without() { var a = new LruDictionary <int, string>(15); var removed = new HashSet <int>(); a.Add(1, "one", 3, onRemove: (k, v, s) => removed.Add(1)); Assert.IsTrue(a.Remove(1, false) == true); Assert.IsTrue(a.Count == 0); Assert.IsTrue(!removed.Contains(1)); }
public void Add3_Overshoot_WithCallback() { var a = new LruDictionary <int, string>(15); var removed = new HashSet <int>(); a.Add(1, "one", 3, onRemove: (k, v, s) => { removed.Add(1); Assert.IsTrue(k == 1 && v == "one" && s == 3); }); a.Add(2, "two", 4, onRemove: (k, v, s) => { removed.Add(2); Assert.IsTrue(k == 2 && v == "two" && s == 4); }); a.Add(3, "three", 5, onRemove: (k, v, s) => { removed.Add(3); Assert.IsTrue(k == 3 && v == "three" && s == 5); }); a.Add(1, "one", 3, onRemove: (k, v, s) => { removed.Add(1); Assert.IsTrue(k == 1 && v == "one" && s == 3); }); Assert.IsTrue(a.CurrentSize == 12); Assert.IsTrue(a.Count == 3); a.Add(4, "four", 10, onRemove: (k, v, s) => { removed.Add(4); Assert.IsTrue(k == 4 && v == "four" && s == 10); }); Assert.IsTrue(a.CurrentSize == 13); Assert.IsTrue(a.Count == 2); Assert.IsTrue(!removed.Contains(1)); Assert.IsTrue(removed.Contains(2)); Assert.IsTrue(removed.Contains(3)); Assert.IsTrue(!removed.Contains(4)); }
public void RandomInserts_1M_SingleThreaded() { var a = new LruDictionary <int, string>(1024 * 1024 * 1024); var r = new Random(); var sw = new Stopwatch(); sw.Start(); for (var i = 0; i < 1_000_000; i++) { a.Add(r.Next(), "foo", r.Next(1, 10 * 1024 * 1024), onRemove: default); } sw.Stop(); Console.WriteLine(sw.Elapsed); }