Hooked on LINQ

Hooked on LINQ - Developers' Wiki
for .NET Language Integrated Query

Companion book for this site
LINQ to Objects Using C# 4.0:
Using and Extending LINQ to Objects and Parallel LINQ (PLINQ)
Quick Search

Advanced Search »
Unit tests written by Troy Magennis. They run against the MAY 2006 CTP using NUnit.


  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Query;
  5. using NUnit.Framework;
  6.  
  7. namespace LINQUnitTests
  8. {
  9. [TestFixture]
  10. public class AverageTests
  11. {
  12. #region <int> Average
  13.  
  14. /* Extract from Sequence.cs May 2006 CTP
  15. public static double Average(this IEnumerable<int> source) {
  16. if (source == null) throw Error.ArgumentNull("source");
  17. long sum = 0;
  18. long count = 0;
  19. checked {
  20. foreach (int v in source) {
  21. sum += v;
  22. count++;
  23. }
  24. }
  25. if (count > 0) return (double)sum / count;
  26. throw Error.NoElements();
  27. }
  28. */
  29. [Test]
  30. public void AvgIntTest()
  31. {
  32. int[] values = new int[] { 5,4,3,2,1,6,7,8,9,0 };
  33. double result = values.Average();
  34. Assert.AreEqual(4.5, result, "<int> Average not returning the correct avg.");
  35. }
  36.  
  37. [Test]
  38. public void AvgIntEdgeTest()
  39. {
  40. int[] values = new int[] { int.MaxValue, int.MinValue, int.MaxValue, int.MinValue };
  41. var result = values.Average();
  42. Assert.AreEqual(-0.5, result);
  43.  
  44. // Note:
  45. // Max Value: 2,147,483,647
  46. // MinValue: -2,147,483,648
  47. }
  48. [Test]
  49. [ExpectedException(typeof(ArgumentNullException))]
  50. public void AvgIntNullSourceTest()
  51. {
  52. int[] values = null;
  53. values.Average();
  54. }
  55.  
  56. [Test]
  57. [ExpectedException("System.InvalidOperationException")]
  58. public void AvgIntEmptySourceTest()
  59. {
  60. var values = Sequence.Empty<int>();
  61. var result = values.Average();
  62. }
  63.  
  64. /* Extract from Sequence.cs May 2006 CTP
  65. public static double Average<T>(this IEnumerable<T> source, Func<T, int> selector) {
  66. return Sequence.Average(Sequence.Select(source, selector));
  67. }
  68. */
  69. [Test]
  70. public void AvgIntWithSelectorTest()
  71. {
  72. int[] values = new int[] { 5,4,3,2,1,6,7,8,9,0 };
  73. double result = values.Average(i => i + 1);
  74. Assert.AreEqual(5.5, result, "<int> Average extension method with Selector not returning correct avg.");
  75. }
  76.  
  77. #endregion <int> Average
  78.  
  79. #region <int?> Average
  80. /* Extract from Sequence.cs May 2006 CTP
  81. public static double? Average(this IEnumerable<int?> source) {
  82. if (source == null) throw Error.ArgumentNull("source");
  83. long sum = 0;
  84. long count = 0;
  85. checked {
  86. foreach (int? v in source) {
  87. if (v != null) {
  88. sum += v.GetValueOrDefault();
  89. count++;
  90. }
  91. }
  92. }
  93. if (count > 0) return (double)sum / count;
  94. return null;
  95. }
  96. */
  97. [Test]
  98. public void AvgNullableIntTest()
  99. {
  100. int?[] values = new int?[] { 5,null,4,null,3,2,null,1,6,7,8,9,0 };
  101. double? result = values.Average();
  102. Assert.AreEqual(4.5, result, "<int?> Average not returning the correct avg.");
  103. }
  104.  
  105. [Test]
  106. public void AvgNullableIntEdgeTest()
  107. {
  108. int?[] values = new int?[] { int.MaxValue, null, int.MinValue, null, int.MaxValue, int.MinValue };
  109. var result = values.Average();
  110. Assert.AreEqual(-0.5, result);
  111.  
  112. // Note:
  113. // Max Value: 2,147,483,647
  114. // MinValue: -2,147,483,648
  115. }
  116. [Test]
  117. [ExpectedException(typeof(ArgumentNullException))]
  118. public void AvgNullableIntNullSourceTest()
  119. {
  120. int?[] values = null;
  121. values.Average();
  122. }
  123.  
  124. [Test]
  125. public void AvgNullableIntEmptySourceTest()
  126. {
  127. var values = Sequence.Empty<int?>();
  128. var result = values.Average();
  129. Assert.IsNull(result, "Empty <int?> source should return null for Average.");
  130. }
  131.  
  132. [Test]
  133. public void AvgNullableIntAllNullsSourceTest()
  134. {
  135. var values = new int?[]{null,null,null};
  136. var result = values.Average();
  137. Assert.IsNull(result, "All Null <int?> source should return null for Average.");
  138. }
  139.  
  140. /* Extract from Sequence.cs May 2006 CTP
  141. public static double? Average<T>(this IEnumerable<T> source, Func<T, int?> selector) {
  142. return Sequence.Average(Sequence.Select(source, selector));
  143. }
  144. */
  145. [Test]
  146. public void AvgNullableIntWithSelectorTest()
  147. {
  148. int?[] values = new int?[] { 5,4,null,3,2,null,1,6,null,7,8,9,0 };
  149. double? result = values.Average(i => i + 1);
  150. Assert.AreEqual(5.5, result, "<int?> Average extension method with Selector not returning correct avg.");
  151. }
  152. #endregion <int?> Average
  153.  
  154. #region <long> Average
  155.  
  156. /* Extract from Sequence.cs May 2006 CTP
  157. public static double Average(this IEnumerable<long> source) {
  158. if (source == null) throw Error.ArgumentNull("source");
  159. long sum = 0;
  160. long count = 0;
  161. checked {
  162. foreach (long v in source) {
  163. sum += v;
  164. count++;
  165. }
  166. }
  167. if (count > 0) return (double)sum / count;
  168. throw Error.NoElements();
  169. }
  170. */
  171. [Test]
  172. public void AvgLongTest()
  173. {
  174. long[] values = new long[] { 5L,4L,3L,2L,1L,6L,7L,8L,9L,0L };
  175. double result = values.Average();
  176. Assert.AreEqual(4.5, result, "<long> Average not returning the correct avg.");
  177. }
  178.  
  179. [Test]
  180. public void AvgLongEdgeTest()
  181. {
  182. long[] values = new long[] { long.MaxValue, long.MinValue, long.MaxValue, long.MinValue };
  183. var result = values.Average();
  184. Assert.AreEqual(-0.5, result);
  185. }
  186. [Test]
  187. [ExpectedException(typeof(ArgumentNullException))]
  188. public void AvgLongNullSourceTest()
  189. {
  190. long[] values = null;
  191. values.Average();
  192. }
  193.  
  194. [Test]
  195. [ExpectedException("System.InvalidOperationException")]
  196. public void AvgLongEmptySourceTest()
  197. {
  198. var values = Sequence.Empty<long>();
  199. var result = values.Average();
  200. }
  201.  
  202. /* Extract from Sequence.cs May 2006 CTP
  203. public static double Average<T>(this IEnumerable<T> source, Func<T, long> selector) {
  204. return Sequence.Average(Sequence.Select(source, selector));
  205. }
  206. */
  207. [Test]
  208. public void AvgLongWithSelectorTest()
  209. {
  210. long[] values = new long[] { 5L,4L,3L,2L,1L,6L,7L,8L,9L,0L };
  211. double result = values.Average(i => i + 1);
  212. Assert.AreEqual(5.5, result, "<long> Average extension method with Selector not returning correct avg.");
  213. }
  214.  
  215. #endregion <long> Average
  216.  
  217. #region <long?> Average
  218. /* Extract from Sequence.cs May 2006 CTP
  219. public static double? Average(this IEnumerable<long?> source) {
  220. if (source == null) throw Error.ArgumentNull("source");
  221. long sum = 0;
  222. long count = 0;
  223. checked {
  224. foreach (long? v in source) {
  225. if (v != null) {
  226. sum += v.GetValueOrDefault();
  227. count++;
  228. }
  229. }
  230. }
  231. if (count > 0) return (double)sum / count;
  232. return null;
  233. } */
  234. [Test]
  235. public void AvgNullableLongTest()
  236. {
  237. long?[] values = new long?[] { 5L,4L,null,3L,null,2L,1L,null,6L,7L,8L,9L,0L };
  238. double? result = values.Average();
  239. Assert.AreEqual(4.5, result, "<long?> Average not returning the correct avg.");
  240. }
  241.  
  242. [Test]
  243. public void AvgNullableLongEdgeTest()
  244. {
  245. long?[] values = new long?[] { long.MaxValue, null, long.MinValue, null, long.MaxValue, long.MinValue };
  246. var result = values.Average();
  247. Assert.AreEqual(-0.5, result);
  248. }
  249. [Test]
  250. [ExpectedException(typeof(ArgumentNullException))]
  251. public void AvgNullableLongNullSourceTest()
  252. {
  253. long?[] values = null;
  254. values.Average();
  255. }
  256.  
  257. [Test]
  258. public void AvgNullableLongEmptySourceTest()
  259. {
  260. var values = Sequence.Empty<long?>();
  261. var result = values.Average();
  262. Assert.IsNull(result, "Empty <long?> source should return null for Average.");
  263. }
  264.  
  265. [Test]
  266. public void AvgNullableLongAllNullsSourceTest()
  267. {
  268. var values = new long?[]{null,null,null};
  269. var result = values.Average();
  270. Assert.IsNull(result, "All Null <long?> source should return null for Average.");
  271. }
  272.  
  273. /* Extract from Sequence.cs May 2006 CTP
  274. public static double? Average<T>(this IEnumerable<T> source, Func<T, long?> selector) {
  275. return Sequence.Average(Sequence.Select(source, selector));
  276. }
  277. */
  278. [Test]
  279. public void AvgNullableLongWithSelectorTest()
  280. {
  281. long?[] values = new long?[] { 5L,4L,null,3L,null,2L,1L,null,6L,7L,8L,9L,0L };
  282. double? result = values.Average(i => i + 1);
  283. Assert.AreEqual(5.5, result, "<long?> Average extension method with Selector not returning correct avg.");
  284. }
  285. #endregion <long?> Average
  286.  
  287. #region <double> Average
  288.  
  289. /* Extract from Sequence.cs May 2006 CTP
  290. public static double Average(this IEnumerable<double> source) {
  291. if (source == null) throw Error.ArgumentNull("source");
  292. double sum = 0;
  293. long count = 0;
  294. checked {
  295. foreach (double v in source) {
  296. sum += v;
  297. count++;
  298. }
  299. }
  300. if (count > 0) return sum / count;
  301. throw Error.NoElements();
  302. }
  303. */
  304. [Test]
  305. public void AvgDoubleTest()
  306. {
  307. double[] values = new double[] { 5.5D,4.4D,3.3D,2.2,1.1D,6.6D,7.7D,8.8D,9.9D,0D };
  308. double result = values.Average();
  309. Assert.AreEqual(4.95, result, 0.001, "<double> Average not returning the correct avg.");
  310. }
  311.  
  312. [Test]
  313. public void AvgDoubleEdgeTest()
  314. {
  315. double[] values = new double[] { double.MaxValue, double.MinValue, double.MaxValue, double.MinValue };
  316. var result = values.Average();
  317. Assert.AreEqual(0, result);
  318. }
  319. [Test]
  320. [ExpectedException(typeof(ArgumentNullException))]
  321. public void AvgDoubleNullSourceTest()
  322. {
  323. double[] values = null;
  324. values.Average();
  325. }
  326.  
  327. [Test]
  328. [ExpectedException("System.InvalidOperationException")]
  329. public void AvgDoubleEmptySourceTest()
  330. {
  331. var values = Sequence.Empty<double>();
  332. var result = values.Average();
  333. }
  334.  
  335. /* Extract from Sequence.cs May 2006 CTP
  336. public static double Average<T>(this IEnumerable<T> source, Func<T, double> selector) {
  337. return Sequence.Average(Sequence.Select(source, selector));
  338. }
  339. */
  340. [Test]
  341. public void AvgDoubleWithSelectorTest()
  342. {
  343. double[] values = new double[] { 5L,4L,3L,2L,1L,6L,7L,8L,9L,0L };
  344. double result = values.Average(i => i + 1);
  345. Assert.AreEqual(5.5, result, "<double> Average extension method with Selector not returning correct avg.");
  346. }
  347.  
  348. #endregion <double> Average
  349.  
  350. #region <double?> Average
  351. /* Extract from Sequence.cs May 2006 CTP
  352. public static double? Average(this IEnumerable<double?> source) {
  353. if (source == null) throw Error.ArgumentNull("source");
  354. double sum = 0;
  355. long count = 0;
  356. checked {
  357. foreach (double? v in source) {
  358. if (v != null) {
  359. sum += v.GetValueOrDefault();
  360. count++;
  361. }
  362. }
  363. }
  364. if (count > 0) return sum / count;
  365. return null;
  366. }
  367. */
  368. [Test]
  369. public void AvgNullableDoubleTest()
  370. {
  371. double?[] values = new double?[] { 5.5D,4.4D,null,3.3D,null,2.2D,1.1D,null,6.6D,7.7D,8.8D,9.9D,0D };
  372. double? result = values.Average();
  373. Assert.AreEqual(4.95D, result.Value, 0.001, "<double?> Average not returning the correct avg.");
  374. }
  375.  
  376. [Test]
  377. public void AvgNullableDoubleEdgeTest()
  378. {
  379. double?[] values = new double?[] { double.MaxValue, null, double.MinValue, null, double.MaxValue, double.MinValue };
  380. var result = values.Average();
  381. Assert.AreEqual(0, result);
  382. }
  383. [Test]
  384. [ExpectedException(typeof(ArgumentNullException))]
  385. public void AvgNullableDoubleNullSourceTest()
  386. {
  387. double?[] values = null;
  388. values.Average();
  389. }
  390.  
  391. [Test]
  392. public void AvgNullableDoubleEmptySourceTest()
  393. {
  394. var values = Sequence.Empty<double?>();
  395. var result = values.Average();
  396. Assert.IsNull(result, "Empty <double?> source should return null for Average.");
  397. }
  398.  
  399. [Test]
  400. public void AvgNullableDoubleAllNullsSourceTest()
  401. {
  402. var values = new double?[]{null,null,null};
  403. var result = values.Average();
  404. Assert.IsNull(result, "All Null <double?> source should return null for Average.");
  405. }
  406.  
  407. /* Extract from Sequence.cs May 2006 CTP
  408. public static double? Average<T>(this IEnumerable<T> source, Func<T, double?> selector) {
  409. return Sequence.Average(Sequence.Select(source, selector));
  410. }
  411. */
  412. [Test]
  413. public void AvgNullableDoubleWithSelectorTest()
  414. {
  415. double?[] values = new double?[] { 5L,4L,null,3L,null,2L,1L,null,6L,7L,8L,9L,0L };
  416. double? result = values.Average(i => i + 1);
  417. Assert.AreEqual(5.5, result, "<double?> Average extension method with Selector not returning correct avg.");
  418. }
  419. #endregion <double?> Average
  420.  
  421. #region <decimal> Average
  422.  
  423. /* Extract from Sequence.cs May 2006 CTP
  424. public static decimal Average(this IEnumerable<decimal> source) {
  425. if (source == null) throw Error.ArgumentNull("source");
  426. decimal sum = 0;
  427. long count = 0;
  428. checked {
  429. foreach (decimal v in source) {
  430. sum += v;
  431. count++;
  432. }
  433. }
  434. if (count > 0) return sum / count;
  435. throw Error.NoElements();
  436. }
  437. */
  438. [Test]
  439. public void AvgDecimalTest()
  440. {
  441. decimal[] values = new decimal[] { 5.5M,4.4M,3.3M,2.2M,1.1M,6.6M,7.7M,8.8M,9.9M,0M };
  442. decimal result = values.Average();
  443. Assert.AreEqual(4.95, result, "<decimal> Average not returning the correct avg.");
  444. }
  445.  
  446. [Test]
  447. public void AvgDecimalEdgeTest()
  448. {
  449. decimal[] values = new decimal[] { decimal.MaxValue, decimal.MinValue, decimal.MaxValue, decimal.MinValue };
  450. var result = values.Average();
  451. Assert.AreEqual(0, result);
  452. }
  453. [Test]
  454. [ExpectedException(typeof(ArgumentNullException))]
  455. public void AvgDecimalNullSourceTest()
  456. {
  457. decimal[] values = null;
  458. values.Average();
  459. }
  460.  
  461. [Test]
  462. [ExpectedException("System.InvalidOperationException")]
  463. public void AvgDecimalEmptySourceTest()
  464. {
  465. var values = Sequence.Empty<decimal>();
  466. var result = values.Average();
  467. }
  468.  
  469. /* Extract from Sequence.cs May 2006 CTP
  470. public static decimal Average<T>(this IEnumerable<T> source, Func<T, decimal> selector) {
  471. return Sequence.Average(Sequence.Select(source, selector));
  472. }
  473. */
  474. [Test]
  475. public void AvgDecimalWithSelectorTest()
  476. {
  477. decimal[] values = new decimal[] { 5M,4M,3M,2M,1M,6M,7M,8M,9M,0M };
  478. decimal result = values.Average(i => i + 1);
  479. Assert.AreEqual(5.5, result, "<decimal> Average extension method with Selector not returning correct avg.");
  480. }
  481.  
  482. #endregion <decimal> Average
  483.  
  484. #region <decimal?> Average
  485. /* Extract from Sequence.cs May 2006 CTP
  486. public static decimal? Average(this IEnumerable<decimal?> source) {
  487. if (source == null) throw Error.ArgumentNull("source");
  488. decimal sum = 0;
  489. long count = 0;
  490. checked {
  491. foreach (decimal? v in source) {
  492. if (v != null) {
  493. sum += v.GetValueOrDefault();
  494. count++;
  495. }
  496. }
  497. }
  498. if (count > 0) return sum / count;
  499. return null;
  500. }
  501. */
  502. [Test]
  503. public void AvgNullableDecimalTest()
  504. {
  505. decimal?[] values = new decimal?[] { 5.5M,4.4M,null,3.3M,null,2.2M,1.1M,null,6.6M,7.7M,8.8M,9.9M,0M };
  506. decimal? result = values.Average();
  507. Assert.AreEqual(4.95M, result.Value, "<decimal?> Average not returning the correct avg.");
  508. }
  509.  
  510. [Test]
  511. public void AvgNullableDecimalEdgeTest()
  512. {
  513. decimal?[] values = new decimal?[] { decimal.MaxValue, null, decimal.MinValue, null, decimal.MaxValue, decimal.MinValue };
  514. var result = values.Average();
  515. Assert.AreEqual(0, result);
  516. }
  517. [Test]
  518. [ExpectedException(typeof(ArgumentNullException))]
  519. public void AvgNullableDecimalNullSourceTest()
  520. {
  521. decimal?[] values = null;
  522. values.Average();
  523. }
  524.  
  525. [Test]
  526. public void AvgNullableDecimalEmptySourceTest()
  527. {
  528. var values = Sequence.Empty<decimal?>();
  529. var result = values.Average();
  530. Assert.IsNull(result, "Empty <decimal?> source should return null for Average.");
  531. }
  532.  
  533. [Test]
  534. public void AvgNullableDecimalAllNullsSourceTest()
  535. {
  536. var values = new decimal?[]{null,null,null};
  537. var result = values.Average();
  538. Assert.IsNull(result, "All Null <decimal?> source should return null for Average.");
  539. }
  540.  
  541. /* Extract from Sequence.cs May 2006 CTP
  542. public static decimal? Average<T>(this IEnumerable<T> source, Func<T, decimal?> selector) {
  543. return Sequence.Average(Sequence.Select(source, selector));
  544. }
  545. */
  546. [Test]
  547. public void AvgNullableDecimalWithSelectorTest()
  548. {
  549. decimal?[] values = new decimal?[] { 5M,4M,null,3M,null,2M,1M,null,6M,7M,8M,9M,0M };
  550. decimal? result = values.Average(i => i + 1);
  551. Assert.AreEqual(5.5, result, "<decimal?> Average extension method with Selector not returning correct avg.");
  552. }
  553. #endregion <decimal?> Average
  554.  
  555. }
  556. }



If you would like to comment on this page, click on the Discuss button located on the top-right of each page. Feel free to edit any mistakes or omissions you find. If you have an objection or find in-appropriate content then contact the administrator. This website is not affiliated with Microsoft®, all content and opinions are those of the specific author and some advice, solutions and article may contain unintentional errors - please use care. Powered by ScrewTurn Wiki version 2.0.33. Some of the icons created by FamFamFam.