public void Test_ConcurrentObservableCollection_InsertRange()
        {
            var initial    = Enumerable.Range(0, 100).ToList();
            var toAdd      = Enumerable.Range(100, 100).ToList();
            var startIndex = 50;
            var collection = new ConcurrentObservableCollection <int>();

            collection.AddRange(initial);
            Assert.AreEqual(100, collection.Count);

            // Record all the collection changed events
            List <(object, NotifyCollectionChangedEventArgs)> returnedList = new List <(object, NotifyCollectionChangedEventArgs)>();

            collection.CollectionChanged += (s, e) => returnedList.Add((s, e));

            collection.InsertRange(startIndex, toAdd);

            // Check just one collection changed event was fired
            Assert.AreEqual(1, returnedList.Count);
            (var returnedObject, var returnedArgs) = returnedList[0];

            Assert.AreEqual(returnedObject, collection);
            Assert.AreEqual(NotifyCollectionChangedAction.Add, returnedArgs.Action);
            Assert.AreEqual(startIndex, returnedArgs.NewStartingIndex);
            Assert.IsNotNull(returnedArgs.NewItems);
            Assert.IsNull(returnedArgs.OldItems);
            Assert.AreEqual(toAdd.Count(), returnedArgs.NewItems.Count);
            Assert.IsTrue(CollectionsAreEqual(toAdd, returnedArgs.NewItems));
        }