PageRenderTime 46ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/ToMigrate/Raven.Tests/Utils/DynamicListTests.cs

https://github.com/georgiosd/ravendb
C# | 775 lines | 617 code | 153 blank | 5 comment | 12 complexity | f9a7dc5de60cd55445de2b035a511991 MD5 | raw file
Possible License(s): BSD-3-Clause, CC-BY-SA-3.0, GPL-3.0, MPL-2.0-no-copyleft-exception, LGPL-2.1
  1. // -----------------------------------------------------------------------
  2. // <copyright file="DynamicListTests.cs" company="Hibernating Rhinos LTD">
  3. // Copyright (c) Hibernating Rhinos LTD. All rights reserved.
  4. // </copyright>
  5. // -----------------------------------------------------------------------
  6. using System;
  7. using System.Collections;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Reflection;
  11. using System.Runtime.CompilerServices;
  12. using Raven.Abstractions.Linq;
  13. using Raven.Json.Linq;
  14. using Raven.Tests.Common;
  15. using Xunit;
  16. namespace Raven.Tests.Utils
  17. {
  18. public class DynamicListTests : RavenTest
  19. {
  20. [Fact]
  21. public void needs_to_have_all_public_generic_extension_methods_of_enumerable_class()
  22. {
  23. var enumerableMethods = typeof(Enumerable).GetMethods(BindingFlags.Public | BindingFlags.Static).Where(x => x.IsGenericMethod && x.IsDefined(typeof(ExtensionAttribute), false));
  24. var dynamicListMethods = typeof(DynamicList).GetMethods(BindingFlags.Public | BindingFlags.Instance);
  25. var exceptFor = new[]
  26. {
  27. "Count", // DynamicList has Count property, so it cannot have a method with the same name
  28. "ThenBy", // applies to IOrderedEnumerable
  29. "ThenByDescending", // applies to IOrderedEnumerable
  30. };
  31. var enumerableMethodsNames = enumerableMethods.Select(x => x.Name).Except(exceptFor).Distinct().ToList();
  32. var dynamicListMethodsNames = dynamicListMethods.Select(x => x.Name).Distinct().ToList();
  33. foreach (var enumerableMethod in enumerableMethodsNames)
  34. {
  35. Assert.Contains(enumerableMethod, dynamicListMethodsNames);
  36. }
  37. }
  38. [Fact]
  39. public void sum_min_max_avg_with_integers()
  40. {
  41. var sut = CreateDynamicList(new[]
  42. {
  43. 1, 2, 3
  44. });
  45. Assert.Equal(6, sut.Sum(x => x));
  46. Assert.Equal(1, sut.Min(x => x));
  47. Assert.Equal(3, sut.Max(x => x));
  48. Assert.Equal(2, sut.Average(x => x));
  49. }
  50. [Fact]
  51. public void sum_min_max_avg_with_nullable_integers()
  52. {
  53. var sut = CreateDynamicList(new int?[]
  54. {
  55. null, 1, 2, 3
  56. });
  57. Assert.Equal(6, sut.Sum(x => (int?)x));
  58. Assert.Equal(1, sut.Min(x => (int?)x));
  59. Assert.Equal(3, sut.Max(x => (int?)x));
  60. Assert.Equal(2, sut.Average(x => (int?)x));
  61. }
  62. [Fact]
  63. public void sum_min_max_avg_with_longs()
  64. {
  65. var sut = CreateDynamicList(new[]
  66. {
  67. 1L, 2L, 3L
  68. });
  69. Assert.Equal(6L, sut.Sum(x => (long)x));
  70. Assert.Equal(1L, sut.Min(x => (long)x));
  71. Assert.Equal(3L, sut.Max(x => (long)x));
  72. Assert.Equal(2L, sut.Average(x => (long)x));
  73. }
  74. [Fact]
  75. public void sum_min_max_avg_with_nulable_longs()
  76. {
  77. var sut = CreateDynamicList(new long?[]
  78. {
  79. null, 1L, 2L, 3L
  80. });
  81. Assert.Equal(6L, sut.Sum(x => (long?)x));
  82. Assert.Equal(1L, sut.Min(x => (long?)x));
  83. Assert.Equal(3L, sut.Max(x => (long?)x));
  84. Assert.Equal(2L, sut.Average(x => (long?)x));
  85. }
  86. [Fact]
  87. public void sum_min_max_avg_with_floats()
  88. {
  89. var sut = CreateDynamicList(new[]
  90. {
  91. 1.1f, 2.2f, 3.3f
  92. });
  93. Assert.Equal(6.6f, sut.Sum(x => (float)x));
  94. Assert.Equal(1.1f, sut.Min(x => (float)x));
  95. Assert.Equal(3.3f, sut.Max(x => (float)x));
  96. Assert.Equal(2.2f, sut.Average(x => (float)x));
  97. }
  98. [Fact]
  99. public void sum_min_max_avg_with_nullable_floats()
  100. {
  101. var sut = CreateDynamicList(new float?[]
  102. {
  103. null, 1.1f, 2.2f, 3.3f
  104. });
  105. Assert.Equal(6.6f, sut.Sum(x => (float?)x));
  106. Assert.Equal(1.1f, sut.Min(x => (float?)x));
  107. Assert.Equal(3.3f, sut.Max(x => (float?)x));
  108. Assert.Equal(2.2f, sut.Average(x => (float?)x));
  109. }
  110. [Fact]
  111. public void sum_min_max_avg_with_doubles()
  112. {
  113. var sut = CreateDynamicList(new[]
  114. {
  115. 1.1, 2.2, 3.3
  116. });
  117. Assert.Equal(6.6, sut.Sum(x => (double)x));
  118. Assert.Equal(1.1, sut.Min(x => (double)x));
  119. Assert.Equal(3.3, sut.Max(x => (double)x));
  120. Assert.Equal(2.2, sut.Average(x => (double)x), 2);
  121. }
  122. [Fact]
  123. public void sum_min_max_avg_with_nullable_doubles()
  124. {
  125. var sut = CreateDynamicList(new double?[]
  126. {
  127. 1.1, null, 2.2, 3.3
  128. });
  129. Assert.Equal(6.6, sut.Sum(x => (double?)x));
  130. Assert.Equal(1.1, sut.Min(x => (double?)x));
  131. Assert.Equal(3.3, sut.Max(x => (double?)x));
  132. Assert.Equal(2.2, sut.Average(x => (double?)x).Value, 2);
  133. }
  134. [Fact]
  135. public void min_and_max_return_object_when_no_selector_given()
  136. {
  137. var fixtures = CreateSequentialFixtures(3);
  138. var sut = CreateDynamicList(fixtures);
  139. var result = sut.Min();
  140. Assert.IsType<Fixture>(result);
  141. Assert.Same(fixtures.Min(), result);
  142. result = sut.Max();
  143. Assert.IsType<Fixture>(result);
  144. Assert.Same(fixtures.Max(), result);
  145. }
  146. [Fact]
  147. public void min_and_max_can_transform_value_and_return_results_of_tranformation_type()
  148. {
  149. var fixtures = CreateSequentialFixtures(3);
  150. var sut = CreateDynamicList(fixtures);
  151. Assert.Equal(fixtures.Min(x => (x.Value + 3) / 2), sut.Min(x => (x.Value + 3) / 2));
  152. Assert.Equal(fixtures.Max(x => (x.Value + 3) / 2), sut.Max(x => (x.Value + 3) / 2));
  153. }
  154. [Fact]
  155. public void min_and_max_return_dynamic_nullable_for_null_values()
  156. {
  157. var sut = CreateDynamicList(new int?[] { null, null });
  158. Assert.IsType<DynamicNullObject>(sut.Min());
  159. Assert.IsType<DynamicNullObject>(sut.Max());
  160. Assert.IsType<DynamicNullObject>(sut.Min(x => (int?)x));
  161. Assert.IsType<DynamicNullObject>(sut.Max(x => (int?)x));
  162. }
  163. [Fact]
  164. public void average_on_objects()
  165. {
  166. var fixtures = CreateSequentialFixtures(3);
  167. var sut = CreateDynamicList(fixtures);
  168. Assert.Equal(fixtures.Average(x => x.Value), sut.Average(x => x.Value));
  169. }
  170. [Fact]
  171. public void except_on_value_types()
  172. {
  173. var items = new List<int>
  174. {
  175. 1, 2, 3, 4, 5
  176. };
  177. var sut = CreateDynamicList(items);
  178. var result = sut.Except(new dynamic[]{1, 4}).ToList();
  179. Assert.Equal(3, result.Count());
  180. Assert.DoesNotContain(1, result);
  181. Assert.DoesNotContain(4, result);
  182. }
  183. [Fact]
  184. public void except_on_objects()
  185. {
  186. var fixtures = CreateSequentialFixtures(3);
  187. var sut = CreateDynamicList(fixtures);
  188. var result = sut.Except(new dynamic[] { fixtures[0] }).ToList();
  189. Assert.Equal(2, result.Count());
  190. Assert.DoesNotContain(fixtures[0], result);
  191. Assert.Contains(fixtures[1], result);
  192. Assert.Contains(fixtures[2], result);
  193. }
  194. [Fact]
  195. public void reverse_returns_inverted_items()
  196. {
  197. var fixtures = CreateSequentialFixtures(3);
  198. var sut = CreateDynamicList(fixtures);
  199. Assert.Equal(sut.Reverse(), (fixtures as IEnumerable<Fixture>).Reverse());
  200. }
  201. [Fact]
  202. public void sequence_equal()
  203. {
  204. var fixtures = CreateSequentialFixtures(3);
  205. var sut = CreateDynamicList(fixtures);
  206. Assert.True(sut.SequenceEqual(fixtures));
  207. Assert.False(sut.SequenceEqual(new []{fixtures[2], fixtures[0], fixtures[1]}));
  208. Assert.Equal(sut.SequenceEqual(sut), fixtures.SequenceEqual(fixtures));
  209. Assert.Equal(sut.SequenceEqual(new[] { fixtures[2], fixtures[0], fixtures[1] }), fixtures.SequenceEqual(new[] { fixtures[2], fixtures[0], fixtures[1] }));
  210. }
  211. [Fact]
  212. public void as_enumerable_returns_the_same_instance()
  213. {
  214. var fixtures = CreateSequentialFixtures(3);
  215. var sut = CreateDynamicList(fixtures);
  216. Assert.Same(sut.AsEnumerable(), sut);
  217. Assert.Same(fixtures.AsEnumerable(), fixtures);
  218. }
  219. [Fact]
  220. public void to_array()
  221. {
  222. var fixtures = CreateSequentialFixtures(3);
  223. var sut = CreateDynamicList(fixtures);
  224. var result = sut.ToArray();
  225. Assert.Equal(3, result.Length);
  226. Assert.Equal(fixtures, result);
  227. }
  228. [Fact]
  229. public void to_list()
  230. {
  231. var fixtures = CreateSequentialFixtures(3);
  232. var sut = CreateDynamicList(fixtures);
  233. var result = sut.ToList();
  234. Assert.Equal(3, result.Count);
  235. Assert.Equal(fixtures, result);
  236. }
  237. [Fact]
  238. public void to_dictionary()
  239. {
  240. var fixtures = CreateSequentialFixtures(3);
  241. var sut = CreateDynamicList(fixtures);
  242. var result = sut.ToDictionary(x => x.Id);
  243. var expected = fixtures.ToDictionary(x => x.Id);
  244. Assert.Equal(expected.Keys, result.Keys);
  245. Assert.Equal(expected.Values, result.Values);
  246. }
  247. [Fact]
  248. public void to_dictionary_with_selected_elements()
  249. {
  250. var fixtures = CreateSequentialFixtures(3);
  251. var sut = CreateDynamicList(fixtures);
  252. var result = sut.ToDictionary(x => x.Id, x => x.Value);
  253. var expected = fixtures.ToDictionary(x => x.Id, x => x.Value);
  254. Assert.Equal(expected.Keys, result.Keys);
  255. Assert.Equal(expected.Values.Count, result.Values.Count);
  256. foreach (var value in expected.Values)
  257. {
  258. Assert.Contains(value, result.Values);
  259. }
  260. }
  261. [Fact]
  262. public void to_lookup()
  263. {
  264. var fixtures = CreateSequentialFixtures(3);
  265. fixtures.Add(new Fixture
  266. {
  267. Id = "items/3",
  268. Value = 0
  269. });
  270. var sut = CreateDynamicList(fixtures);
  271. var result = sut.ToLookup(x => x.Value);
  272. var expected = fixtures.ToLookup(x => x.Value);
  273. Assert.Equal(result.Count, expected.Count);
  274. for (int i = 0; i < result.Count; i++)
  275. {
  276. Assert.Equal(result[i].Count(), expected[i].Count());
  277. for (int j = 0; j < result[i].Count(); j++)
  278. {
  279. Assert.Same(result[i].ToList()[j], expected[i].ToList()[j]);
  280. }
  281. }
  282. }
  283. [Fact]
  284. public void to_lookup_with_selected_elements()
  285. {
  286. var fixtures = CreateSequentialFixtures(3);
  287. fixtures.Add(new Fixture
  288. {
  289. Id = "items/3",
  290. Value = 0
  291. });
  292. var sut = CreateDynamicList(fixtures);
  293. var result = sut.ToLookup(x => x.Value, x => x.Id);
  294. var expected = fixtures.ToLookup(x => x.Value, x => x.Id);
  295. Assert.Equal(result.Count, expected.Count);
  296. for (int i = 0; i < result.Count; i++)
  297. {
  298. Assert.Equal(result[i].Count(), expected[i].Count());
  299. for (int j = 0; j < result[i].Count(); j++)
  300. {
  301. Assert.Same(result[i].ToList()[j], expected[i].ToList()[j]);
  302. }
  303. }
  304. }
  305. [Fact]
  306. public void of_type()
  307. {
  308. var fixtures = new ArrayList();
  309. fixtures.Add(new RavenJObject());
  310. fixtures.AddRange(CreateSequentialFixtures(3));
  311. fixtures.Add(new RavenJObject());
  312. var sut = CreateDynamicList(fixtures);
  313. Assert.Equal(fixtures.OfType<Fixture>().ToList(), sut.OfType<Fixture>().ToList());
  314. Assert.Equal(fixtures.OfType<RavenJObject>().ToList().Count, sut.OfType<RavenJObject>().ToList().Count);
  315. }
  316. [Fact]
  317. public void iterate_over_ravenjobjects()
  318. {
  319. var dList = new DynamicList(new[]
  320. {
  321. new RavenJObject(), new RavenJObject()
  322. });
  323. Assert.Equal(2, dList.Count);
  324. var count = 0;
  325. foreach (var item in dList)
  326. {
  327. count++;
  328. Assert.IsType<DynamicJsonObject>(item);
  329. }
  330. Assert.Equal(2, count);
  331. }
  332. [Fact]
  333. public void iterate_over_ravenjarrayss()
  334. {
  335. var dList = new DynamicList(new []
  336. {
  337. new RavenJArray(), new RavenJArray()
  338. });
  339. Assert.Equal(2, dList.Count);
  340. var count = 0;
  341. foreach (var item in dList)
  342. {
  343. count++;
  344. Assert.IsType<DynamicList>(item);
  345. }
  346. Assert.Equal(2, count);
  347. }
  348. [Fact]
  349. public void cast_on_objects()
  350. {
  351. var fixtures = new List<object>(CreateSequentialFixtures(3));
  352. var sut = CreateDynamicList(fixtures);
  353. Assert.Equal(fixtures.Cast<Fixture>(), sut.Cast<Fixture>());
  354. }
  355. [Fact]
  356. public void element_at()
  357. {
  358. var fixtures = CreateSequentialFixtures(3);
  359. var sut = CreateDynamicList(fixtures);
  360. Assert.Same(fixtures.ElementAt(0), sut.ElementAt(0));
  361. Assert.Same(fixtures.ElementAt(1), sut.ElementAt(1));
  362. Assert.Same(fixtures.ElementAt(2), sut.ElementAt(2));
  363. }
  364. [Fact]
  365. public void element_at_or_default_returns_dynamic_null_when_index_is_out_of_range()
  366. {
  367. var sut = CreateDynamicList(new List<object>());
  368. Assert.IsType<DynamicNullObject>(sut.ElementAtOrDefault(100));
  369. }
  370. [Fact]
  371. public void long_count()
  372. {
  373. var fixtures = CreateSequentialFixtures(3);
  374. var sut = CreateDynamicList(fixtures);
  375. Assert.Equal(fixtures.LongCount(), sut.LongCount());
  376. }
  377. [Fact]
  378. public void aggregate_items()
  379. {
  380. var fixtures = CreateSequentialFixtures(3);
  381. var sut = CreateDynamicList(fixtures);
  382. var result = sut.Aggregate((current, next) => new Fixture
  383. {
  384. Id = current.Id + ";" + next.Id,
  385. Value = current.Value + next.Value
  386. });
  387. var expected = fixtures.Aggregate((current, next) => new Fixture
  388. {
  389. Id = current.Id + ";" + next.Id,
  390. Value = current.Value + next.Value
  391. });
  392. Assert.Equal(expected.Value, result.Value);
  393. Assert.Equal(expected.Id, result.Id);
  394. }
  395. [Fact]
  396. public void aggregate_with_seed()
  397. {
  398. var fixtures = CreateSequentialFixtures(3);
  399. var sut = CreateDynamicList(fixtures);
  400. var result = sut.Aggregate(new Fixture
  401. {
  402. Id = "aggregate_of:",
  403. Value = 0
  404. }, (current, next) => new Fixture
  405. {
  406. Id = current.Id + next.Id + ";",
  407. Value = current.Value + next.Value
  408. });
  409. var expected = fixtures.Aggregate(new Fixture
  410. {
  411. Id = "aggregate_of:",
  412. Value = 0
  413. }, (current, next) => new Fixture
  414. {
  415. Id = current.Id + next.Id + ";",
  416. Value = current.Value + next.Value
  417. });
  418. Assert.Equal(expected.Value, result.Value);
  419. Assert.Equal(expected.Id, result.Id);
  420. }
  421. [Fact]
  422. public void aggregate_with_seed_and_result_selector()
  423. {
  424. var fixtures = CreateSequentialFixtures(3);
  425. var sut = CreateDynamicList(fixtures);
  426. var result = sut.Aggregate(new Fixture
  427. {
  428. Id = "aggregate_of:",
  429. Value = 0
  430. }, (current, next) => new Fixture
  431. {
  432. Id = current.Id + next.Id + ";",
  433. Value = current.Value + next.Value
  434. },
  435. x => x.Id);
  436. var expected = fixtures.Aggregate(new Fixture
  437. {
  438. Id = "aggregate_of:",
  439. Value = 0
  440. }, (current, next) => new Fixture
  441. {
  442. Id = current.Id + next.Id + ";",
  443. Value = current.Value + next.Value
  444. },
  445. x => x.Id);
  446. Assert.Equal(expected, result);
  447. }
  448. [Fact]
  449. public void take_while()
  450. {
  451. var fixtures = CreateSequentialFixtures(3);
  452. var sut = CreateDynamicList(fixtures);
  453. Assert.Equal(fixtures.TakeWhile(x => x.Value < 2), sut.TakeWhile(x => x.Value < 2));
  454. Assert.Equal(fixtures.TakeWhile((x, i) => i == 3), sut.TakeWhile((x, i) => i == 3));
  455. }
  456. [Fact]
  457. public void skip_while()
  458. {
  459. var fixtures = CreateSequentialFixtures(3);
  460. var sut = CreateDynamicList(fixtures);
  461. Assert.Equal(fixtures.SkipWhile(x => x.Value < 2), sut.SkipWhile(x => x.Value < 2));
  462. Assert.Equal(fixtures.SkipWhile((x, i) => i < 2), sut.SkipWhile((x, i) => i < 2));
  463. }
  464. [Fact]
  465. public void join_lists()
  466. {
  467. var values = new[] { 0, 2 };
  468. var fixtures = CreateSequentialFixtures(3);
  469. var sut = CreateDynamicList(values);
  470. var expected = values.Join(fixtures, x => x, x => x.Value, (x, i) => new
  471. {
  472. JoinValue = x,
  473. Identifier = i.Id
  474. }).ToList();
  475. var result = sut.Join(fixtures, x => x, x => x.Value, (x, i) => new
  476. {
  477. JoinValue = x,
  478. Identifier = i.Id
  479. }).ToList();
  480. Assert.Equal(expected.Count(), result.Count());
  481. for (int i = 0; i < expected.Count; i++)
  482. {
  483. Assert.Equal(expected[i].Identifier, result[i].Identifier);
  484. Assert.Equal(expected[i].JoinValue, result[i].JoinValue);
  485. }
  486. }
  487. [Fact]
  488. public void group_join()
  489. {
  490. var values = new[] { 0, 2 };
  491. var fixtures = CreateSequentialFixtures(3);
  492. var sut = CreateDynamicList(values);
  493. var expected = values.GroupJoin(fixtures, x => x, x => x.Value, (x, i) => new
  494. {
  495. JoinValue = x,
  496. Fixtures = i.Select(f => f.Id)
  497. }).ToList();
  498. var result = sut.GroupJoin(fixtures, x => x, x => x.Value, (x, i) => new
  499. {
  500. JoinValue = x,
  501. Fixtures = i.Select(f => f.Id)
  502. }).ToList();
  503. Assert.Equal(expected.Count(), result.Count());
  504. for (int i = 0; i < expected.Count; i++)
  505. {
  506. Assert.Equal(expected[i].Fixtures, result[i].Fixtures);
  507. Assert.Equal(expected[i].JoinValue, result[i].JoinValue);
  508. }
  509. }
  510. [Fact]
  511. public void concat_can_get_items_of_different_type()
  512. {
  513. var fixtures = CreateSequentialFixtures(1);
  514. var sut = CreateDynamicList(fixtures);
  515. var result = sut.Concat(new []
  516. {
  517. 1
  518. }).ToList();
  519. Assert.Equal(2, result.Count);
  520. Assert.IsType<int>(result[1]);
  521. result = sut.Concat(new dynamic[]
  522. {
  523. "2", new object()
  524. }).ToList();
  525. Assert.Equal(3, result.Count);
  526. Assert.IsType<string>(result[1]);
  527. Assert.IsType<object>(result[2]);
  528. }
  529. [Fact]
  530. public void zip_items()
  531. {
  532. var fixtures = CreateSequentialFixtures(3);
  533. var values = new[] { 99, 100 };
  534. var sut = CreateDynamicList(fixtures);
  535. var expected = fixtures.Zip(values, (f, v) => f.Id + " " + v);
  536. var result = sut.Zip(values, (f, v) => f.Id + " " + v);
  537. Assert.Equal(expected, result);
  538. }
  539. [Fact]
  540. public void union_items()
  541. {
  542. var fixtures1 = CreateSequentialFixtures(3);
  543. var fixtures2 = CreateSequentialFixtures(3);
  544. var sut = CreateDynamicList(fixtures1);
  545. Assert.Equal(fixtures1.Union(fixtures2), sut.Union(fixtures2));
  546. Assert.Equal(5, sut.Union(new []{1, 3.0}).Count());
  547. }
  548. [Fact]
  549. public void intersect_lists()
  550. {
  551. var fixtures1 = CreateSequentialFixtures(3);
  552. var fixtures2 = new[]
  553. {
  554. fixtures1[1]
  555. };
  556. var sut = CreateDynamicList(fixtures1);
  557. Assert.Equal(fixtures1.Intersect(fixtures2), sut.Intersect(fixtures2));
  558. }
  559. [Fact]
  560. public void predicates_and_selectors_works_with_raven_j_objects_inside()
  561. {
  562. var sut = CreateDynamicList(new[]
  563. {
  564. new RavenJObject
  565. {
  566. { "Id", 1},
  567. { "Age", 21 }
  568. },
  569. new RavenJObject
  570. {
  571. { "Id", 2},
  572. { "Age", 32 }
  573. },
  574. new RavenJObject
  575. {
  576. { "Id", 3},
  577. { "Age", 24 }
  578. }
  579. });
  580. Assert.Equal(3, sut.ToDictionary(x => x.Id, x => x.Age).Count);
  581. Assert.Equal(3, sut.ToLookup(x => x.Id, x => x.Age).Count);
  582. Assert.Equal("1;2;3;", sut.Aggregate(new {Id = 0, Value = 0}, (current, next) => new
  583. {
  584. Id = current.Id + next.Id + ";"
  585. }, x => x.Id));
  586. Assert.Equal(1, sut.TakeWhile(x => x.Age < 25).Count());
  587. Assert.Equal(2, sut.SkipWhile(x => x.Age < 25).Count());
  588. Assert.Equal(1, sut.Join(new []{new {Id = 1}}, x => x.Id, x => x.Id, (x, y) => x.Id + y.Id).Count());
  589. Assert.Equal(3, sut.GroupJoin(new[] { new { Id = 1 } }, x => x.Id, x => x.Id, (x, y) => "item" + x + " " + y).Count());
  590. Assert.Equal(1, sut.Zip(new[] { new { Id = 1 } }, (f, v) => f.Id + " " + v).Count());
  591. }
  592. private static DynamicList CreateDynamicList(IEnumerable items)
  593. {
  594. return new DynamicList(items);
  595. }
  596. private static List<Fixture> CreateSequentialFixtures(int numberOfRequestedItems)
  597. {
  598. var list = new List<Fixture>();
  599. for (int i = 0; i < numberOfRequestedItems; i++)
  600. {
  601. list.Add(new Fixture
  602. {
  603. Id = "items/" + i,
  604. Value = i
  605. });
  606. }
  607. return list;
  608. }
  609. public class Fixture : IComparable
  610. {
  611. public string Id;
  612. public int Value;
  613. public int CompareTo(object obj)
  614. {
  615. var fixture = obj as Fixture;
  616. if (fixture != null)
  617. return Value.CompareTo(fixture.Value);
  618. return -1;
  619. }
  620. }
  621. }
  622. }