Ejemplo n.º 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);
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
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));
        }
Ejemplo n.º 4
0
        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));
        }
Ejemplo n.º 5
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));
        }
Ejemplo n.º 6
0
        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);
            }
        }
Ejemplo n.º 7
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)));
 }