|
| 1 | +{$assertions on} |
| 2 | + |
| 3 | +procedure TestMean; |
| 4 | +var |
| 5 | + arr: TPointArray; |
| 6 | + i: Int32; |
| 7 | +begin |
| 8 | + Assert(TPointArray([]).Mean() = Point(0, 0), 'Mean of empty'); |
| 9 | + Assert(TPointArray([Point(1, 1), Point(2, 2)]).Mean() = Point(1, 1), 'Mean truncates'); |
| 10 | + |
| 11 | + arr := TPointArray.CreateFromBox(TBox.Create(0, 0, 10, 10), True); |
| 12 | + Assert(arr.Mean() = Point(5, 5), 'Mean of symmetric box'); |
| 13 | + arr += Point(1000, 1000); |
| 14 | + Assert(arr.Mean() = Point(13, 13), 'Mean should be dragged by outlier'); |
| 15 | + |
| 16 | + // check overflowing |
| 17 | + SetLength(arr, 2000); |
| 18 | + for i := 0 to High(arr) do |
| 19 | + arr[i] := Point(2000000, 2000000); |
| 20 | + Assert(arr.Mean() = Point(2000000, 2000000), 'Mean overflowed on a large sum'); |
| 21 | +end; |
| 22 | + |
| 23 | +procedure TestMedian; |
| 24 | +var |
| 25 | + arr: TPointArray; |
| 26 | +begin |
| 27 | + Assert(TPointArray([]).Median() = Point(0, 0), 'Median of empty'); |
| 28 | + Assert(TPointArray([Point(9, 9), Point(1, 1), Point(5, 5)]).Median() = Point(5, 5), 'Median odd'); |
| 29 | + Assert(TPointArray([Point(1, 1), Point(3, 3), Point(5, 5), Point(7, 7)]).Median() = Point(4, 4), 'Median even'); |
| 30 | + Assert(TPointArray([Point(0, 10), Point(5, 0), Point(10, 5)]).Median() = Point(5, 5), 'Median is per axis'); |
| 31 | + |
| 32 | + arr := TPointArray.CreateFromBox(TBox.Create(0, 0, 10, 10), True); |
| 33 | + Assert(arr.Median() = Point(5, 5), 'Median of symmetric box'); |
| 34 | + arr += Point(1000, 1000); |
| 35 | + Assert(arr.Median() = Point(5, 5), 'Median outlier should be unaffected'); |
| 36 | +end; |
| 37 | + |
| 38 | +begin |
| 39 | + TestMean(); |
| 40 | + TestMedian(); |
| 41 | +end. |
0 commit comments