Unit tests for a couple of cases...
for the fixes in commit 49324c8bc90002b89990bcfe17da77ae1de55cd9 "Generalize FG cycle detection for cycles involving a mix of formula-groups and plain formula-cells which are not grouped" Change-Id: I63b4f3ff488f8e788f42527f939769887877b989 Reviewed-on: https://gerrit.libreoffice.org/57047 Tested-by: Jenkins Reviewed-by: Michael Meeks <michael.meeks@collabora.com>
This commit is contained in:
committed by
Michael Meeks
parent
24afa5ddbe
commit
243f7d73a0
@@ -52,6 +52,8 @@ public:
|
|||||||
void testVLOOKUPSUM();
|
void testVLOOKUPSUM();
|
||||||
void testSingleRef();
|
void testSingleRef();
|
||||||
void testSUMIFImplicitRange();
|
void testSUMIFImplicitRange();
|
||||||
|
void testFGCycleWithPlainFormulaCell1();
|
||||||
|
void testFGCycleWithPlainFormulaCell2();
|
||||||
|
|
||||||
CPPUNIT_TEST_SUITE(ScParallelismTest);
|
CPPUNIT_TEST_SUITE(ScParallelismTest);
|
||||||
CPPUNIT_TEST(testSUMIFS);
|
CPPUNIT_TEST(testSUMIFS);
|
||||||
@@ -60,6 +62,8 @@ public:
|
|||||||
CPPUNIT_TEST(testVLOOKUPSUM);
|
CPPUNIT_TEST(testVLOOKUPSUM);
|
||||||
CPPUNIT_TEST(testSingleRef);
|
CPPUNIT_TEST(testSingleRef);
|
||||||
CPPUNIT_TEST(testSUMIFImplicitRange);
|
CPPUNIT_TEST(testSUMIFImplicitRange);
|
||||||
|
CPPUNIT_TEST(testFGCycleWithPlainFormulaCell1);
|
||||||
|
CPPUNIT_TEST(testFGCycleWithPlainFormulaCell2);
|
||||||
CPPUNIT_TEST_SUITE_END();
|
CPPUNIT_TEST_SUITE_END();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -396,6 +400,94 @@ void ScParallelismTest::testSUMIFImplicitRange()
|
|||||||
m_pDoc->DeleteTab(0);
|
m_pDoc->DeleteTab(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScParallelismTest::testFGCycleWithPlainFormulaCell1()
|
||||||
|
{
|
||||||
|
sc::AutoCalcSwitch aACSwitch(*m_pDoc, false);
|
||||||
|
m_pDoc->InsertTab(0, "1");
|
||||||
|
const size_t nNumRows = 1048;
|
||||||
|
// Column A contains no formula-group
|
||||||
|
// A1 = 100
|
||||||
|
m_pDoc->SetValue(0, 0, 0, 100.0);
|
||||||
|
// A500 = B499 + 1
|
||||||
|
m_pDoc->SetFormula(ScAddress(0, 499, 0),
|
||||||
|
"=$B499 + 1",
|
||||||
|
formula::FormulaGrammar::GRAM_NATIVE_UI);
|
||||||
|
// Column B has a formula-group referencing column A.
|
||||||
|
OUString aFormula;
|
||||||
|
for (size_t i = 0; i < nNumRows; ++i)
|
||||||
|
{
|
||||||
|
aFormula = "=$A" + OUString::number(i+1) + " + 100";
|
||||||
|
m_pDoc->SetFormula(ScAddress(1, i, 0),
|
||||||
|
aFormula,
|
||||||
|
formula::FormulaGrammar::GRAM_NATIVE_UI);
|
||||||
|
}
|
||||||
|
m_xDocShell->DoHardRecalc();
|
||||||
|
// Value at A500 must be 101
|
||||||
|
const size_t nVal = 100;
|
||||||
|
CPPUNIT_ASSERT_EQUAL_MESSAGE("Value at A500", nVal + 1, static_cast<size_t>(m_pDoc->GetValue(0, 499, 0)));
|
||||||
|
for (size_t i = 0; i < nNumRows; ++i)
|
||||||
|
{
|
||||||
|
OString aMsg = "Value at cell B" + OString::number(i+1);
|
||||||
|
size_t nExpected = nVal;
|
||||||
|
if (i == 0)
|
||||||
|
nExpected = 200;
|
||||||
|
else if (i == 499)
|
||||||
|
nExpected = 201;
|
||||||
|
CPPUNIT_ASSERT_EQUAL_MESSAGE(aMsg.getStr(), nExpected, static_cast<size_t>(m_pDoc->GetValue(1, i, 0)));
|
||||||
|
}
|
||||||
|
m_pDoc->DeleteTab(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScParallelismTest::testFGCycleWithPlainFormulaCell2()
|
||||||
|
{
|
||||||
|
sc::AutoCalcSwitch aACSwitch(*m_pDoc, false);
|
||||||
|
m_pDoc->InsertTab(0, "1");
|
||||||
|
const size_t nNumRows = 1048;
|
||||||
|
// Column A
|
||||||
|
OUString aFormula;
|
||||||
|
for (size_t i = 0; i < nNumRows; ++i)
|
||||||
|
{
|
||||||
|
aFormula = "=$B" + OUString::number(i+1) + " + 1";
|
||||||
|
m_pDoc->SetFormula(ScAddress(0, i, 0),
|
||||||
|
aFormula,
|
||||||
|
formula::FormulaGrammar::GRAM_NATIVE_UI);
|
||||||
|
}
|
||||||
|
// Column B
|
||||||
|
for (size_t i = 0; i < nNumRows; ++i)
|
||||||
|
{
|
||||||
|
aFormula = "=$C" + OUString::number(i+1) + " + 1";
|
||||||
|
m_pDoc->SetFormula(ScAddress(1, i, 0),
|
||||||
|
aFormula,
|
||||||
|
formula::FormulaGrammar::GRAM_NATIVE_UI);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Column C has no FG but a cell at C500 that references A499
|
||||||
|
m_pDoc->SetFormula(ScAddress(2, 499, 0), // C500
|
||||||
|
"=$A499 + 1",
|
||||||
|
formula::FormulaGrammar::GRAM_NATIVE_UI);
|
||||||
|
m_xDocShell->DoHardRecalc();
|
||||||
|
|
||||||
|
size_t nExpected = 0;
|
||||||
|
for (size_t i = 0; i < nNumRows; ++i)
|
||||||
|
{
|
||||||
|
OString aMsg = "Value at cell A" + OString::number(i+1);
|
||||||
|
nExpected = 2;
|
||||||
|
if (i == 499) // A500 must have value = 5
|
||||||
|
nExpected = 5;
|
||||||
|
CPPUNIT_ASSERT_EQUAL_MESSAGE(aMsg.getStr(), nExpected, static_cast<size_t>(m_pDoc->GetValue(0, i, 0)));
|
||||||
|
aMsg = "Value at cell B" + OString::number(i+1);
|
||||||
|
nExpected = 1;
|
||||||
|
if (i == 499) // B500 must have value = 4
|
||||||
|
nExpected = 4;
|
||||||
|
CPPUNIT_ASSERT_EQUAL_MESSAGE(aMsg.getStr(), nExpected, static_cast<size_t>(m_pDoc->GetValue(1, i, 0)));
|
||||||
|
}
|
||||||
|
|
||||||
|
// C500 must have value = 3
|
||||||
|
nExpected = 3;
|
||||||
|
CPPUNIT_ASSERT_EQUAL_MESSAGE("Value at cell C500", nExpected, static_cast<size_t>(m_pDoc->GetValue(2, 499, 0)));
|
||||||
|
m_pDoc->DeleteTab(0);
|
||||||
|
}
|
||||||
|
|
||||||
CPPUNIT_TEST_SUITE_REGISTRATION(ScParallelismTest);
|
CPPUNIT_TEST_SUITE_REGISTRATION(ScParallelismTest);
|
||||||
|
|
||||||
CPPUNIT_PLUGIN_IMPLEMENT();
|
CPPUNIT_PLUGIN_IMPLEMENT();
|
||||||
|
Reference in New Issue
Block a user