public void Test_ConcurrentObservableCollection_Reset()
        {
            var initial    = Enumerable.Range(0, 100).ToList();
            var toAdd      = Enumerable.Range(100, 100).ToList();
            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.Reset(toAdd);

            // Check two collection changed events were fired
            Assert.AreEqual(2, returnedList.Count);
            (var returnedObject0, var returnedArgs0) = returnedList[0];
            (var returnedObject1, var returnedArgs1) = returnedList[1];

            Assert.IsNotNull(returnedObject0);
            Assert.IsNotNull(returnedArgs0);
            Assert.IsNotNull(returnedObject1);
            Assert.IsNotNull(returnedArgs1);

            Assert.AreEqual(returnedObject0, collection);
            Assert.AreEqual(returnedObject1, collection);
            Assert.AreEqual(NotifyCollectionChangedAction.Remove, returnedArgs0.Action);
            Assert.AreEqual(NotifyCollectionChangedAction.Add, returnedArgs1.Action);

            Assert.IsNull(returnedArgs0.NewItems);
            Assert.IsNotNull(returnedArgs0.OldItems);
            Assert.AreEqual(initial.Count(), returnedArgs0.OldItems.Count);
            Assert.IsTrue(CollectionsAreEqual(initial, returnedArgs0.OldItems));


            Assert.IsNull(returnedArgs1.OldItems);
            Assert.IsNotNull(returnedArgs1.NewItems);
            Assert.AreEqual(toAdd.Count(), returnedArgs1.NewItems.Count);
            Assert.IsTrue(CollectionsAreEqual(toAdd, returnedArgs1.NewItems));
        }