diff options
author | Dennis Francis <dennis.francis@collabora.co.uk> | 2017-11-30 14:36:24 +0530 |
---|---|---|
committer | Dennis Francis <dennis.francis@collabora.co.uk> | 2017-12-12 20:44:17 +0100 |
commit | 8807e568326679831869329aabf4f941be39f2ab (patch) | |
tree | 09801df58e99257a720bd6f1db91ebf00833ec5c /sc/qa | |
parent | 3b28cd252dd69d140028d1dc1646d7a061eeb19f (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.cxx | 34 |
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(); |