@ -33,6 +33,7 @@
using System ;
using System.Collections ;
using System.Collections.Generic ;
using System.Collections.ObjectModel ;
using System.IO ;
using System.Linq ;
using System.Text ;
@ -756,5 +757,52 @@ namespace Google.Protobuf.Collections
Assert . True ( list1 . Contains ( SampleNaNs . SignallingFlipped ) ) ;
Assert . False ( list2 . Contains ( SampleNaNs . SignallingFlipped ) ) ;
}
[Test]
public void Capacity_Increase ( )
{
// Unfortunately this case tests implementation details of RepeatedField. This is necessary
var list = new RepeatedField < int > ( ) { 1 , 2 , 3 } ;
Assert . AreEqual ( 8 , list . Capacity ) ;
Assert . AreEqual ( 3 , list . Count ) ;
list . Capacity = 1 0 ; // Set capacity to a larger value to trigger growth
Assert . AreEqual ( 1 0 , list . Capacity , "Capacity increased" ) ;
Assert . AreEqual ( 3 , list . Count ) ;
CollectionAssert . AreEqual ( new int [ ] { 1 , 2 , 3 } , list . ToArray ( ) , "We didn't lose our data in the resize" ) ;
}
[Test]
public void Capacity_Decrease ( )
{
var list = new RepeatedField < int > ( ) { 1 , 2 , 3 } ;
Assert . AreEqual ( 8 , list . Capacity ) ;
Assert . DoesNotThrow ( ( ) = > list . Capacity = 5 , "Can decrease capacity if new capacity is greater than list.Count" ) ;
Assert . AreEqual ( 5 , list . Capacity ) ;
Assert . DoesNotThrow ( ( ) = > list . Capacity = 3 , "Can set capacity exactly to list.Count" ) ;
Assert . Throws < ArgumentOutOfRangeException > ( ( ) = > list . Capacity = 2 , "Can't set the capacity smaller than list.Count" ) ;
Assert . Throws < ArgumentOutOfRangeException > ( ( ) = > list . Capacity = 0 , "Can't set the capacity to zero" ) ;
Assert . Throws < ArgumentOutOfRangeException > ( ( ) = > list . Capacity = - 1 , "Can't set the capacity to negative" ) ;
}
[Test]
public void Capacity_Zero ( )
{
var list = new RepeatedField < int > ( ) { 1 } ;
list . RemoveAt ( 0 ) ;
Assert . AreEqual ( 0 , list . Count ) ;
Assert . AreEqual ( 8 , list . Capacity ) ;
Assert . DoesNotThrow ( ( ) = > list . Capacity = 0 , "Can set Capacity to 0" ) ;
Assert . AreEqual ( 0 , list . Capacity ) ;
}
}
}