Bug #7781: the second parameter of iqr function had no effect. 82/11382/2
Adeline CARNIS [Wed, 24 Apr 2013 11:35:13 +0000 (13:35 +0200)]
Change-Id: I56895082f0c33f86f6b5d38831e8a523cabe13a1

scilab/CHANGES_5.5.X
scilab/modules/statistics/macros/iqr.sci
scilab/modules/statistics/tests/nonreg_tests/bug_7781.dia.ref [new file with mode: 0644]
scilab/modules/statistics/tests/nonreg_tests/bug_7781.tst [new file with mode: 0644]
scilab/modules/statistics/tests/unit_tests/iqr.dia.ref [new file with mode: 0644]
scilab/modules/statistics/tests/unit_tests/iqr.tst [new file with mode: 0644]

index cd7f194..1201449 100644 (file)
@@ -88,6 +88,8 @@ Bug fixes
 
 * Bug #7828 fixed - Slight improvements in nicholschart.
 
+* Bug #7781 fixed - The second parameter of iqr function had not effect.
+
 * Bug #7927 fixed - Output "flag" in qmr function was not well documented.
 
 * Bug #8162 fixed - Area of stability of plzr was wrong for continuous systems (+unit test added).
index 825b449..a0d7a92 100644 (file)
 // 
 
 function [q]=iqr(x,orien)
-//
-//This  function computes the interquartile  range IQR= upper quartile -
-//lower quartile of a vector or a matrix x.
-//
-//For  a  vector or  a matrix  x, q=iqr(x) returns  in  the scalar q the
-//interquartile range of all the entries of x.
-//
-//q=iqr(x,'r')    (or,   equivalently,  q=iqr(x,1))    is   the  rowwise
-//interquartile range. It returns in each entry of the  row vector q the
-//interquartile range of each column of x.
-//
-//q-iqr(x,'c')    (or,  equivalently, q=iqr(x,2))    is  the  columnwise
-//interquartile range. It returns in  each entry of  the column vector q
-//the interquartile range of each row of x.
-//
-//References:  Wonacott, T.H. & Wonacott, R.J.; Introductory
-//Statistics, J.Wiley & Sons, 1990.
-//
-//
-  if x==[] then q=%nan, return, end
-  [lhs,rhs]=argn(0)
-  if rhs==0 then error(msprintf(gettext("%s: Wrong number of input argument: At least %d expected.\n"),"iqr",1)), end
-  if rhs==1 then
-    qq=quart(x)
-  else
-    qq=quart(x,orien)
-  end
-  q=qq(3)-qq(1)
-  return
+    //
+    //This  function computes the interquartile  range IQR= upper quartile -
+    //lower quartile of a vector or a matrix x.
+    //
+    //For  a  vector or  a matrix  x, q=iqr(x) returns  in  the scalar q the
+    //interquartile range of all the entries of x.
+    //
+    //q=iqr(x,'r')    (or,   equivalently,  q=iqr(x,1))    is   the  rowwise
+    //interquartile range. It returns in each entry of the  row vector q the
+    //interquartile range of each column of x.
+    //
+    //q-iqr(x,'c')    (or,  equivalently, q=iqr(x,2))    is  the  columnwise
+    //interquartile range. It returns in  each entry of  the column vector q
+    //the interquartile range of each row of x.
+    //
+    //References:  Wonacott, T.H. & Wonacott, R.J.; Introductory
+    //Statistics, J.Wiley & Sons, 1990.
+    //
+    //
+    [lhs,rhs] = argn(0);
+
+    if rhs == 0 then 
+        error(msprintf(gettext("%s: Wrong number of input argument: At least %d expected.\n"),"iqr",1));
+    end
+
+    if rhs == 1 then
+        if x == [] | and(isnan(x)) then 
+            q = %nan; 
+            return
+        end
+
+        qq = quart(x)
+        q = qq(3) - qq(1);
+    else
+        qq=quart(x,orien);
+        if orien == "r" | orien == 1 then
+            if size(x,1) == 1 then
+                error(msprintf(_("%s: Wrong dimensions for input argument #%d: A column vector or matrix expected.\n"), "iqr", 1));
+            end
+            q = qq(3, :) - qq(1, :);
+        elseif orien == "c" | orien == 2 then
+            if size(x,2) == 1 then
+                error(msprintf(_("%s: Wrong dimensions for input argument #%d: A row vector or matrix expected.\n"), "iqr", 1));
+            end
+            q = qq(:,3) - qq(:, 1);
+        else
+            error(msprintf(_("%s: Wrong value for input argument #%d: ''%s'', %d, ''%s'' or %d expected.\n"), "iqr", 2, "r", 1, "c", 2));
+        end
+    end
 endfunction
