bug 3006 fix
Serge Steer [Tue, 20 May 2008 09:08:14 +0000 (09:08 +0000)]
26 files changed:
scilab/modules/boolean/src/fortran/logic.f
scilab/modules/boolean/tests/nonreg_tests/bug_3006.dia.ref [new file with mode: 0644]
scilab/modules/boolean/tests/nonreg_tests/bug_3006.tst [new file with mode: 0644]
scilab/modules/core/tests/nonreg_tests/bug_3006.dia.ref [new file with mode: 0644]
scilab/modules/core/tests/nonreg_tests/bug_3006.tst [new file with mode: 0644]
scilab/modules/core/tests/unit_tests/matops.dia.ref
scilab/modules/core/tests/unit_tests/matops.tst
scilab/modules/double/sci_gateway/fortran/matins2.f
scilab/modules/double/tests/nonreg_tests/bug_3006.dia.ref [new file with mode: 0644]
scilab/modules/double/tests/nonreg_tests/bug_3006.tst [new file with mode: 0644]
scilab/modules/integer/src/fortran/i_i_i.f
scilab/modules/integer/tests/nonreg_tests/bug_3006.dia.ref [new file with mode: 0644]
scilab/modules/integer/tests/nonreg_tests/bug_3006.tst [new file with mode: 0644]
scilab/modules/integer/tests/unit_tests/intops.dia.ref
scilab/modules/integer/tests/unit_tests/intops.tst
scilab/modules/polynomials/sci_gateway/fortran/polops.f
scilab/modules/polynomials/tests/nonreg_tests/bug_3006.dia.ref [new file with mode: 0644]
scilab/modules/polynomials/tests/nonreg_tests/bug_3006.tst [new file with mode: 0644]
scilab/modules/polynomials/tests/unit_tests/polops.dia.ref
scilab/modules/polynomials/tests/unit_tests/polops.tst
scilab/modules/sparse/sci_gateway/fortran/spops.f
scilab/modules/sparse/tests/nonreg_tests/bug_3006.dia.ref [new file with mode: 0644]
scilab/modules/sparse/tests/nonreg_tests/bug_3006.tst [new file with mode: 0644]
scilab/modules/string/sci_gateway/fortran/strops.f
scilab/modules/string/tests/nonreg_tests/bug_3006.dia.ref [new file with mode: 0644]
scilab/modules/string/tests/nonreg_tests/bug_3006.tst [new file with mode: 0644]

index 0389bff..596a5f7 100644 (file)
@@ -834,6 +834,12 @@ c     .
 c     .           call extraction
                   goto 56
                endif
+            elseif(nj.eq.n4) then
+c              arg4(arg1,[])=[] --> arg4
+               ilrs=iadr(lstk(top))
+               call icopy(3+mn4,istk(il4),1,istk(ilrs),1)
+               lstk(top+1)=sadr(ilrs+3+mn4)
+               goto 999
             else
 c               lw=lw1
                call indxgc(il1,m4,ili,mi,mxi,lw)
@@ -848,6 +854,12 @@ c     .           arg4(1:m4,arg2)=[]
                   mn3=m3*n3
 c     .           call extraction
                   goto 56
+               elseif(mi.eq.m4) then
+c                 arg4([],arg2)=[] --> arg4
+                  ilrs=iadr(lstk(top))
+                  call icopy(3+mn4,istk(il4),1,istk(ilrs),1)
+                  lstk(top+1)=sadr(ilrs+3+mn4)
+                  goto 999
                else
                   call error(15)
                   return
