DeferTest.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // Licensed to the .NET Foundation under one or more agreements.
  2. // The .NET Foundation licenses this file to you under the Apache 2.0 License.
  3. // See the LICENSE file in the project root for more information.
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Text;
  7. using System.Linq;
  8. using Xunit;
  9. namespace Tests
  10. {
  11. public class DeferTest : Tests
  12. {
  13. [Fact]
  14. public void Defer_Arguments()
  15. {
  16. AssertThrows<ArgumentNullException>(() => EnumerableEx.Defer<int>(null));
  17. }
  18. [Fact]
  19. public void Defer1()
  20. {
  21. var i = 0;
  22. var n = 5;
  23. var xs = EnumerableEx.Defer(() =>
  24. {
  25. i++;
  26. return Enumerable.Range(0, n);
  27. });
  28. Assert.Equal(0, i);
  29. Assert.True(Enumerable.SequenceEqual(xs, Enumerable.Range(0, n)));
  30. Assert.Equal(1, i);
  31. n = 3;
  32. Assert.True(Enumerable.SequenceEqual(xs, Enumerable.Range(0, n)));
  33. Assert.Equal(2, i);
  34. }
  35. [Fact]
  36. public void Defer2()
  37. {
  38. var xs = EnumerableEx.Defer<int>(() =>
  39. {
  40. throw new MyException();
  41. });
  42. AssertThrows<MyException>(() => xs.GetEnumerator().MoveNext());
  43. }
  44. }
  45. }