| Index: third_party/protobuf/csharp/src/Google.Protobuf.Test/Collections/RepeatedFieldTest.cs
|
| diff --git a/third_party/protobuf/csharp/src/Google.Protobuf.Test/Collections/RepeatedFieldTest.cs b/third_party/protobuf/csharp/src/Google.Protobuf.Test/Collections/RepeatedFieldTest.cs
|
| index 8ed54cfb48458011a135b9dd9617efa91f687df8..6852f75f8eb269defcefafaf3c3b090a1e2a4570 100644
|
| --- a/third_party/protobuf/csharp/src/Google.Protobuf.Test/Collections/RepeatedFieldTest.cs
|
| +++ b/third_party/protobuf/csharp/src/Google.Protobuf.Test/Collections/RepeatedFieldTest.cs
|
| @@ -75,10 +75,96 @@ namespace Google.Protobuf.Collections
|
| }
|
|
|
| [Test]
|
| - public void Add_RepeatedField()
|
| + public void AddRange_SlowPath()
|
| + {
|
| + var list = new RepeatedField<string>();
|
| + list.AddRange(new[] { "foo", "bar" }.Select(x => x));
|
| + Assert.AreEqual(2, list.Count);
|
| + Assert.AreEqual("foo", list[0]);
|
| + Assert.AreEqual("bar", list[1]);
|
| + }
|
| +
|
| + [Test]
|
| + public void AddRange_SlowPath_NullsProhibited_ReferenceType()
|
| + {
|
| + var list = new RepeatedField<string>();
|
| + // It's okay for this to throw ArgumentNullException if necessary.
|
| + // It's not ideal, but not awful.
|
| + Assert.Catch<ArgumentException>(() => list.AddRange(new[] { "foo", null }.Select(x => x)));
|
| + }
|
| +
|
| + [Test]
|
| + public void AddRange_SlowPath_NullsProhibited_NullableValueType()
|
| + {
|
| + var list = new RepeatedField<int?>();
|
| + // It's okay for this to throw ArgumentNullException if necessary.
|
| + // It's not ideal, but not awful.
|
| + Assert.Catch<ArgumentException>(() => list.AddRange(new[] { 20, (int?)null }.Select(x => x)));
|
| + }
|
| +
|
| + [Test]
|
| + public void AddRange_Optimized_NonNullableValueType()
|
| + {
|
| + var list = new RepeatedField<int>();
|
| + list.AddRange(new List<int> { 20, 30 });
|
| + Assert.AreEqual(2, list.Count);
|
| + Assert.AreEqual(20, list[0]);
|
| + Assert.AreEqual(30, list[1]);
|
| + }
|
| +
|
| + [Test]
|
| + public void AddRange_Optimized_ReferenceType()
|
| + {
|
| + var list = new RepeatedField<string>();
|
| + list.AddRange(new List<string> { "foo", "bar" });
|
| + Assert.AreEqual(2, list.Count);
|
| + Assert.AreEqual("foo", list[0]);
|
| + Assert.AreEqual("bar", list[1]);
|
| + }
|
| +
|
| + [Test]
|
| + public void AddRange_Optimized_NullableValueType()
|
| + {
|
| + var list = new RepeatedField<int?>();
|
| + list.AddRange(new List<int?> { 20, 30 });
|
| + Assert.AreEqual(2, list.Count);
|
| + Assert.AreEqual((int?) 20, list[0]);
|
| + Assert.AreEqual((int?) 30, list[1]);
|
| + }
|
| +
|
| + [Test]
|
| + public void AddRange_Optimized_NullsProhibited_ReferenceType()
|
| + {
|
| + // We don't just trust that a collection with a nullable element type doesn't contain nulls
|
| + var list = new RepeatedField<string>();
|
| + // It's okay for this to throw ArgumentNullException if necessary.
|
| + // It's not ideal, but not awful.
|
| + Assert.Catch<ArgumentException>(() => list.AddRange(new List<string> { "foo", null }));
|
| + }
|
| +
|
| + [Test]
|
| + public void AddRange_Optimized_NullsProhibited_NullableValueType()
|
| + {
|
| + // We don't just trust that a collection with a nullable element type doesn't contain nulls
|
| + var list = new RepeatedField<int?>();
|
| + // It's okay for this to throw ArgumentNullException if necessary.
|
| + // It's not ideal, but not awful.
|
| + Assert.Catch<ArgumentException>(() => list.AddRange(new List<int?> { 20, null }));
|
| + }
|
| +
|
| + [Test]
|
| + public void AddRange_AlreadyNotEmpty()
|
| + {
|
| + var list = new RepeatedField<int> { 1, 2, 3 };
|
| + list.AddRange(new List<int> { 4, 5, 6 });
|
| + CollectionAssert.AreEqual(new[] { 1, 2, 3, 4, 5, 6 }, list);
|
| + }
|
| +
|
| + [Test]
|
| + public void AddRange_RepeatedField()
|
| {
|
| var list = new RepeatedField<string> { "original" };
|
| - list.Add(new RepeatedField<string> { "foo", "bar" });
|
| + list.AddRange(new RepeatedField<string> { "foo", "bar" });
|
| Assert.AreEqual(3, list.Count);
|
| Assert.AreEqual("original", list[0]);
|
| Assert.AreEqual("foo", list[1]);
|
|
|