public static void testCopyTo <C>(C c) where C : IList <int> { c.Clear(); addAll(ref c, 1, 2, 3, 4, 5); // ReSharper disable once AssignNullToNotNullAttribute Assert.Throws <ArgumentNullException>(() => c.CopyTo(null, 0)); var arr = new int[5]; Assert.Throws <ArgumentOutOfRangeException>(() => c.CopyTo(arr, -1)); Assert.Throws <ArgumentException>( () => c.CopyTo(arr, 1), "it should fail if target array is too small" ); c.CopyTo(arr, 0); arr.shouldEqual(new [] { 1, 2, 3, 4, 5 }); arr = F.arrayFill(7, _ => 0); c.CopyTo(arr, 2); arr.shouldEqual(new[] { 0, 0, 1, 2, 3, 4, 5 }); arr = F.arrayFill(7, i => - (i + 1)); c.CopyTo(arr, 1); arr.shouldEqual(new[] { -1, 1, 2, 3, 4, 5, -7 }); arr = F.arrayFill(7, _ => 0); IListDefaultImpls.copyTo(c, arr, targetStartIndex: 1, srcCopyFrom: 1); arr.shouldEqual(new [] { 0, 2, 3, 4, 5, 0, 0 }); arr = F.arrayFill(7, _ => 0); IListDefaultImpls.copyTo(c, arr, targetStartIndex: 1, srcCopyFrom: 2, srcCopyCount: 3); arr.shouldEqual(new [] { 0, 3, 4, 5, 0, 0, 0 }); Assert.Throws <ArgumentOutOfRangeException>( () => IListDefaultImpls.copyTo(c, arr, 0, srcCopyFrom: -1), "it should fail if srcCopyFrom is negative" ); Assert.Throws <ArgumentOutOfRangeException>( () => IListDefaultImpls.copyTo(c, arr, 0, srcCopyFrom: 5), "it should fail if srcCopyFrom is more than length" ); Assert.Throws <ArgumentOutOfRangeException>( () => IListDefaultImpls.copyTo(c, arr, 0, srcCopyCount: 6), "it should fail if we try to copy more items than there are in collection" ); arr = F.arrayFill(2, _ => 0); Assert.Throws <ArgumentException>( () => IListDefaultImpls.copyTo(c, arr, 0, srcCopyCount: 3), "it should fail if we try to copy into smaller array" ); }
public void CopyTo(A[] array, int arrayIndex) => IListDefaultImpls.copyTo(this, array, arrayIndex);