public void ToCollection(IEnumerable<int> source)
{
foreach (IEnumerable<int> equivalent in new[] { source.Where(s => true), source.Where(s => true).Select(s => s) })
{
Assert.Equal(source, equivalent);
Assert.Equal(source, equivalent.ToArray());
Assert.Equal(source, equivalent.ToList());
Assert.Equal(source.Count(), equivalent.Count()); // Count may be optimized. The above asserts do not imply this will pass.
using (IEnumerator<int> en = equivalent.GetEnumerator())
{
for (int i = 0; i < equivalent.Count(); i++)
{
Assert.True(en.MoveNext());
}
Assert.False(en.MoveNext()); // No more items, this should dispose.
Assert.Equal(0, en.Current); // Reset to default value
Assert.False(en.MoveNext()); // Want to be sure MoveNext after disposing still works.
Assert.Equal(0, en.Current);
}
}
}