PageRenderTime 52ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/UnitTests/ExtensionMethods/List_EM_UnitTests.cs

http://github.com/fredericaltorres/DynamicSugarNet
C# | 560 lines | 459 code | 97 blank | 4 comment | 16 complexity | d33e0c0f6bfad52bc6b40951395a28ec MD5 | raw file
  1. using System;
  2. using System.Text;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using Microsoft.VisualStudio.TestTools.UnitTesting;
  6. using DynamicSugar;
  7. using System.Dynamic;
  8. namespace DynamicSugarSharp_UnitTests {
  9. //TODO:Try extension method to List<T>
  10. [TestClass]
  11. public class List_EM_UnitTests {
  12. [TestMethod]
  13. public void ProjectEuler_Problem1() {
  14. var r = DS.Range(10)
  15. .Filter(x => ((x % 3 == 0) || (x % 5 == 0)))
  16. .Inject((x, v) => v += x);
  17. Assert.AreEqual(23, r);
  18. var r2 = DS.Range(10).AsQueryable()
  19. .Where(x => ((x % 3 == 0) || (x % 5 == 0)))
  20. .Aggregate((x, v) => x + v);
  21. Assert.AreEqual(23, r2);
  22. var r3 = (from xx in DS.Range(10).AsQueryable()
  23. where ((xx % 3 == 0) || (xx % 5 == 0))
  24. select xx).Aggregate((x, v) => x + v);
  25. Assert.AreEqual(23, r3);
  26. }
  27. [TestMethod]
  28. public void Range_3() {
  29. var i = 0;
  30. foreach (var r in DS.Range(3)) {
  31. Assert.AreEqual(i, r);
  32. i++;
  33. }
  34. }
  35. [TestMethod]
  36. public void Range_103() {
  37. var i = 0;
  38. foreach (var r in DS.Range(103)) {
  39. Assert.AreEqual(i, r);
  40. i++;
  41. }
  42. }
  43. [TestMethod]
  44. public void Range_100_Step2() {
  45. var i = 0;
  46. foreach (var r in DS.Range(100, 2)) {
  47. Assert.AreEqual(i, r);
  48. i += 2;
  49. }
  50. }
  51. [TestMethod]
  52. public void Range_100_Start10_Step10() {
  53. DS.Assert.AreEqual(
  54. DS.List(10,20,30,40,50,60,70,80,90),
  55. DS.Range(10,100,10)
  56. );
  57. }
  58. [TestMethod]
  59. public void List_OfDifferentTypes() {
  60. var l = DS.List<object>(1, "a", 3.0);
  61. Assert.AreEqual(1 , l[0]);
  62. Assert.AreEqual("a", l[1]);
  63. Assert.AreEqual(3.0, l[2]);
  64. }
  65. [TestMethod]
  66. public void IsEmpty() {
  67. //Assert.IsTrue(DS.List<int>().IsEmpty());
  68. Assert.IsFalse(DS.List(1, 2, 3).IsEmpty());
  69. }
  70. [TestMethod]
  71. public void IsNullOrEmpty() {
  72. List<int> nullList = null;
  73. Assert.IsTrue(nullList.IsNullOrEmpty());
  74. //Assert.IsTrue(DS.List<int>().IsNullOrEmpty());
  75. Assert.IsFalse(DS.List(1, 2, 3).IsNullOrEmpty());
  76. }
  77. [TestMethod]
  78. public void Array_Integer() {
  79. var l = DS.Array(1, 2, 3);
  80. Assert.AreEqual(1, l[0]);
  81. Assert.AreEqual(2, l[1]);
  82. Assert.AreEqual(3, l[2]);
  83. }
  84. [TestMethod]
  85. public void Queue_Integer() {
  86. var l = DS.Queue(1, 2, 3);
  87. Assert.AreEqual(1, l.Dequeue());
  88. Assert.AreEqual(2, l.Dequeue());
  89. Assert.AreEqual(3, l.Dequeue());
  90. }
  91. [TestMethod]
  92. public void Stack_Integer() {
  93. var l = DS.Stack(1, 2, 3);
  94. Assert.AreEqual(3, l.Pop());
  95. Assert.AreEqual(2, l.Pop());
  96. Assert.AreEqual(1, l.Pop());
  97. }
  98. [TestMethod]
  99. public void List_Integer() {
  100. var l = DS.List(1, 2, 3);
  101. Assert.AreEqual(1, l[0]);
  102. Assert.AreEqual(2, l[1]);
  103. Assert.AreEqual(3, l[2]);
  104. }
  105. [TestMethod]
  106. public void List_String() {
  107. var l = DS.List("1", "2", "3");
  108. Assert.AreEqual("1", l[0]);
  109. Assert.AreEqual("2", l[1]);
  110. Assert.AreEqual("3", l[2]);
  111. }
  112. [TestMethod]
  113. public void Identical_String() {
  114. Assert.IsTrue(DS.ListHelper.Identical(DS.List("1"), DS.List("1")));
  115. Assert.IsTrue(DS.ListHelper.Identical(DS.List("1", "2", "3"), DS.List("1", "2", "3")));
  116. Assert.IsTrue(DS.ListHelper.Identical(DS.List("1", "2", "3", null), DS.List("1", "2", "3", null)));
  117. Assert.IsFalse(DS.ListHelper.Identical(DS.List("1", "2", "3"), DS.List("1", "2", "4")));
  118. Assert.IsFalse(DS.ListHelper.Identical(DS.List("1", "2", "3"), DS.List("1", "2", "3", "4")));
  119. Assert.IsTrue(DS.List("1", "2", "3").Identical(DS.List("1", "2", "3")));
  120. }
  121. [TestMethod]
  122. public void Identical_Double() {
  123. Assert.IsTrue(DS.ListHelper.Identical(DS.List(1.1, 2.2, 3.3), DS.List(1.1, 2.2, 3.3)));
  124. Assert.IsFalse(DS.ListHelper.Identical(DS.List(1.1, 2.2, 3.3), DS.List(1.1, 2.2, 3.4)));
  125. Assert.IsTrue(DS.List(1.1, 2.2, 3.3).Identical(DS.List(1.1, 2.2, 3.3)));
  126. }
  127. [TestMethod]
  128. public void Map_WithLambdaExpression() {
  129. DS.Assert.AreEqual(
  130. DS.List(1, 4, 9),
  131. DS.List(1, 2, 3).Map(e => e * e)
  132. );
  133. }
  134. [TestMethod]
  135. public void Map_WithLambdaExpression_WithLocalVariable() {
  136. int MyConst = 2;
  137. DS.Assert.AreEqual(
  138. DS.List(2, 4, 6),
  139. DS.List(1, 2, 3).Map(e => e * MyConst)
  140. );
  141. }
  142. [TestMethod]
  143. public void Map_WithBlockStatment() {
  144. DS.Assert.AreEqual(
  145. DS.List(2, 4, 6),
  146. DS.List(1, 2, 3).Map(e => { return e * 2; })
  147. );
  148. }
  149. [TestMethod]
  150. public void Map_WithLambdaExpression_String() {
  151. string MyConst = "Hi ";
  152. DS.Assert.AreEqual(
  153. DS.List("Hi fred", "Hi joe", "Hi diane"),
  154. DS.List("fred", "joe", "diane").Map(e => MyConst + e)
  155. );
  156. }
  157. [TestMethod]
  158. public void Format_Integer() {
  159. Assert.AreEqual("1, 2, 3", DS.List(1, 2, 3).Format());
  160. }
  161. [TestMethod]
  162. public void Format_Boolean() {
  163. Assert.AreEqual("True, False, True", DS.ListHelper.Format(DS.List(true, false, true)));
  164. }
  165. [TestMethod]
  166. public void Filter() {
  167. DS.Assert.AreEqual(
  168. DS.List(0, 2, 4, 6, 8),
  169. DS.List(0, 1, 2, 3, 4, 5, 6, 7, 8, 9).Filter( e => e % 2 == 0)
  170. );
  171. }
  172. [TestMethod]
  173. public void Reject() {
  174. DS.Assert.AreEqual(
  175. DS.List(1,3,5,7,9),
  176. DS.Range(10).Reject( e => e % 2 == 0)
  177. );
  178. }
  179. [TestMethod]
  180. public void Select_StandardNET() {
  181. var l = DS.List(0, 1, 2, 3, 4, 5, 6, 7, 8, 9).Select(e => e % 2 == 0).ToList();
  182. var r = DS.List(true, false, true, false, true, false, true, false, true, false);
  183. DS.Assert.AreEqual(r, l);
  184. }
  185. [TestMethod]
  186. public void Filter_Decimal() {
  187. DS.Assert.AreEqual(
  188. DS.List(0M, 2M, 4M, 6M, 8M),
  189. DS.List(0M, 1M, 2M, 3M, 4M, 5M, 6M, 7M, 8M, 9M).Filter(e => e % 2 == 0)
  190. );
  191. }
  192. [TestMethod]
  193. public void Inject() {
  194. Assert.AreEqual(10, DS.ListHelper.Inject(DS.List(1, 2, 3, 4), (v, e) => v += e));
  195. Assert.AreEqual(10, DS.List(1, 2, 3, 4).Inject((v, e) => v += e));
  196. Assert.AreEqual(10, DS.List(1, 2, 3, 4).Aggregate((v, e) => v += e));
  197. var s = DS.List("1", "2", "3", "4").Aggregate(
  198. (v, e) =>
  199. v += e
  200. );
  201. Assert.AreEqual("1234", s);
  202. }
  203. [TestMethod]
  204. public void Reduce() {
  205. Assert.AreEqual(10, DS.List(1, 2, 3, 4).Reduce((v, e) => v += e));
  206. }
  207. [TestMethod]
  208. public void ForEach_StandardNet() {
  209. int z = 0;
  210. DS.List(0, 1, 2, 3).ForEach(
  211. i => { z += i; }
  212. );
  213. Assert.AreEqual(6, z);
  214. }
  215. [TestMethod]
  216. public void Clone_EmptyList() {
  217. var l = new List<int>();
  218. DS.Assert.AreEqual(l, DS.ListHelper.Clone(l));
  219. }
  220. [TestMethod]
  221. public void Clone() {
  222. var refList = DS.List(1,2,3,4);
  223. DS.Assert.AreEqual(refList, refList.Clone());
  224. }
  225. [TestMethod]
  226. public void Intersection() {
  227. var l1 = DS.List(1, 2, 3, 4);
  228. var l2 = DS.List(3, 4, 5, 6);
  229. var inter = DS.List(3, 4);
  230. DS.Assert.AreEqual(inter, l1.Intersection(l2));
  231. DS.Assert.AreEqual(inter, l1.Intersect(l2).ToList());
  232. }
  233. [TestMethod]
  234. public void Add() {
  235. var l1 = DS.List(1, 2, 3);
  236. var l2 = DS.List(3, 4, 5);
  237. var sum = DS.List(1, 2, 3, 3, 4, 5);
  238. DS.Assert.AreEqual(sum, DS.ListHelper.Add(l1, l2));
  239. }
  240. [TestMethod]
  241. public void Add_EmptyList() {
  242. var l1 = DS.List(1, 2, 3);
  243. var l2 = new List<int>();
  244. var sum = DS.List(1, 2, 3);
  245. DS.Assert.AreEqual(sum, DS.ListHelper.Add(l1, l2));
  246. }
  247. [TestMethod]
  248. public void Add_2EmptyList() {
  249. var l1 = new List<int>();
  250. var l2 = new List<int>();
  251. var sum = new List<int>();
  252. DS.Assert.AreEqual(sum, DS.ListHelper.Add(l1, l2));
  253. }
  254. [TestMethod]
  255. public void Substract() {
  256. var l1 = DS.List(1, 2, 3);
  257. var l2 = DS.List(3, 4, 5);
  258. var sum = DS.List(1, 2);
  259. DS.Assert.AreEqual(sum, DS.ListHelper.Substract(l1, l2));
  260. DS.Assert.AreEqual(sum, l1.Substract(l2));
  261. }
  262. [TestMethod]
  263. public void Substract_String() {
  264. var l1 = DS.List("1", "2", "3");
  265. var l2 = DS.List("3", "4", "5");
  266. var sum = DS.List("1", "2");
  267. DS.Assert.AreEqual(sum, DS.ListHelper.Substract(l1, l2));
  268. DS.Assert.AreEqual(sum, l1.Substract(l2));
  269. }
  270. [TestMethod]
  271. public void Merge_Int() {
  272. DS.Assert.AreEqual(
  273. DS.List(1, 2, 3, 4, 5),
  274. DS.ListHelper.Merge(
  275. DS.List(1, 2, 3),
  276. DS.List(3, 4, 5)
  277. )
  278. );
  279. }
  280. [TestMethod]
  281. public void Merge_Unique() {
  282. DS.Assert.AreEqual(
  283. DS.List(1, 2, 3, 4, 5),
  284. DS.List(1, 2, 3, 4).Merge(DS.List(4, 4, 5), true)
  285. );
  286. }
  287. [TestMethod]
  288. public void Merge_NonUnique() {
  289. DS.Assert.AreEqual(
  290. DS.List(1, 2, 3, 4, 4, 4, 5),
  291. DS.ListHelper.Merge(
  292. DS.List(1, 2, 3, 4),
  293. DS.List(4, 4, 5), false
  294. )
  295. );
  296. }
  297. [TestMethod]
  298. public void Rest_Int() {
  299. DS.Assert.AreEqual(
  300. DS.List(2,3,4,5),
  301. DS.List(1,2,3,4,5).Rest()
  302. );
  303. }
  304. [TestMethod]
  305. public void First_Int() {
  306. Assert.AreEqual(1, DS.List(1, 2, 3, 4, 5).First());
  307. }
  308. [TestMethod]
  309. public void First_String() {
  310. Assert.AreEqual("1", DS.List("1", "2").First());
  311. }
  312. [TestMethod]
  313. public void Last_Int() {
  314. Assert.AreEqual(5, DS.List(1, 2, 3, 4, 5).Last());
  315. }
  316. [TestMethod]
  317. public void Last_String() {
  318. Assert.AreEqual("2", DS.List("1", "2").Last());
  319. }
  320. [TestMethod]
  321. public void Find_LINQ_Standard() {
  322. Assert.AreEqual(5, DS.List(1, 2, 3, 4, 5).Find(e => e == 5));
  323. }
  324. [TestMethod]
  325. public void Find_Instance_LINQ_Standard() {
  326. var people = GetPeopleList();
  327. var firstOld = people.Find(e => e.Age >= 40);
  328. Assert.IsTrue(firstOld.LastName == "Montesquieu");
  329. }
  330. public static List<Person> GetPeopleList() {
  331. var people = DS.List(
  332. new Person() { LastName = "Descartes", FirstName = "Rene", Age = 20 },
  333. new Person() { LastName = "Montesquieu", FirstName = "Gerard", Age = 40 },
  334. new Person() { LastName = "Rousseau", FirstName = "JJ", Age = 60 }
  335. );
  336. return people;
  337. }
  338. [TestMethod]
  339. public void Distinct_LINQ_Standard() {
  340. DS.Assert.AreEqual(
  341. DS.List(1, 2, 3, 4, 5),
  342. DS.List(1, 2, 3, 4, 5, 1, 2, 3).Distinct().ToList()
  343. );
  344. }
  345. [TestMethod]
  346. public void Pluck_Instance_Property_Integer() {
  347. var people = GetPeopleList();
  348. DS.Assert.AreEqual(
  349. DS.List(20, 40, 60),
  350. people.Pluck<int, Person>("Age")
  351. );
  352. }
  353. [TestMethod]
  354. public void Pluck_Instance_Property() {
  355. var people = GetPeopleList();
  356. DS.Assert.AreEqual(
  357. DS.List("Descartes", "Montesquieu", "Rousseau"),
  358. people.Pluck<string, Person>("LastName")
  359. );
  360. }
  361. [TestMethod]
  362. public void Pluck_Instance_Function() {
  363. var people = GetPeopleList();
  364. DS.Assert.AreEqual(
  365. DS.List("#Descartes.Rene.0001", "#Montesquieu.Gerard.0001", "#Rousseau.JJ.0001"),
  366. people.Pluck<string, Person>("GetUniqueID()")
  367. );
  368. }
  369. [TestMethod]
  370. public void Max_LINQ_Standard() {
  371. Assert.AreEqual(5, DS.List(1, 2, 3, 4, 5).Max());
  372. var v = DS.List("aa", "a", "aaa").Max();
  373. Assert.AreEqual("aaa", v);
  374. }
  375. [TestMethod]
  376. public void Min_LINQ_Standard() {
  377. Assert.AreEqual(1, DS.List(1, 2, 3, 4, 5).Min());
  378. var v = DS.List("aa", "a", "aaa").Min();
  379. Assert.AreEqual("a", v);
  380. }
  381. [TestMethod]
  382. public void IndexOf_LINQ_Standard() {
  383. var l = DS.List("a", "b", "c");
  384. Assert.AreEqual(1, l.IndexOf(l[1]));
  385. Assert.AreEqual(-1, l.IndexOf("z"));
  386. }
  387. [TestMethod]
  388. public void All_LINQ_Standard() {
  389. var l = DS.List(1, 2, 3, 4, 5);
  390. Assert.IsTrue(l.All( e => e < 10));
  391. Assert.IsFalse(l.All(e => e > 1));
  392. }
  393. [TestMethod]
  394. public void Any_LINQ_Standard() {
  395. var l = DS.List(1, 2, 3, 4, 5);
  396. Assert.IsTrue(l.Any( e => e>=5));
  397. Assert.IsFalse(l.All(e => e>=6));
  398. }
  399. [TestMethod]
  400. public void Include_OneValue() {
  401. Assert.IsTrue ( DS.Range(10).Include(5) );
  402. Assert.IsFalse( DS.Range(10).Include(11) );
  403. }
  404. [TestMethod]
  405. public void Include_Values() {
  406. Assert.IsTrue( DS.Range(10).Include(DS.List(1, 2, 3, 4, 5)));
  407. Assert.IsTrue( DS.Range(10).Include(1, 2, 3, 4, 5));
  408. }
  409. [TestMethod]
  410. public void Sort() {
  411. var l = DS.List(3,2,4,6,5,1);
  412. l.Sort();
  413. DS.Assert.AreEqual(
  414. DS.List(1,2,3,4,5,6),
  415. l
  416. );
  417. }
  418. [TestMethod]
  419. public void Without() {
  420. var l = DS.Range(10);
  421. DS.Assert.AreEqual(
  422. DS.List(0,1,2,3,4,5),
  423. l.Without(DS.List(6,7,8,9))
  424. );
  425. }
  426. [TestMethod]
  427. public void In() {
  428. var l = DS.Range(5);
  429. int i = 1;
  430. Assert.IsTrue(i.In(l));
  431. Assert.IsTrue(i.In(1,2,3,4,5));
  432. i = 11;
  433. Assert.IsFalse(i.In(l));
  434. Assert.IsFalse(i.In(1,2,3,4,5));
  435. }
  436. //[TestMethod]
  437. public void expando() {
  438. dynamic o = new ExpandoObject();
  439. o.LastName = "TORRES";
  440. o["a"] = 1;
  441. var i = o.a;
  442. var s = o.LastName;
  443. }
  444. [TestMethod]
  445. public void ToFile_FromFile() {
  446. var l = DS.Range(10);
  447. var fileName = String.Format( @"{0}\DSSharpLibrary_UnitTests.txt", Environment.GetEnvironmentVariable("TEMP") );
  448. DeleteFile(fileName);
  449. l.ToFile(fileName, true);
  450. Assert.IsTrue(System.IO.File.Exists(fileName));
  451. var expected = new List<string>();
  452. foreach(var i in l) expected.Add(i.ToString());
  453. var l1 = DS.ListHelper.FromFile<string>(fileName);
  454. DS.Assert.AreEqual(expected, l1);
  455. var l2 = DS.ListHelper.FromFile<int>(fileName);
  456. DS.Assert.AreEqual(l, l2);
  457. }
  458. private static void DeleteFile(string fileName) {
  459. if (System.IO.File.Exists(fileName))
  460. System.IO.File.Delete(fileName);
  461. }
  462. }
  463. }