* Bug #14543 fixed - == and <> operations were not overloaded for rational types 70/18470/2
Pierre-Aime AGNEL [Tue, 16 Aug 2016 15:45:10 +0000 (17:45 +0200)]
http://bugzilla.scilab.org/show_bug.cgi?id=14543

Change-Id: Iddcaef3f2b2a226ef0a4b7d5f832018616d9112d

scilab/CHANGES.md
scilab/modules/ast/src/cpp/operations/types_comparison_eq.cpp
scilab/modules/ast/src/cpp/operations/types_comparison_ne.cpp
scilab/modules/ast/tests/nonreg_tests/bug_14543.dia.ref [new file with mode: 0644]
scilab/modules/ast/tests/nonreg_tests/bug_14543.tst [new file with mode: 0644]

index 2d7aa83..4d9e78e 100644 (file)
@@ -564,4 +564,5 @@ Bug Fixes
 * [#14517](http://bugzilla.scilab.org/show_bug.cgi?id=14517): The second argument of part function accepted an index of 0 without exiting in error.
 * [#14524](http://bugzilla.scilab.org/show_bug.cgi?id=14524): Numeric locales were not set to standard "C" by default at scilab startup
 * [#14540](http://bugzilla.scilab.org/show_bug.cgi?id=14540): Datatips did not clip outside axes bounds
+* [#14543](http://bugzilla.scilab.org/show_bug.cgi?id=14543): fixed - == and <> operations were not overloaded for rational types
 * [#14685](http://bugzilla.scilab.org/show_bug.cgi?id=14685): datavec produced an invalid index error.
index cd25e19..aba9eb7 100644 (file)
@@ -2,6 +2,7 @@
  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  *  Copyright (C) 2012 - Scilab Enterprises - Antoine ELIAS
  *  Copyright (C) 2015 - Scilab Enterprises - Sylvain GENIN
+ *  Copyright (C) 2016 - Scilab Enterprises - Pierre-Aimé AGNEL
  *
  * Copyright (C) 2012 - 2016 - Scilab Enterprises
  *
@@ -2252,13 +2253,26 @@ InternalType* compequal_M_IC(T *_pL, U *_pR)
 template<class T, class U, class O>
 InternalType* compequal_M_E(T *_pL, U *_pR)
 {
-    return new Bool(false);
+    // Try to find an overload and call it if exists
+    types::typed_list tmp;
+    tmp.push_back(_pL);
+    tmp.push_back(_pR);
+    std::wstring overloadName(Overload::buildOverloadName(Overload::getNameFromOper(ast::OpExp::eq), tmp, 1, true));
+    types::InternalType* pIT = symbol::Context::getInstance()->get(symbol::Symbol(overloadName));
+    if (pIT)
+    {
+        return NULL;
+    }
+    else
+    {
+        return new Bool(false);
+    }
 }
 
 template<class T, class U, class O>
 InternalType* compequal_E_M(T *_pL, U *_pR)
 {
-    return new Bool(false);
+    return compequal_M_E<U, T, O>(_pR, _pL);
 }
 
 template<class T, class U, class O>
index ca22271..e195aa8 100644 (file)
@@ -1,8 +1,9 @@
 /*
-*  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-*  Copyright (C) 2011 - DIGITEO - Antoine ELIAS
-*  Copyright (C) 2015 - Scilab Enterprises - Sylvain GENIN
-*
+ *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ *  Copyright (C) 2011 - DIGITEO - Antoine ELIAS
+ *  Copyright (C) 2015 - Scilab Enterprises - Sylvain GENIN
+ *  Copyright (C) 2016 - Scilab Enterprises - Pierre-Aimé AGNEL
+ *
  * Copyright (C) 2012 - 2016 - Scilab Enterprises
  *
  * This file is hereby licensed under the terms of the GNU GPL v2.0,
@@ -2254,13 +2255,26 @@ InternalType* compnoequal_M_IC(T *_pL, U *_pR)
 template<class T, class U, class O>
 InternalType* compnoequal_M_E(T *_pL, U *_pR)
 {
-    return new Bool(true);
+    // Try to find an overload and call it if exists
+    types::typed_list tmp;
+    tmp.push_back(_pL);
+    tmp.push_back(_pR);
+    std::wstring overloadName(Overload::buildOverloadName(Overload::getNameFromOper(ast::OpExp::ne), tmp, 1, true));
+    types::InternalType* pIT = symbol::Context::getInstance()->get(symbol::Symbol(overloadName));
+    if (pIT)
+    {
+        return NULL;
+    }
+    else
+    {
+        return new Bool(true);
+    }
 }
 
 template<class T, class U, class O>
 InternalType* compnoequal_E_M(T *_pL, U *_pR)
 {
-    return new Bool(true);
+    return compnoequal_M_E<U, T, O>(_pR, _pL);
 }
 
 template<class T, class U, class O>
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_14543.dia.ref b/scilab/modules/ast/tests/nonreg_tests/bug_14543.dia.ref
new file mode 100644 (file)
index 0000000..587bf3d
--- /dev/null
@@ -0,0 +1,20 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Pierre-Aimé AGNEL
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- Non-regression test for bug 14543 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=14543
+//
+// <-- Short Description -->
+//    == and <> were not overloaded for rational
+r = 1/%z - 1/%z;
+assert_checktrue(r == 0);
+assert_checktrue(r <> 1);
+assert_checkfalse(r <> 0);
+r = (2/%s)/(1/%s);
+assert_checktrue(r == 2);
+assert_checkfalse(r <> 2);
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_14543.tst b/scilab/modules/ast/tests/nonreg_tests/bug_14543.tst
new file mode 100644 (file)
index 0000000..413b367
--- /dev/null
@@ -0,0 +1,23 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Pierre-Aimé AGNEL
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- Non-regression test for bug 14543 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=14543
+//
+// <-- Short Description -->
+//    == and <> were not overloaded for rational
+
+r = 1/%z - 1/%z;
+assert_checktrue(r == 0);
+assert_checktrue(r <> 1);
+assert_checkfalse(r <> 0);
+
+r = (2/%s)/(1/%s);
+assert_checktrue(r == 2);
+assert_checkfalse(r <> 2);