Repeat.cs 1.6 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.Linq;
  6. using Xunit;
  7. namespace Tests
  8. {
  9. public class Repeat : Tests
  10. {
  11. [Fact]
  12. public void RepeatElementInfinite()
  13. {
  14. var xs = EnumerableEx.Repeat(42).Take(1000);
  15. Assert.True(xs.All(x => x == 42));
  16. Assert.True(xs.Count() == 1000);
  17. }
  18. [Fact]
  19. public void RepeatSequence_Arguments()
  20. {
  21. AssertThrows<ArgumentNullException>(() => EnumerableEx.Repeat<int>(null));
  22. AssertThrows<ArgumentNullException>(() => EnumerableEx.Repeat<int>(null, 5));
  23. AssertThrows<ArgumentOutOfRangeException>(() => EnumerableEx.Repeat<int>(new[] { 1 }, -1));
  24. }
  25. [Fact]
  26. public void RepeatSequence1()
  27. {
  28. var i = 0;
  29. var xs = new[] { 1, 2 }.Do(_ => i++).Repeat();
  30. var res = xs.Take(10).ToList();
  31. Assert.Equal(10, res.Count);
  32. Assert.True(res.Buffer(2).Select(b => b.Sum()).All(x => x == 3));
  33. Assert.Equal(10, i);
  34. }
  35. [Fact]
  36. public void RepeatSequence2()
  37. {
  38. var i = 0;
  39. var xs = new[] { 1, 2 }.Do(_ => i++).Repeat(5);
  40. var res = xs.ToList();
  41. Assert.Equal(10, res.Count);
  42. Assert.True(res.Buffer(2).Select(b => b.Sum()).All(x => x == 3));
  43. Assert.Equal(10, i);
  44. }
  45. }
  46. }