Xcos: bug 13318 fixed - Multiplication matrix * vector using MATMUL matrix operations... 67/14367/5
Clément DAVID [Tue, 8 Apr 2014 09:33:21 +0000 (11:33 +0200)]
      does not work correct.

Change-Id: I15d22f05f72c93b3e6de573e7f41a3653a300b5c

scilab/CHANGES_5.5.X
scilab/modules/scicos_blocks/macros/Sources/CONST.sci
scilab/modules/xcos/tests/nonreg_tests/bug_13318.dia.ref [new file with mode: 0644]
scilab/modules/xcos/tests/nonreg_tests/bug_13318.tst [new file with mode: 0644]
scilab/modules/xcos/tests/nonreg_tests/bug_13318.zcos [new file with mode: 0644]

index 4d96d75..274f32b 100644 (file)
@@ -54,6 +54,8 @@ Xcos Bug Fixes
 * Bug #13285 fixed - There was no appropriate example of the syntax for scifunc_block_m GUI
                      on the help page.
 
+* Bug #13318 fixed - Multiplication matrix * vector using MATMUL did not work correctly.
+
 * Bug #13385 fixed - TOWS_c and FROMWSB Xcos blocs needed better examples on how
                      to get or write a Scilab variable.
                      
index e674dc7..71bf27e 100644 (file)
@@ -35,9 +35,12 @@ function [x,y,typ]=CONST(job,arg1,arg2)
             if ~ok then
                 break,
             end
+            sz=size(C);
             nout=size(C,"*")
             if nout==0 then
                 message("C must have at least one element")
+            elseif and(sz > 1) then
+                message("C matrix is not supported, use CONST_m instead")
             else
                 model.rpar=C(:);model.out=nout
                 graphics.exprs=exprs;
diff --git a/scilab/modules/xcos/tests/nonreg_tests/bug_13318.dia.ref b/scilab/modules/xcos/tests/nonreg_tests/bug_13318.dia.ref
new file mode 100644 (file)
index 0000000..b8e6ffe
--- /dev/null
@@ -0,0 +1,54 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Vladislav TRUBKIN
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- XCOS TEST -->
+//
+// <-- ENGLISH IMPOSED -->
+//
+// <-- Non-regression test for bug 13318 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=13318
+//
+// <-- Short Description -->
+// Output of CONST block is a vector and not a matrix.
+//
+global outmsg;
+global toggle;
+outmsg = [];
+toggle = %T;
+assert_checktrue(importXcosDiagram(SCI + "/modules/xcos/tests/nonreg_tests/bug_13318.zcos"));
+xcos_simulate(scs_m, 4);
+refResult = [ones(100,1)*2 ones(100,1)*6 ones(100,1)*12];
+assert_checkequal(refResult, result1.values);
+assert_checkequal(refResult, result2.values);
+refResult = [ones(100,1)*6 ones(100,1)*-6 zeros(100,1)];
+assert_checkequal(refResult, result3.values);
+// test with wrong values for CONST
+prot = funcprot();
+funcprot(0);
+function str = x_mdialog(desc, labels, ini)
+    global toggle;
+    if toggle then
+        str = ini;
+        toggle = ~toggle;
+    else
+        str = []; // cancel button click to avoid an infinite loop in CONST.sci
+    end
+endfunction
+function message(inmsg)
+    global outmsg;
+    outmsg = inmsg;
+endfunction
+funcprot(prot);
+block = CONST("define");
+block.graphics.exprs = ["[1 1; 1 1]"];
+block = CONST("set", block);
+assert_checkequal(outmsg, "C matrix is not supported, use CONST_m instead");
+block = CONST("define");
+block.graphics.exprs = ["[1 1 1; -1 -2 -3; 0 0 0]"];
+block = CONST("set", block);
+assert_checkequal(outmsg, "C matrix is not supported, use CONST_m instead");
diff --git a/scilab/modules/xcos/tests/nonreg_tests/bug_13318.tst b/scilab/modules/xcos/tests/nonreg_tests/bug_13318.tst
new file mode 100644 (file)
index 0000000..4e61682
--- /dev/null
@@ -0,0 +1,60 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Vladislav TRUBKIN
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- XCOS TEST -->
+//
+// <-- ENGLISH IMPOSED -->
+//
+// <-- Non-regression test for bug 13318 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=13318
+//
+// <-- Short Description -->
+// Output of CONST block is a vector and not a matrix.
+//
+global outmsg;
+global toggle;
+outmsg = [];
+toggle = %T;
+
+assert_checktrue(importXcosDiagram(SCI + "/modules/xcos/tests/nonreg_tests/bug_13318.zcos"));
+xcos_simulate(scs_m, 4);
+
+refResult = [ones(100,1)*2 ones(100,1)*6 ones(100,1)*12];
+assert_checkequal(refResult, result1.values);
+assert_checkequal(refResult, result2.values);
+refResult = [ones(100,1)*6 ones(100,1)*-6 zeros(100,1)];
+assert_checkequal(refResult, result3.values);
+
+// test with wrong values for CONST
+prot = funcprot();
+funcprot(0);
+function str = x_mdialog(desc, labels, ini)
+    global toggle;
+    if toggle then
+        str = ini;
+        toggle = ~toggle;
+    else
+        str = []; // cancel button click to avoid an infinite loop in CONST.sci
+    end
+endfunction
+function message(inmsg)
+    global outmsg;
+    outmsg = inmsg;
+endfunction
+funcprot(prot);
+
+block = CONST("define");
+block.graphics.exprs = ["[1 1; 1 1]"];
+block = CONST("set", block);
+assert_checkequal(outmsg, "C matrix is not supported, use CONST_m instead");
+
+block = CONST("define");
+block.graphics.exprs = ["[1 1 1; -1 -2 -3; 0 0 0]"];
+block = CONST("set", block);
+assert_checkequal(outmsg, "C matrix is not supported, use CONST_m instead");
diff --git a/scilab/modules/xcos/tests/nonreg_tests/bug_13318.zcos b/scilab/modules/xcos/tests/nonreg_tests/bug_13318.zcos
new file mode 100644 (file)
index 0000000..c5410e5
Binary files /dev/null and b/scilab/modules/xcos/tests/nonreg_tests/bug_13318.zcos differ