24
Classes, SysUtils, FPCUnit, TestRegistry, TASources;
24
Classes, SysUtils, FPCUnit, TestRegistry,
25
TAChartUtils, TACustomSource, TAIntervalSources, TASources;
30
31
TListSourceTest = class(TTestCase)
32
33
FSource: TListChartSource;
35
procedure AssertItemEquals(
36
const AItem: TChartDataItem; AX, AY: Double; AText: String = '';
37
AColor: TChartColor = clTAColor);
34
39
procedure SetUp; override;
35
40
procedure TearDown; override;
38
43
procedure DataPoint;
44
procedure DataPointSeparator;
58
65
procedure TearDown; override;
60
67
procedure Accumulate;
61
69
procedure Percentage;
73
TIntervalSourceTest = class(TTestCase)
75
procedure AssertValueEquals(
76
const AExpected: array of Double; const AActual: TChartValueTextArray);
78
procedure IntervalSource;
88
TDummyTransform = object
90
function IdentityDouble(AX: Double): Double;
91
function IdentityInteger(AX: Integer): Integer;
92
function PrepareValuesInRangeParams: TValuesInRangeParams;
93
function Round(AX: Double): Integer;
97
VDummyTransform: TDummyTransform;
101
function TDummyTransform.IdentityDouble(AX: Double): Double;
106
function TDummyTransform.IdentityInteger(AX: Integer): Integer;
111
function TDummyTransform.PrepareValuesInRangeParams: TValuesInRangeParams;
114
FAxisToGraph := @IdentityDouble;
115
FGraphToAxis := @IdentityDouble;
117
FGraphToImage := @Round;
121
FScale := @IdentityInteger;
123
FIntervals := TChartAxisIntervalParams.Create(nil);
127
function TDummyTransform.Round(AX: Double): Integer;
129
Result := System.Round(AX);
70
132
{ TCalculatedSourceTest }
82
144
AssertEquals(2, FSource[1]^.X);
83
145
AssertEquals(102 + 202, FSource[1]^.Y);
84
146
AssertEquals(202 + 302, FSource[2]^.Y);
147
FSource.AccumulationDirection := cadForward;
148
AssertEquals(202 + 302, FSource[1]^.Y);
149
AssertEquals(302 + 402, FSource[2]^.Y);
150
FSource.AccumulationDirection := cadBackward;
85
151
FSource.AccumulationMethod := camAverage;
86
152
AssertEquals((2002 + 2102) / 2, FSource[20]^.Y);
87
153
AssertEquals(1, FSource[0]^.X);
88
154
AssertEquals(102, FSource[0]^.Y);
89
155
AssertEquals((102 + 202) / 2, FSource[1]^.Y);
90
156
AssertEquals(102, FSource[0]^.Y);
157
FSource.AccumulationDirection := cadCenter;
158
AssertEquals((1102 + 1202 + 1302) / 3, FSource[11]^.Y);
159
FSource.AccumulationDirection := cadBackward;
92
161
FSource.AccumulationRange := 5;
93
162
rng := TMWCRandomGenerator.Create;
182
procedure TCalculatedSourceTest.Derivative;
184
FSource.AccumulationMethod := camDerivative;
185
FSource.AccumulationRange := 2;
186
FOrigin.SetYValue(1, 202);
187
AssertTrue(IsNan(FSource[0]^.Y));
188
AssertEquals(100, FSource[1]^.Y);
189
FSource.AccumulationDirection := cadCenter;
190
AssertEquals(100, FSource[0]^.Y);
113
193
procedure TCalculatedSourceTest.Percentage;
115
195
FSource.Percentage := true;
121
201
procedure TCalculatedSourceTest.Reorder;
125
205
AssertEquals(3, FSource.YCount);
126
206
FSource.ReorderYList := '2';
207
AssertEquals(1, FSource.YCount);
208
AssertEquals(104, FSource[0]^.Y);
209
AssertEquals(204, FSource[1]^.Y);
210
FSource.ReorderYList := '0,2';
127
211
AssertEquals(2, FSource.YCount);
212
AssertEquals(102, FSource[0]^.Y);
128
213
AssertEquals(104, FSource[0]^.YList[0]);
214
AssertEquals(202, FSource[1]^.Y);
129
215
AssertEquals(204, FSource[1]^.YList[0]);
130
FSource.ReorderYList := '0,0,0';
131
AssertEquals(4, FSource.YCount);
216
FSource.ReorderYList := '1,1,1';
217
AssertEquals(3, FSource.YCount);
218
AssertEquals(103, FSource[0]^.Y);
132
219
AssertEquals(103, FSource[0]^.YList[0]);
133
220
AssertEquals(103, FSource[0]^.YList[1]);
134
AssertEquals(103, FSource[0]^.YList[2]);
135
221
FSource.ReorderYList := '';
136
222
for i := 0 to FSource.Count - 1 do begin
137
223
AssertEquals(FOrigin[i]^.Y, FSource[i]^.Y);
138
for j := 0 to FSource.YCount - 2 do
139
AssertEquals(FOrigin[i]^.YList[j], FSource[i]^.YList[j]);
224
AssertEquals(FOrigin[i]^.YList[0], FSource[i]^.YList[0]);
225
AssertEquals(FOrigin[i]^.YList[1], FSource[i]^.YList[1]);
163
249
{ TListSourceTest }
251
procedure TListSourceTest.AssertItemEquals(
252
const AItem: TChartDataItem; AX, AY: Double; AText: String;
253
AColor: TChartColor);
255
AssertEquals('X', AX, AItem.X);
256
AssertEquals('Y', AY, AItem.Y);
257
AssertEquals('Text', AText, AItem.Text);
258
AssertEquals('Color', AColor, AItem.Color);
165
261
procedure TListSourceTest.Basic;
264
srcDest: TListChartSource;
168
267
AssertEquals(0, FSource.Count);
170
269
AssertEquals(1, FSource.Count);
171
270
FSource.Delete(0);
172
271
AssertEquals(0, FSource.Count);
273
FSource.Add(i, i * 2, IntToStr(i));
274
srcDest := TListChartSource.Create(nil);
276
srcDest.CopyFrom(FSource);
277
AssertEquals(FSource.Count, srcDest.Count);
278
for i := 0 to FSource.Count - 1 do
280
AssertItemEquals(srcDest[i]^, X, Y, Text, Color);
175
286
procedure TListSourceTest.DataPoint;
178
289
FSource.DataPoints.Add('3|4|?|text1');
179
290
FSource.DataPoints.Add('5|6|$FF0000|');
180
291
AssertEquals(2, FSource.Count);
181
AssertEquals(3, FSource[0]^.X);
182
AssertEquals(4, FSource[0]^.Y);
183
AssertEquals('text1', FSource[0]^.Text);
184
AssertEquals(clTAColor, FSource[0]^.Color);
185
AssertEquals(5, FSource[1]^.X);
186
AssertEquals(6, FSource[1]^.Y);
187
AssertEquals('', FSource[1]^.Text);
188
AssertEquals($FF0000, FSource[1]^.Color);
292
AssertItemEquals(FSource[0]^, 3, 4, 'text1');
293
AssertItemEquals(FSource[1]^, 5, 6, '', $FF0000);
189
294
FSource[0]^.Color := 0;
190
295
AssertEquals('3|4|$000000|text1', FSource.DataPoints[0]);
191
296
FSource.DataPoints.Add('7|8|0|two words');
192
297
AssertEquals('two words', FSource[2]^.Text);
300
procedure TListSourceTest.DataPointSeparator;
305
oldSeparator := DefaultFormatSettings.DecimalSeparator;
307
DefaultFormatSettings.DecimalSeparator := ':';
308
FSource.DataPoints.Add('3:5');
309
AssertEquals(3.5, FSource[0]^.X);
310
FSource.DataPoints[0] := '4.5';
311
AssertEquals(4.5, FSource[0]^.X);
313
DefaultFormatSettings.DecimalSeparator := oldSeparator;
317
procedure TListSourceTest.Enum;
195
333
procedure TListSourceTest.Extent;
197
335
procedure AssertExtent(AX1, AY1, AX2, AY2: Double);
209
347
Assert(IsInfinite(FSource.Extent.a.X) and IsInfinite(FSource.Extent.a.Y));
210
348
Assert(IsInfinite(FSource.Extent.b.X) and IsInfinite(FSource.Extent.b.Y));
212
FSource.Add(1, 2, '', 0);
213
351
AssertExtent(1, 2, 1, 2);
215
FSource.Add(3, 4, '', 0);
216
354
AssertExtent(1, 2, 3, 4);
218
356
FSource.SetXValue(0, -1);
221
359
FSource.SetXValue(1, -2);
222
360
AssertExtent(-2, 2, -1, 4);
362
FSource.SetXValue(1, SafeNaN);
363
AssertExtent(-1, 2, -1, 4);
364
FSource.SetXValue(1, -2);
224
366
FSource.SetYValue(0, 5);
225
367
AssertExtent(-2, 4, -1, 5);
227
369
FSource.SetYValue(0, 4.5);
228
370
AssertExtent(-2, 4, -1, 4.5);
372
FSource.SetYValue(1, SafeNaN);
373
AssertExtent(-2, 4.5, -1, 4.5);
376
AssertExtent(-1, 4.5, -1, 4.5);
385
AssertExtent(2, 2, 4, 4);
231
388
procedure TListSourceTest.Multi;
440
{ TIntervalSourceTest }
442
procedure TIntervalSourceTest.AssertValueEquals(
443
const AExpected: array of Double; const AActual: TChartValueTextArray);
447
AssertEquals(Length(AExpected), Length(AActual));
448
for i := 0 to High(AExpected) do
449
AssertEquals(AExpected[i], AActual[i].FValue);
452
procedure TIntervalSourceTest.IntervalSource;
454
p: TValuesInRangeParams;
455
src: TIntervalChartSource;
456
r: TChartValueTextArray = nil;
458
p := VDummyTransform.PrepareValuesInRangeParams;
459
src := TIntervalChartSource.Create(nil);
461
src.Params.MaxLength := 15;
462
src.ValuesInRange(p, r);
463
AssertValueEquals([20, 30, 40, 50, 60, 70], r);
464
src.Params.Options := [aipUseCount];
465
src.Params.Count := 7;
466
src.Params.Tolerance := 1;
467
src.ValuesInRange(p, r);
468
AssertValueEquals([24, 30, 36, 41, 47, 52, 58, 63, 69, 75], r);
475
procedure TIntervalSourceTest.ListSource;
478
p: TValuesInRangeParams;
479
r: TChartValueTextArray = nil;
480
src: TListChartSource;
482
procedure Check(const AExpected: array of Double);
485
src.ValuesInRange(p, r);
486
AssertValueEquals(AExpected, r);
490
p := VDummyTransform.PrepareValuesInRangeParams;
491
src := TListChartSource.Create(nil);
495
Check([20, 30, 40, 50, 60, 70]);
496
p.FIntervals.MinLength := 20;
497
Check([20, 30, 50, 70]);
508
p.FIntervals.Options := p.FIntervals.Options - [aipUseMinLength];
509
Check([8, 10, 20, 30]);
510
p.FIntervals.Options := p.FIntervals.Options + [aipUseMinLength];
512
Check([8, 30, 50, 60]);
285
RegisterTests([TListSourceTest, TRandomSourceTest, TCalculatedSourceTest]);
522
TListSourceTest, TRandomSourceTest, TCalculatedSourceTest,
523
TIntervalSourceTest]);