summaryrefslogtreecommitdiff
path: root/sc/qa
diff options
context:
space:
mode:
authorDennis Francis <dennis.francis@collabora.co.uk>2017-11-30 14:36:24 +0530
committerDennis Francis <dennis.francis@collabora.co.uk>2017-12-12 20:44:17 +0100
commit8807e568326679831869329aabf4f941be39f2ab (patch)
tree09801df58e99257a720bd6f1db91ebf00833ec5c /sc/qa
parent3b28cd252dd69d140028d1dc1646d7a061eeb19f (diff)
Do not use threading for formula group if...
...there is at least one opcode in the token array that is in the blacklist set of opcodes for threading. Cleaned up the logic by removing FormulaVectorEnabledForThreading from ScFormulaVectorState enum and created two separate boolean fields in ScTokenArray to keep track of whether OpenCL or threading could be used. Change-Id: Ieca0004b33a3cfea6ca5c0ff90bc8cea8746d102 Reviewed-on: https://gerrit.libreoffice.org/45564 Reviewed-by: Michael Meeks <michael.meeks@collabora.com> Tested-by: Michael Meeks <michael.meeks@collabora.com> Tested-by: Jenkins <ci@libreoffice.org> (cherry picked from commit 330b1b5bcec06e3a8d35413ff921fa219bc0a8dc) Reviewed-on: https://gerrit.libreoffice.org/46318
Diffstat (limited to 'sc/qa')
-rw-r--r--sc/qa/unit/parallelism.cxx34
1 files changed, 34 insertions, 0 deletions
diff --git a/sc/qa/unit/parallelism.cxx b/sc/qa/unit/parallelism.cxx
index e3bb00502ea8..428d65a20bec 100644
--- a/sc/qa/unit/parallelism.cxx
+++ b/sc/qa/unit/parallelism.cxx
@@ -45,11 +45,13 @@ public:
void testSUMIFS();
void testDivision();
void testVLOOKUP();
+ void testVLOOKUPSUM();
CPPUNIT_TEST_SUITE(ScParallelismTest);
CPPUNIT_TEST(testSUMIFS);
CPPUNIT_TEST(testDivision);
CPPUNIT_TEST(testVLOOKUP);
+ CPPUNIT_TEST(testVLOOKUPSUM);
CPPUNIT_TEST_SUITE_END();
private:
@@ -262,6 +264,38 @@ void ScParallelismTest::testVLOOKUP()
m_pDoc->DeleteTab(0);
}
+void ScParallelismTest::testVLOOKUPSUM()
+{
+ m_pDoc->InsertTab(0, "1");
+
+ const size_t nNumRows = 4096*4;
+ OUString aTableRef = "$A$1:$B$" + OUString::number(nNumRows);
+ for (size_t i = 0; i < nNumRows; ++i)
+ {
+ m_pDoc->SetValue(0, i, 0, static_cast<double>(i));
+ m_pDoc->SetValue(1, i, 0, static_cast<double>(5*i + 100));
+ m_pDoc->SetValue(2, i, 0, static_cast<double>(nNumRows - i - 1));
+ }
+ for (size_t i = 0; i < nNumRows; ++i)
+ {
+ OUString aArgNum = "C" + OUString::number(i+1);
+ m_pDoc->SetFormula(ScAddress(3, i, 0),
+ "=SUM(" + aArgNum + ";VLOOKUP(" + aArgNum + ";" + aTableRef + "; 2; 0)) + SUM($A1:$A2)",
+ formula::FormulaGrammar::GRAM_NATIVE_UI);
+ }
+
+ m_xDocShell->DoHardRecalc();
+
+ size_t nArg;
+ for (size_t i = 0; i < nNumRows; ++i)
+ {
+ OString aMsg = "At row " + OString::number(i);
+ nArg = nNumRows - i - 1;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(aMsg.getStr(), 6*nArg + 101, static_cast<size_t>(m_pDoc->GetValue(3, i, 0)));
+ }
+ m_pDoc->DeleteTab(0);
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(ScParallelismTest);
CPPUNIT_PLUGIN_IMPLEMENT();