summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTor Lillqvist <tml@collabora.com>2017-08-14 13:04:53 +0300
committerTor Lillqvist <tml@collabora.com>2017-08-14 13:06:08 +0300
commit872c130afbf314478c35c868ed24a2449489838b (patch)
tree2a5f3ce0b4d7ce72a7e72d179b874b0d238243e0
parentec2abbca3d9befc4192452555a9433d267a47d58 (diff)
Test VLOOKUP, try to handle various special cases and errors
Change-Id: I0ea9b9d882bf95c81ad784537671e22cb48d8c65
-rw-r--r--sc/qa/unit/parallelism.cxx65
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();