public void TrySCIList(System.Collections.IList list)
{
// Should be called with a C5.IList<B> which is not a WrappedArray
Assert.AreEqual(0, list.Count);
list.CopyTo(new A[0], 0);
list.CopyTo(new B[0], 0);
list.CopyTo(new C[0], 0);
Assert.IsTrue(!list.IsFixedSize);
Assert.IsFalse(list.IsReadOnly);
Assert.IsFalse(list.IsSynchronized);
Assert.AreNotEqual(null, list.SyncRoot);
Object b1 = new B(), b2 = new B(), c1 = new C(), c2 = new C();
Assert.AreEqual(0, list.Add(b1));
Assert.AreEqual(1, list.Add(c1));
Assert.AreEqual(2, list.Count);
Assert.IsTrue(list.Contains(c1));
Assert.IsFalse(list.Contains(b2));
list[0] = b2;
Assert.AreEqual(b2, list[0]);
list[1] = c2;
Assert.AreEqual(c2, list[1]);
Assert.IsTrue(list.Contains(b2));
Assert.IsTrue(list.Contains(c2));
Array arrA = new A[2], arrB = new B[2];
list.CopyTo(arrA, 0);
list.CopyTo(arrB, 0);
Assert.AreEqual(b2, arrA.GetValue(0));
Assert.AreEqual(b2, arrB.GetValue(0));
Assert.AreEqual(c2, arrA.GetValue(1));
Assert.AreEqual(c2, arrB.GetValue(1));
Assert.AreEqual(0, list.IndexOf(b2));
Assert.AreEqual(-1, list.IndexOf(b1));
list.Remove(b1);
list.Remove(b2);
Assert.IsFalse(list.Contains(b2));
Assert.AreEqual(1, list.Count); // Contains c2 only
list.Insert(0, b2);
list.Insert(2, b1);
Assert.AreEqual(b2, list[0]);
Assert.AreEqual(c2, list[1]);
Assert.AreEqual(b1, list[2]);
list.Remove(c2);
Assert.AreEqual(b2, list[0]);
Assert.AreEqual(b1, list[1]);
list.RemoveAt(1);
Assert.AreEqual(b2, list[0]);
list.Clear();
Assert.AreEqual(0, list.Count);
list.Remove(b1);
}