Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.

651 righe
22 KiB

  1. unit uutlEnumeratorTests;
  2. {$mode objfpc}{$H+}
  3. {$IFDEF UTL_NESTED_PROCVARS}
  4. {$modeswitch nestedprocvars}
  5. {$ENDIF}
  6. interface
  7. uses
  8. Classes, SysUtils, TestFramework,
  9. uutlEnumerator, uutlInterfaces, uutlGenerics;
  10. type
  11. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  12. IIntEnumerator = specialize IutlEnumerator<Integer>;
  13. TutlEnumeratorTests = class(TTestCase)
  14. protected
  15. fEnumerator: IIntEnumerator;
  16. function GenerateOther(const aData: array of Integer): IIntEnumerator;
  17. procedure Generate(const aData: array of Integer); virtual; abstract;
  18. published
  19. // Procedure Names: ProcedureUnderTest_[Parameter]_EnumeratorItems_Result
  20. procedure Iterate_1to5_1to5;
  21. {$IFDEF UTL_ENUMERATORS}
  22. procedure Count_1to5_5;
  23. procedure Any_Empty_False;
  24. procedure Any_1to5_True;
  25. procedure Reverse_1to5_5to1;
  26. procedure Skip2_1to5_3to5;
  27. procedure Take3_1to5_1to3;
  28. procedure Skip5_Reverse_0to9_9to5;
  29. procedure Take5_Reverse_0to9_4to0;
  30. procedure Reverse_Skip5_0to9_4to0;
  31. procedure Reverse_Take5_0to9_9to5;
  32. procedure Contains3_1to5_true;
  33. procedure Contains9_1to5_false;
  34. procedure Concat6to8_1to5_1to8;
  35. {$IFDEF UTL_ADVANCED_ENUMERATORS}
  36. procedure Sort;
  37. procedure Where_IsEven;
  38. procedure Distinct;
  39. procedure Intersect;
  40. procedure Union;
  41. procedure Without;
  42. procedure Select;
  43. {$ENDIF}
  44. {$ENDIF}
  45. end;
  46. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  47. TutlArrayEnumeratorTests = class(TutlEnumeratorTests)
  48. protected
  49. procedure Generate(const aData: array of Integer); override;
  50. public
  51. procedure SetUp; override;
  52. end;
  53. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  54. TutlQueueEnumeratorTests = class(TutlEnumeratorTests)
  55. private type
  56. TIntQueue = specialize TutlQueue<Integer>;
  57. private
  58. fQueue: TIntQueue;
  59. protected
  60. procedure Generate(const aData: array of Integer); override;
  61. public
  62. procedure SetUp; override;
  63. procedure TearDown; override;
  64. end;
  65. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  66. TutlStackEnumeratorTests = class(TutlEnumeratorTests)
  67. private type
  68. TIntStack = specialize TutlStack<Integer>;
  69. private
  70. fStack: TIntStack;
  71. protected
  72. procedure Generate(const aData: array of Integer); override;
  73. public
  74. procedure SetUp; override;
  75. procedure TearDown; override;
  76. end;
  77. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  78. TutlListEnumeratorTests = class(TutlEnumeratorTests)
  79. private type
  80. TIntList = specialize TutlSimpleList<Integer>;
  81. private
  82. fList: TIntList;
  83. protected
  84. procedure Generate(const aData: array of Integer); override;
  85. public
  86. procedure SetUp; override;
  87. procedure TearDown; override;
  88. end;
  89. implementation
  90. {$IF DEFINED(UTL_ENUMERATORS) AND DEFINED(UTL_ADVANCED_ENUMERATORS)}
  91. uses
  92. uutlFilter, uutlComparer;
  93. {$ENDIF}
  94. type
  95. TIntArrayEnumerator = specialize TutlArrayEnumerator<Integer>;
  96. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  97. //TutlEnumeratorTests///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  98. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  99. function TutlEnumeratorTests.GenerateOther(const aData: array of Integer): IIntEnumerator;
  100. var
  101. i: Integer;
  102. arr: TIntArrayEnumerator.TArray;
  103. begin
  104. SetLength(arr, Length(aData));
  105. for i := low(aData) to high(aData) do
  106. arr[i] := aData[i];
  107. result := TIntArrayEnumerator.Create(arr);
  108. end;
  109. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  110. procedure TutlEnumeratorTests.Iterate_1to5_1to5;
  111. begin
  112. Generate([1, 2, 3, 4, 5]);
  113. fEnumerator.Reset;
  114. AssertTrue (fEnumerator.MoveNext);
  115. AssertEquals(1, fEnumerator.GetCurrent);
  116. AssertTrue (fEnumerator.MoveNext);
  117. AssertEquals(2, fEnumerator.GetCurrent);
  118. AssertTrue (fEnumerator.MoveNext);
  119. AssertEquals(3, fEnumerator.GetCurrent);
  120. AssertTrue (fEnumerator.MoveNext);
  121. AssertEquals(4, fEnumerator.GetCurrent);
  122. AssertTrue (fEnumerator.MoveNext);
  123. AssertEquals(5, fEnumerator.GetCurrent);
  124. AssertFalse (fEnumerator.MoveNext);
  125. end;
  126. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  127. {$IFDEF UTL_ENUMERATORS}
  128. procedure TutlEnumeratorTests.Count_1to5_5;
  129. var
  130. i: Integer;
  131. begin
  132. Generate([1, 2, 3, 4, 5]);
  133. i := fEnumerator.Count;
  134. AssertEquals(5, i);
  135. end;
  136. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  137. procedure TutlEnumeratorTests.Any_Empty_False;
  138. begin
  139. AssertFalse(fEnumerator.Any);
  140. end;
  141. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  142. procedure TutlEnumeratorTests.Any_1to5_True;
  143. begin
  144. Generate([1, 2, 3, 4, 5]);
  145. AssertTrue(fEnumerator.Any);
  146. end;
  147. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  148. procedure TutlEnumeratorTests.Reverse_1to5_5to1;
  149. var
  150. e: IIntEnumerator;
  151. begin
  152. e := fEnumerator.Reverse;
  153. Generate([1, 2, 3, 4, 5]);
  154. e.Reset;
  155. AssertTrue (e.MoveNext);
  156. AssertEquals(5, e.GetCurrent);
  157. AssertTrue (e.MoveNext);
  158. AssertEquals(4, e.GetCurrent);
  159. AssertTrue (e.MoveNext);
  160. AssertEquals(3, e.GetCurrent);
  161. AssertTrue (e.MoveNext);
  162. AssertEquals(2, e.GetCurrent);
  163. AssertTrue (e.MoveNext);
  164. AssertEquals(1, e.GetCurrent);
  165. AssertFalse (e.MoveNext);
  166. end;
  167. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  168. procedure TutlEnumeratorTests.Skip2_1to5_3to5;
  169. var
  170. e: IIntEnumerator;
  171. begin
  172. e := fEnumerator.Skip(2);
  173. Generate([1, 2, 3, 4, 5]);
  174. e.Reset;
  175. AssertTrue (e.MoveNext);
  176. AssertEquals(3, e.GetCurrent);
  177. AssertTrue (e.MoveNext);
  178. AssertEquals(4, e.GetCurrent);
  179. AssertTrue (e.MoveNext);
  180. AssertEquals(5, e.GetCurrent);
  181. AssertFalse (e.MoveNext);
  182. end;
  183. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  184. procedure TutlEnumeratorTests.Take3_1to5_1to3;
  185. var
  186. e: IIntEnumerator;
  187. begin
  188. e := fEnumerator.Take(3);
  189. Generate([1, 2, 3, 4, 5]);
  190. e.Reset;
  191. AssertTrue (e.MoveNext);
  192. AssertEquals(1, e.GetCurrent);
  193. AssertTrue (e.MoveNext);
  194. AssertEquals(2, e.GetCurrent);
  195. AssertTrue (e.MoveNext);
  196. AssertEquals(3, e.GetCurrent);
  197. AssertFalse (e.MoveNext);
  198. end;
  199. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  200. procedure TutlEnumeratorTests.Skip5_Reverse_0to9_9to5;
  201. var
  202. e: IIntEnumerator;
  203. begin
  204. e := fEnumerator.Skip(5).Reverse;
  205. Generate([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
  206. e.Reset;
  207. AssertTrue (e.MoveNext);
  208. AssertEquals(9, e.GetCurrent);
  209. AssertTrue (e.MoveNext);
  210. AssertEquals(8, e.GetCurrent);
  211. AssertTrue (e.MoveNext);
  212. AssertEquals(7, e.GetCurrent);
  213. AssertTrue (e.MoveNext);
  214. AssertEquals(6, e.GetCurrent);
  215. AssertTrue (e.MoveNext);
  216. AssertEquals(5, e.GetCurrent);
  217. AssertFalse (e.MoveNext);
  218. end;
  219. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  220. procedure TutlEnumeratorTests.Take5_Reverse_0to9_4to0;
  221. var
  222. e: IIntEnumerator;
  223. begin
  224. e := fEnumerator.Take(5).Reverse;
  225. Generate([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
  226. e.Reset;
  227. AssertTrue (e.MoveNext);
  228. AssertEquals(4, e.GetCurrent);
  229. AssertTrue (e.MoveNext);
  230. AssertEquals(3, e.GetCurrent);
  231. AssertTrue (e.MoveNext);
  232. AssertEquals(2, e.GetCurrent);
  233. AssertTrue (e.MoveNext);
  234. AssertEquals(1, e.GetCurrent);
  235. AssertTrue (e.MoveNext);
  236. AssertEquals(0, e.GetCurrent);
  237. AssertFalse (e.MoveNext);
  238. end;
  239. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  240. procedure TutlEnumeratorTests.Reverse_Skip5_0to9_4to0;
  241. var
  242. e: IIntEnumerator;
  243. begin
  244. e := fEnumerator.Reverse.Skip(5);
  245. Generate([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
  246. e.Reset;
  247. AssertTrue (e.MoveNext);
  248. AssertEquals(4, e.GetCurrent);
  249. AssertTrue (e.MoveNext);
  250. AssertEquals(3, e.GetCurrent);
  251. AssertTrue (e.MoveNext);
  252. AssertEquals(2, e.GetCurrent);
  253. AssertTrue (e.MoveNext);
  254. AssertEquals(1, e.GetCurrent);
  255. AssertTrue (e.MoveNext);
  256. AssertEquals(0, e.GetCurrent);
  257. AssertFalse (e.MoveNext);
  258. end;
  259. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  260. procedure TutlEnumeratorTests.Reverse_Take5_0to9_9to5;
  261. var
  262. e: IIntEnumerator;
  263. begin
  264. e := fEnumerator.Reverse.Take(5);
  265. Generate([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
  266. e.Reset;
  267. AssertTrue (e.MoveNext);
  268. AssertEquals(9, e.GetCurrent);
  269. AssertTrue (e.MoveNext);
  270. AssertEquals(8, e.GetCurrent);
  271. AssertTrue (e.MoveNext);
  272. AssertEquals(7, e.GetCurrent);
  273. AssertTrue (e.MoveNext);
  274. AssertEquals(6, e.GetCurrent);
  275. AssertTrue (e.MoveNext);
  276. AssertEquals(5, e.GetCurrent);
  277. AssertFalse (e.MoveNext);
  278. end;
  279. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  280. procedure TutlEnumeratorTests.Contains3_1to5_true;
  281. var
  282. b: Boolean;
  283. begin
  284. Generate([1, 2, 3, 4, 5]);
  285. b := fEnumerator.Contains(3, specialize TutlEqualityComparer<Integer>.Create);
  286. AssertTrue(b);
  287. end;
  288. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  289. procedure TutlEnumeratorTests.Contains9_1to5_false;
  290. var
  291. b: Boolean;
  292. begin
  293. Generate([1, 2, 3, 4, 5]);
  294. b := fEnumerator.Contains(9, specialize TutlEqualityComparer<Integer>.Create);
  295. AssertFalse(b);
  296. end;
  297. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  298. procedure TutlEnumeratorTests.Concat6to8_1to5_1to8;
  299. var
  300. e: IIntEnumerator;
  301. begin
  302. e := fEnumerator.Concat(GenerateOther([6, 7, 8]));
  303. Generate([1, 2, 3, 4, 5]);
  304. e.Reset;
  305. AssertTrue (e.MoveNext);
  306. AssertEquals(1, e.GetCurrent);
  307. AssertTrue (e.MoveNext);
  308. AssertEquals(2, e.GetCurrent);
  309. AssertTrue (e.MoveNext);
  310. AssertEquals(3, e.GetCurrent);
  311. AssertTrue (e.MoveNext);
  312. AssertEquals(4, e.GetCurrent);
  313. AssertTrue (e.MoveNext);
  314. AssertEquals(5, e.GetCurrent);
  315. AssertTrue (e.MoveNext);
  316. AssertEquals(6, e.GetCurrent);
  317. AssertTrue (e.MoveNext);
  318. AssertEquals(7, e.GetCurrent);
  319. AssertTrue (e.MoveNext);
  320. AssertEquals(8, e.GetCurrent);
  321. AssertFalse (e.MoveNext);
  322. end;
  323. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  324. {$IFDEF UTL_ADVANCED_ENUMERATORS}
  325. procedure TutlEnumeratorTests.Sort;
  326. var
  327. e: IIntEnumerator;
  328. begin
  329. e := fEnumerator.Sort(specialize TutlComparer<Integer>.Create);
  330. Generate([5, 8, 2, 6, 9, 4, 2, 6, 8, 4, 2, 5, 8, 4]);
  331. e.Reset;
  332. AssertTrue (e.MoveNext);
  333. AssertEquals(2, e.GetCurrent);
  334. AssertTrue (e.MoveNext);
  335. AssertEquals(2, e.GetCurrent);
  336. AssertTrue (e.MoveNext);
  337. AssertEquals(2, e.GetCurrent);
  338. AssertTrue (e.MoveNext);
  339. AssertEquals(4, e.GetCurrent);
  340. AssertTrue (e.MoveNext);
  341. AssertEquals(4, e.GetCurrent);
  342. AssertTrue (e.MoveNext);
  343. AssertEquals(4, e.GetCurrent);
  344. AssertTrue (e.MoveNext);
  345. AssertEquals(5, e.GetCurrent);
  346. AssertTrue (e.MoveNext);
  347. AssertEquals(5, e.GetCurrent);
  348. AssertTrue (e.MoveNext);
  349. AssertEquals(6, e.GetCurrent);
  350. AssertTrue (e.MoveNext);
  351. AssertEquals(6, e.GetCurrent);
  352. AssertTrue (e.MoveNext);
  353. AssertEquals(8, e.GetCurrent);
  354. AssertTrue (e.MoveNext);
  355. AssertEquals(8, e.GetCurrent);
  356. AssertTrue (e.MoveNext);
  357. AssertEquals(8, e.GetCurrent);
  358. AssertTrue (e.MoveNext);
  359. AssertEquals(9, e.GetCurrent);
  360. AssertFalse (e.MoveNext);
  361. end;
  362. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  363. function IsEven(constref i: Integer): Boolean;
  364. begin
  365. result := (i mod 2) = 0;
  366. end;
  367. procedure TutlEnumeratorTests.Where_IsEven;
  368. var
  369. e: IIntEnumerator;
  370. begin
  371. e := fEnumerator.Where(specialize TutlCallbackFilter<Integer>.Create(@IsEven));
  372. Generate([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
  373. e.Reset;
  374. AssertTrue (e.MoveNext);
  375. AssertEquals(0, e.GetCurrent);
  376. AssertTrue (e.MoveNext);
  377. AssertEquals(2, e.GetCurrent);
  378. AssertTrue (e.MoveNext);
  379. AssertEquals(4, e.GetCurrent);
  380. AssertTrue (e.MoveNext);
  381. AssertEquals(6, e.GetCurrent);
  382. AssertTrue (e.MoveNext);
  383. AssertEquals(8, e.GetCurrent);
  384. AssertFalse (e.MoveNext);
  385. end;
  386. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  387. procedure TutlEnumeratorTests.Distinct;
  388. var
  389. e: IIntEnumerator;
  390. begin
  391. e := fEnumerator.Distinct(specialize TutlComparer<Integer>.Create);
  392. Generate([1, 5, 2, 7, 1, 3, 7, 4, 5, 8]);
  393. e.Reset;
  394. AssertTrue (e.MoveNext);
  395. AssertEquals(1, e.Current);
  396. AssertTrue (e.MoveNext);
  397. AssertEquals(5, e.Current);
  398. AssertTrue (e.MoveNext);
  399. AssertEquals(2, e.Current);
  400. AssertTrue (e.MoveNext);
  401. AssertEquals(7, e.Current);
  402. AssertTrue (e.MoveNext);
  403. AssertEquals(3, e.Current);
  404. AssertTrue (e.MoveNext);
  405. AssertEquals(4, e.Current);
  406. AssertTrue (e.MoveNext);
  407. AssertEquals(8, e.Current);
  408. AssertFalse (e.MoveNext);
  409. end;
  410. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  411. procedure TutlEnumeratorTests.Intersect;
  412. var
  413. e: IIntEnumerator;
  414. begin
  415. e := fEnumerator
  416. .Intersect(GenerateOther([5, 6, 8]), specialize TutlComparer<Integer>.Create);
  417. Generate([1, 6, 4, 8, 2, 5]);
  418. e.Reset;
  419. AssertTrue (e.MoveNext);
  420. AssertEquals(6, e.Current);
  421. AssertTrue (e.MoveNext);
  422. AssertEquals(8, e.Current);
  423. AssertTrue (e.MoveNext);
  424. AssertEquals(5, e.Current);
  425. AssertFalse (e.MoveNext);
  426. end;
  427. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  428. procedure TutlEnumeratorTests.Union;
  429. var
  430. e: IIntEnumerator;
  431. begin
  432. e := fEnumerator
  433. .Union(GenerateOther([9, 3, 4, 6, 7]), specialize TutlComparer<Integer>.Create);
  434. Generate([1, 6, 4, 8, 2, 5]);
  435. e.Reset;
  436. AssertTrue (e.MoveNext);
  437. AssertEquals(1, e.Current);
  438. AssertTrue (e.MoveNext);
  439. AssertEquals(6, e.Current);
  440. AssertTrue (e.MoveNext);
  441. AssertEquals(4, e.Current);
  442. AssertTrue (e.MoveNext);
  443. AssertEquals(8, e.Current);
  444. AssertTrue (e.MoveNext);
  445. AssertEquals(2, e.Current);
  446. AssertTrue (e.MoveNext);
  447. AssertEquals(5, e.Current);
  448. AssertTrue (e.MoveNext);
  449. AssertEquals(9, e.Current);
  450. AssertTrue (e.MoveNext);
  451. AssertEquals(3, e.Current);
  452. AssertTrue (e.MoveNext);
  453. AssertEquals(7, e.Current);
  454. AssertFalse (e.MoveNext);
  455. end;
  456. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  457. procedure TutlEnumeratorTests.Without;
  458. var
  459. e: IIntEnumerator;
  460. begin
  461. e := fEnumerator
  462. .Without(GenerateOther([6, 8, 5]), specialize TutlComparer<Integer>.Create);
  463. Generate([1, 6, 4, 8, 2, 5]);
  464. e.Reset;
  465. AssertTrue (e.MoveNext);
  466. AssertEquals(1, e.Current);
  467. AssertTrue (e.MoveNext);
  468. AssertEquals(4, e.Current);
  469. AssertTrue (e.MoveNext);
  470. AssertEquals(2, e.Current);
  471. AssertFalse (e.MoveNext);
  472. end;
  473. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  474. function ConvertToFloat(constref a: Integer): Single;
  475. begin
  476. result := Single(a) / 2.0;
  477. end;
  478. procedure TutlEnumeratorTests.Select;
  479. var
  480. e: specialize IutlEnumerator<Single>;
  481. begin
  482. e := specialize TutlSelectEnumerator<Integer, Single>.Create(
  483. fEnumerator,
  484. specialize TutlCallbackSelector<Integer, Single>.Create(@ConvertToFloat));
  485. Generate([1, 2, 3, 4, 5]);
  486. e.Reset;
  487. AssertTrue (e.MoveNext);
  488. AssertEquals(0.5, e.Current);
  489. AssertTrue (e.MoveNext);
  490. AssertEquals(1.0, e.Current);
  491. AssertTrue (e.MoveNext);
  492. AssertEquals(1.5, e.Current);
  493. AssertTrue (e.MoveNext);
  494. AssertEquals(2.0, e.Current);
  495. AssertTrue (e.MoveNext);
  496. AssertEquals(2.5, e.Current);
  497. AssertFalse (e.MoveNext);
  498. end;
  499. {$ENDIF}
  500. {$ENDIF}
  501. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  502. //TutlArrayEnumeratorTests//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  503. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  504. procedure TutlArrayEnumeratorTests.Generate(const aData: array of Integer);
  505. var
  506. i: Integer;
  507. arr: TIntArrayEnumerator.TArray;
  508. begin
  509. SetLength(arr, Length(aData));
  510. for i := low(aData) to high(aData) do
  511. arr[i] := aData[i];
  512. (fEnumerator as TIntArrayEnumerator).Data := arr;
  513. end;
  514. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  515. procedure TutlArrayEnumeratorTests.SetUp;
  516. begin
  517. fEnumerator := TIntArrayEnumerator.Create;
  518. end;
  519. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  520. //TutlQueueEnumeratorTests//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  521. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  522. procedure TutlQueueEnumeratorTests.Generate(const aData: array of Integer);
  523. var
  524. i: Integer;
  525. begin
  526. fQueue.Clear;
  527. for i in aData do
  528. fQueue.Enqueue(i);
  529. end;
  530. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  531. procedure TutlQueueEnumeratorTests.SetUp;
  532. begin
  533. inherited SetUp;
  534. fQueue := TIntQueue.Create(true);
  535. fEnumerator := fQueue.GetUtlEnumerator;
  536. end;
  537. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  538. procedure TutlQueueEnumeratorTests.TearDown;
  539. begin
  540. FreeAndNil(fQueue);
  541. fEnumerator := nil;
  542. inherited TearDown;
  543. end;
  544. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  545. //TutlStackEnumeratorTests//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  546. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  547. procedure TutlStackEnumeratorTests.Generate(const aData: array of Integer);
  548. var
  549. i: Integer;
  550. begin
  551. fStack.Clear;
  552. for i in aData do
  553. fStack.Push(i);
  554. end;
  555. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  556. procedure TutlStackEnumeratorTests.SetUp;
  557. begin
  558. inherited SetUp;
  559. fStack := TIntStack.Create(true);
  560. fEnumerator := fStack.GetUtlEnumerator;
  561. end;
  562. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  563. procedure TutlStackEnumeratorTests.TearDown;
  564. begin
  565. fEnumerator := nil;
  566. FreeAndNil(fStack);
  567. inherited TearDown;
  568. end;
  569. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  570. //TutlListEnumeratorTests///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  571. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  572. procedure TutlListEnumeratorTests.Generate(const aData: array of Integer);
  573. var
  574. i: Integer;
  575. begin
  576. fList.Clear;
  577. for i in aData do
  578. fList.Add(i);
  579. end;
  580. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  581. procedure TutlListEnumeratorTests.SetUp;
  582. begin
  583. inherited SetUp;
  584. fList := TIntList.Create(true);
  585. fEnumerator := fList.GetUtlEnumerator;
  586. end;
  587. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  588. procedure TutlListEnumeratorTests.TearDown;
  589. begin
  590. fEnumerator := nil;
  591. FreeAndNil(fList);
  592. inherited TearDown;
  593. end;
  594. initialization
  595. RegisterTest(TutlArrayEnumeratorTests.Suite);
  596. RegisterTest(TutlQueueEnumeratorTests.Suite);
  597. RegisterTest(TutlStackEnumeratorTests.Suite);
  598. RegisterTest(TutlListEnumeratorTests.Suite);
  599. end.