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.heinisch@yahoo.de>
(cherry picked from commit 3ba8b56b32c203326b776b940d20b16eb2340835)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130315
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
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 0000000..3d5e227
--- /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 818ba1c..7cb6455 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 0000000..515f1e0
--- /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 17bdbca..a5fd8dd 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);