diff --git a/scilab/modules/boolean/tests/nonreg_tests/bug_3006.dia.ref b/scilab/modules/boolean/tests/nonreg_tests/bug_3006.dia.ref
new file mode 100644 (file)
index 0000000..b1b4363
--- /dev/null
@@ -0,0 +1,26 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2007-2008 - INRIA - Serge STEER <serge.steer@inria.fr>
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- Non-regression test for bug 3006 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=3006
+//
+// <-- Short Description -->
+// submatrix assignment impossible when the matrix is indexed with a boolean array of falses
+a=[%f %t;%t %t];a_ref=a;
+a(1,[%f %f])=[];
+if or(a<>a_ref) then bugmes();quit;end
+a([%f %f],1)=[];
+if or(a<>a_ref) then bugmes();quit;end
+a([%f %f],[%f %f])=[];
+if or(a<>a_ref) then bugmes();quit;end
+a(1,$:1)=[];
+if or(a<>a_ref) then bugmes();quit;end
+a($:1,1)=[];
+if or(a<>a_ref) then bugmes();quit;end
+a($:1,$:1)=[];
+if or(a<>a_ref) then bugmes();quit;end
diff --git a/scilab/modules/boolean/tests/nonreg_tests/bug_3006.tst b/scilab/modules/boolean/tests/nonreg_tests/bug_3006.tst
new file mode 100644 (file)
index 0000000..bb4da98
--- /dev/null
@@ -0,0 +1,30 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2007-2008 - INRIA - Serge STEER <serge.steer@inria.fr>
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- Non-regression test for bug 3006 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=3006
+//
+// <-- Short Description -->
+// submatrix assignment impossible when the matrix is indexed with a boolean array of falses  
+
+a=[%f %t;%t %t];a_ref=a;
+
+a(1,[%f %f])=[];
+if or(a<>a_ref) then pause,end
+a([%f %f],1)=[];
+if or(a<>a_ref) then pause,end
+a([%f %f],[%f %f])=[];
+if or(a<>a_ref) then pause,end
+
+a(1,$:1)=[];
+if or(a<>a_ref) then pause,end
+a($:1,1)=[];
+if or(a<>a_ref) then pause,end
+a($:1,$:1)=[];
+if or(a<>a_ref) then pause,end
diff --git a/scilab/modules/core/tests/nonreg_tests/bug_3006.dia.ref b/scilab/modules/core/tests/nonreg_tests/bug_3006.dia.ref
new file mode 100644 (file)
index 0000000..4e86579
--- /dev/null
@@ -0,0 +1,27 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2007-2008 - INRIA - Serge STEER <serge.steer@inria.fr>
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- Non-regression test for bug 3006 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=3006
+//
+// <-- Short Description -->
+// submatrix assignment impossible when the matrix is indexed with a boolean array of falses
+//test with handle matrix
+a=[gcf() gca();gca() gcf()];a_ref=a;
+a(1,[%f %f])=[];
+if or(a<>a_ref) then bugmes();quit;end
+a([%f %f],1)=[];
+if or(a<>a_ref) then bugmes();quit;end
+a([%f %f],[%f %f])=[];
+if or(a<>a_ref) then bugmes();quit;end
+a(1,$:1)=[];
+if or(a<>a_ref) then bugmes();quit;end
+a($:1,1)=[];
+if or(a<>a_ref) then bugmes();quit;end
+a($:1,$:1)=[];
+if or(a<>a_ref) then bugmes();quit;end
diff --git a/scilab/modules/core/tests/nonreg_tests/bug_3006.tst b/scilab/modules/core/tests/nonreg_tests/bug_3006.tst
new file mode 100644 (file)
index 0000000..79bc3f8
--- /dev/null
@@ -0,0 +1,31 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2007-2008 - INRIA - Serge STEER <serge.steer@inria.fr>
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- Non-regression test for bug 3006 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=3006
+//
+// <-- Short Description -->
+// submatrix assignment impossible when the matrix is indexed with a boolean array of falses  
+
+//test with handle matrix
+a=[gcf() gca();gca() gcf()];a_ref=a;
+
+a(1,[%f %f])=[];
+if or(a<>a_ref) then pause,end
+a([%f %f],1)=[];
+if or(a<>a_ref) then pause,end
+a([%f %f],[%f %f])=[];
+if or(a<>a_ref) then pause,end
+
+a(1,$:1)=[];
+if or(a<>a_ref) then pause,end
+a($:1,1)=[];
+if or(a<>a_ref) then pause,end
+a($:1,$:1)=[];
+if or(a<>a_ref) then pause,end
index b30c96f..d8a44be 100644 (file)
@@ -1,4 +1,9 @@
-// Copyright INRIA
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) ????-2008 - INRIA
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
 //insertion
 v=[1 2 3];
 v(2)=3;if or(v<>[1 3 3]) then bugmes();quit;end
