public void Update_NotExistingElement_ReturnsSameNode() { var items = RandomHelper.UniqueSequence(_random, 100); var insertedItems = items.Take(50).ToArray(); var otherItems = items.Skip(50).ToArray(); var node = CreateTree(insertedItems); foreach (var i in otherItems) { var updated = RedBlackHelper.Update(node, i); Assert.AreSame(node, updated); } }
public ImmutableRedBlackDictionary <TKey, TValue> SetValue(TKey key, TValue value) { if (key == null) { throw new ArgumentNullException(nameof(key)); } var newRoot = RedBlackHelper.Update(_root, new KeyValuePair <TKey, TValue>(key, value), _comparer); if (newRoot == _root) { return(this); } return(new ImmutableRedBlackDictionary <TKey, TValue>(newRoot, _comparer)); }
public void Update_Test() { const int value = 10, newValue = 20; var items = RandomHelper.UniqueSequence(_random, 100).Select(i => new KeyValuePair <int, int>(i, value)).ToArray(); var comparer = new KeyComparer <int, int>(); var node = CreateTree(items, comparer); foreach (var i in items) { var newitem = new KeyValuePair <int, int>(i.Key, newValue); var updated = RedBlackHelper.Update(node, newitem, comparer); KeyValuePair <int, int> foundItem; var found = updated.TryFind(i, comparer, out foundItem); Assert.True(found); Assert.AreEqual(newitem, foundItem); } }