@@ -38,6 +38,9 @@ TestTArrayUtils = class(TTestCase)
3838 // TestReverse must come after TestEqual since the test calls TArrayUtils.Equal<T>
3939 procedure TestReverse ;
4040 procedure TestSameStart ;
41+ procedure TestMax ;
42+ procedure TestMin ;
43+ procedure TestMinMax ;
4144 end ;
4245
4346 TestArraysCatSnippets = class (TTestCase)
@@ -55,6 +58,8 @@ implementation
5558var
5659 IntegerCompareFn: TEqualityComparison<Integer>;
5760 StringCompareFn: TEqualityComparison<string>;
61+ IntegerComparisonFn: TComparison<Integer>;
62+ StringComparisonFn: TComparison<string>;
5863
5964{ TestTArrayUtils }
6065
@@ -167,6 +172,72 @@ procedure TestTArrayUtils.TestLast;
167172 CheckEquals(37 , TArrayUtils.Last<Integer>(fIAN), ' Test 6' );
168173end ;
169174
175+ procedure TestTArrayUtils.TestMax ;
176+ begin
177+ CheckEquals(42 , TArrayUtils.Max<Integer>(fIA1, IntegerComparisonFn), ' Test 1' );
178+ CheckEquals(56 , TArrayUtils.Max<Integer>(fIA2, IntegerComparisonFn), ' Test 2' );
179+ CheckEquals(102 , TArrayUtils.Max<Integer>(fIA3, IntegerComparisonFn), ' Test 3' );
180+ CheckEquals(37 , TArrayUtils.Max<Integer>(fIAY, IntegerComparisonFn), ' Test 4' );
181+ CheckEquals(37 , TArrayUtils.Max<Integer>(fIAR, IntegerComparisonFn), ' Test 5' );
182+ CheckEquals(' foo' , TArrayUtils.Max<string>(fSA1, StringComparisonFn), ' Test 6' );
183+ CheckEquals(' foo' , TArrayUtils.Max<string>(fSA2, StringComparisonFn), ' Test 7' );
184+ CheckEquals(' foo' , TArrayUtils.Max<string>(fSA2R, StringComparisonFn), ' Test 8' );
185+ CheckEquals(' time' , TArrayUtils.Max<string>(fSAM, StringComparisonFn), ' Test 9' );
186+ CheckEquals(' time' , TArrayUtils.Max<string>(fSAR, StringComparisonFn), ' Test 10' );
187+ end ;
188+
189+ procedure TestTArrayUtils.TestMin ;
190+ begin
191+ CheckEquals(42 , TArrayUtils.Min<Integer>(fIA1, IntegerComparisonFn), ' Test 1' );
192+ CheckEquals(42 , TArrayUtils.Min<Integer>(fIA2, IntegerComparisonFn), ' Test 2' );
193+ CheckEquals(42 , TArrayUtils.Min<Integer>(fIA3, IntegerComparisonFn), ' Test 3' );
194+ CheckEquals(0 , TArrayUtils.Min<Integer>(fIAY, IntegerComparisonFn), ' Test 4' );
195+ CheckEquals(1 , TArrayUtils.Min<Integer>(fIAR, IntegerComparisonFn), ' Test 5' );
196+ CheckEquals(' foo' , TArrayUtils.Min<string>(fSA1, StringComparisonFn), ' Test 6' );
197+ CheckEquals(' bar' , TArrayUtils.Min<string>(fSA2, StringComparisonFn), ' Test 7' );
198+ CheckEquals(' bar' , TArrayUtils.Min<string>(fSA2R, StringComparisonFn), ' Test 8' );
199+ CheckEquals(' a' , TArrayUtils.Min<string>(fSAM, StringComparisonFn), ' Test 9' );
200+ CheckEquals(' a' , TArrayUtils.Min<string>(fSAR, StringComparisonFn), ' Test 10' );
201+
202+ end ;
203+
204+ procedure TestTArrayUtils.TestMinMax ;
205+ var
206+ MinInt, MaxInt: Integer;
207+ MinStr, MaxStr: string;
208+ begin
209+ TArrayUtils.MinMax<Integer>(fIA1, IntegerComparisonFn, MinInt, MaxInt);
210+ CheckEquals(42 , MinInt, ' Test 1 min' );
211+ CheckEquals(42 , MaxInt, ' Test 1 max' );
212+ TArrayUtils.MinMax<Integer>(fIA2, IntegerComparisonFn, MinInt, MaxInt);
213+ CheckEquals(42 , MinInt, ' Test 2 min' );
214+ CheckEquals(56 , MaxInt, ' Test 2 max' );
215+ TArrayUtils.MinMax<Integer>(fIA3, IntegerComparisonFn, MinInt, MaxInt);
216+ CheckEquals(42 , MinInt, ' Test 3 min' );
217+ CheckEquals(102 , MaxInt, ' Test 3 max' );
218+ TArrayUtils.MinMax<Integer>(fIAY, IntegerComparisonFn, MinInt, MaxInt);
219+ CheckEquals(0 , MinInt, ' Test 4 min' );
220+ CheckEquals(37 , MaxInt, ' Test 4 max' );
221+ TArrayUtils.MinMax<Integer>(fIAR, IntegerComparisonFn, MinInt, MaxInt);
222+ CheckEquals(1 , MinInt, ' Test 5 min' );
223+ CheckEquals(37 , MaxInt, ' Test 5 max' );
224+ TArrayUtils.MinMax<string>(fSA1, StringComparisonFn, MinStr, MaxStr);
225+ CheckEquals(' foo' , MinStr, ' Test 6 min' );
226+ CheckEquals(' foo' , MaxStr, ' Test 6 max' );
227+ TArrayUtils.MinMax<string>(fSA2, StringComparisonFn, MinStr, MaxStr);
228+ CheckEquals(' bar' , MinStr, ' Test 7 min' );
229+ CheckEquals(' foo' , MaxStr, ' Test 7 max' );
230+ TArrayUtils.MinMax<string>(fSA2R, StringComparisonFn, MinStr, MaxStr);
231+ CheckEquals(' bar' , MinStr, ' Test 8 min' );
232+ CheckEquals(' foo' , MaxStr, ' Test 8 max' );
233+ TArrayUtils.MinMax<string>(fSAM, StringComparisonFn, MinStr, MaxStr);
234+ CheckEquals(' a' , MinStr, ' Test 9 min' );
235+ CheckEquals(' time' , MaxStr, ' Test 9 max' );
236+ TArrayUtils.MinMax<string>(fSAR, StringComparisonFn, MinStr, MaxStr);
237+ CheckEquals(' a' , MinStr, ' Test 10 min' );
238+ CheckEquals(' time' , MaxStr, ' Test 10 max' );
239+ end ;
240+
170241procedure TestTArrayUtils.TestReverse ;
171242var
172243 RS: TArray<string>;
@@ -304,6 +375,17 @@ initialization
304375 Result := SameStr(Left, Right);
305376 end ;
306377
378+ IntegerComparisonFn := function (const Left, Right: Integer): Integer
379+ begin
380+ Result := Left - Right;
381+ end ;
382+
383+ StringComparisonFn := function (const Left, Right: string): Integer
384+ begin
385+ Result := CompareStr(Left, Right);
386+ end ;
387+
388+
307389 // Register any test cases with the test runner
308390RegisterTest(TestTArrayUtils.Suite);
309391RegisterTest(TestArraysCatSnippets.Suite);
0 commit comments