@@ -83,3 +88,11 @@ v=[%i 2 3;4 5 6];
 v(1,:)=[];if or(v<>[4 5 6]);then bugmes();quit;end
 v=[%i 2 3;4 5 6];
 v(:,[3 2])=[];if or(v<>[%i;4]);then bugmes();quit;end
+//hidden empty index
+v=[1 2;3 4];v_ref=v;
+v(1,[%f %f])=[];
+if or(v<>v_ref) then bugmes();quit;end
+v([%f %f],1)=[];
+if or(v<>v_ref) then bugmes();quit;end
+v([%f %f],[%f %f])=[];
+if or(v<>v_ref) then bugmes();quit;end
index cbfc3ea..15a9ac4 100644 (file)
@@ -106,3 +106,12 @@ v(1,:)=[];if or(v<>[4 5 6]);then pause,end
 v=[%i 2 3;4 5 6];
 v(:,[3 2])=[];if or(v<>[%i;4]);then pause,end
 
+//hidden empty index
+v=[1 2;3 4];v_ref=v;
+
+v(1,[%f %f])=[];
+if or(v<>v_ref) then pause,end
+v([%f %f],1)=[];
+if or(v<>v_ref) then pause,end
+v([%f %f],[%f %f])=[];
+if or(v<>v_ref) then pause,end
index 0b08f71..763fadc 100644 (file)
@@ -23,7 +23,7 @@ c
       top0=top
       lw=lstk(top+1)+1
 
- 01   il4=iadr(lstk(top))
+      il4=iadr(lstk(top))
       if(istk(il4).lt.0) il4=iadr(istk(il4+1))
       m4=istk(il4+1)
       n4=istk(il4+2)
@@ -146,6 +146,13 @@ c     .
 c     .           call extraction
                   goto 90
                endif
+            elseif(nj.eq.n4) then
+c               arg4(arg1,[])=[] --> arg4
+               call icopy(4,istk(il4),1,istk(ilrs),1)
+               l=sadr(ilrs+4)
+               call unsfdcopy(mn4*(it4+1),stk(l4),1,stk(l),1)
+               lstk(top+1)=l+mn4*(it4+1)
+               return
             else
                call indxgc(il1,m4,ili,mi,mxi,lw)
                if(err.gt.0) return
@@ -160,6 +167,13 @@ c     .           arg4(1:m4,arg2)=[]
                   mn3=m3*n3
 c     .           call extraction
                   goto 90
+               elseif(mi.eq.m4) then
+c                 arg4([],arg2)=[] --> arg4
+                  call icopy(4,istk(il4),1,istk(ilrs),1)
+                  l=sadr(ilrs+4)
+                  call unsfdcopy(mn4*(it4+1),stk(l4),1,stk(l),1)
+                  lstk(top+1)=l+mn4*(it4+1)
+                  return
                else
                   call error(15)
                   return
