/src/UniTask.NetCoreTests/Linq/Paging.cs

https://github.com/Cysharp/UniTask · C# · 285 lines · 258 code · 27 blank · 0 comment · 0 complexity · 8bd563db84e1923b804a8ed50f39f884 MD5 · raw file

  1. using Cysharp.Threading.Tasks;
  2. using Cysharp.Threading.Tasks.Linq;
  3. using FluentAssertions;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Reactive.Concurrency;
  8. using System.Reactive.Linq;
  9. using System.Threading.Tasks;
  10. using Xunit;
  11. namespace NetCoreTests.Linq
  12. {
  13. public class Paging
  14. {
  15. [Theory]
  16. [InlineData(0, 0)]
  17. [InlineData(0, 1)]
  18. [InlineData(9, 0)]
  19. [InlineData(9, 1)]
  20. [InlineData(9, 5)]
  21. [InlineData(9, 9)]
  22. [InlineData(9, 15)]
  23. public async Task Skip(int collection, int skipCount)
  24. {
  25. var xs = await UniTaskAsyncEnumerable.Range(1, collection).Skip(skipCount).ToArrayAsync();
  26. var ys = Enumerable.Range(1, collection).Skip(skipCount).ToArray();
  27. xs.Should().BeEquivalentTo(ys);
  28. }
  29. [Fact]
  30. public async Task SkipException()
  31. {
  32. foreach (var item in UniTaskTestException.Throws())
  33. {
  34. var xs = item.Skip(5).ToArrayAsync();
  35. await Assert.ThrowsAsync<UniTaskTestException>(async () => await xs);
  36. }
  37. }
  38. [Theory]
  39. [InlineData(0, 0)]
  40. [InlineData(0, 1)]
  41. [InlineData(9, 0)]
  42. [InlineData(9, 1)]
  43. [InlineData(9, 5)]
  44. [InlineData(9, 9)]
  45. [InlineData(9, 15)]
  46. public async Task SkipLast(int collection, int skipCount)
  47. {
  48. var xs = await UniTaskAsyncEnumerable.Range(1, collection).SkipLast(skipCount).ToArrayAsync();
  49. var ys = Enumerable.Range(1, collection).SkipLast(skipCount).ToArray();
  50. xs.Should().BeEquivalentTo(ys);
  51. }
  52. [Fact]
  53. public async Task SkipLastException()
  54. {
  55. foreach (var item in UniTaskTestException.Throws())
  56. {
  57. var xs = item.SkipLast(5).ToArrayAsync();
  58. await Assert.ThrowsAsync<UniTaskTestException>(async () => await xs);
  59. }
  60. }
  61. [Theory]
  62. [InlineData(0, 0)]
  63. [InlineData(0, 1)]
  64. [InlineData(9, 0)]
  65. [InlineData(9, 1)]
  66. [InlineData(9, 5)]
  67. [InlineData(9, 9)]
  68. [InlineData(9, 15)]
  69. public async Task TakeLast(int collection, int takeCount)
  70. {
  71. var xs = await UniTaskAsyncEnumerable.Range(1, collection).TakeLast(takeCount).ToArrayAsync();
  72. var ys = Enumerable.Range(1, collection).TakeLast(takeCount).ToArray();
  73. xs.Should().BeEquivalentTo(ys);
  74. }
  75. [Fact]
  76. public async Task TakeLastException()
  77. {
  78. foreach (var item in UniTaskTestException.Throws())
  79. {
  80. var xs = item.TakeLast(5).ToArrayAsync();
  81. await Assert.ThrowsAsync<UniTaskTestException>(async () => await xs);
  82. }
  83. }
  84. [Theory]
  85. [InlineData(0, 0)]
  86. [InlineData(0, 1)]
  87. [InlineData(9, 0)]
  88. [InlineData(9, 1)]
  89. [InlineData(9, 5)]
  90. [InlineData(9, 9)]
  91. [InlineData(9, 15)]
  92. public async Task Take(int collection, int takeCount)
  93. {
  94. var xs = await UniTaskAsyncEnumerable.Range(1, collection).Take(takeCount).ToArrayAsync();
  95. var ys = Enumerable.Range(1, collection).Take(takeCount).ToArray();
  96. xs.Should().BeEquivalentTo(ys);
  97. }
  98. [Fact]
  99. public async Task TakeException()
  100. {
  101. foreach (var item in UniTaskTestException.Throws())
  102. {
  103. var xs = item.Take(5).ToArrayAsync();
  104. await Assert.ThrowsAsync<UniTaskTestException>(async () => await xs);
  105. }
  106. }
  107. [Theory]
  108. [InlineData(0, 0)]
  109. [InlineData(0, 1)]
  110. [InlineData(9, 0)]
  111. [InlineData(9, 1)]
  112. [InlineData(9, 5)]
  113. [InlineData(9, 9)]
  114. [InlineData(9, 15)]
  115. public async Task SkipWhile(int collection, int skipCount)
  116. {
  117. {
  118. var xs = await UniTaskAsyncEnumerable.Range(1, collection).SkipWhile(x => x < skipCount).ToArrayAsync();
  119. var ys = Enumerable.Range(1, collection).SkipWhile(x => x < skipCount).ToArray();
  120. xs.Should().BeEquivalentTo(ys);
  121. }
  122. {
  123. var xs = await UniTaskAsyncEnumerable.Range(1, collection).SkipWhile((x, i) => x < (skipCount - i)).ToArrayAsync();
  124. var ys = Enumerable.Range(1, collection).SkipWhile((x, i) => x < (skipCount - i)).ToArray();
  125. xs.Should().BeEquivalentTo(ys);
  126. }
  127. {
  128. var xs = await UniTaskAsyncEnumerable.Range(1, collection).SkipWhileAwait(x => UniTask.Run(() => x < skipCount)).ToArrayAsync();
  129. var ys = Enumerable.Range(1, collection).SkipWhile(x => x < skipCount).ToArray();
  130. xs.Should().BeEquivalentTo(ys);
  131. }
  132. {
  133. var xs = await UniTaskAsyncEnumerable.Range(1, collection).SkipWhileAwait((x, i) => UniTask.Run(() => x < (skipCount - i))).ToArrayAsync();
  134. var ys = Enumerable.Range(1, collection).SkipWhile((x, i) => x < (skipCount - i)).ToArray();
  135. xs.Should().BeEquivalentTo(ys);
  136. }
  137. {
  138. var xs = await UniTaskAsyncEnumerable.Range(1, collection).SkipWhileAwaitWithCancellation((x, _) => UniTask.Run(() => x < skipCount)).ToArrayAsync();
  139. var ys = Enumerable.Range(1, collection).SkipWhile(x => x < skipCount).ToArray();
  140. xs.Should().BeEquivalentTo(ys);
  141. }
  142. {
  143. var xs = await UniTaskAsyncEnumerable.Range(1, collection).SkipWhileAwaitWithCancellation((x, i, _) => UniTask.Run(() => x < (skipCount - i))).ToArrayAsync();
  144. var ys = Enumerable.Range(1, collection).SkipWhile((x, i) => x < (skipCount - i)).ToArray();
  145. xs.Should().BeEquivalentTo(ys);
  146. }
  147. }
  148. [Fact]
  149. public async Task SkipWhileException()
  150. {
  151. foreach (var item in UniTaskTestException.Throws())
  152. {
  153. var xs = item.SkipWhile(x => x < 2).ToArrayAsync();
  154. await Assert.ThrowsAsync<UniTaskTestException>(async () => await xs);
  155. }
  156. foreach (var item in UniTaskTestException.Throws())
  157. {
  158. var xs = item.SkipWhile((x, i) => x < 2).ToArrayAsync();
  159. await Assert.ThrowsAsync<UniTaskTestException>(async () => await xs);
  160. }
  161. foreach (var item in UniTaskTestException.Throws())
  162. {
  163. var xs = item.SkipWhileAwait((x) => UniTask.Run(() => x < 2)).ToArrayAsync();
  164. await Assert.ThrowsAsync<UniTaskTestException>(async () => await xs);
  165. }
  166. foreach (var item in UniTaskTestException.Throws())
  167. {
  168. var xs = item.SkipWhileAwait((x, i) => UniTask.Run(() => x < 2)).ToArrayAsync();
  169. await Assert.ThrowsAsync<UniTaskTestException>(async () => await xs);
  170. }
  171. foreach (var item in UniTaskTestException.Throws())
  172. {
  173. var xs = item.SkipWhileAwaitWithCancellation((x, _) => UniTask.Run(() => x < 2)).ToArrayAsync();
  174. await Assert.ThrowsAsync<UniTaskTestException>(async () => await xs);
  175. }
  176. foreach (var item in UniTaskTestException.Throws())
  177. {
  178. var xs = item.SkipWhileAwaitWithCancellation((x, i, _) => UniTask.Run(() => x < 2)).ToArrayAsync();
  179. await Assert.ThrowsAsync<UniTaskTestException>(async () => await xs);
  180. }
  181. }
  182. [Theory]
  183. [InlineData(0, 0)]
  184. [InlineData(0, 1)]
  185. [InlineData(9, 0)]
  186. [InlineData(9, 1)]
  187. [InlineData(9, 5)]
  188. [InlineData(9, 9)]
  189. [InlineData(9, 15)]
  190. public async Task TakeWhile(int collection, int skipCount)
  191. {
  192. {
  193. var xs = await UniTaskAsyncEnumerable.Range(1, collection).TakeWhile(x => x < skipCount).ToArrayAsync();
  194. var ys = Enumerable.Range(1, collection).TakeWhile(x => x < skipCount).ToArray();
  195. xs.Should().BeEquivalentTo(ys);
  196. }
  197. {
  198. var xs = await UniTaskAsyncEnumerable.Range(1, collection).TakeWhile((x, i) => x < (skipCount - i)).ToArrayAsync();
  199. var ys = Enumerable.Range(1, collection).TakeWhile((x, i) => x < (skipCount - i)).ToArray();
  200. xs.Should().BeEquivalentTo(ys);
  201. }
  202. {
  203. var xs = await UniTaskAsyncEnumerable.Range(1, collection).TakeWhileAwait(x => UniTask.Run(() => x < skipCount)).ToArrayAsync();
  204. var ys = Enumerable.Range(1, collection).TakeWhile(x => x < skipCount).ToArray();
  205. xs.Should().BeEquivalentTo(ys);
  206. }
  207. {
  208. var xs = await UniTaskAsyncEnumerable.Range(1, collection).TakeWhileAwait((x, i) => UniTask.Run(() => x < (skipCount - i))).ToArrayAsync();
  209. var ys = Enumerable.Range(1, collection).TakeWhile((x, i) => x < (skipCount - i)).ToArray();
  210. xs.Should().BeEquivalentTo(ys);
  211. }
  212. {
  213. var xs = await UniTaskAsyncEnumerable.Range(1, collection).TakeWhileAwaitWithCancellation((x, _) => UniTask.Run(() => x < skipCount)).ToArrayAsync();
  214. var ys = Enumerable.Range(1, collection).TakeWhile(x => x < skipCount).ToArray();
  215. xs.Should().BeEquivalentTo(ys);
  216. }
  217. {
  218. var xs = await UniTaskAsyncEnumerable.Range(1, collection).TakeWhileAwaitWithCancellation((x, i, _) => UniTask.Run(() => x < (skipCount - i))).ToArrayAsync();
  219. var ys = Enumerable.Range(1, collection).TakeWhile((x, i) => x < (skipCount - i)).ToArray();
  220. xs.Should().BeEquivalentTo(ys);
  221. }
  222. }
  223. [Fact]
  224. public async Task TakeWhileException()
  225. {
  226. foreach (var item in UniTaskTestException.Throws())
  227. {
  228. var xs = item.TakeWhile(x => x < 5).ToArrayAsync();
  229. await Assert.ThrowsAsync<UniTaskTestException>(async () => await xs);
  230. }
  231. foreach (var item in UniTaskTestException.Throws())
  232. {
  233. var xs = item.TakeWhile((x, i) => x < 5).ToArrayAsync();
  234. await Assert.ThrowsAsync<UniTaskTestException>(async () => await xs);
  235. }
  236. foreach (var item in UniTaskTestException.Throws())
  237. {
  238. var xs = item.TakeWhileAwait((x) => UniTask.Run(() => x < 5)).ToArrayAsync();
  239. await Assert.ThrowsAsync<UniTaskTestException>(async () => await xs);
  240. }
  241. foreach (var item in UniTaskTestException.Throws())
  242. {
  243. var xs = item.TakeWhileAwait((x, i) => UniTask.Run(() => x < 5)).ToArrayAsync();
  244. await Assert.ThrowsAsync<UniTaskTestException>(async () => await xs);
  245. }
  246. foreach (var item in UniTaskTestException.Throws())
  247. {
  248. var xs = item.TakeWhileAwaitWithCancellation((x, _) => UniTask.Run(() => x < 5)).ToArrayAsync();
  249. await Assert.ThrowsAsync<UniTaskTestException>(async () => await xs);
  250. }
  251. foreach (var item in UniTaskTestException.Throws())
  252. {
  253. var xs = item.TakeWhileAwaitWithCancellation((x, i, _) => UniTask.Run(() => x < 5)).ToArrayAsync();
  254. await Assert.ThrowsAsync<UniTaskTestException>(async () => await xs);
  255. }
  256. }
  257. }
  258. }