Average.Generated.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637
  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.Linq;
  7. using System.Threading;
  8. using System.Threading.Tasks;
  9. using Xunit;
  10. namespace Tests
  11. {
  12. public class AverageAsync : AsyncEnumerableTests
  13. {
  14. [Fact]
  15. public async Task AverageAsync_Int32_Empty()
  16. {
  17. var ys = new int[0].ToAsyncEnumerable();
  18. await Assert.ThrowsAsync<InvalidOperationException>(() => ys.AverageAsync().AsTask());
  19. }
  20. [Fact]
  21. public async Task AverageAsync_Int32_Many()
  22. {
  23. var xs = new int[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  24. var ys = xs.ToAsyncEnumerable();
  25. Assert.Equal(xs.Average(), await ys.AverageAsync());
  26. }
  27. [Fact]
  28. public async Task AverageAsync_Selector_Int32_Empty()
  29. {
  30. var ys = new int[0].ToAsyncEnumerable();
  31. await Assert.ThrowsAsync<InvalidOperationException>(() => ys.AverageAsync(x => x).AsTask());
  32. }
  33. [Fact]
  34. public async Task AverageAsync_Selector_Int32_Many()
  35. {
  36. var xs = new int[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  37. var ys = xs.ToAsyncEnumerable();
  38. Assert.Equal(xs.Average(), await ys.AverageAsync(x => x));
  39. }
  40. [Fact]
  41. public async Task AverageAsync_AsyncSelector_Int32_Empty()
  42. {
  43. var ys = new int[0].ToAsyncEnumerable();
  44. await Assert.ThrowsAsync<InvalidOperationException>(() => ys.AverageAsync(x => new ValueTask<int>(x)).AsTask());
  45. }
  46. [Fact]
  47. public async Task AverageAsync_AsyncSelector_Int32_Many()
  48. {
  49. var xs = new int[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  50. var ys = xs.ToAsyncEnumerable();
  51. Assert.Equal(xs.Average(), await ys.AverageAsync(x => new ValueTask<int>(x)));
  52. }
  53. #if !NO_DEEP_CANCELLATION
  54. [Fact]
  55. public async Task AverageAsync_AsyncSelectorWithCancellation_Int32_Empty()
  56. {
  57. var ys = new int[0].ToAsyncEnumerable();
  58. await Assert.ThrowsAsync<InvalidOperationException>(() => ys.AverageAsync((x, ct) => new ValueTask<int>(x), CancellationToken.None).AsTask());
  59. }
  60. [Fact]
  61. public async Task AverageAsync_AsyncSelectorWithCancellation_Int32_Many()
  62. {
  63. var xs = new int[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  64. var ys = xs.ToAsyncEnumerable();
  65. Assert.Equal(xs.Average(), await ys.AverageAsync((x, ct) => new ValueTask<int>(x), CancellationToken.None));
  66. }
  67. #endif
  68. [Fact]
  69. public async Task AverageAsync_Int32_Nullable_Empty()
  70. {
  71. var ys = new int?[0].ToAsyncEnumerable();
  72. Assert.Null(await ys.AverageAsync());
  73. }
  74. [Fact]
  75. public async Task AverageAsync_Int32_Nullable_Many()
  76. {
  77. var xs = new int?[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  78. var ys = xs.ToAsyncEnumerable();
  79. Assert.Equal(xs.Average(), await ys.AverageAsync());
  80. }
  81. [Fact]
  82. public async Task AverageAsync_Selector_Int32_Nullable_Empty()
  83. {
  84. var ys = new int?[0].ToAsyncEnumerable();
  85. Assert.Null(await ys.AverageAsync(x => x));
  86. }
  87. [Fact]
  88. public async Task AverageAsync_Selector_Int32_Nullable_Many()
  89. {
  90. var xs = new int?[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  91. var ys = xs.ToAsyncEnumerable();
  92. Assert.Equal(xs.Average(), await ys.AverageAsync(x => x));
  93. }
  94. [Fact]
  95. public async Task AverageAsync_AsyncSelector_Int32_Nullable_Empty()
  96. {
  97. var ys = new int?[0].ToAsyncEnumerable();
  98. Assert.Null(await ys.AverageAsync(x => new ValueTask<int?>(x)));
  99. }
  100. [Fact]
  101. public async Task AverageAsync_AsyncSelector_Int32_Nullable_Many()
  102. {
  103. var xs = new int?[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  104. var ys = xs.ToAsyncEnumerable();
  105. Assert.Equal(xs.Average(), await ys.AverageAsync(x => new ValueTask<int?>(x)));
  106. }
  107. #if !NO_DEEP_CANCELLATION
  108. [Fact]
  109. public async Task AverageAsync_AsyncSelectorWithCancellation_Int32_Nullable_Empty()
  110. {
  111. var ys = new int?[0].ToAsyncEnumerable();
  112. Assert.Null(await ys.AverageAsync((x, ct) => new ValueTask<int?>(x), CancellationToken.None));
  113. }
  114. [Fact]
  115. public async Task AverageAsync_AsyncSelectorWithCancellation_Int32_Nullable_Many()
  116. {
  117. var xs = new int?[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  118. var ys = xs.ToAsyncEnumerable();
  119. Assert.Equal(xs.Average(), await ys.AverageAsync((x, ct) => new ValueTask<int?>(x), CancellationToken.None));
  120. }
  121. #endif
  122. [Fact]
  123. public async Task AverageAsync_Int64_Empty()
  124. {
  125. var ys = new long[0].ToAsyncEnumerable();
  126. await Assert.ThrowsAsync<InvalidOperationException>(() => ys.AverageAsync().AsTask());
  127. }
  128. [Fact]
  129. public async Task AverageAsync_Int64_Many()
  130. {
  131. var xs = new long[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  132. var ys = xs.ToAsyncEnumerable();
  133. Assert.Equal(xs.Average(), await ys.AverageAsync());
  134. }
  135. [Fact]
  136. public async Task AverageAsync_Selector_Int64_Empty()
  137. {
  138. var ys = new long[0].ToAsyncEnumerable();
  139. await Assert.ThrowsAsync<InvalidOperationException>(() => ys.AverageAsync(x => x).AsTask());
  140. }
  141. [Fact]
  142. public async Task AverageAsync_Selector_Int64_Many()
  143. {
  144. var xs = new long[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  145. var ys = xs.ToAsyncEnumerable();
  146. Assert.Equal(xs.Average(), await ys.AverageAsync(x => x));
  147. }
  148. [Fact]
  149. public async Task AverageAsync_AsyncSelector_Int64_Empty()
  150. {
  151. var ys = new long[0].ToAsyncEnumerable();
  152. await Assert.ThrowsAsync<InvalidOperationException>(() => ys.AverageAsync(x => new ValueTask<long>(x)).AsTask());
  153. }
  154. [Fact]
  155. public async Task AverageAsync_AsyncSelector_Int64_Many()
  156. {
  157. var xs = new long[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  158. var ys = xs.ToAsyncEnumerable();
  159. Assert.Equal(xs.Average(), await ys.AverageAsync(x => new ValueTask<long>(x)));
  160. }
  161. #if !NO_DEEP_CANCELLATION
  162. [Fact]
  163. public async Task AverageAsync_AsyncSelectorWithCancellation_Int64_Empty()
  164. {
  165. var ys = new long[0].ToAsyncEnumerable();
  166. await Assert.ThrowsAsync<InvalidOperationException>(() => ys.AverageAsync((x, ct) => new ValueTask<long>(x), CancellationToken.None).AsTask());
  167. }
  168. [Fact]
  169. public async Task AverageAsync_AsyncSelectorWithCancellation_Int64_Many()
  170. {
  171. var xs = new long[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  172. var ys = xs.ToAsyncEnumerable();
  173. Assert.Equal(xs.Average(), await ys.AverageAsync((x, ct) => new ValueTask<long>(x), CancellationToken.None));
  174. }
  175. #endif
  176. [Fact]
  177. public async Task AverageAsync_Int64_Nullable_Empty()
  178. {
  179. var ys = new long?[0].ToAsyncEnumerable();
  180. Assert.Null(await ys.AverageAsync());
  181. }
  182. [Fact]
  183. public async Task AverageAsync_Int64_Nullable_Many()
  184. {
  185. var xs = new long?[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  186. var ys = xs.ToAsyncEnumerable();
  187. Assert.Equal(xs.Average(), await ys.AverageAsync());
  188. }
  189. [Fact]
  190. public async Task AverageAsync_Selector_Int64_Nullable_Empty()
  191. {
  192. var ys = new long?[0].ToAsyncEnumerable();
  193. Assert.Null(await ys.AverageAsync(x => x));
  194. }
  195. [Fact]
  196. public async Task AverageAsync_Selector_Int64_Nullable_Many()
  197. {
  198. var xs = new long?[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  199. var ys = xs.ToAsyncEnumerable();
  200. Assert.Equal(xs.Average(), await ys.AverageAsync(x => x));
  201. }
  202. [Fact]
  203. public async Task AverageAsync_AsyncSelector_Int64_Nullable_Empty()
  204. {
  205. var ys = new long?[0].ToAsyncEnumerable();
  206. Assert.Null(await ys.AverageAsync(x => new ValueTask<long?>(x)));
  207. }
  208. [Fact]
  209. public async Task AverageAsync_AsyncSelector_Int64_Nullable_Many()
  210. {
  211. var xs = new long?[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  212. var ys = xs.ToAsyncEnumerable();
  213. Assert.Equal(xs.Average(), await ys.AverageAsync(x => new ValueTask<long?>(x)));
  214. }
  215. #if !NO_DEEP_CANCELLATION
  216. [Fact]
  217. public async Task AverageAsync_AsyncSelectorWithCancellation_Int64_Nullable_Empty()
  218. {
  219. var ys = new long?[0].ToAsyncEnumerable();
  220. Assert.Null(await ys.AverageAsync((x, ct) => new ValueTask<long?>(x), CancellationToken.None));
  221. }
  222. [Fact]
  223. public async Task AverageAsync_AsyncSelectorWithCancellation_Int64_Nullable_Many()
  224. {
  225. var xs = new long?[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  226. var ys = xs.ToAsyncEnumerable();
  227. Assert.Equal(xs.Average(), await ys.AverageAsync((x, ct) => new ValueTask<long?>(x), CancellationToken.None));
  228. }
  229. #endif
  230. [Fact]
  231. public async Task AverageAsync_Single_Empty()
  232. {
  233. var ys = new float[0].ToAsyncEnumerable();
  234. await Assert.ThrowsAsync<InvalidOperationException>(() => ys.AverageAsync().AsTask());
  235. }
  236. [Fact]
  237. public async Task AverageAsync_Single_Many()
  238. {
  239. var xs = new float[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  240. var ys = xs.ToAsyncEnumerable();
  241. Assert.Equal(xs.Average(), await ys.AverageAsync());
  242. }
  243. [Fact]
  244. public async Task AverageAsync_Selector_Single_Empty()
  245. {
  246. var ys = new float[0].ToAsyncEnumerable();
  247. await Assert.ThrowsAsync<InvalidOperationException>(() => ys.AverageAsync(x => x).AsTask());
  248. }
  249. [Fact]
  250. public async Task AverageAsync_Selector_Single_Many()
  251. {
  252. var xs = new float[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  253. var ys = xs.ToAsyncEnumerable();
  254. Assert.Equal(xs.Average(), await ys.AverageAsync(x => x));
  255. }
  256. [Fact]
  257. public async Task AverageAsync_AsyncSelector_Single_Empty()
  258. {
  259. var ys = new float[0].ToAsyncEnumerable();
  260. await Assert.ThrowsAsync<InvalidOperationException>(() => ys.AverageAsync(x => new ValueTask<float>(x)).AsTask());
  261. }
  262. [Fact]
  263. public async Task AverageAsync_AsyncSelector_Single_Many()
  264. {
  265. var xs = new float[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  266. var ys = xs.ToAsyncEnumerable();
  267. Assert.Equal(xs.Average(), await ys.AverageAsync(x => new ValueTask<float>(x)));
  268. }
  269. #if !NO_DEEP_CANCELLATION
  270. [Fact]
  271. public async Task AverageAsync_AsyncSelectorWithCancellation_Single_Empty()
  272. {
  273. var ys = new float[0].ToAsyncEnumerable();
  274. await Assert.ThrowsAsync<InvalidOperationException>(() => ys.AverageAsync((x, ct) => new ValueTask<float>(x), CancellationToken.None).AsTask());
  275. }
  276. [Fact]
  277. public async Task AverageAsync_AsyncSelectorWithCancellation_Single_Many()
  278. {
  279. var xs = new float[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  280. var ys = xs.ToAsyncEnumerable();
  281. Assert.Equal(xs.Average(), await ys.AverageAsync((x, ct) => new ValueTask<float>(x), CancellationToken.None));
  282. }
  283. #endif
  284. [Fact]
  285. public async Task AverageAsync_Single_Nullable_Empty()
  286. {
  287. var ys = new float?[0].ToAsyncEnumerable();
  288. Assert.Null(await ys.AverageAsync());
  289. }
  290. [Fact]
  291. public async Task AverageAsync_Single_Nullable_Many()
  292. {
  293. var xs = new float?[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  294. var ys = xs.ToAsyncEnumerable();
  295. Assert.Equal(xs.Average(), await ys.AverageAsync());
  296. }
  297. [Fact]
  298. public async Task AverageAsync_Selector_Single_Nullable_Empty()
  299. {
  300. var ys = new float?[0].ToAsyncEnumerable();
  301. Assert.Null(await ys.AverageAsync(x => x));
  302. }
  303. [Fact]
  304. public async Task AverageAsync_Selector_Single_Nullable_Many()
  305. {
  306. var xs = new float?[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  307. var ys = xs.ToAsyncEnumerable();
  308. Assert.Equal(xs.Average(), await ys.AverageAsync(x => x));
  309. }
  310. [Fact]
  311. public async Task AverageAsync_AsyncSelector_Single_Nullable_Empty()
  312. {
  313. var ys = new float?[0].ToAsyncEnumerable();
  314. Assert.Null(await ys.AverageAsync(x => new ValueTask<float?>(x)));
  315. }
  316. [Fact]
  317. public async Task AverageAsync_AsyncSelector_Single_Nullable_Many()
  318. {
  319. var xs = new float?[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  320. var ys = xs.ToAsyncEnumerable();
  321. Assert.Equal(xs.Average(), await ys.AverageAsync(x => new ValueTask<float?>(x)));
  322. }
  323. #if !NO_DEEP_CANCELLATION
  324. [Fact]
  325. public async Task AverageAsync_AsyncSelectorWithCancellation_Single_Nullable_Empty()
  326. {
  327. var ys = new float?[0].ToAsyncEnumerable();
  328. Assert.Null(await ys.AverageAsync((x, ct) => new ValueTask<float?>(x), CancellationToken.None));
  329. }
  330. [Fact]
  331. public async Task AverageAsync_AsyncSelectorWithCancellation_Single_Nullable_Many()
  332. {
  333. var xs = new float?[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  334. var ys = xs.ToAsyncEnumerable();
  335. Assert.Equal(xs.Average(), await ys.AverageAsync((x, ct) => new ValueTask<float?>(x), CancellationToken.None));
  336. }
  337. #endif
  338. [Fact]
  339. public async Task AverageAsync_Double_Empty()
  340. {
  341. var ys = new double[0].ToAsyncEnumerable();
  342. await Assert.ThrowsAsync<InvalidOperationException>(() => ys.AverageAsync().AsTask());
  343. }
  344. [Fact]
  345. public async Task AverageAsync_Double_Many()
  346. {
  347. var xs = new double[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  348. var ys = xs.ToAsyncEnumerable();
  349. Assert.Equal(xs.Average(), await ys.AverageAsync());
  350. }
  351. [Fact]
  352. public async Task AverageAsync_Selector_Double_Empty()
  353. {
  354. var ys = new double[0].ToAsyncEnumerable();
  355. await Assert.ThrowsAsync<InvalidOperationException>(() => ys.AverageAsync(x => x).AsTask());
  356. }
  357. [Fact]
  358. public async Task AverageAsync_Selector_Double_Many()
  359. {
  360. var xs = new double[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  361. var ys = xs.ToAsyncEnumerable();
  362. Assert.Equal(xs.Average(), await ys.AverageAsync(x => x));
  363. }
  364. [Fact]
  365. public async Task AverageAsync_AsyncSelector_Double_Empty()
  366. {
  367. var ys = new double[0].ToAsyncEnumerable();
  368. await Assert.ThrowsAsync<InvalidOperationException>(() => ys.AverageAsync(x => new ValueTask<double>(x)).AsTask());
  369. }
  370. [Fact]
  371. public async Task AverageAsync_AsyncSelector_Double_Many()
  372. {
  373. var xs = new double[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  374. var ys = xs.ToAsyncEnumerable();
  375. Assert.Equal(xs.Average(), await ys.AverageAsync(x => new ValueTask<double>(x)));
  376. }
  377. #if !NO_DEEP_CANCELLATION
  378. [Fact]
  379. public async Task AverageAsync_AsyncSelectorWithCancellation_Double_Empty()
  380. {
  381. var ys = new double[0].ToAsyncEnumerable();
  382. await Assert.ThrowsAsync<InvalidOperationException>(() => ys.AverageAsync((x, ct) => new ValueTask<double>(x), CancellationToken.None).AsTask());
  383. }
  384. [Fact]
  385. public async Task AverageAsync_AsyncSelectorWithCancellation_Double_Many()
  386. {
  387. var xs = new double[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  388. var ys = xs.ToAsyncEnumerable();
  389. Assert.Equal(xs.Average(), await ys.AverageAsync((x, ct) => new ValueTask<double>(x), CancellationToken.None));
  390. }
  391. #endif
  392. [Fact]
  393. public async Task AverageAsync_Double_Nullable_Empty()
  394. {
  395. var ys = new double?[0].ToAsyncEnumerable();
  396. Assert.Null(await ys.AverageAsync());
  397. }
  398. [Fact]
  399. public async Task AverageAsync_Double_Nullable_Many()
  400. {
  401. var xs = new double?[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  402. var ys = xs.ToAsyncEnumerable();
  403. Assert.Equal(xs.Average(), await ys.AverageAsync());
  404. }
  405. [Fact]
  406. public async Task AverageAsync_Selector_Double_Nullable_Empty()
  407. {
  408. var ys = new double?[0].ToAsyncEnumerable();
  409. Assert.Null(await ys.AverageAsync(x => x));
  410. }
  411. [Fact]
  412. public async Task AverageAsync_Selector_Double_Nullable_Many()
  413. {
  414. var xs = new double?[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  415. var ys = xs.ToAsyncEnumerable();
  416. Assert.Equal(xs.Average(), await ys.AverageAsync(x => x));
  417. }
  418. [Fact]
  419. public async Task AverageAsync_AsyncSelector_Double_Nullable_Empty()
  420. {
  421. var ys = new double?[0].ToAsyncEnumerable();
  422. Assert.Null(await ys.AverageAsync(x => new ValueTask<double?>(x)));
  423. }
  424. [Fact]
  425. public async Task AverageAsync_AsyncSelector_Double_Nullable_Many()
  426. {
  427. var xs = new double?[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  428. var ys = xs.ToAsyncEnumerable();
  429. Assert.Equal(xs.Average(), await ys.AverageAsync(x => new ValueTask<double?>(x)));
  430. }
  431. #if !NO_DEEP_CANCELLATION
  432. [Fact]
  433. public async Task AverageAsync_AsyncSelectorWithCancellation_Double_Nullable_Empty()
  434. {
  435. var ys = new double?[0].ToAsyncEnumerable();
  436. Assert.Null(await ys.AverageAsync((x, ct) => new ValueTask<double?>(x), CancellationToken.None));
  437. }
  438. [Fact]
  439. public async Task AverageAsync_AsyncSelectorWithCancellation_Double_Nullable_Many()
  440. {
  441. var xs = new double?[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  442. var ys = xs.ToAsyncEnumerable();
  443. Assert.Equal(xs.Average(), await ys.AverageAsync((x, ct) => new ValueTask<double?>(x), CancellationToken.None));
  444. }
  445. #endif
  446. [Fact]
  447. public async Task AverageAsync_Decimal_Empty()
  448. {
  449. var ys = new decimal[0].ToAsyncEnumerable();
  450. await Assert.ThrowsAsync<InvalidOperationException>(() => ys.AverageAsync().AsTask());
  451. }
  452. [Fact]
  453. public async Task AverageAsync_Decimal_Many()
  454. {
  455. var xs = new decimal[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  456. var ys = xs.ToAsyncEnumerable();
  457. Assert.Equal(xs.Average(), await ys.AverageAsync());
  458. }
  459. [Fact]
  460. public async Task AverageAsync_Selector_Decimal_Empty()
  461. {
  462. var ys = new decimal[0].ToAsyncEnumerable();
  463. await Assert.ThrowsAsync<InvalidOperationException>(() => ys.AverageAsync(x => x).AsTask());
  464. }
  465. [Fact]
  466. public async Task AverageAsync_Selector_Decimal_Many()
  467. {
  468. var xs = new decimal[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  469. var ys = xs.ToAsyncEnumerable();
  470. Assert.Equal(xs.Average(), await ys.AverageAsync(x => x));
  471. }
  472. [Fact]
  473. public async Task AverageAsync_AsyncSelector_Decimal_Empty()
  474. {
  475. var ys = new decimal[0].ToAsyncEnumerable();
  476. await Assert.ThrowsAsync<InvalidOperationException>(() => ys.AverageAsync(x => new ValueTask<decimal>(x)).AsTask());
  477. }
  478. [Fact]
  479. public async Task AverageAsync_AsyncSelector_Decimal_Many()
  480. {
  481. var xs = new decimal[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  482. var ys = xs.ToAsyncEnumerable();
  483. Assert.Equal(xs.Average(), await ys.AverageAsync(x => new ValueTask<decimal>(x)));
  484. }
  485. #if !NO_DEEP_CANCELLATION
  486. [Fact]
  487. public async Task AverageAsync_AsyncSelectorWithCancellation_Decimal_Empty()
  488. {
  489. var ys = new decimal[0].ToAsyncEnumerable();
  490. await Assert.ThrowsAsync<InvalidOperationException>(() => ys.AverageAsync((x, ct) => new ValueTask<decimal>(x), CancellationToken.None).AsTask());
  491. }
  492. [Fact]
  493. public async Task AverageAsync_AsyncSelectorWithCancellation_Decimal_Many()
  494. {
  495. var xs = new decimal[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  496. var ys = xs.ToAsyncEnumerable();
  497. Assert.Equal(xs.Average(), await ys.AverageAsync((x, ct) => new ValueTask<decimal>(x), CancellationToken.None));
  498. }
  499. #endif
  500. [Fact]
  501. public async Task AverageAsync_Decimal_Nullable_Empty()
  502. {
  503. var ys = new decimal?[0].ToAsyncEnumerable();
  504. Assert.Null(await ys.AverageAsync());
  505. }
  506. [Fact]
  507. public async Task AverageAsync_Decimal_Nullable_Many()
  508. {
  509. var xs = new decimal?[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  510. var ys = xs.ToAsyncEnumerable();
  511. Assert.Equal(xs.Average(), await ys.AverageAsync());
  512. }
  513. [Fact]
  514. public async Task AverageAsync_Selector_Decimal_Nullable_Empty()
  515. {
  516. var ys = new decimal?[0].ToAsyncEnumerable();
  517. Assert.Null(await ys.AverageAsync(x => x));
  518. }
  519. [Fact]
  520. public async Task AverageAsync_Selector_Decimal_Nullable_Many()
  521. {
  522. var xs = new decimal?[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  523. var ys = xs.ToAsyncEnumerable();
  524. Assert.Equal(xs.Average(), await ys.AverageAsync(x => x));
  525. }
  526. [Fact]
  527. public async Task AverageAsync_AsyncSelector_Decimal_Nullable_Empty()
  528. {
  529. var ys = new decimal?[0].ToAsyncEnumerable();
  530. Assert.Null(await ys.AverageAsync(x => new ValueTask<decimal?>(x)));
  531. }
  532. [Fact]
  533. public async Task AverageAsync_AsyncSelector_Decimal_Nullable_Many()
  534. {
  535. var xs = new decimal?[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  536. var ys = xs.ToAsyncEnumerable();
  537. Assert.Equal(xs.Average(), await ys.AverageAsync(x => new ValueTask<decimal?>(x)));
  538. }
  539. #if !NO_DEEP_CANCELLATION
  540. [Fact]
  541. public async Task AverageAsync_AsyncSelectorWithCancellation_Decimal_Nullable_Empty()
  542. {
  543. var ys = new decimal?[0].ToAsyncEnumerable();
  544. Assert.Null(await ys.AverageAsync((x, ct) => new ValueTask<decimal?>(x), CancellationToken.None));
  545. }
  546. [Fact]
  547. public async Task AverageAsync_AsyncSelectorWithCancellation_Decimal_Nullable_Many()
  548. {
  549. var xs = new decimal?[] { 2, 3, 5, 7, 11, 13, 17, 19 };
  550. var ys = xs.ToAsyncEnumerable();
  551. Assert.Equal(xs.Average(), await ys.AverageAsync((x, ct) => new ValueTask<decimal?>(x), CancellationToken.None));
  552. }
  553. #endif
  554. }
  555. }