@@ -43,6 +43,20 @@ TestMathsCatSnippets = class(TTestCase)
43
43
procedure TestPowNZN ;
44
44
procedure TestPowNZZ ;
45
45
procedure TestPowN ;
46
+ procedure TestArraySum_Single ;
47
+ procedure TestArraySum_Double ;
48
+ procedure TestArraySum_Extended ;
49
+ procedure TestArraySum_Integer ;
50
+ procedure TestArraySum_Int64 ;
51
+ procedure TestArraySum_Cardinal ;
52
+ procedure TestArraySum_UInt64 ;
53
+ procedure TestSumOfLogs_Single ;
54
+ procedure TestSumOfLogs_Double ;
55
+ procedure TestSumOfLogs_Extended ;
56
+ procedure TestSumOfLogs_Integer ;
57
+ procedure TestSumOfLogs_Cardinal ;
58
+ procedure TestSumOfLogs_Int64 ;
59
+ procedure TestSumOfLogs_UInt64 ;
46
60
end ;
47
61
48
62
implementation
@@ -61,6 +75,89 @@ implementation
61
75
509 , 521 , 523 , 541
62
76
);
63
77
78
+ PosExtendedArray: array [0 ..4 ] of Extended = (
79
+ 1.234 , 4256.12345 , 7000000000.0 , PI, 0.000006758493
80
+ );
81
+
82
+ PosDoubleArray: array [0 ..4 ] of Double = (
83
+ 1.234 , 4256.12345 , 7000000000.0 , PI, 0.000006758493
84
+ );
85
+
86
+ PosSingleArray: array [0 ..4 ] of Single = (
87
+ 1.234 , 4256.12345 , 7000000000.0 , PI, 0.000006758493
88
+ );
89
+
90
+ LnPosExtendedArray: array [0 ..4 ] of Extended = (
91
+ // Sourced by entering PosExtendedArray values into Windows Calculator
92
+ 0.21026092548319607136082943601527 ,
93
+ 8.3561140367098338229057764041835 ,
94
+ 22.669175986001724461267275835602 ,
95
+ 1.1447298858494001741553183317696 ,
96
+ -11.904710621755846032803428450819
97
+ );
98
+
99
+ LnPosDoubleArray: array [0 ..4 ] of Double = (
100
+ // Sourced by entering PosExtendedArray values into Windows Calculator
101
+ 0.21026092548319607136082943601527 ,
102
+ 8.3561140367098338229057764041835 ,
103
+ 22.669175986001724461267275835602 ,
104
+ 1.1447298858494001741553183317696 ,
105
+ -11.904710621755846032803428450819
106
+ );
107
+
108
+ LnPosSingleArray: array [0 ..4 ] of Single = (
109
+ // Sourced by entering PosExtendedArray values into Windows Calculator
110
+ 0.21026092548319607136082943601527 ,
111
+ 8.3561140367098338229057764041835 ,
112
+ 22.669175986001724461267275835602 ,
113
+ 1.1447298858494001741553183317696 ,
114
+ -11.904710621755846032803428450819
115
+ );
116
+
117
+ PosUInt64Array: array [0 ..3 ] of UInt64 = (
118
+ 1 , 4256 , 782937294729473 , 18446744073709551615 { High(UInt64)}
119
+ );
120
+
121
+ LnPosUInt64Array: array [0 ..3 ] of Extended = (
122
+ 0.0 ,
123
+ 8.3560850310214803122005407826219 ,
124
+ 34.294073725352958690377297588172 ,
125
+ 44.361419555836499802648645664699
126
+ );
127
+
128
+ PosInt64Array: array [0 ..3 ] of UInt64 = (
129
+ 1 , 4256 , 782937294729473 , 9223372036854775807 { High(Int64)}
130
+ );
131
+
132
+ LnPosInt64Array: array [0 ..3 ] of Extended = (
133
+ 0.0 ,
134
+ 8.3560850310214803122005407826219 ,
135
+ 34.294073725352958690377297588172 ,
136
+ 43.668272375276554493177203434617
137
+ );
138
+
139
+ PosCardinalArray: array [0 ..3 ] of Cardinal = (
140
+ 1 , 4256 , 30392847 , 4294967295 { High(Cardinal)}
141
+ );
142
+
143
+ LnPosCardinalArray: array [0 ..3 ] of Extended = (
144
+ 0.0 ,
145
+ 8.3560850310214803122005407826219 ,
146
+ 17.229717842637359251929684335162 ,
147
+ 22.180709777685419257670453203439
148
+ );
149
+
150
+ PosIntegerArray: array [0 ..3 ] of Integer = (
151
+ 1 , 4256 , 738473 , 2147483647 { High(Integer)}
152
+ );
153
+
154
+ LnPosIntegerArray: array [0 ..3 ] of Extended = (
155
+ 0.0 ,
156
+ 8.3560850310214803122005407826219 ,
157
+ 13.512339819689414368459751325714 ,
158
+ 21.487562596892643304518036290109
159
+ );
160
+
64
161
function RectWidth (const Rect: TRect): Integer;
65
162
begin
66
163
Result := Rect.Right - Rect.Left;
@@ -97,6 +194,62 @@ procedure TestMathsCatSnippets.StretchRect_B_Except;
97
194
R1 := StretchRect(R0, 1234567890.0 );
98
195
end ;
99
196
197
+ procedure TestMathsCatSnippets.TestArraySum_Cardinal ;
198
+ const
199
+ A: array [0 ..3 ] of Cardinal = (12 , 78 , 0 , 3 );
200
+ Expected: Cardinal = 93 ;
201
+ begin
202
+ CheckEquals(Expected, ArraySum(A));
203
+ end ;
204
+
205
+ procedure TestMathsCatSnippets.TestArraySum_Double ;
206
+ const
207
+ A: array [0 ..3 ] of Double = (93849367.8695 , 0.003 , 10294834.9473984 , -98374.8593847 );
208
+ Expected: Double = 104045827.9605137 ;
209
+ begin
210
+ CheckTrue(SameValue(Expected, ArraySum(A)));
211
+ end ;
212
+
213
+ procedure TestMathsCatSnippets.TestArraySum_Extended ;
214
+ const
215
+ A: array [0 ..3 ] of Extended = (93849367.8695 , 0.003 , 10294834.9473984 , -98374.8593847 );
216
+ Expected: Extended = 104045827.9605137 ;
217
+ begin
218
+ CheckTrue(SameValue(Expected, ArraySum(A)));
219
+ end ;
220
+
221
+ procedure TestMathsCatSnippets.TestArraySum_Int64 ;
222
+ const
223
+ A: array [0 ..3 ] of Int64 = (-3849374778 , +3849374780 , 0 , -8 );
224
+ Expected: Int64 = -6 ;
225
+ begin
226
+ CheckEquals(Expected, ArraySum(A));
227
+ end ;
228
+
229
+ procedure TestMathsCatSnippets.TestArraySum_Integer ;
230
+ const
231
+ A: array [0 ..3 ] of Integer = (-(MaxInt-5 ), MaxInt, 0 , -671 );
232
+ Expected: Integer = -666 ;
233
+ begin
234
+ CheckEquals(Expected, ArraySum(A));
235
+ end ;
236
+
237
+ procedure TestMathsCatSnippets.TestArraySum_Single ;
238
+ const
239
+ A: array [0 ..3 ] of Single = (93849367.8695 , 0.003 , 10294834.9473984 , -98374.8593847 );
240
+ Expected: Single = 104045827.9605137 ;
241
+ begin
242
+ CheckTrue(SameValue(Expected, ArraySum(A)));
243
+ end ;
244
+
245
+ procedure TestMathsCatSnippets.TestArraySum_UInt64 ;
246
+ const
247
+ A: array [0 ..3 ] of UInt64 = (9223372036854775808 , 2 , 90 , 100 );
248
+ Expected: UInt64 = 9223372036854776000 ;
249
+ begin
250
+ CheckEquals(Expected, ArraySum(A));
251
+ end ;
252
+
100
253
procedure TestMathsCatSnippets.TestDigitCount ;
101
254
begin
102
255
CheckEquals(1 , DigitCount(0 ), ' DigitCount(0)' );
@@ -714,6 +867,83 @@ procedure TestMathsCatSnippets.TestStretchRect_B;
714
867
CheckException(StretchRect_B_Except, EOverflow, ' Large scaling' );
715
868
end ;
716
869
870
+ procedure TestMathsCatSnippets.TestSumOfLogs_Cardinal ;
871
+ var
872
+ Res, Expected: Extended;
873
+ BoolRes: Boolean;
874
+ begin
875
+ Expected := ArraySum(LnPosCardinalArray); // SumOfArray result cast to Extended
876
+ Res := SumOfLogs(PosCardinalArray);
877
+ BoolRes := SameValue(Expected, Res);
878
+ CheckTrue(BoolRes, ' Normal' );
879
+ end ;
880
+
881
+ procedure TestMathsCatSnippets.TestSumOfLogs_Double ;
882
+ var
883
+ Res, Expected: Double;
884
+ BoolRes: Boolean;
885
+ begin
886
+ Expected := ArraySum(LnPosDoubleArray);
887
+ Res := SumOfLogs(PosDoubleArray);
888
+ BoolRes := SameValue(Expected, Res);
889
+ CheckTrue(BoolRes, ' SumOfLogs_Double' );
890
+ end ;
891
+
892
+ procedure TestMathsCatSnippets.TestSumOfLogs_Extended ;
893
+ var
894
+ Res, Expected: Extended;
895
+ BoolRes: Boolean;
896
+ begin
897
+ Expected := ArraySum(LnPosExtendedArray);
898
+ Res := SumOfLogs(PosExtendedArray);
899
+ BoolRes := SameValue(Expected, Res);
900
+ CheckTrue(BoolRes, ' SumOfLogs_Extended' );
901
+ end ;
902
+
903
+ procedure TestMathsCatSnippets.TestSumOfLogs_Int64 ;
904
+ var
905
+ Res, Expected: Extended;
906
+ BoolRes: Boolean;
907
+ begin
908
+ Expected := ArraySum(LnPosInt64Array); // SumOfArray result cast to Extended
909
+ Res := SumOfLogs(PosInt64Array);
910
+ BoolRes := SameValue(Expected, Res);
911
+ CheckTrue(BoolRes, ' SumOfLogs_Int64' );
912
+ end ;
913
+
914
+ procedure TestMathsCatSnippets.TestSumOfLogs_Integer ;
915
+ var
916
+ Res, Expected: Extended;
917
+ BoolRes: Boolean;
918
+ begin
919
+ Expected := ArraySum(LnPosIntegerArray); // SumOfArray result cast to Extended
920
+ Res := SumOfLogs(PosIntegerArray);
921
+ BoolRes := SameValue(Expected, Res);
922
+ CheckTrue(BoolRes, ' SumOfLogs_Integer' );
923
+ end ;
924
+
925
+ procedure TestMathsCatSnippets.TestSumOfLogs_Single ;
926
+ var
927
+ Res, Expected: Single;
928
+ BoolRes: Boolean;
929
+ begin
930
+ Expected := ArraySum(LnPosSingleArray);
931
+ Res := SumOfLogs(PosSingleArray);
932
+ BoolRes := SameValue(Expected, Res);
933
+ CheckTrue(BoolRes, ' SumOfLogs_Single' );
934
+ end ;
935
+
936
+ procedure TestMathsCatSnippets.TestSumOfLogs_UInt64 ;
937
+ var
938
+ Res, Expected: Extended;
939
+ BoolRes: Boolean;
940
+ begin
941
+ Expected := ArraySum(LnPosUInt64Array); // SumOfArray result cast to Extended
942
+ Res := SumOfLogs(PosUInt64Array);
943
+ BoolRes := SameValue(Expected, Res);
944
+ CheckTrue(BoolRes, ' SumOfLogs_UInt64' );
945
+ end ;
946
+
717
947
initialization
718
948
// Register any test cases with the test runner
719
949
RegisterTest(TestMathsCatSnippets.Suite);
0 commit comments