a+/-(i:step:$) must not shift the step 06/20706/3
Samuel GOUGEON [Tue, 20 Feb 2018 19:47:03 +0000 (20:47 +0100)]
Change-Id: I29f965ea2cc142201ba9717c2c521a749f91bea0

scilab/modules/overloading/macros/%ip_a_s.sci
scilab/modules/overloading/macros/%ip_s.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%ip_s_s.sci
scilab/modules/overloading/macros/%s_a_ip.sci
scilab/modules/overloading/macros/%s_s_ip.sci
scilab/modules/overloading/tests/unit_tests/implicit_list.tst [new file with mode: 0644]

index a65be06..7b4779d 100644 (file)
@@ -1,5 +1,6 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) INRIA
+// Copyright (C) 2018 - Samuel GOUGEON
 //
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
 //
@@ -16,5 +17,5 @@ function r = %ip_a_s(ip,s)
         msg = _("%s: Argument #%d: Scalar (1 element) expected.\n")
         error(msprintf(msg, "%ip_a_s", 2))
     end
-    r = (ip(1)+s):(ip(2)+s):(ip(3)+s)
+    r = (ip(1)+s):ip(2):(ip(3)+s)
 endfunction
diff --git a/scilab/modules/overloading/macros/%ip_s.sci b/scilab/modules/overloading/macros/%ip_s.sci
new file mode 100644 (file)
index 0000000..473d810
--- /dev/null
@@ -0,0 +1,16 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2018 - Samuel GOUGEON
+//
+// Copyright (C) 2012 - 2016 - Scilab Enterprises
+//
+// This file is hereby licensed under the terms of the GNU GPL v2.0,
+// pursuant to article 5.3.4 of the CeCILL v.2.1.
+// This file was originally licensed under the terms of the CeCILL v2.1,
+// and continues to be available under such terms.
+// For more information, see the COPYING file which you should have received
+// along with this program.
+
+function r = %ip_s(ip)
+    // -(1:2:$)
+    r = -ip(1):-ip(2):-ip(3)
+endfunction
index 16ef132..4abfd91 100644 (file)
@@ -1,5 +1,6 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) INRIA
+// Copyright (C) 2018 - Samuel GOUGEON
 //
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
 //
@@ -13,5 +14,5 @@
 function r=%ip_s_s(ip,s)
     // ip-s
     if size(s,"*")<>1 then error(10),end
-    r=(ip(1)-s):(ip(2)-s):(ip(3)-s)
+    r=(ip(1)-s):ip(2):(ip(3)-s)
 endfunction
index 656547f..d53a009 100644 (file)
@@ -1,5 +1,6 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) INRIA
+// Copyright (C) 2018 - Samuel GOUGEON
 //
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
 //
@@ -16,5 +17,5 @@ function r = %s_a_ip(s,ip)
         msg = _("%s: Argument #%d: Scalar (1 element) expected.\n")
         error(msprintf(msg, "%s_a_ip", 1))
     end
-    r=(s+ip(1)):(s+ip(2)):(s+ip(3))
+    r=(s+ip(1)):ip(2):(s+ip(3))
 endfunction
index d11193d..0d980ec 100644 (file)
@@ -1,5 +1,6 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) INRIA
+// Copyright (C) 2018 - Samuel GOUGEON
 //
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
 //
@@ -16,5 +17,5 @@ function r = %s_s_ip(s,ip)
         msg = _("%s: Argument #%d: Scalar (1 element) expected.\n")
         error(msprintf(msg, "%s_s_ip", 1))
     end
-    r = (s-ip(1)):(s-ip(2)):(s-ip(3))
+    r = (s-ip(1)):-ip(2):(s-ip(3))
 endfunction
diff --git a/scilab/modules/overloading/tests/unit_tests/implicit_list.tst b/scilab/modules/overloading/tests/unit_tests/implicit_list.tst
new file mode 100644 (file)
index 0000000..91a2f67
--- /dev/null
@@ -0,0 +1,16 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2019 - ESI-Group - Delamarre Cedric
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+
+a=1:10;
+assert_checkequal(a(1+(1:2:$-1)), [2 4 6 8 10]);
+assert_checkequal(a((1:2:$-1)+1), [2 4 6 8 10]);
+assert_checkequal(a(11-(1:2:$)), [10 8 6 4 2]);
+assert_checkequal(a((2:2:$)-1), [1 3 5 7 9]);
+assert_checkequal(a(-(-$:2:-1)), [10 8 6 4 2]);
\ No newline at end of file