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 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 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)); }
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))); }