diff --git a/scilab/modules/double/tests/nonreg_tests/bug_3006.dia.ref b/scilab/modules/double/tests/nonreg_tests/bug_3006.dia.ref
new file mode 100644 (file)
index 0000000..704c194
--- /dev/null
@@ -0,0 +1,26 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2007-2008 - INRIA - Serge STEER <serge.steer@inria.fr>
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- Non-regression test for bug 3006 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=3006
+//
+// <-- Short Description -->
+// submatrix assignment impossible when the matrix is indexed with a boolean array of falses
+a=[1 2;3 4];a_ref=a;
+a(1,[%f %f])=[];
+if or(a<>a_ref) then bugmes();quit;end
+a([%f %f],1)=[];
+if or(a<>a_ref) then bugmes();quit;end
+a([%f %f],[%f %f])=[];
+if or(a<>a_ref) then bugmes();quit;end
+a(1,$:1)=[];
+if or(a<>a_ref) then bugmes();quit;end
+a($:1,1)=[];
+if or(a<>a_ref) then bugmes();quit;end
+a($:1,$:1)=[];
+if or(a<>a_ref) then bugmes();quit;end
diff --git a/scilab/modules/double/tests/nonreg_tests/bug_3006.tst b/scilab/modules/double/tests/nonreg_tests/bug_3006.tst
new file mode 100644 (file)
index 0000000..12c7dd1
--- /dev/null
@@ -0,0 +1,30 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2007-2008 - INRIA - Serge STEER <serge.steer@inria.fr>
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- Non-regression test for bug 3006 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=3006
+//
+// <-- Short Description -->
+// submatrix assignment impossible when the matrix is indexed with a boolean array of falses  
+
+a=[1 2;3 4];a_ref=a;
+
+a(1,[%f %f])=[];
+if or(a<>a_ref) then pause,end
+a([%f %f],1)=[];
+if or(a<>a_ref) then pause,end
+a([%f %f],[%f %f])=[];
+if or(a<>a_ref) then pause,end
+
+a(1,$:1)=[];
+if or(a<>a_ref) then pause,end
+a($:1,1)=[];
+if or(a<>a_ref) then pause,end
+a($:1,$:1)=[];
+if or(a<>a_ref) then pause,end
index 9370b9b..9745ed9 100644 (file)
@@ -371,7 +371,14 @@ c     .
 c     .           call extraction
                   goto 90
                endif
-            else
+           elseif(nj.eq.n4) then
+c             arg4(arg1,[])=[] --> arg4
+              call icopy(4,istk(il4),1,istk(il1),1)
+              l=il1+4
+              call gencopy(it4,mn4,istk(l4),1,istk(l),1)
+              lstk(top+1)=sadr(l+memused(it4,mn4))
+              return
+           else
                call indxgc(il1,m4,ili,mi,mxi,lw)
                if(err.gt.0) return
                if(mi.eq.0) then
@@ -385,6 +392,13 @@ c     .           arg4(1:m4,arg2)=[]
                   mn3=m3*n3
 c     .           call extraction
                   goto 90
+               elseif(mi.eq.m4) then
+c                 arg4([],arg2)=[] --> arg4
+                  call icopy(4,istk(il4),1,istk(il1),1)
+                  l=il1+4
+                  call gencopy(it4,mn4,istk(l4),1,istk(l),1)
+                  lstk(top+1)=sadr(l+memused(it4,mn4))
+                  return
                else
                   call error(15)
                   return
diff --git a/scilab/modules/integer/tests/nonreg_tests/bug_3006.dia.ref b/scilab/modules/integer/tests/nonreg_tests/bug_3006.dia.ref
new file mode 100644 (file)
index 0000000..b4fc958
--- /dev/null
@@ -0,0 +1,26 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2007-2008 - INRIA - Serge STEER <serge.steer@inria.fr>
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- Non-regression test for bug 3006 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=3006
+//
+// <-- Short Description -->
+// submatrix assignment impossible when the matrix is indexed with a boolean array of falses
+a=int16([1 2;3 4]);a_ref=a;
+a(1,[%f %f])=[];
+if or(a<>a_ref) then bugmes();quit;end
+a([%f %f],1)=[];
+if or(a<>a_ref) then bugmes();quit;end
+a([%f %f],[%f %f])=[];
+if or(a<>a_ref) then bugmes();quit;end
+a(1,$:1)=[];
+if or(a<>a_ref) then bugmes();quit;end
+a($:1,1)=[];
+if or(a<>a_ref) then bugmes();quit;end
+a($:1,$:1)=[];
+if or(a<>a_ref) then bugmes();quit;end
diff --git a/scilab/modules/integer/tests/nonreg_tests/bug_3006.tst b/scilab/modules/integer/tests/nonreg_tests/bug_3006.tst
new file mode 100644 (file)
index 0000000..c92b665
--- /dev/null
@@ -0,0 +1,30 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2007-2008 - INRIA - Serge STEER <serge.steer@inria.fr>
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- Non-regression test for bug 3006 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=3006
+//
+// <-- Short Description -->
+// submatrix assignment impossible when the matrix is indexed with a boolean array of falses  
+
+a=int16([1 2;3 4]);a_ref=a;
+
+a(1,[%f %f])=[];
+if or(a<>a_ref) then pause,end
+a([%f %f],1)=[];
+if or(a<>a_ref) then pause,end
+a([%f %f],[%f %f])=[];
+if or(a<>a_ref) then pause,end
+
+a(1,$:1)=[];
+if or(a<>a_ref) then pause,end
+a($:1,1)=[];
+if or(a<>a_ref) then pause,end
+a($:1,$:1)=[];
+if or(a<>a_ref) then pause,end
index c9285e1..217b789 100644 (file)
@@ -87,6 +87,21 @@ v=int32([1 2 3;4 5 6]);
 v(1,:)=[];if or(v<>int32([4 5 6])) then bugmes();quit;end
 v=int32([1 2 3;4 5 6]);
 v(:,[3 2])=[];if or(v<>int32([1;4])) then bugmes();quit;end
