private void RunUnmanagedTests <T>(Func <ListsObject, IList <T> > listGetter, T[] testList)
        {
            var listObject = new ListsObject();
            var list       = listGetter(listObject);

            var testData = new ListTestCaseData <T>(testList);

            testData.Seed(list);

            RunTestsCore(testData, list);
        }
        private void RunTestsCore <T>(ListTestCaseData <T> testData, IList <T> list)
        {
            testData.AssertEquality(list);
            testData.AssertCount(list);
            testData.AssertAccessByIndex(list);
            testData.AssertAccessByIterator(list);
            testData.AssertContains(list);
            testData.AssertIndexOf(list);

            testData.AssertInsert(list);
            testData.AssertMove(list);
            testData.AssertSet(list);
            testData.AssertRemove(list);
            testData.AssertRemoveAt(list);
            testData.AssertClear(list);
        }
        private void RunManagedTests <T>(Func <ListsObject, IList <T> > listGetter, T[] testList)
        {
            TestHelpers.RunAsyncTest(async() =>
            {
                var listObject = new ListsObject();
                var list       = listGetter(listObject);

                var testData = new ListTestCaseData <T>(testList);
                testData.Seed(list);

                _realm.Write(() => _realm.Add(listObject));

                var managedList = listGetter(listObject);

                Assert.That(list, Is.Not.SameAs(managedList));

                RunTestsCore(testData, managedList);

                await testData.AssertThreadSafeReference(managedList);
                testData.AssertNotifications(managedList);
            }, timeout: 100000);
        }