public void Where_PredicateThrowsException()
{
int[] source = new[] { 1, 2, 3, 4, 5 };
Func<int, bool> predicate = value =>
{
if (value == 1)
{
throw new InvalidOperationException();
}
return true;
};
var enumerator = source.Where(predicate).GetEnumerator();
// Ensure the first MoveNext call throws an exception
Assert.Throws<InvalidOperationException>(() => enumerator.MoveNext());
// Ensure Current is set to the default value of type T
int currentValue = enumerator.Current;
Assert.Equal(default(int), currentValue);
// Ensure subsequent MoveNext calls succeed
Assert.True(enumerator.MoveNext());
Assert.Equal(2, enumerator.Current);
}