summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDennis Francis <dennis.francis@collabora.com>2019-10-22 11:04:15 +0530
committerDennis Francis <dennis.francis@collabora.com>2019-10-22 12:12:51 +0200
commit3e9ee3803535cde4c6f5de4fb7edf36e5ed6fac4 (patch)
treee88bac64f99d81b0c4f0479b56d2fcc74b3a98eb
parentde817cb48cf550c5cdfb0e83cf914f37454c3622 (diff)
Add a unit test for SUMPRODUCT with group-threading
This test protects the fix in commit : 2d2ea50e0de1df635d176d8032d2f9f8744e3abe Cleanup the array-formula related members in ScInterpreter... Change-Id: Ib98c49513e3edabdd2d2ebd1bfaf9718abb4e517 Reviewed-on: https://gerrit.libreoffice.org/81301 Tested-by: Jenkins Reviewed-by: Dennis Francis <dennis.francis@collabora.com>
-rw-r--r--sc/qa/unit/parallelism.cxx39
1 files changed, 39 insertions, 0 deletions
diff --git a/sc/qa/unit/parallelism.cxx b/sc/qa/unit/parallelism.cxx
index 9758836d8b9a..aebd1575b5c3 100644
--- a/sc/qa/unit/parallelism.cxx
+++ b/sc/qa/unit/parallelism.cxx
@@ -40,6 +40,7 @@ public:
void testMultipleFGColumn();
void testFormulaGroupSpanEval();
void testFormulaGroupSpanEvalNonGroup();
+ void testArrayFormulaGroup();
CPPUNIT_TEST_SUITE(ScParallelismTest);
CPPUNIT_TEST(testSUMIFS);
@@ -53,6 +54,7 @@ public:
CPPUNIT_TEST(testMultipleFGColumn);
CPPUNIT_TEST(testFormulaGroupSpanEval);
CPPUNIT_TEST(testFormulaGroupSpanEvalNonGroup);
+ CPPUNIT_TEST(testArrayFormulaGroup);
CPPUNIT_TEST_SUITE_END();
private:
@@ -659,6 +661,43 @@ void ScParallelismTest::testFormulaGroupSpanEvalNonGroup()
m_pDoc->DeleteTab(0);
}
+void ScParallelismTest::testArrayFormulaGroup()
+{
+ sc::AutoCalcSwitch aACSwitch(*m_pDoc, false);
+ m_pDoc->InsertTab(0, "1");
+
+ m_pDoc->SetValue(1, 0, 0, 2.0); // B1 <== 2
+ m_pDoc->SetValue(2, 0, 0, 1.0); // C1 <== 1
+ OUString aFormula;
+
+ for (size_t nRow = 1; nRow < 16; ++nRow)
+ {
+ m_pDoc->SetValue(0, nRow, 0, 1.0); // A2:A16 <== 1
+
+ if (nRow > 10)
+ continue;
+
+ aFormula = "=SUMPRODUCT(($A" + OUString::number(1 + nRow) +
+ ":$A" + OUString::number(499 + nRow) + ")*B$1+C$1)";
+ // Formula-group in B2:B11 with first cell = "=SUMPRODUCT(($A2:$A500)*B$1+C$1)"
+ m_pDoc->SetFormula(ScAddress(1, nRow, 0), aFormula,
+ formula::FormulaGrammar::GRAM_NATIVE_UI);
+ }
+
+ m_xDocShell->DoHardRecalc();
+
+ size_t nExpected = 529;
+ OString aMsg;
+ for (size_t nRow = 1; nRow < 11; ++nRow)
+ {
+ aMsg = "Value at Cell B" + OString::number(nRow+1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(aMsg.getStr(), nExpected, static_cast<size_t>(m_pDoc->GetValue(1, nRow, 0)));
+ nExpected -= 2;
+ }
+
+ m_pDoc->DeleteTab(0);
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(ScParallelismTest);
CPPUNIT_PLUGIN_IMPLEMENT();