diff --git a/scilab/modules/statistics/tests/nonreg_tests/bug_7781.dia.ref b/scilab/modules/statistics/tests/nonreg_tests/bug_7781.dia.ref
new file mode 100644 (file)
index 0000000..a7dc5ca
--- /dev/null
@@ -0,0 +1,18 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Adeline CARNIS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// <-- Non-regression test for bug 7781 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=7781
+//
+// <-- Short Description -->
+//     The second parameter of iqr function had no effect.
+// =============================================================================
+X = [1:10; 2:2:20; 3:3:30];
+assert_checkequal(iqr(X,'r'), [1.5 3 4.5 6 7.5 9 10.5 12 13.5 15]);
+assert_checkequal(iqr(X,'c'), [5 10 15]');
diff --git a/scilab/modules/statistics/tests/nonreg_tests/bug_7781.tst b/scilab/modules/statistics/tests/nonreg_tests/bug_7781.tst
new file mode 100644 (file)
index 0000000..a4d2e9a
--- /dev/null
@@ -0,0 +1,21 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Adeline CARNIS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- CLI SHELL MODE -->
+
+// <-- Non-regression test for bug 7781 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=7781
+//
+// <-- Short Description -->
+//     The second parameter of iqr function had no effect.
+// =============================================================================
+X = [1:10; 2:2:20; 3:3:30];
+
+assert_checkequal(iqr(X,'r'), [1.5 3 4.5 6 7.5 9 10.5 12 13.5 15]);
+assert_checkequal(iqr(X,'c'), [5 10 15]');
diff --git a/scilab/modules/statistics/tests/unit_tests/iqr.dia.ref b/scilab/modules/statistics/tests/unit_tests/iqr.dia.ref
new file mode 100644 (file)
index 0000000..fa311e1
--- /dev/null
@@ -0,0 +1,51 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Adeline CARNIS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// unit tests for iqr function 
+// =============================================================================
+assert_checkfalse(execstr("iqr()"   ,"errcatch") == 0);
+refMsg = msprintf(_("%s: Wrong number of input argument: At least %d expected.\n"), "iqr", 1);
+assert_checkerror("iqr()", refMsg);
+assert_checkequal(iqr([]), %nan);
+assert_checkequal(iqr(%nan), %nan);
+assert_checkequal(iqr([%nan %nan]), %nan);
+// Vector
+x = 1:10;
+assert_checkequal(iqr(x), 5);
+assert_checkequal(iqr(x'), 5);
+assert_checkfalse(execstr("iqr(x, ''r'')"   ,"errcatch") == 0);
+refMsg = msprintf(_("%s: Wrong dimensions for input argument #%d: A column vector or matrix expected.\n"), "iqr", 1);
+assert_checkerror("iqr(x, ''r'')", refMsg);
+assert_checkfalse(execstr("iqr(x, 1)"   ,"errcatch") == 0);
+refMsg = msprintf(_("%s: Wrong dimensions for input argument #%d: A column vector or matrix expected.\n"), "iqr", 1);
+assert_checkerror("iqr(x, 1)", refMsg);
+assert_checkfalse(execstr("iqr(x'', ''c'')"   ,"errcatch") == 0);
+refMsg = msprintf(_("%s: Wrong dimensions for input argument #%d: A row vector or matrix expected.\n"), "iqr", 1);
+assert_checkerror("iqr(x'', ''c'')", refMsg);
+assert_checkfalse(execstr("iqr(x'', 2)"   ,"errcatch") == 0);
+refMsg = msprintf(_("%s: Wrong dimensions for input argument #%d: A row vector or matrix expected.\n"), "iqr", 1);
+assert_checkerror("iqr(x'', 2)", refMsg);
+assert_checkequal(iqr(x, "c"), 5);
+assert_checkequal(iqr(x, 2), 5);
+assert_checkequal(iqr(x', "r"), 5);
+assert_checkequal(iqr(x', 1), 5);
+assert_checkfalse(execstr("iqr(x, 3)"   ,"errcatch") == 0);
+refMsg = msprintf(_("%s: Wrong value for input argument #%d: ''%s'', %d, ''%s'' or %d expected.\n"), "iqr", 2, "r", 1, "c", 2);
+assert_checkerror("iqr(x, 3)", refMsg);
+assert_checkfalse(execstr("iqr(x, ''t'')"   ,"errcatch") == 0);
+refMsg = msprintf(_("%s: Wrong value for input argument #%d: ''%s'', %d, ''%s'' or %d expected.\n"), "iqr", 2, "r", 1, "c", 2);
+assert_checkerror("iqr(x, ''t'')", refMsg);
+assert_checkfalse(execstr("iqr(x, [])"   ,"errcatch") == 0);
+refMsg = msprintf(_("%s: Wrong value for input argument #%d: ''%s'', %d, ''%s'' or %d expected.\n"), "iqr", 2, "r", 1, "c", 2);
+assert_checkerror("iqr(x, [])", refMsg);
+// Matrix
+A=[1,2,10;7,7.1,7.01];
+assert_checkequal(iqr(A), 5.1);
+assert_checkequal(iqr(A, "r"), [6 5.1 2.99]);
+assert_checkalmostequal(iqr(A, "c"), [6.75; 0.075], [], %eps);
+assert_checkequal(iqr(A, 1), [6 5.1 2.99]);
+assert_checkalmostequal(iqr(A, 2), [6.75; 0.075], [], %eps);
diff --git a/scilab/modules/statistics/tests/unit_tests/iqr.tst b/scilab/modules/statistics/tests/unit_tests/iqr.tst
new file mode 100644 (file)
index 0000000..390ef9e
--- /dev/null
@@ -0,0 +1,69 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Adeline CARNIS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- CLI SHELL MODE -->
+
+// unit tests for iqr function 
+// =============================================================================
+
+assert_checkfalse(execstr("iqr()"   ,"errcatch") == 0);
+refMsg = msprintf(_("%s: Wrong number of input argument: At least %d expected.\n"), "iqr", 1);
+assert_checkerror("iqr()", refMsg);
+
+assert_checkequal(iqr([]), %nan);
+
+assert_checkequal(iqr(%nan), %nan);
+
+assert_checkequal(iqr([%nan %nan]), %nan);
+
+// Vector
+x = 1:10;
+assert_checkequal(iqr(x), 5);
+assert_checkequal(iqr(x'), 5);
+
+assert_checkfalse(execstr("iqr(x, ''r'')"   ,"errcatch") == 0);
+refMsg = msprintf(_("%s: Wrong dimensions for input argument #%d: A column vector or matrix expected.\n"), "iqr", 1);
+assert_checkerror("iqr(x, ''r'')", refMsg);
+
+assert_checkfalse(execstr("iqr(x, 1)"   ,"errcatch") == 0);
+refMsg = msprintf(_("%s: Wrong dimensions for input argument #%d: A column vector or matrix expected.\n"), "iqr", 1);
+assert_checkerror("iqr(x, 1)", refMsg);
+
+assert_checkfalse(execstr("iqr(x'', ''c'')"   ,"errcatch") == 0);
+refMsg = msprintf(_("%s: Wrong dimensions for input argument #%d: A row vector or matrix expected.\n"), "iqr", 1);
+assert_checkerror("iqr(x'', ''c'')", refMsg);
+
+assert_checkfalse(execstr("iqr(x'', 2)"   ,"errcatch") == 0);
+refMsg = msprintf(_("%s: Wrong dimensions for input argument #%d: A row vector or matrix expected.\n"), "iqr", 1);
+assert_checkerror("iqr(x'', 2)", refMsg);
+
+assert_checkequal(iqr(x, "c"), 5);
+assert_checkequal(iqr(x, 2), 5);
+
+assert_checkequal(iqr(x', "r"), 5);
+assert_checkequal(iqr(x', 1), 5);
+
+assert_checkfalse(execstr("iqr(x, 3)"   ,"errcatch") == 0);
+refMsg = msprintf(_("%s: Wrong value for input argument #%d: ''%s'', %d, ''%s'' or %d expected.\n"), "iqr", 2, "r", 1, "c", 2);
+assert_checkerror("iqr(x, 3)", refMsg);
+
+assert_checkfalse(execstr("iqr(x, ''t'')"   ,"errcatch") == 0);
+refMsg = msprintf(_("%s: Wrong value for input argument #%d: ''%s'', %d, ''%s'' or %d expected.\n"), "iqr", 2, "r", 1, "c", 2);
+assert_checkerror("iqr(x, ''t'')", refMsg);
+
+assert_checkfalse(execstr("iqr(x, [])"   ,"errcatch") == 0);
+refMsg = msprintf(_("%s: Wrong value for input argument #%d: ''%s'', %d, ''%s'' or %d expected.\n"), "iqr", 2, "r", 1, "c", 2);
+assert_checkerror("iqr(x, [])", refMsg);
+
+// Matrix
+A=[1,2,10;7,7.1,7.01];
+
+assert_checkequal(iqr(A), 5.1);
+assert_checkequal(iqr(A, "r"), [6 5.1 2.99]);
+assert_checkalmostequal(iqr(A, "c"), [6.75; 0.075], [], %eps);
+assert_checkequal(iqr(A, 1), [6 5.1 2.99]);
+assert_checkalmostequal(iqr(A, 2), [6.75; 0.075], [], %eps);