* Bug 16151 fixed: now isequal(1:$, 2:$) returns %F 20/21520/3
mottelet [Thu, 2 Jul 2020 08:30:12 +0000 (10:30 +0200)]
http://bugzilla.scilab.org/show_bug.cgi?id=16151

Change-Id: I3c9018a226316afeaec95411a0970a9dc873a0a8

scilab/CHANGES.md
scilab/modules/ast/includes/types/implicitlist.hxx
scilab/modules/ast/src/cpp/types/implicitlist.cpp
scilab/modules/ast/tests/nonreg_tests/bug_16151.tst [new file with mode: 0644]

index 09283f4..3a5896b 100644 (file)
@@ -288,6 +288,7 @@ Bug Fixes
 * [#15842](https://bugzilla.scilab.org/15842): `unique` could not process 2D sparse matrices.
 * [#16106](https://bugzilla.scilab.org/16106): Xcos sciblk4 user-defined blocks did not handle opar and odstate/oz correctly.
 * [#16122](https://bugzilla.scilab.org/16122): concat polynomials with <> var did not raise an error.
+* [#16151](https://bugzilla.scilab.org/16151): `isequal(1:$, 2:$)` returned `%T`.
 * [#16274](https://bugzilla.scilab.org/16274): assert_checkequal() did not considered equal matching Nan or void elements in (nested) containers.
 * [#16337](https://bugzilla.scilab.org/16337): The 3rd output of `[U,km,ku] = unique(..)` was not implemented.
 * [#16342](https://bugzilla.scilab.org/16342): `strcat()` was much slower in Scilab 6.0.2.
index ceaf9d6..5f2c0f1 100644 (file)
@@ -69,6 +69,9 @@ public :
         return IdImplicitList;
     }
 
+    bool  operator==(const InternalType& it) override;
+    bool  operator!=(const InternalType& it) override;
+
     bool isImplicitList() override
     {
         return true;
index 527cdfd..42ca980 100644 (file)
@@ -190,6 +190,23 @@ void ImplicitList::setEnd(InternalType* _poIT)
     m_bComputed = false;
 }
 
+bool ImplicitList::operator==(const InternalType& it)
+{
+    if (const_cast<InternalType &>(it).isImplicitList() == false)
+    {
+        return false;
+    }
+
+    ImplicitList* pIL = const_cast<InternalType &>(it).getAs<ImplicitList>();
+
+    return *m_poStart == *pIL->getStart() &&  *m_poStep == *pIL->getStep() &&  *m_poEnd == *pIL->getEnd();
+}
+
+bool ImplicitList::operator!=(const InternalType& it)
+{
+    return !(*this == it);
+}
+
 bool ImplicitList::compute()
 {
     if (m_bComputed == true)
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_16151.tst b/scilab/modules/ast/tests/nonreg_tests/bug_16151.tst
new file mode 100644 (file)
index 0000000..f6937c4
--- /dev/null
@@ -0,0 +1,28 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2020 - St├ęphane MOTTELET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+//
+// <-- Non-regression test for bug 16151 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/16151
+//
+// <-- Short Description -->
+// isequal(1:$, 2:$) returns %T
+
+assert_checktrue(isequal(1:$,1:1:$));
+assert_checktrue(isequal($-1:$,$-1:1:$));
+assert_checkfalse(isequal($-1:$,$-1:2:$));
+assert_checkfalse(isequal($:-1:1,1:$));
+assert_checkfalse(isequal(1:$,2:$));
+assert_checkfalse(isequal(1:$,1:2:$));
+assert_checkfalse(isequal(1:$,1:$-1));
+assert_checkfalse(isequal(1:$,1:2:$));
+
+