From 6e25d91992f37ec5c215b16f5c2e3f7c60405e0c Mon Sep 17 00:00:00 2001 From: Dennis Francis Date: Fri, 25 Oct 2019 14:38:27 +0530 Subject: Add unit test for adjacent formula-groups with... indirect intergroup dependency. Change-Id: If8b77116855806d0ba3cdcef8ff8aa17e581d9f9 Reviewed-on: https://gerrit.libreoffice.org/81491 Tested-by: Jenkins Reviewed-by: Dennis Francis --- sc/qa/unit/parallelism.cxx | 55 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/sc/qa/unit/parallelism.cxx b/sc/qa/unit/parallelism.cxx index aebd1575b5c3..f9fd1ef4b5b9 100644 --- a/sc/qa/unit/parallelism.cxx +++ b/sc/qa/unit/parallelism.cxx @@ -41,6 +41,7 @@ public: void testFormulaGroupSpanEval(); void testFormulaGroupSpanEvalNonGroup(); void testArrayFormulaGroup(); + void testDependentFormulaGroupCollection(); CPPUNIT_TEST_SUITE(ScParallelismTest); CPPUNIT_TEST(testSUMIFS); @@ -55,6 +56,7 @@ public: CPPUNIT_TEST(testFormulaGroupSpanEval); CPPUNIT_TEST(testFormulaGroupSpanEvalNonGroup); CPPUNIT_TEST(testArrayFormulaGroup); + CPPUNIT_TEST(testDependentFormulaGroupCollection); CPPUNIT_TEST_SUITE_END(); private: @@ -698,6 +700,59 @@ void ScParallelismTest::testArrayFormulaGroup() m_pDoc->DeleteTab(0); } +void ScParallelismTest::testDependentFormulaGroupCollection() +{ + sc::AutoCalcSwitch aACSwitch(*m_pDoc, false); + m_pDoc->InsertTab(0, "1"); + + OUString aFormula; + + for (size_t nRow = 0; nRow < 16; ++nRow) + { + m_pDoc->SetValue(0, nRow, 0, 1.0); // A1:A16 <== 1 + + if (nRow > 7) + continue; + + // Formula-group in B1:B8 with first cell = "=SUM($A1:$A1024)" + aFormula = "=SUM($A" + OUString::number(1 + nRow) + + ":$A" + OUString::number(1024 + nRow) + ")"; + m_pDoc->SetFormula(ScAddress(1, nRow, 0), aFormula, + formula::FormulaGrammar::GRAM_NATIVE_UI); + + // Formula-group in C1:C8 with first cell = "=SUM($K1:$K1024)" + aFormula = "=SUM($K" + OUString::number(1 + nRow) + + ":$K" + OUString::number(1024 + nRow) + ")"; + m_pDoc->SetFormula(ScAddress(2, nRow, 0), aFormula, + formula::FormulaGrammar::GRAM_NATIVE_UI); + + // Formula-group in D1:D8 with first cell = "=SUM($A1:$A1024) - $A2" + aFormula = "=SUM($A" + OUString::number(1 + nRow) + + ":$A" + OUString::number(1024 + nRow) + ") - $A" + OUString::number(2 + nRow); + m_pDoc->SetFormula(ScAddress(3, nRow, 0), aFormula, + formula::FormulaGrammar::GRAM_NATIVE_UI); + + // Formula-group in K1:K8 with first cell = "=SUM($B1:$B1024)" + aFormula = "=SUM($B" + OUString::number(1 + nRow) + + ":$B" + OUString::number(1024 + nRow) + ")"; + m_pDoc->SetFormula(ScAddress(10, nRow, 0), aFormula, + formula::FormulaGrammar::GRAM_NATIVE_UI); + } + + m_xDocShell->DoHardRecalc(); + + size_t nExpected[8] = { 408, 308, 224, 155, 100, 58, 28, 9 }; + + OString aMsg; + for (size_t nRow = 0; nRow < 8; ++nRow) + { + aMsg = "Value at Cell C" + OString::number(nRow+1); + CPPUNIT_ASSERT_EQUAL_MESSAGE(aMsg.getStr(), nExpected[nRow], static_cast(m_pDoc->GetValue(2, nRow, 0))); + } + + m_pDoc->DeleteTab(0); +} + CPPUNIT_TEST_SUITE_REGISTRATION(ScParallelismTest); CPPUNIT_PLUGIN_IMPLEMENT(); -- cgit