+//hidden empty index in insertion
+a=int32([1 2;3 4]);a_ref=a;
+a(1,[%f %f])=[];
+if or(a<>a_ref) then bugmes();quit;end
+a([%f %f],1)=[];
+if or(a<>a_ref) then bugmes();quit;end
+a([%f %f],[%f %f])=[];
+if or(a<>a_ref) then bugmes();quit;end
+a=int8([1 2;3 4]);a_ref=a;
+a(1,[%f %f])=[];
+if or(a<>a_ref) then bugmes();quit;end
+a([%f %f],1)=[];
+if or(a<>a_ref) then bugmes();quit;end
+a([%f %f],[%f %f])=[];
+if or(a<>a_ref) then bugmes();quit;end
 //concatenations
 x1=int8(1);x2=int8(7);
 if or([x1 x2]<>int8([1 7])) then bugmes();quit;end
index b170ff2..536ee70 100644 (file)
@@ -119,6 +119,26 @@ v(1,:)=[];if or(v<>int32([4 5 6])) then pause,end
 v=int32([1 2 3;4 5 6]);
 v(:,[3 2])=[];if or(v<>int32([1;4])) then pause,end
 
+//hidden empty index in insertion
+a=int32([1 2;3 4]);a_ref=a;
+
+a(1,[%f %f])=[];
+if or(a<>a_ref) then pause,end
+a([%f %f],1)=[];
+if or(a<>a_ref) then pause,end
+a([%f %f],[%f %f])=[];
+if or(a<>a_ref) then pause,end
+
+a=int8([1 2;3 4]);a_ref=a;
+
+a(1,[%f %f])=[];
+if or(a<>a_ref) then pause,end
+a([%f %f],1)=[];
+if or(a<>a_ref) then pause,end
+a([%f %f],[%f %f])=[];
+if or(a<>a_ref) then pause,end
+
+
 //concatenations
 
 x1=int8(1);x2=int8(7);
index 584ada5..a5e7531 100644 (file)
@@ -1225,6 +1225,19 @@ c     .
 c     .     call extraction
                   goto 133
                endif
+            elseif(nj.eq.n4) then
+c              arg4(arg1,[])=[] --> arg4
+               volr=istk(id4+mn4)-1
+               istk(ilrs)=2
+               istk(ilrs+1)=m4
+               istk(ilrs+2)=n4
+               istk(ilrs+3)=it4
+               call icopy(4,var3,1,istk(ilrs+4),1)
+               call icopy(mn4+1,istk(id4),1,istk(ilrs+8),1)
+               l1=sadr(ilrs+9+mn4)
+               call unsfdcopy(volr*(it4+1),stk(l4r),1,stk(l1),1)
+               lstk(top+1)=l1+volr*(it4+1)
+               goto 999
             else
 c               lw=lw1
                call indxgc(il1,m4,ili,mi,mxi,lw)
@@ -1240,6 +1253,19 @@ c               lw=lw1
                   id3=id4
 c     .     call extraction
                   goto 133
