fpspreadsheet: Add unit tests for COUNTIFS and AVERAGEIFS.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@9392 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
parent
f972e77759
commit
69edc1b1d2
@ -29,7 +29,7 @@ type
|
|||||||
procedure TestWorksheet(ATestKind: TWorksheetTestKind; ATestCase: Integer);
|
procedure TestWorksheet(ATestKind: TWorksheetTestKind; ATestCase: Integer);
|
||||||
procedure TestFormulaErrors(ATest: Integer);
|
procedure TestFormulaErrors(ATest: Integer);
|
||||||
procedure TestInsDelRowCol(ATestIndex: Integer);
|
procedure TestInsDelRowCol(ATestIndex: Integer);
|
||||||
procedure TestSumIFS_Microsoft(AFormat: TsSpreadsheetFormat);
|
procedure TestCountSumAvgIFS_Microsoft(AFormat: TsSpreadsheetFormat; AFormulaType: Integer);
|
||||||
|
|
||||||
published
|
published
|
||||||
procedure AddConst_BIFF2;
|
procedure AddConst_BIFF2;
|
||||||
@ -93,8 +93,12 @@ type
|
|||||||
procedure SumMultiSheetRange_FlippedSheetsAndCells_XML;
|
procedure SumMultiSheetRange_FlippedSheetsAndCells_XML;
|
||||||
procedure SumMultiSheetRange_FlippedSheetsAndCells_ODS;
|
procedure SumMultiSheetRange_FlippedSheetsAndCells_ODS;
|
||||||
|
|
||||||
|
procedure CountIFS_Microsoft_OOXML;
|
||||||
|
procedure CountIFS_Microsoft_ODS;
|
||||||
procedure SumIFS_Microsoft_OOXML;
|
procedure SumIFS_Microsoft_OOXML;
|
||||||
procedure SumIFS_Microsoft_ODS;
|
procedure SumIFS_Microsoft_ODS;
|
||||||
|
procedure AverageIFS_Microsoft_OOXML;
|
||||||
|
procedure AverageIFS_Microsoft_ODS;
|
||||||
|
|
||||||
procedure IfConst_BIFF8;
|
procedure IfConst_BIFF8;
|
||||||
procedure IfConst_OOXML;
|
procedure IfConst_OOXML;
|
||||||
@ -622,16 +626,19 @@ end;
|
|||||||
|
|
||||||
{ --- }
|
{ --- }
|
||||||
|
|
||||||
{ Example from Microsoft site for SUMIFS:
|
{ Based on example from Microsoft site for SUMIFS:
|
||||||
https://support.microsoft.com/en-us/office/sumifs-function-c9e748f5-7ea7-455d-9406-611cebce642b }
|
https://support.microsoft.com/en-us/office/sumifs-function-c9e748f5-7ea7-455d-9406-611cebce642b
|
||||||
procedure TSpreadSingleFormulaTests.TestSumIFS_Microsoft(AFormat: TsSpreadsheetFormat);
|
|
||||||
|
AFormulaType is 0 for COUNTIFS, 1 for SUMIFS, and 2 for AVERAGEIFS }
|
||||||
|
procedure TSpreadSingleFormulaTests.TestCountSumAvgIFS_Microsoft(AFormat: TsSpreadsheetFormat;
|
||||||
|
AFormulaType: Integer);
|
||||||
const
|
const
|
||||||
ROW1 = 10;
|
ROW1 = 10;
|
||||||
ROW2 = 11;
|
ROW2 = 11;
|
||||||
var
|
var
|
||||||
book: TsWorkbook;
|
book: TsWorkbook;
|
||||||
sheet: TsWorksheet;
|
sheet: TsWorksheet;
|
||||||
value: Double;
|
value1, value2: Double;
|
||||||
tempFile: String;
|
tempFile: String;
|
||||||
begin
|
begin
|
||||||
tempFile := GetTempFileName;
|
tempFile := GetTempFileName;
|
||||||
@ -649,16 +656,39 @@ begin
|
|||||||
sheet.WriteNumber(7, 0, 10); sheet.WriteText(7, 1, 'Carrots'); sheet.WriteText(7, 2, 'Tom');
|
sheet.WriteNumber(7, 0, 10); sheet.WriteText(7, 1, 'Carrots'); sheet.WriteText(7, 2, 'Tom');
|
||||||
sheet.WriteNumber(8, 0, 33); sheet.WriteText(8, 1, 'Carrots'); sheet.WriteText(8, 2, 'Sarah');
|
sheet.WriteNumber(8, 0, 33); sheet.WriteText(8, 1, 'Carrots'); sheet.WriteText(8, 2, 'Sarah');
|
||||||
|
|
||||||
sheet.WriteFormula(ROW1, 0, 'SUMIFS(A2:A9, B2:B9, "=A*", C2:C9, "Tom")'); // expected: 20
|
case AFormulaType of
|
||||||
sheet.WriteFormula(ROW2, 0, 'SUMIFS(A2:A9, B2:B9, "<>Bananas", C2:C9, "Tom")'); // expected: 30
|
0: begin
|
||||||
|
sheet.WriteFormula(ROW1, 0, 'COUNTIFS(B2:B9, "=A*", C2:C9, "Tom")'); // expected: 2
|
||||||
|
sheet.WriteFormula(ROW2, 0, 'COUNTIFS(B2:B9, "<>Bananas", C2:C9, "Tom")'); // expected: 3
|
||||||
|
end;
|
||||||
|
1: begin
|
||||||
|
sheet.WriteFormula(ROW1, 0, 'SUMIFS(A2:A9, B2:B9, "=A*", C2:C9, "Tom")'); // expected: 20
|
||||||
|
sheet.WriteFormula(ROW2, 0, 'SUMIFS(A2:A9, B2:B9, "<>Bananas", C2:C9, "Tom")'); // expected: 30
|
||||||
|
end;
|
||||||
|
2: begin
|
||||||
|
sheet.WriteFormula(ROW1, 0, 'AVERAGEIFS(A2:A9, B2:B9, "=A*", C2:C9, "Tom")'); // expected: 4.0
|
||||||
|
sheet.WriteFormula(ROW2, 0, 'AVERAGEIFS(A2:A9, B2:B9, "<>Bananas", C2:C9, "Tom")'); // expected: 10.0
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
sheet.CalcFormulas;
|
sheet.CalcFormulas;
|
||||||
|
|
||||||
value := sheet.ReadAsNumber(ROW1, 0);
|
value1 := sheet.ReadAsNumber(ROW1, 0);
|
||||||
CheckEquals(20, value, 'Unsaved value mismatch in cell ' + CellNotation(sheet, ROW1, 0));
|
value2 := sheet.ReadAsNumber(ROW2, 0);
|
||||||
|
case AFormulaType of
|
||||||
value := sheet.ReadAsNumber(ROW2, 0);
|
0: begin // Checking COUNTIFS
|
||||||
CheckEquals(30, value, 'Unsaved value mismatch in cell ' + CellNotation(sheet, ROW2, 0));
|
CheckEquals(2, value1, 'Unsaved value mismatch in cell ' + CellNotation(sheet, ROW1, 0));
|
||||||
|
CheckEquals(3, value2, 'Unsaved value mismatch in cell ' + CellNotation(sheet, ROW2, 0));
|
||||||
|
end;
|
||||||
|
1: begin // Checking SUMIFS
|
||||||
|
CheckEquals(20, value1, 'Unsaved value mismatch in cell ' + CellNotation(sheet, ROW1, 0));
|
||||||
|
CheckEquals(30, value2, 'Unsaved value mismatch in cell ' + CellNotation(sheet, ROW2, 0));
|
||||||
|
end;
|
||||||
|
2: begin // Checking AVERAGEIFS
|
||||||
|
CheckEquals(10.0, value1, 'Unsaved value mismatch in cell ' + CellNotation(sheet, ROW1, 0));
|
||||||
|
CheckEquals(10.0, value2, 'Unsaved value mismatch in cell ' + CellNotation(sheet, ROW2, 0));
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
book.WriteToFile(tempFile, AFormat, true);
|
book.WriteToFile(tempFile, AFormat, true);
|
||||||
finally
|
finally
|
||||||
@ -671,24 +701,55 @@ begin
|
|||||||
book.ReadFromFile(tempFile, AFormat);
|
book.ReadFromFile(tempFile, AFormat);
|
||||||
sheet := book.GetFirstWorksheet;
|
sheet := book.GetFirstWorksheet;
|
||||||
|
|
||||||
value := sheet.ReadAsNumber(10, 0);
|
value1 := sheet.ReadAsNumber(ROW1, 0);
|
||||||
CheckEquals(20, value, 'Saved value mismatch #2 in cell ' + CellNotation(sheet, 10, 0));
|
value2 := sheet.ReadAsNumber(ROW2, 0);
|
||||||
|
case AFormulaType of
|
||||||
value := sheet.ReadAsNumber(11, 0);
|
0: begin // Checking COUNTIFS
|
||||||
CheckEquals(30, value, 'Saved value mismatch #2 in cell ' + CellNotation(sheet, 11, 0));
|
CheckEquals(2, value1, 'Unsaved value mismatch in cell ' + CellNotation(sheet, ROW1, 0));
|
||||||
|
CheckEquals(3, value2, 'Unsaved value mismatch in cell ' + CellNotation(sheet, ROW2, 0));
|
||||||
|
end;
|
||||||
|
1: begin // Checking SUMIFS
|
||||||
|
CheckEquals(20, value1, 'Unsaved value mismatch in cell ' + CellNotation(sheet, ROW1, 0));
|
||||||
|
CheckEquals(30, value2, 'Unsaved value mismatch in cell ' + CellNotation(sheet, ROW2, 0));
|
||||||
|
end;
|
||||||
|
2: begin // Checking AVERAGEIFS
|
||||||
|
CheckEquals(10.0, value1, 'Unsaved value mismatch in cell ' + CellNotation(sheet, ROW1, 0));
|
||||||
|
CheckEquals(10.0, value2, 'Unsaved value mismatch in cell ' + CellNotation(sheet, ROW2, 0));
|
||||||
|
end;
|
||||||
|
end;
|
||||||
finally
|
finally
|
||||||
book.Free;
|
book.Free;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TSpreadSingleFormulaTests.CountIFS_Microsoft_OOXML;
|
||||||
|
begin
|
||||||
|
TestCountSumAvgIFS_Microsoft(sfOOXML, 0);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSpreadSingleFormulaTests.CountIFS_Microsoft_ODS;
|
||||||
|
begin
|
||||||
|
TestCountSumAvgIFS_Microsoft(sfOpenDocument, 0);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TSpreadSingleFormulaTests.SumIFS_Microsoft_OOXML;
|
procedure TSpreadSingleFormulaTests.SumIFS_Microsoft_OOXML;
|
||||||
begin
|
begin
|
||||||
TestSumIFS_Microsoft(sfOOXML);
|
TestCountSumAvgIFS_Microsoft(sfOOXML, 1);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSpreadSingleFormulaTests.SumIFS_Microsoft_ODS;
|
procedure TSpreadSingleFormulaTests.SumIFS_Microsoft_ODS;
|
||||||
begin
|
begin
|
||||||
TestSumIFS_Microsoft(sfOpenDocument);
|
TestCountSumAvgIFS_Microsoft(sfOpenDocument, 1);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSpreadSingleFormulaTests.AverageIFS_Microsoft_OOXML;
|
||||||
|
begin
|
||||||
|
TestCountSumAvgIFS_Microsoft(sfOOXML, 1);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSpreadSingleFormulaTests.AverageIFS_Microsoft_ODS;
|
||||||
|
begin
|
||||||
|
TestCountSumAvgIFS_Microsoft(sfOpenDocument, 1);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ --- }
|
{ --- }
|
||||||
|
Loading…
Reference in New Issue
Block a user