1
1
unit TestUArraysCatSnippets;
2
2
3
- { $UNDEF Generics}
4
- { $IFNDEF FPC}
5
- { $IFDEF CONDITIONALEXPRESSIONS}
6
- { $IF CompilerVersion >= 14.00}
7
- { $WARN SYMBOL_PLATFORM OFF}
8
- { $WARN SYMBOL_DEPRECATED OFF}
9
- { $WARN SYMBOL_LIBRARY OFF}
10
- { $IFEND}
11
- { $IF CompilerVersion >= 15.00}
12
- { $WARN UNSAFE_TYPE OFF}
13
- { $WARN UNSAFE_CAST OFF}
14
- { $WARN UNSAFE_CODE OFF}
15
- { $IFEND}
16
- { $IF CompilerVersion >= 20.00}
17
- { $WARN EXPLICIT_STRING_CAST OFF}
18
- { $WARN IMPLICIT_STRING_CAST OFF}
19
- { $DEFINE Generics}
20
- { $IFEND}
21
- { $ENDIF}
22
- { $ENDIF}
23
-
24
3
interface
25
4
26
5
uses
27
6
TestFramework, UArraysCatSnippets;
28
7
29
8
type
30
9
31
- { $IFDEF Generics}
32
10
TestTArrayUtils = class (TTestCase)
33
11
strict private
34
12
fSA0: TArray<string>;
35
13
fSA1: TArray<string>;
36
14
fSA2: TArray<string>;
15
+ fSA2R: TArray<string>;
37
16
fSAM: TArray<string>;
38
17
fSAN: TArray<string>;
18
+ fSAR: TArray<string>;
39
19
fIA0: TArray<Integer>;
40
20
fIA1: TArray<Integer>;
41
21
fIA2: TArray<Integer>;
22
+ fIA3: TArray<Integer>;
23
+ fIA3R: TArray<Integer>;
42
24
fIAM: TArray<Integer>;
43
25
fIAN: TArray<Integer>;
44
26
fIAP: TArray<Integer>;
27
+ fIAR: TArray<Integer>;
45
28
fIAX: TArray<Integer>;
46
29
fIAY: TArray<Integer>;
47
30
protected
@@ -52,30 +35,26 @@ TestTArrayUtils = class(TTestCase)
52
35
procedure TestLast ;
53
36
procedure TestIndexOf ;
54
37
procedure TestEqual ;
38
+ // TestReverse must come after TestEqual since the test calls TArrayUtils.Equal<T>
39
+ procedure TestReverse ;
55
40
procedure TestSameStart ;
56
41
end ;
57
- { $ENDIF Generics}
58
42
59
43
TestArraysCatSnippets = class (TTestCase)
60
-
44
+ published
45
+ procedure TestByteArraysEqual ;
46
+ // The following test must come after TestByteArraysEqual since the test calls it
47
+ procedure TestReverseByteArray ;
61
48
end ;
62
49
63
50
implementation
64
51
65
52
uses
66
- SysUtils
67
- { $IFDEF Generics}
68
- , Generics.Defaults
69
- { $ENDIF Generics}
70
- ;
53
+ SysUtils, Generics.Defaults;
71
54
72
- { $IFDEF Generics}
73
55
var
74
56
IntegerCompareFn: TEqualityComparison<Integer>;
75
57
StringCompareFn: TEqualityComparison<string>;
76
- { $ENDIF Generics}
77
-
78
- { $IFDEF Generics}
79
58
80
59
{ TestTArrayUtils }
81
60
@@ -84,13 +63,18 @@ procedure TestTArrayUtils.SetUp;
84
63
fSA0 := TArray<string>.Create();
85
64
fSA1 := TArray<string>.Create(' foo' );
86
65
fSA2 := TArray<string>.Create(' foo' , ' bar' );
66
+ fSA2R := TArray<string>.Create(' bar' , ' foo' );
87
67
fSAM := TArray<string>.Create(' a' , ' stitch' , ' in' , ' time' , ' saves' , ' nine' );
88
68
fSAN := TArray<string>.Create(' a' , ' stitch' , ' in' , ' time' , ' saves' , ' nine' );
69
+ fSAR := TArray<string>.Create(' nine' , ' saves' , ' time' , ' in' , ' stitch' , ' a' );
89
70
fIA0 := TArray<Integer>.Create();
90
71
fIA1 := TArray<Integer>.Create(42 );
91
72
fIA2 := TArray<Integer>.Create(42 , 56 );
73
+ fIA3 := TArray<Integer>.Create(56 , 42 , 102 );
74
+ fIA3R := TArray<Integer>.Create(102 , 42 , 56 );
92
75
fIAM := TArray<Integer>.Create(1 , 2 , 3 , 5 , 7 , 11 , 13 , 17 , 19 , 23 , 29 , 31 , 37 );
93
76
fIAN := TArray<Integer>.Create(1 , 2 , 3 , 5 , 7 , 11 , 13 , 17 , 19 , 23 , 29 , 31 , 37 );
77
+ fIAR := TArray<Integer>.Create(37 , 31 , 29 , 23 , 19 , 17 , 13 , 11 , 7 , 5 , 3 , 2 , 1 );
94
78
fIAP := TArray<Integer>.Create(1 , 2 , 3 , 5 , 7 , 11 , 13 , 17 , 19 , 23 , 29 );
95
79
fIAX := TArray<Integer>.Create(1 , 2 , 3 , 5 , 4 , 11 , 13 , 17 , 19 , 23 , 29 , 31 );
96
80
fIAY := TArray<Integer>.Create(0 , 2 , 3 , 5 , 7 , 11 , 13 , 17 , 19 , 23 , 29 , 31 , 37 );
@@ -183,6 +167,25 @@ procedure TestTArrayUtils.TestLast;
183
167
CheckEquals(37 , TArrayUtils.Last<Integer>(fIAN), ' Test 6' );
184
168
end ;
185
169
170
+ procedure TestTArrayUtils.TestReverse ;
171
+ var
172
+ RS: TArray<string>;
173
+ RI: TArray<Integer>;
174
+ begin
175
+ RS := TArrayUtils.Reverse<string>(fSAM);
176
+ CheckTrue(TArrayUtils.Equal<string>(fSAR, RS, StringCompareFn), ' Test 1' );
177
+ RI := TArrayUtils.Reverse<Integer>(fIAM);
178
+ CheckTrue(TArrayUtils.Equal<Integer>(fIAR, RI, IntegerCompareFn), ' Test 2' );
179
+ RS := TArrayUtils.Reverse<string>(fSA2);
180
+ CheckTrue(TArrayUtils.Equal<string>(fSA2R, RS, StringCompareFn), ' Test 3' );
181
+ RI := TArrayUtils.Reverse<Integer>(fIA0);
182
+ CheckTrue(TArrayUtils.Equal<Integer>(fIA0, RI, IntegerCompareFn), ' Test 4' );
183
+ RI := TArrayUtils.Reverse<Integer>(fIA1);
184
+ CheckTrue(TArrayUtils.Equal<Integer>(fIA1, RI, IntegerCompareFn), ' Test 5' );
185
+ RI := TArrayUtils.Reverse<Integer>(fIA3);
186
+ CheckTrue(TArrayUtils.Equal<Integer>(fIA3R, RI, IntegerCompareFn), ' Test 6' );
187
+ end ;
188
+
186
189
procedure TestTArrayUtils.TestSameStart ;
187
190
begin
188
191
CheckTrue(
@@ -229,11 +232,67 @@ procedure TestTArrayUtils.TestSameStart;
229
232
);
230
233
end ;
231
234
232
- { $ENDIF Generics }
235
+ { TestArraysCatSnippets }
233
236
234
- initialization
237
+ procedure TestArraysCatSnippets.TestByteArraysEqual ;
238
+ var
239
+ A0L, A0R: TBytes;
240
+ A1L, A1Req, A1Rneq: TBytes;
241
+ ANL, ANReq, ANRneq1, ANRneq2, ANRneq3, ANRneq4: TBytes;
242
+ AMR: TBytes;
243
+ begin
244
+ SetLength(A0L, 0 );
245
+ SetLength(A0R, 0 );
246
+ A1L := TBytes.Create(42 );
247
+ A1Req := TBytes.Create(42 );
248
+ A1Rneq := TBytes.Create(56 );
249
+ ANL := TBytes.Create(27 ,98 ,128 ,46 ,35 ,0 ,1 );
250
+ ANReq := TBytes.Create(27 ,98 ,128 ,46 ,35 ,0 ,1 );
251
+ ANRneq1 := TBytes.Create(27 ,98 ,128 ,46 ,35 ,0 ,7 );
252
+ ANRneq2 := TBytes.Create(26 ,98 ,128 ,46 ,35 ,0 ,1 );
253
+ ANRneq3 := TBytes.Create(27 ,98 ,67 ,46 ,35 ,0 ,1 );
254
+ ANRneq4 := TBytes.Create(27 ,17 ,67 ,46 ,35 ,12 ,1 );
255
+ AMR := TBytes.Create(27 ,98 ,128 ,35 ,0 ,1 );
235
256
236
- { $IFDEF Generics}
257
+ CheckTrue(ByteArraysEqual(A0L, A0R), ' #1' );
258
+ CheckTrue(ByteArraysEqual(A1L, A1Req), ' #2' );
259
+ CheckFalse(ByteArraysEqual(A1L, A1Rneq), ' #3' );
260
+ CheckTrue(ByteArraysEqual(ANL, ANReq), ' #4' );
261
+ CheckFalse(ByteArraysEqual(A1L, ANRneq1), ' #5' );
262
+ CheckFalse(ByteArraysEqual(A1L, ANRneq2), ' #6' );
263
+ CheckFalse(ByteArraysEqual(A1L, ANRneq3), ' #7' );
264
+ CheckFalse(ByteArraysEqual(A1L, ANRneq4), ' #8' );
265
+ CheckFalse(ByteArraysEqual(A1L, AMR), ' #9' );
266
+ CheckFalse(ByteArraysEqual(A0L, A1L), ' #10' );
267
+ end ;
268
+
269
+ procedure TestArraysCatSnippets.TestReverseByteArray ;
270
+ var
271
+ A0, A1, A2, A6, A7, A4Sym, A5Sym: TBytes;
272
+ R0, R1, R2, R6, R7: TBytes;
273
+ begin
274
+ SetLength(A0, 0 );
275
+ SetLength(R0, 0 );
276
+ A1 := TBytes.Create(42 );
277
+ R1 := TBytes.Create(42 );
278
+ A2 := TBytes.Create(42 ,56 );
279
+ R2 := TBytes.Create(56 ,42 );
280
+ A6 := TBytes.Create(1 , 1 , 2 , 3 , 5 , 8 );
281
+ R6 := TBytes.Create(8 , 5 , 3 , 2 , 1 , 1 );
282
+ A7 := TBytes.Create(0 , 1 , 1 , 2 , 3 , 5 , 8 );
283
+ R7 := TBytes.Create(8 , 5 , 3 , 2 , 1 , 1 , 0 );
284
+ A4Sym := TBytes.Create(3 , 5 , 5 , 3 );
285
+ A5Sym := TBytes.Create(3 , 5 , 8 , 5 , 3 );
286
+ CheckTrue(ByteArraysEqual(R0, ReverseByteArray(A0)), ' #0' );
287
+ CheckTrue(ByteArraysEqual(R1, ReverseByteArray(A1)), ' #1' );
288
+ CheckTrue(ByteArraysEqual(R2, ReverseByteArray(A2)), ' #2' );
289
+ CheckTrue(ByteArraysEqual(R6, ReverseByteArray(A6)), ' #6' );
290
+ CheckTrue(ByteArraysEqual(R7, ReverseByteArray(A7)), ' #7' );
291
+ CheckTrue(ByteArraysEqual(A4Sym, ReverseByteArray(A4Sym)), ' #4 sym' );
292
+ CheckTrue(ByteArraysEqual(A5Sym, ReverseByteArray(A5Sym)), ' #5 sym' );
293
+ end ;
294
+
295
+ initialization
237
296
238
297
IntegerCompareFn := function (const Left, Right: Integer): Boolean
239
298
begin
@@ -245,12 +304,8 @@ initialization
245
304
Result := SameStr(Left, Right);
246
305
end ;
247
306
248
- { $ENDIF Generics}
249
-
250
307
// Register any test cases with the test runner
251
- { $IFDEF Generics}
252
308
RegisterTest(TestTArrayUtils.Suite);
253
- { $ENDIF Generics}
254
309
RegisterTest(TestArraysCatSnippets.Suite);
255
310
256
311
end .
0 commit comments