+               elseif(mi.eq.m4) then
+c     arg4([],arg2)=[] --> arg4
+                  volr=istk(id4+mn4)-1
+                  istk(ilrs)=2
+                  istk(ilrs+1)=m4
+                  istk(ilrs+2)=n4
+                  istk(ilrs+3)=it4
+                  call icopy(4,var3,1,istk(ilrs+4),1)
+                  call icopy(mn4+1,istk(id4),1,istk(ilrs+8),1)
+                  l1=sadr(ilrs+9+mn4)
+                  call unsfdcopy(volr*(it4+1),stk(l4r),1,stk(l1),1)
+                  lstk(top+1)=l1+volr*(it4+1)
+                  goto 999
                else
                   call error(15)
                   return
diff --git a/scilab/modules/polynomials/tests/nonreg_tests/bug_3006.dia.ref b/scilab/modules/polynomials/tests/nonreg_tests/bug_3006.dia.ref
new file mode 100644 (file)
index 0000000..01958cc
--- /dev/null
@@ -0,0 +1,27 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2007-2008 - INRIA - Serge STEER <serge.steer@inria.fr>
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- Non-regression test for bug 3006 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=3006
+//
+// <-- Short Description -->
+// submatrix assignment impossible when the matrix is indexed with a boolean array of falses
+s=poly(0,'s');
+a=[1+s 2;3 4*s];a_ref=a;
+a(1,[%f %f])=[];
+if or(a<>a_ref) then bugmes();quit;end
+a([%f %f],1)=[];
+if or(a<>a_ref) then bugmes();quit;end
+a([%f %f],[%f %f])=[];
+if or(a<>a_ref) then bugmes();quit;end
+a(1,$:1)=[];
+if or(a<>a_ref) then bugmes();quit;end
+a($:1,1)=[];
+if or(a<>a_ref) then bugmes();quit;end
+a($:1,$:1)=[];
+if or(a<>a_ref) then bugmes();quit;end
diff --git a/scilab/modules/polynomials/tests/nonreg_tests/bug_3006.tst b/scilab/modules/polynomials/tests/nonreg_tests/bug_3006.tst
new file mode 100644 (file)
index 0000000..4943449
--- /dev/null
@@ -0,0 +1,30 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2007-2008 - INRIA - Serge STEER <serge.steer@inria.fr>
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- Non-regression test for bug 3006 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=3006
+//
+// <-- Short Description -->
+// submatrix assignment impossible when the matrix is indexed with a boolean array of falses  
+s=poly(0,'s');
+a=[1+s 2;3 4*s];a_ref=a;
+
+a(1,[%f %f])=[];
+if or(a<>a_ref) then pause,end
+a([%f %f],1)=[];
+if or(a<>a_ref) then pause,end
+a([%f %f],[%f %f])=[];
+if or(a<>a_ref) then pause,end
+
+a(1,$:1)=[];
+if or(a<>a_ref) then pause,end
+a($:1,1)=[];
+if or(a<>a_ref) then pause,end
+a($:1,$:1)=[];
+if or(a<>a_ref) then pause,end
index b8c8202..f0f4d33 100644 (file)
@@ -1,4 +1,9 @@
-// Copyright INRIA
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) ????-2008 - INRIA
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
 mode(5)
 lines(0)
 s=poly(0,'s');
