TAChart: Fix unit test failure for IncQuarter.

This commit is contained in:
wp_xyz 2024-05-09 17:47:58 +02:00
parent 5acbe20f96
commit b2c74fa967
3 changed files with 147 additions and 62 deletions

View File

@ -360,6 +360,7 @@ function FormatIfNotEmpty(AFormat, AStr: String): String; inline;
function IfThen(ACond: Boolean; ATrue, AFalse: TObject): TObject; overload;
function ImgRoundChecked(A: Double): Integer; inline;
function IncQuarter(ADate: TDateTime; NumberOfQuarters: Integer): TDate;
function IncToStartOfTheQuarter(ADate: TDateTime; NumberOfQuarters: Integer): TDate;
function InterpolateRGB(AColor1, AColor2: Integer; ACoeff: Double): Integer;
function IntToColorHex(AColor: Integer): String; inline;
function IsEquivalent(const A1, A2: Double): Boolean; inline;
@ -514,6 +515,11 @@ begin
Result := IncMonth(ADate, NumberOfQuarters*3);
end;
function IncToStartOfTheQuarter(ADate: TDateTime; NumberOfQuarters: Integer): TDate;
begin
Result := StartOfTheQuarter(IncQuarter(ADate, NumberOfQuarters));
end;
function InterpolateRGB(AColor1, AColor2: Integer; ACoeff: Double): Integer;
type
TBytes = packed array [1..4] of Byte;

View File

@ -227,7 +227,7 @@ begin
else
Result := IncYear(AValue, Round(FBestStepCoeff));
dtsQuarter:
Result := IncQuarter(AValue, Round(FStepLen/DATE_STEP_INTERVALS[dtsQuarter]));
Result := IncToStartOfTheQuarter(AValue, Round(FStepLen/DATE_STEP_INTERVALS[dtsQuarter]));
dtsMonth: Result := IncMonth(AValue, Round(FBestStepCoeff));
otherwise Result := AValue + FStepLen;
end;

View File

