basic/qa/basic_coverage/test_tdf147089_idiv.bas |   30 +++++++++++++++++++++++
 basic/qa/cppunit/test_vba.cxx                   |    1 
 basic/qa/vba_tests/tdf147089_idiv.vb            |   31 ++++++++++++++++++++++++
 basic/source/comp/exprnode.cxx                  |    4 +--
 4 files changed, 64 insertions(+), 2 deletions(-)

New commits:
commit 3ba8b56b32c203326b776b940d20b16eb2340835
Author:     Andreas Heinisch <andreas.heini...@yahoo.de>
AuthorDate: Mon Feb 21 19:34:57 2022 +0100
Commit:     Andreas Heinisch <andreas.heini...@yahoo.de>
CommitDate: Mon Feb 21 23:10:46 2022 +0100

    tdf#147089 - Round Integral Division (IDIV) literals to Integer values
    
    Change-Id: Ia243c6117a437d0c6efb33a4e76c5e9ee539fbdc
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130302
    Tested-by: Jenkins
    Reviewed-by: Andreas Heinisch <andreas.heini...@yahoo.de>

diff --git a/basic/qa/basic_coverage/test_tdf147089_idiv.bas 
b/basic/qa/basic_coverage/test_tdf147089_idiv.bas
new file mode 100644
index 000000000000..3d5e2271140c
--- /dev/null
+++ b/basic/qa/basic_coverage/test_tdf147089_idiv.bas
@@ -0,0 +1,30 @@
+'
+' This file is part of the LibreOffice project.
+'
+' This Source Code Form is subject to the terms of the Mozilla Public
+' License, v. 2.0. If a copy of the MPL was not distributed with this
+' file, You can obtain one at http://mozilla.org/MPL/2.0/.
+'
+
+Option Explicit
+
+Function doUnitTest() As String
+    TestUtil.TestInit
+    verify_testIDiv
+    doUnitTest = TestUtil.GetResult()
+End Function
+
+Sub verify_testIDiv
+    On Error GoTo errorHandler
+
+    ' tdf#147089 - IDIV operands are rounded to Integer values before the 
operation is performed
+    TestUtil.AssertEqual(8.4 \ 2, 4, "8.4 \ 2")
+    TestUtil.AssertEqual(9.9 \ 2, 5, "9.9 \ 2")
+    TestUtil.AssertEqual(20 \ 4.9, 4, "20 \ 4.9")
+    TestUtil.AssertEqual(20 \ 4.4, 5, "20 \ 4.4")
+    TestUtil.AssertEqual(16.4 \ 5.9, 2, "16.4 \ 5.9")
+
+    Exit Sub
+errorHandler:
+    TestUtil.ReportErrorHandler("verify_testIDiv", Err, Error$, Erl)
+End Sub
diff --git a/basic/qa/cppunit/test_vba.cxx b/basic/qa/cppunit/test_vba.cxx
index 868dc15891e3..a420568f8b7c 100644
--- a/basic/qa/cppunit/test_vba.cxx
+++ b/basic/qa/cppunit/test_vba.cxx
@@ -134,6 +134,7 @@ void VBATest::testMiscVBAFunctions()
         "string.vb",
         "strreverse.vb",
         "switch.vb",
+        "tdf147089_idiv.vb",
         "timeserial.vb",
         "timevalue.vb",
         "trim.vb",
diff --git a/basic/qa/vba_tests/tdf147089_idiv.vb 
b/basic/qa/vba_tests/tdf147089_idiv.vb
new file mode 100644
index 000000000000..515f1e00cf63
--- /dev/null
+++ b/basic/qa/vba_tests/tdf147089_idiv.vb
@@ -0,0 +1,31 @@
+'
+' This file is part of the LibreOffice project.
+'
+' This Source Code Form is subject to the terms of the Mozilla Public
+' License, v. 2.0. If a copy of the MPL was not distributed with this
+' file, You can obtain one at http://mozilla.org/MPL/2.0/.
+'
+
+Option VBASupport 1
+Option Explicit
+
+Function doUnitTest() As String
+    TestUtil.TestInit
+    verify_testIDiv
+    doUnitTest = TestUtil.GetResult()
+End Function
+
+Sub verify_testIDiv
+    On Error GoTo errorHandler
+
+    ' tdf#147089 - IDIV operands are rounded to Integer values before the 
operation is performed
+    TestUtil.AssertEqual(8.4 \ 2, 4, "8.4 \ 2")
+    TestUtil.AssertEqual(9.9 \ 2, 5, "9.9 \ 2")
+    TestUtil.AssertEqual(20 \ 4.9, 4, "20 \ 4.9")
+    TestUtil.AssertEqual(20 \ 4.4, 5, "20 \ 4.4")
+    TestUtil.AssertEqual(16.4 \ 5.9, 2, "16.4 \ 5.9")
+
+    Exit Sub
+errorHandler:
+    TestUtil.ReportErrorHandler("verify_testIDiv", Err, Error$, Erl)
+End Sub
diff --git a/basic/source/comp/exprnode.cxx b/basic/source/comp/exprnode.cxx
index 17bdbca25258..a5fd8dde3cfc 100644
--- a/basic/source/comp/exprnode.cxx
+++ b/basic/source/comp/exprnode.cxx
@@ -296,8 +296,8 @@ void SbiExprNode::FoldConstantsBinaryNode(SbiParser* 
pParser)
     {
         double nl = pLeft->nVal;
         double nr = pRight->nVal;
-        // tdf#141201 - round MOD literals to Integer values
-        if (eTok == MOD)
+        // tdf#141201, tdf#147089 - round MOD/IDIV literals to Integer values
+        if (eTok == MOD || eTok == IDIV)
         {
             nl = rtl::math::round(nl);
             nr = rtl::math::round(nr);

Reply via email to