@@ -672,3 +677,12 @@ if norm(coeff(p3(1,:)- [p1(1) p2(1)] ))>10*%eps then bugmes();quit;end
 if norm(coeff(p3([1 4],:)- [p1([1 4]) conj(p2([1 4])')] ))>10*%eps
   then bugmes();quit;end
 if norm(coeff(p3(:,:)- p3 ))>10*%eps then bugmes();quit;end
+//hidden empty index in insertion
+s=poly(0,'s');
+a=[1+s 2;3 4];a_ref=a;
+a(1,[%f %f])=[];
+if or(a<>a_ref) then bugmes();quit;end
+a([%f %f],1)=[];
+if or(a<>a_ref) then bugmes();quit;end
+a([%f %f],[%f %f])=[];
+if or(a<>a_ref) then bugmes();quit;end
index 5b62009..4f1dc55 100644 (file)
@@ -694,3 +694,15 @@ if norm(coeff(p3(1,:)- [p1(1) p2(1)] ))>10*%eps then pause,end
 if norm(coeff(p3([1 4],:)- [p1([1 4]) conj(p2([1 4])')] ))>10*%eps 
   then pause,end
 if norm(coeff(p3(:,:)- p3 ))>10*%eps then pause,end
+
+
+//hidden empty index in insertion
+s=poly(0,'s');
+a=[1+s 2;3 4];a_ref=a;
+
+a(1,[%f %f])=[];
+if or(a<>a_ref) then pause,end
+a([%f %f],1)=[];
+if or(a<>a_ref) then pause,end
+a([%f %f],[%f %f])=[];
+if or(a<>a_ref) then pause,end
index 412b56e..0e576f1 100644 (file)
@@ -1894,6 +1894,13 @@ c     .
 c     .           call extraction
                   goto 76
                endif
+            elseif(nj.eq.n4) then
+c               arg4(arg1,[])=[] --> arg4
+               call icopy(5+m4+nel4,istk(il4),1,istk(ilrs),1) ! ilrs index in istk of the result
+               l=sadr(ilrs+5+m4+nel4)
+               call unsfdcopy(nel4*(it4+1),stk(l4),1,stk(l),1)
+               lstk(top+1)=l+mn4*(it4+1)
+               goto 999
             else
 c               lw=lw1
                call indxgc(il1,m4,ili,mi,mxi,lw)
@@ -1916,6 +1923,13 @@ c     .           arg4(1:m4,arg2)=[]
                   nel3=nel4
 c     .           call extraction
                   goto 76
+               elseif(mi.eq.m4) then
+c                  arg4([],arg2)=[] --> arg4
+                  call icopy(5+m4+nel4,istk(il4),1,istk(ilrs),1) ! ilrs index in istk of the result
+                  l=sadr(ilrs+5+m4+nel4)
+                  call unsfdcopy(nel4*(it4+1),stk(l4),1,stk(l),1)
+                  lstk(top+1)=l+mn4*(it4+1)
+                  goto 999
                else
                   call error(15)
                   return
diff --git a/scilab/modules/sparse/tests/nonreg_tests/bug_3006.dia.ref b/scilab/modules/sparse/tests/nonreg_tests/bug_3006.dia.ref
new file mode 100644 (file)
index 0000000..9f5f2b5
--- /dev/null
@@ -0,0 +1,26 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2007-2008 - INRIA - Serge STEER <serge.steer@inria.fr>
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- Non-regression test for bug 3006 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=3006
+//
+// <-- Short Description -->
+// submatrix assignment impossible when the matrix is indexed with a boolean array of falses
+a=sparse([1 2;3 4]);a_ref=a;
+a(1,[%f %f])=[];
+if or(a<>a_ref) then bugmes();quit;end
+a([%f %f],1)=[];
+if or(a<>a_ref) then bugmes();quit;end
+a([%f %f],[%f %f])=[];
+if or(a<>a_ref) then bugmes();quit;end
+a(1,$:1)=[];
+if or(a<>a_ref) then bugmes();quit;end
+a($:1,1)=[];
+if or(a<>a_ref) then bugmes();quit;end
+a($:1,$:1)=[];
+if or(a<>a_ref) then bugmes();quit;end
diff --git a/scilab/modules/sparse/tests/nonreg_tests/bug_3006.tst b/scilab/modules/sparse/tests/nonreg_tests/bug_3006.tst
new file mode 100644 (file)
index 0000000..ae0cf2c
--- /dev/null
@@ -0,0 +1,30 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2007-2008 - INRIA - Serge STEER <serge.steer@inria.fr>
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- Non-regression test for bug 3006 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=3006
+//
+// <-- Short Description -->
+// submatrix assignment impossible when the matrix is indexed with a boolean array of falses  
+
+a=sparse([1 2;3 4]);a_ref=a;
+
+a(1,[%f %f])=[];
+if or(a<>a_ref) then pause,end
+a([%f %f],1)=[];
+if or(a<>a_ref) then pause,end
+a([%f %f],[%f %f])=[];
+if or(a<>a_ref) then pause,end
+
+a(1,$:1)=[];
+if or(a<>a_ref) then pause,end
+a($:1,1)=[];
+if or(a<>a_ref) then pause,end
+a($:1,$:1)=[];
+if or(a<>a_ref) then pause,end
index 8f7ee11..da75314 100644 (file)
@@ -575,6 +575,16 @@ c     .
 c     .           call extraction
                   goto 133
                endif
+            elseif(nj.eq.n4) then
+c              arg4(arg1,[])=[] --> arg4
+               istk(ilrs)=10
+               istk(ilrs+1)=m4
+               istk(ilrs+2)=n4
+               istk(ilrs+3)=0
+               volr=istk(id4+mn4)-1
+               call icopy(mn4+1+volr,istk(id4),1,istk(ilrs+4),1)
+               lstk(top+1)=sadr(ilrs+5+mn4+volr)
+               goto 999
             else
 c               lw=lw1
                call indxgc(il1,m4,ili,mi,mxi,lw)
@@ -590,6 +600,16 @@ c     .           arg4(1:m4,arg2)=[]
                   id3=id4
 c     .           call extraction
                   goto 133
+               elseif(mi.eq.m4) then
+c                 arg4([],arg2)=[] --> arg4
+                  istk(ilrs)=10
+                  istk(ilrs+1)=m4
+                  istk(ilrs+2)=n4
+                  istk(ilrs+3)=0
+                  volr=istk(id4+mn4)-1
+                  call icopy(mn4+1+volr,istk(id4),1,istk(ilrs+4),1)
+                  lstk(top+1)=sadr(ilrs+5+mn4+volr)
+                  goto 999
                else
                   call error(15)
                   return
diff --git a/scilab/modules/string/tests/nonreg_tests/bug_3006.dia.ref b/scilab/modules/string/tests/nonreg_tests/bug_3006.dia.ref
new file mode 100644 (file)
index 0000000..812e3d9
--- /dev/null
@@ -0,0 +1,26 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2007-2008 - INRIA - Serge STEER <serge.steer@inria.fr>
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- Non-regression test for bug 3006 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=3006
+//
+// <-- Short Description -->
+// submatrix assignment impossible when the matrix is indexed with a boolean array of falses
+a=['ssghg','rr';'qsdqs','4'];a_ref=a;
+a(1,[%f %f])=[];
+if or(a<>a_ref) then bugmes();quit;end
+a([%f %f],1)=[];
+if or(a<>a_ref) then bugmes();quit;end
+a([%f %f],[%f %f])=[];
+if or(a<>a_ref) then bugmes();quit;end
+a(1,$:1)=[];
+if or(a<>a_ref) then bugmes();quit;end
+a($:1,1)=[];
+if or(a<>a_ref) then bugmes();quit;end
+a($:1,$:1)=[];
+if or(a<>a_ref) then bugmes();quit;end
diff --git a/scilab/modules/string/tests/nonreg_tests/bug_3006.tst b/scilab/modules/string/tests/nonreg_tests/bug_3006.tst
new file mode 100644 (file)
index 0000000..e25aca7
--- /dev/null
@@ -0,0 +1,30 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2007-2008 - INRIA - Serge STEER <serge.steer@inria.fr>
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- Non-regression test for bug 3006 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=3006
+//
+// <-- Short Description -->
+// submatrix assignment impossible when the matrix is indexed with a boolean array of falses  
+
+a=['ssghg','rr';'qsdqs','4'];a_ref=a;
+
+a(1,[%f %f])=[];
+if or(a<>a_ref) then pause,end
+a([%f %f],1)=[];
+if or(a<>a_ref) then pause,end
+a([%f %f],[%f %f])=[];
+if or(a<>a_ref) then pause,end
+
+a(1,$:1)=[];
+if or(a<>a_ref) then pause,end
+a($:1,1)=[];
+if or(a<>a_ref) then pause,end
+a($:1,$:1)=[];
+if or(a<>a_ref) then pause,end