コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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));
        }
コード例 #4
0
 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)));
 }