[Libreoffice-commits] core.git: sc/qa

Tor Lillqvist tml at collabora.com
Mon Aug 14 11:28:08 UTC 2017


 sc/qa/unit/parallelism.cxx |   65 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 65 insertions(+)

New commits:
commit 872c130afbf314478c35c868ed24a2449489838b
Author: Tor Lillqvist <tml at collabora.com>
Date:   Mon Aug 14 13:04:53 2017 +0300

    Test VLOOKUP, try to handle various special cases and errors
    
    Change-Id: I0ea9b9d882bf95c81ad784537671e22cb48d8c65

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();


More information about the Libreoffice-commits mailing list