@ -91,6 +91,7 @@ type
published
procedure TestStartOfTheQuarter;
procedure TestIncQuarter;
procedure TestIncToStartOfQuarter;
end;
@ -680,81 +681,159 @@ begin
end;
procedure TQuarterTest.TestIncQuarter;
begin
begin //expected // actual
AssertEquals(EncodeDate(2020, 4, 1), IncQuarter(EncodeDate(2020, 1, 1), 1));
AssertEquals(EncodeDate(2020, 4, 1), IncQuarter(EncodeDate(2020, 1, 2), 1));
AssertEquals(EncodeDate(2020, 4, 1), IncQuarter(EncodeDate(2020, 2, 29), 1));
AssertEquals(EncodeDate(2020, 4, 1), IncQuarter(EncodeDate(2020, 3, 31), 1));
AssertEquals(EncodeDate(2020, 4, 2), IncQuarter(EncodeDate(2020, 1, 2), 1));
AssertEquals(EncodeDate(2020, 5,29), IncQuarter(EncodeDate(2020, 2,29), 1));
AssertEquals(EncodeDate(2020, 6,30), IncQuarter(EncodeDate(2020, 3,31), 1));
AssertEquals(EncodeDate(2020, 7, 1), IncQuarter(EncodeDate(2020, 4, 1), 1));
AssertEquals(EncodeDate(2020, 7, 1), IncQuarter(EncodeDate(2020, 5, 1), 1));
AssertEquals(EncodeDate(2020, 7, 1), IncQuarter(EncodeDate(2020, 6, 30), 1));
AssertEquals(EncodeDate(2020, 10, 1), IncQuarter(EncodeDate(2020, 7, 1), 1));
AssertEquals(EncodeDate(2020, 10, 1), IncQuarter(EncodeDate(2020, 8, 1), 1));
AssertEquals(EncodeDate(2020, 10, 1), IncQuarter(EncodeDate(2020, 9, 30), 1));
AssertEquals(EncodeDate(2021, 1, 1), IncQuarter(EncodeDate(2020, 10, 31), 1));
AssertEquals(EncodeDate(2021, 1, 1), IncQuarter(EncodeDate(2020, 11, 30), 1));
AssertEquals(EncodeDate(2021, 1, 1), IncQuarter(EncodeDate(2020, 12, 31), 1));
AssertEquals(EncodeDate(2021, 4, 1), IncQuarter(EncodeDate(2021, 1, 10), 1));
AssertEquals(EncodeDate(2020, 8, 1), IncQuarter(EncodeDate(2020, 5, 1), 1));
AssertEquals(EncodeDate(2020, 9,30), IncQuarter(EncodeDate(2020, 6,30), 1));
AssertEquals(EncodeDate(2020,10, 1), IncQuarter(EncodeDate(2020, 7, 1), 1));
AssertEquals(EncodeDate(2020,11, 1), IncQuarter(EncodeDate(2020, 8, 1), 1));
AssertEquals(EncodeDate(2020,12,30), IncQuarter(EncodeDate(2020, 9,30), 1));
AssertEquals(EncodeDate(2021, 1,31), IncQuarter(EncodeDate(2020,10,31), 1));
AssertEquals(EncodeDate(2021, 2,28), IncQuarter(EncodeDate(2020,11,30), 1));
AssertEquals(EncodeDate(2021, 3,31), IncQuarter(EncodeDate(2020,12,31), 1));
AssertEquals(EncodeDate(2021, 4,10), IncQuarter(EncodeDate(2021, 1,10), 1));
AssertEquals(EncodeDate(2020, 7, 1), IncQuarter(EncodeDate(2020, 1, 1), 2));
AssertEquals(EncodeDate(2020, 7, 1), IncQuarter(EncodeDate(2020, 1, 2), 2));
AssertEquals(EncodeDate(2020, 7, 1), IncQuarter(EncodeDate(2020, 2, 29), 2));
AssertEquals(EncodeDate(2020, 7, 1), IncQuarter(EncodeDate(2020, 3, 31), 2));
AssertEquals(EncodeDate(2020, 10, 1), IncQuarter(EncodeDate(2020, 4, 1), 2));
AssertEquals(EncodeDate(2020, 10, 1), IncQuarter(EncodeDate(2020, 5, 1), 2));
AssertEquals(EncodeDate(2020, 10, 1), IncQuarter(EncodeDate(2020, 6, 30), 2));
AssertEquals(EncodeDate(2020, 7, 2), IncQuarter(EncodeDate(2020, 1, 2), 2));
AssertEquals(EncodeDate(2020, 8,29), IncQuarter(EncodeDate(2020, 2,29), 2));
AssertEquals(EncodeDate(2020, 9,30), IncQuarter(EncodeDate(2020, 3,31), 2));
AssertEquals(EncodeDate(2020,10, 1), IncQuarter(EncodeDate(2020, 4, 1), 2));
AssertEquals(EncodeDate(2020,11, 1), IncQuarter(EncodeDate(2020, 5, 1), 2));
AssertEquals(EncodeDate(2020,12,30), IncQuarter(EncodeDate(2020, 6,30), 2));
AssertEquals(EncodeDate(2021, 1, 1), IncQuarter(EncodeDate(2020, 7, 1), 2));
AssertEquals(EncodeDate(2021, 1, 1), IncQuarter(EncodeDate(2020, 8, 1), 2));
AssertEquals(EncodeDate(2021, 1, 1), IncQuarter(EncodeDate(2020, 9, 30), 2));
AssertEquals(EncodeDate(2021, 4, 1), IncQuarter(EncodeDate(2020, 10, 31), 2));
AssertEquals(EncodeDate(2021, 4, 1), IncQuarter(EncodeDate(2020, 11, 30), 2));
AssertEquals(EncodeDate(2021, 4, 1), IncQuarter(EncodeDate(2020, 12, 31), 2));
AssertEquals(EncodeDate(2021, 7, 1), IncQuarter(EncodeDate(2021, 1, 10), 2));
AssertEquals(EncodeDate(2021, 2, 1), IncQuarter(EncodeDate(2020, 8, 1), 2));
AssertEquals(EncodeDate(2021, 3,30), IncQuarter(EncodeDate(2020, 9,30), 2));
AssertEquals(EncodeDate(2021, 4,30), IncQuarter(EncodeDate(2020,10,31), 2));
AssertEquals(EncodeDate(2021, 5,30), IncQuarter(EncodeDate(2020,11,30), 2));
AssertEquals(EncodeDate(2021, 6,30), IncQuarter(EncodeDate(2020,12,31), 2));
AssertEquals(EncodeDate(2021, 7,10), IncQuarter(EncodeDate(2021, 1,10), 2));
AssertEquals(EncodeDate(2020, 10, 1), IncQuarter(EncodeDate(2020, 1, 1), 3));
AssertEquals(EncodeDate(2020, 10, 1), IncQuarter(EncodeDate(2020, 1, 2), 3));
AssertEquals(EncodeDate(2020, 10, 1), IncQuarter(EncodeDate(2020, 2, 29), 3));
AssertEquals(EncodeDate(2020, 10, 1), IncQuarter(EncodeDate(2020, 3, 31), 3));
AssertEquals(EncodeDate(2020,10, 1), IncQuarter(EncodeDate(2020, 1, 1), 3));
AssertEquals(EncodeDate(2020,10, 2), IncQuarter(EncodeDate(2020, 1, 2), 3));
AssertEquals(EncodeDate(2020,11,29), IncQuarter(EncodeDate(2020, 2,29), 3));
AssertEquals(EncodeDate(2020,12,31), IncQuarter(EncodeDate(2020, 3,31), 3));
AssertEquals(EncodeDate(2021, 1, 1), IncQuarter(EncodeDate(2020, 4, 1), 3));
AssertEquals(EncodeDate(2021, 1, 1), IncQuarter(EncodeDate(2020, 5, 1), 3));
AssertEquals(EncodeDate(2021, 1, 1), IncQuarter(EncodeDate(2020, 6, 30), 3));
AssertEquals(EncodeDate(2021, 2, 1), IncQuarter(EncodeDate(2020, 5, 1), 3));
AssertEquals(EncodeDate(2021, 3,30), IncQuarter(EncodeDate(2020, 6,30), 3));
AssertEquals(EncodeDate(2021, 4, 1), IncQuarter(EncodeDate(2020, 7, 1), 3));
AssertEquals(EncodeDate(2021, 4, 1), IncQuarter(EncodeDate(2020, 8, 1), 3));
AssertEquals(EncodeDate(2021, 4, 1), IncQuarter(EncodeDate(2020, 9, 30), 3));
AssertEquals(EncodeDate(2021, 7, 1), IncQuarter(EncodeDate(2020, 10, 31), 3));
AssertEquals(EncodeDate(2021, 7, 1), IncQuarter(EncodeDate(2020, 11, 30), 3));
AssertEquals(EncodeDate(2021, 7, 1), IncQuarter(EncodeDate(2020, 12, 31), 3));
AssertEquals(EncodeDate(2021, 10, 1), IncQuarter(EncodeDate(2021, 1, 10), 3));
AssertEquals(EncodeDate(2021, 5, 1), IncQuarter(EncodeDate(2020, 8, 1), 3));
AssertEquals(EncodeDate(2021, 6,30), IncQuarter(EncodeDate(2020, 9,30), 3));
AssertEquals(EncodeDate(2021, 7,31), IncQuarter(EncodeDate(2020,10,31), 3));
AssertEquals(EncodeDate(2021, 8,30), IncQuarter(EncodeDate(2020,11,30), 3));
AssertEquals(EncodeDate(2021, 9,30), IncQuarter(EncodeDate(2020,12,31), 3));
AssertEquals(EncodeDate(2021,10,10), IncQuarter(EncodeDate(2021, 1,10), 3));
AssertEquals(EncodeDate(2021, 1, 1), IncQuarter(EncodeDate(2020, 1, 1), 4));
AssertEquals(EncodeDate(2021, 1, 1), IncQuarter(EncodeDate(2020, 1, 2), 4));
AssertEquals(EncodeDate(2021, 1, 1), IncQuarter(EncodeDate(2020, 2, 29), 4));
AssertEquals(EncodeDate(2021, 1, 1), IncQuarter(EncodeDate(2020, 3, 31), 4));
AssertEquals(EncodeDate(2021, 1, 2), IncQuarter(EncodeDate(2020, 1, 2), 4));
AssertEquals(EncodeDate(2021, 2,28), IncQuarter(EncodeDate(2020, 2,29), 4));
AssertEquals(EncodeDate(2021, 3,31), IncQuarter(EncodeDate(2020, 3,31), 4));
AssertEquals(EncodeDate(2021, 4, 1), IncQuarter(EncodeDate(2020, 4, 1), 4));
AssertEquals(EncodeDate(2021, 4, 1), IncQuarter(EncodeDate(2020, 5, 1), 4));
AssertEquals(EncodeDate(2021, 4, 1), IncQuarter(EncodeDate(2020, 6, 30), 4));
AssertEquals(EncodeDate(2021, 5, 1), IncQuarter(EncodeDate(2020, 5, 1), 4));
AssertEquals(EncodeDate(2021, 6,30), IncQuarter(EncodeDate(2020, 6,30), 4));
AssertEquals(EncodeDate(2021, 7, 1), IncQuarter(EncodeDate(2020, 7, 1), 4));
AssertEquals(EncodeDate(2021, 7, 1), IncQuarter(EncodeDate(2020, 8, 1), 4));
AssertEquals(EncodeDate(2021, 7, 1), IncQuarter(EncodeDate(2020, 9, 30), 4));
AssertEquals(EncodeDate(2021, 10, 1), IncQuarter(EncodeDate(2020, 10, 31), 4));
AssertEquals(EncodeDate(2021, 10, 1), IncQuarter(EncodeDate(2020, 11, 30), 4));
AssertEquals(EncodeDate(2021, 10, 1), IncQuarter(EncodeDate(2020, 12, 31), 4));
AssertEquals(EncodeDate(2022, 1, 1), IncQuarter(EncodeDate(2021, 1, 10), 4));
AssertEquals(EncodeDate(2021, 8, 1), IncQuarter(EncodeDate(2020, 8, 1), 4));
AssertEquals(EncodeDate(2021, 9,30), IncQuarter(EncodeDate(2020, 9,30), 4));
AssertEquals(EncodeDate(2021,10,31), IncQuarter(EncodeDate(2020,10,31), 4));
AssertEquals(EncodeDate(2021,11,30), IncQuarter(EncodeDate(2020,11,30), 4));
AssertEquals(EncodeDate(2021,12,31), IncQuarter(EncodeDate(2020,12,31), 4));
AssertEquals(EncodeDate(2022, 1,10), IncQuarter(EncodeDate(2021, 1,10), 4));
AssertEquals(EncodeDate(2021, 4, 1), IncQuarter(EncodeDate(2020, 1, 1), 5));
AssertEquals(EncodeDate(2021, 4, 1), IncQuarter(EncodeDate(2020, 1, 2), 5));
AssertEquals(EncodeDate(2021, 4, 1), IncQuarter(EncodeDate(2020, 2, 29), 5));
AssertEquals(EncodeDate(2021, 4, 1), IncQuarter(EncodeDate(2020, 3, 31), 5));
AssertEquals(EncodeDate(2021, 4, 2), IncQuarter(EncodeDate(2020, 1, 2), 5));
AssertEquals(EncodeDate(2021, 5,29), IncQuarter(EncodeDate(2020, 2,29), 5));
AssertEquals(EncodeDate(2021, 6,30), IncQuarter(EncodeDate(2020, 3,31), 5));
AssertEquals(EncodeDate(2021, 7, 1), IncQuarter(EncodeDate(2020, 4, 1), 5));
AssertEquals(EncodeDate(2021, 7, 1), IncQuarter(EncodeDate(2020, 5, 1), 5));
AssertEquals(EncodeDate(2021, 7, 1), IncQuarter(EncodeDate(2020, 6, 30), 5));
AssertEquals(EncodeDate(2021, 10, 1), IncQuarter(EncodeDate(2020, 7, 1), 5));
AssertEquals(EncodeDate(2021, 10, 1), IncQuarter(EncodeDate(2020, 8, 1), 5));
AssertEquals(EncodeDate(2021, 10, 1), IncQuarter(EncodeDate(2020, 9, 30), 5));
AssertEquals(EncodeDate(2022, 1, 1), IncQuarter(EncodeDate(2020, 10, 31), 5));
AssertEquals(EncodeDate(2022, 1, 1), IncQuarter(EncodeDate(2020, 11, 30), 5));
AssertEquals(EncodeDate(2022, 1, 1), IncQuarter(EncodeDate(2020, 12, 31), 5));
AssertEquals(EncodeDate(2022, 4, 1), IncQuarter(EncodeDate(2021, 1, 10), 5));
AssertEquals(EncodeDate(2021, 8, 1), IncQuarter(EncodeDate(2020, 5, 1), 5));
AssertEquals(EncodeDate(2021, 9,30), IncQuarter(EncodeDate(2020, 6,30), 5));
AssertEquals(EncodeDate(2021,10, 1), IncQuarter(EncodeDate(2020, 7, 1), 5));
AssertEquals(EncodeDate(2021,11, 1), IncQuarter(EncodeDate(2020, 8, 1), 5));
AssertEquals(EncodeDate(2021,12,30), IncQuarter(EncodeDate(2020, 9,30), 5));
AssertEquals(EncodeDate(2022, 1,31), IncQuarter(EncodeDate(2020,10,31), 5));
AssertEquals(EncodeDate(2022, 2,28), IncQuarter(EncodeDate(2020,11,30), 5));
AssertEquals(EncodeDate(2022, 3,31), IncQuarter(EncodeDate(2020,12,31), 5));
AssertEquals(EncodeDate(2022, 4,10), IncQuarter(EncodeDate(2021, 1,10), 5));
end;
procedure TQuarterTest.TestIncToStartOfQuarter;
begin
AssertEquals(EncodeDate(2020, 4, 1), IncToStartOfTheQuarter(EncodeDate(2020, 1, 1), 1));
AssertEquals(EncodeDate(2020, 4, 1), IncToStartOfTheQuarter(EncodeDate(2020, 1, 2), 1));
AssertEquals(EncodeDate(2020, 4, 1), IncToStartOfTheQuarter(EncodeDate(2020, 2, 29), 1));
AssertEquals(EncodeDate(2020, 4, 1), IncToStartOfTheQuarter(EncodeDate(2020, 3, 31), 1));
AssertEquals(EncodeDate(2020, 7, 1), IncToStartOfTheQuarter(EncodeDate(2020, 4, 1), 1));
AssertEquals(EncodeDate(2020, 7, 1), IncToStartOfTheQuarter(EncodeDate(2020, 5, 1), 1));
AssertEquals(EncodeDate(2020, 7, 1), IncToStartOfTheQuarter(EncodeDate(2020, 6, 30), 1));
AssertEquals(EncodeDate(2020, 10, 1), IncToStartOfTheQuarter(EncodeDate(2020, 7, 1), 1));
AssertEquals(EncodeDate(2020, 10, 1), IncToStartOfTheQuarter(EncodeDate(2020, 8, 1), 1));
AssertEquals(EncodeDate(2020, 10, 1), IncToStartOfTheQuarter(EncodeDate(2020, 9, 30), 1));
AssertEquals(EncodeDate(2021, 1, 1), IncToStartOfTheQuarter(EncodeDate(2020, 10, 31), 1));
AssertEquals(EncodeDate(2021, 1, 1), IncToStartOfTheQuarter(EncodeDate(2020, 11, 30), 1));
AssertEquals(EncodeDate(2021, 1, 1), IncToStartOfTheQuarter(EncodeDate(2020, 12, 31), 1));
AssertEquals(EncodeDate(2021, 4, 1), IncToStartOfTheQuarter(EncodeDate(2021, 1, 10), 1));
AssertEquals(EncodeDate(2020, 7, 1), IncToStartOfTheQuarter(EncodeDate(2020, 1, 1), 2));
AssertEquals(EncodeDate(2020, 7, 1), IncToStartOfTheQuarter(EncodeDate(2020, 1, 2), 2));
AssertEquals(EncodeDate(2020, 7, 1), IncToStartOfTheQuarter(EncodeDate(2020, 2, 29), 2));
AssertEquals(EncodeDate(2020, 7, 1), IncToStartOfTheQuarter(EncodeDate(2020, 3, 31), 2));
AssertEquals(EncodeDate(2020, 10, 1), IncToStartOfTheQuarter(EncodeDate(2020, 4, 1), 2));
AssertEquals(EncodeDate(2020, 10, 1), IncToStartOfTheQuarter(EncodeDate(2020, 5, 1), 2));
AssertEquals(EncodeDate(2020, 10, 1), IncToStartOfTheQuarter(EncodeDate(2020, 6, 30), 2));
AssertEquals(EncodeDate(2021, 1, 1), IncToStartOfTheQuarter(EncodeDate(2020, 7, 1), 2));
AssertEquals(EncodeDate(2021, 1, 1), IncToStartOfTheQuarter(EncodeDate(2020, 8, 1), 2));
AssertEquals(EncodeDate(2021, 1, 1), IncToStartOfTheQuarter(EncodeDate(2020, 9, 30), 2));
AssertEquals(EncodeDate(2021, 4, 1), IncToStartOfTheQuarter(EncodeDate(2020, 10, 31), 2));
AssertEquals(EncodeDate(2021, 4, 1), IncToStartOfTheQuarter(EncodeDate(2020, 11, 30), 2));
AssertEquals(EncodeDate(2021, 4, 1), IncToStartOfTheQuarter(EncodeDate(2020, 12, 31), 2));
AssertEquals(EncodeDate(2021, 7, 1), IncToStartOfTheQuarter(EncodeDate(2021, 1, 10), 2));
AssertEquals(EncodeDate(2020, 10, 1), IncToStartOfTheQuarter(EncodeDate(2020, 1, 1), 3));
AssertEquals(EncodeDate(2020, 10, 1), IncToStartOfTheQuarter(EncodeDate(2020, 1, 2), 3));
AssertEquals(EncodeDate(2020, 10, 1), IncToStartOfTheQuarter(EncodeDate(2020, 2, 29), 3));
AssertEquals(EncodeDate(2020, 10, 1), IncToStartOfTheQuarter(EncodeDate(2020, 3, 31), 3));
AssertEquals(EncodeDate(2021, 1, 1), IncToStartOfTheQuarter(EncodeDate(2020, 4, 1), 3));
AssertEquals(EncodeDate(2021, 1, 1), IncToStartOfTheQuarter(EncodeDate(2020, 5, 1), 3));
AssertEquals(EncodeDate(2021, 1, 1), IncToStartOfTheQuarter(EncodeDate(2020, 6, 30), 3));
AssertEquals(EncodeDate(2021, 4, 1), IncToStartOfTheQuarter(EncodeDate(2020, 7, 1), 3));
AssertEquals(EncodeDate(2021, 4, 1), IncToStartOfTheQuarter(EncodeDate(2020, 8, 1), 3));
AssertEquals(EncodeDate(2021, 4, 1), IncToStartOfTheQuarter(EncodeDate(2020, 9, 30), 3));
AssertEquals(EncodeDate(2021, 7, 1), IncToStartOfTheQuarter(EncodeDate(2020, 10, 31), 3));
AssertEquals(EncodeDate(2021, 7, 1), IncToStartOfTheQuarter(EncodeDate(2020, 11, 30), 3));
AssertEquals(EncodeDate(2021, 7, 1), IncToStartOfTheQuarter(EncodeDate(2020, 12, 31), 3));
AssertEquals(EncodeDate(2021, 10, 1), IncToStartOfTheQuarter(EncodeDate(2021, 1, 10), 3));
AssertEquals(EncodeDate(2021, 1, 1), IncToStartOfTheQuarter(EncodeDate(2020, 1, 1), 4));
AssertEquals(EncodeDate(2021, 1, 1), IncToStartOfTheQuarter(EncodeDate(2020, 1, 2), 4));
AssertEquals(EncodeDate(2021, 1, 1), IncToStartOfTheQuarter(EncodeDate(2020, 2, 29), 4));
AssertEquals(EncodeDate(2021, 1, 1), IncToStartOfTheQuarter(EncodeDate(2020, 3, 31), 4));
AssertEquals(EncodeDate(2021, 4, 1), IncToStartOfTheQuarter(EncodeDate(2020, 4, 1), 4));
AssertEquals(EncodeDate(2021, 4, 1), IncToStartOfTheQuarter(EncodeDate(2020, 5, 1), 4));
AssertEquals(EncodeDate(2021, 4, 1), IncToStartOfTheQuarter(EncodeDate(2020, 6, 30), 4));
AssertEquals(EncodeDate(2021, 7, 1), IncToStartOfTheQuarter(EncodeDate(2020, 7, 1), 4));
AssertEquals(EncodeDate(2021, 7, 1), IncToStartOfTheQuarter(EncodeDate(2020, 8, 1), 4));
AssertEquals(EncodeDate(2021, 7, 1), IncToStartOfTheQuarter(EncodeDate(2020, 9, 30), 4));
AssertEquals(EncodeDate(2021, 10, 1), IncToStartOfTheQuarter(EncodeDate(2020, 10, 31), 4));
AssertEquals(EncodeDate(2021, 10, 1), IncToStartOfTheQuarter(EncodeDate(2020, 11, 30), 4));
AssertEquals(EncodeDate(2021, 10, 1), IncToStartOfTheQuarter(EncodeDate(2020, 12, 31), 4));
AssertEquals(EncodeDate(2022, 1, 1), IncToStartOfTheQuarter(EncodeDate(2021, 1, 10), 4));
AssertEquals(EncodeDate(2021, 4, 1), IncToStartOfTheQuarter(EncodeDate(2020, 1, 1), 5));
AssertEquals(EncodeDate(2021, 4, 1), IncToStartOfTheQuarter(EncodeDate(2020, 1, 2), 5));
AssertEquals(EncodeDate(2021, 4, 1), IncToStartOfTheQuarter(EncodeDate(2020, 2, 29), 5));
AssertEquals(EncodeDate(2021, 4, 1), IncToStartOfTheQuarter(EncodeDate(2020, 3, 31), 5));
AssertEquals(EncodeDate(2021, 7, 1), IncToStartOfTheQuarter(EncodeDate(2020, 4, 1), 5));
AssertEquals(EncodeDate(2021, 7, 1), IncToStartOfTheQuarter(EncodeDate(2020, 5, 1), 5));
AssertEquals(EncodeDate(2021, 7, 1), IncToStartOfTheQuarter(EncodeDate(2020, 6, 30), 5));
AssertEquals(EncodeDate(2021, 10, 1), IncToStartOfTheQuarter(EncodeDate(2020, 7, 1), 5));
AssertEquals(EncodeDate(2021, 10, 1), IncToStartOfTheQuarter(EncodeDate(2020, 8, 1), 5));
AssertEquals(EncodeDate(2021, 10, 1), IncToStartOfTheQuarter(EncodeDate(2020, 9, 30), 5));
AssertEquals(EncodeDate(2022, 1, 1), IncToStartOfTheQuarter(EncodeDate(2020, 10, 31), 5));
AssertEquals(EncodeDate(2022, 1, 1), IncToStartOfTheQuarter(EncodeDate(2020, 11, 30), 5));
AssertEquals(EncodeDate(2022, 1, 1), IncToStartOfTheQuarter(EncodeDate(2020, 12, 31), 5));
AssertEquals(EncodeDate(2022, 4, 1), IncToStartOfTheQuarter(EncodeDate(2021, 1, 10), 5));
end;