diff options
author | Tor Lillqvist <tml@collabora.com> | 2017-08-14 13:04:53 +0300 |
---|---|---|
committer | Tor Lillqvist <tml@collabora.com> | 2017-08-14 13:06:08 +0300 |
commit | 872c130afbf314478c35c868ed24a2449489838b (patch) | |
tree | 2a5f3ce0b4d7ce72a7e72d179b874b0d238243e0 | |
parent | ec2abbca3d9befc4192452555a9433d267a47d58 (diff) |
Test VLOOKUP, try to handle various special cases and errors
Change-Id: I0ea9b9d882bf95c81ad784537671e22cb48d8c65
-rw-r--r-- | sc/qa/unit/parallelism.cxx | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/sc/qa/unit/parallelism.cxx b/sc/qa/unit/parallelism.cxx index 0f4ccaad5e01..f7d70f6b5e1f 100644 --- a/sc/qa/unit/parallelism.cxx +++ b/sc/qa/unit/parallelism.cxx @@ -45,10 +45,12 @@ public: void testSUMIFS(); void testDivision(); + void testVLOOKUP(); CPPUNIT_TEST_SUITE(ScParallelismTest); CPPUNIT_TEST(testSUMIFS); CPPUNIT_TEST(testDivision); + CPPUNIT_TEST(testVLOOKUP); CPPUNIT_TEST_SUITE_END(); private: @@ -192,6 +194,69 @@ void ScParallelismTest::testDivision() m_pDoc->DeleteTab(0); } +void ScParallelismTest::testVLOOKUP() +{ + m_pDoc->InsertTab(0, "1"); + + for (auto i = 1; i < 1000; i++) + { + if (i%5) + m_pDoc->SetValue(0, i, 0, i); + else + m_pDoc->SetValue(0, i, 0, i+0.1); + + if (i%2) + m_pDoc->SetValue(1, i, 0, i*10); + else + m_pDoc->SetString(1, i, 0, "N" + OUString::number(i*10)); + + if (i%3) + { + m_pDoc->SetFormula(ScAddress(2, i, 0), + "=VLOOKUP(" + OUString::number(i) + "; " + "A$2:B$1000; 2; 0)", + formula::FormulaGrammar::GRAM_NATIVE_UI); + } + + else + { + m_pDoc->SetFormula(ScAddress(2, i, 0), + "=VLOOKUP(42.42; " + "A$2:B$1000; 2; 0)", + formula::FormulaGrammar::GRAM_NATIVE_UI); + } + } + + m_xDocShell->DoHardRecalc(); + + for (auto i = 1; i < 1000; i++) + { + OString sMessage = "At row " + OString::number(i+1); + if (i%3) + { + if (i%5) + { + if (i%2) + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(sMessage.getStr(), static_cast<double>(i*10), m_pDoc->GetValue(2, i, 0), 1e-10); + else + CPPUNIT_ASSERT_EQUAL_MESSAGE(sMessage.getStr(), OUString("N" + OUString::number(i*10)), m_pDoc->GetString(2, i, 0)); + } + else + { + // The corresponding value in A is i+0.1 + CPPUNIT_ASSERT_EQUAL_MESSAGE(sMessage.getStr(), OUString("#N/A"), m_pDoc->GetString(2, i, 0)); + } + } + else + { + // The 42.42 is never found + CPPUNIT_ASSERT_EQUAL_MESSAGE(sMessage.getStr(), OUString("#N/A"), m_pDoc->GetString(2, i, 0)); + } + } + + m_pDoc->DeleteTab(0); +} + CPPUNIT_TEST_SUITE_REGISTRATION(ScParallelismTest); CPPUNIT_PLUGIN_IMPLEMENT(); |