public void Insert_ExistingElement_ReturnsSameNode() { var items = RandomHelper.UniqueSequence(_random, 100); var node = CreateTree(items); foreach (var i in items) { var inserted = RedBlackHelper.Insert(node, i); Assert.AreSame(node, inserted); } }
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> Add(KeyValuePair <TKey, TValue> item) { if (item.Key == null) { throw new ArgumentNullException(nameof(item)); } var newRoot = RedBlackHelper.Insert(_root, item, _comparer); if (newRoot == _root) { throw ExceptionHelper.GetKeyAlreadyExistsException(item.Key, "item"); } return(new ImmutableRedBlackDictionary <TKey, TValue>(newRoot, _comparer)); }
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 ImmutableRedBlackSet <T> Add(T item) { if (item == null) { throw new ArgumentNullException(nameof(item)); } var newRoot = RedBlackHelper.Insert(_root, item, _comparer); if (newRoot == _root) { return(this); } return(new ImmutableRedBlackSet <T>(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); } }
private IRedBlack <T> CreateTree <T>(IEnumerable <T> items, IComparer <T> comparer = null) { return(items.Aggregate(RedBlackLeaf <T> .Instance, (c, i) => RedBlackHelper.Insert(c, i, comparer))); }