fix hypermat test and some matrix insertion 23/16023/3
Anais AUBERT [Tue, 24 Feb 2015 14:41:39 +0000 (15:41 +0100)]
// h=hypermat([2,3,2], 1:12); h(13:15) = 2; is no longer allowed
test_run data_structures hypermat

Change-Id: I97f5863d4a3eade89f30a9a3252e96553490ae66

scilab/modules/ast/src/cpp/ast/visitor_common.cpp
scilab/modules/data_structures/tests/unit_tests/hypermat.dia.ref
scilab/modules/data_structures/tests/unit_tests/hypermat.tst

index 5fe2504..10f6253 100644 (file)
@@ -1618,7 +1618,7 @@ InternalType* evaluateFields(const ast::Exp* _pExp, std::list<ExpHistory*>& fiel
                 if (pIT == NULL)
                 {
                     std::wostringstream os;
-                    os << _W("Submatrix incorrectly defined.");
+                    os << _W("Submatrix incorrectly defined.\n");
                     throw ast::ScilabError(os.str(), 999, _pExp->getLocation());
                 }
 
index ccff889..fcede47 100644 (file)
@@ -8,19 +8,19 @@
 //extraction
 Data=list(1:12,(1:12)+rand(1,12)*%i,int32(1:12),(1:12)+%s,rand(1,12)>0.5,string(1:12));
 test=1;
-msg='Problem with extraction for hypermatrix of type %s in test %d.%d \n';
+msg="Problem with extraction for hypermatrix of type %s in test %d.%d \n";
 for k=1:size(Data)
-  data=Data(k);td=typeof(data);
-  h=hypermat([2 3 2],data);
-  if h(2,3,2)<>data(12) then mprintf(msg,td,test,k); bugmes();quit;end
-  if or(h(2,:,2)<>data([8 10 12])) then mprintf(msg,td,test,k); bugmes();quit;end
-  if or(h($,:,2)<>data([8 10 12])) then mprintf(msg,td,test,k); bugmes();quit;end
-  if or(h(:,3,2)<>matrix(data([11 12]),-1,1)) then mprintf(msg,test,k); bugmes();quit;end
-  if or(h(1:2)<>matrix(data([1 2]),-1,1)) then mprintf(msg,td,test,k); bugmes();quit;end
-  if or(h(1:3)<>matrix(data([1 2 3]),-1,1)) then mprintf(msg,td,test,k); bugmes();quit;end
-  if or(h(1,2:3)<>data([3 5])) then mprintf(msg,td,test,k); bugmes();quit;end
-  if or(h(1,4:5)<>data([7 9])) then mprintf(msg,td,test,k); bugmes();quit;end
-  msgToPrint=msprintf('    test%d.%d completed\n',test,k);write(%io(2),msgToPrint);
+    data=Data(k);td=typeof(data);
+    h=hypermat([2 3 2],data);
+    if h(2,3,2)<>data(12) then mprintf(msg,td,test,k); bugmes();quit;end
+    if or(h(2,:,2)<>data([8 10 12])) then mprintf(msg,td,test,k); bugmes();quit;end
+    if or(h($,:,2)<>data([8 10 12])) then mprintf(msg,td,test,k); bugmes();quit;end
+    if or(h(:,3,2)<>matrix(data([11 12]),-1,1)) then mprintf(msg,test,k); bugmes();quit;end
+    if or(h(1:2)<>matrix(data([1 2]),-1,1)) then mprintf(msg,td,test,k); bugmes();quit;end
+    if or(h(1:3)<>matrix(data([1 2 3]),-1,1)) then mprintf(msg,td,test,k); bugmes();quit;end
+    if or(h(1,2:3)<>data([3 5])) then mprintf(msg,td,test,k); bugmes();quit;end
+    if or(h(1,4:5)<>data([7 9])) then mprintf(msg,td,test,k); bugmes();quit;end
+    msgToPrint=msprintf("    test%d.%d completed\n",test,k);write(%io(2),msgToPrint);
 end
     test1.1 completed
     test1.2 completed
@@ -31,19 +31,19 @@ end
 //insertion of []
 test=2;
 for k=1:size(Data)
-  data=Data(k);td=typeof(data);
-  h=hypermat([2 3 2],data);h1=h;
-  h(2,:,:)=[];
-  if or(size(h)<>[1 3 2]) then mprintf(msg,td,test,k); bugmes();quit;end
-  if or(h<>h1(1,:,:))  then mprintf(msg,td,test,k); bugmes();quit;end
-  h=hypermat([2 3 2],data);h1=h;
-  h(:,1:2,:)=[];
-  if or(size(h)<>[2 1 2]) then mprintf(msg,td,test,k); bugmes();quit;end
-  if or(h<>h1(:,3,:))  then mprintf(msg,td,test,k); bugmes();quit;end
-  h=hypermat([2 3 2],data);
-  h(:,:,:)=[];
-  if h<>[] then mprintf(msg,td,test,k); bugmes();quit;end
-  msgToPrint=msprintf('    test%d.%d completed\n',test,k);write(%io(2),msgToPrint);
+    data=Data(k);td=typeof(data);
+    h=hypermat([2 3 2],data);h1=h;
+    h(2,:,:)=[];
+    if or(size(h)<>[1 3 2]) then mprintf(msg,td,test,k); bugmes();quit;end
+    if or(h<>h1(1,:,:))  then mprintf(msg,td,test,k); bugmes();quit;end
+    h=hypermat([2 3 2],data);h1=h;
+    h(:,1:2,:)=[];
+    if or(size(h)<>[2 1 2]) then mprintf(msg,td,test,k); bugmes();quit;end
+    if or(h<>h1(:,3,:))  then mprintf(msg,td,test,k); bugmes();quit;end
+    h=hypermat([2 3 2],data);
+    h(:,:,:)=[];
+    if h<>[] then mprintf(msg,td,test,k); bugmes();quit;end
+    msgToPrint=msprintf("    test%d.%d completed\n",test,k);write(%io(2),msgToPrint);
 end
     test2.1 completed
     test2.2 completed
@@ -51,42 +51,39 @@ end
     test2.4 completed
     test2.5 completed
     test2.6 completed
-msg='Problem with insertion for hypermatrix of type %s in test %d.%d \n';  
+msg="Problem with insertion for hypermatrix of type %s in test %d.%d \n";
 //insertion of a single element
 test=3;
 for k=1:size(Data)
-  data=Data(k);td=typeof(data);
-  I=data(1);
-  h=hypermat([2 3 2],data);
-  h(2,3,2)=I;
-  if or(size(h)<>[2 3 2]) then mprintf(msg,td,test,k); bugmes();quit;end
-  if h(2,3,2)<>I then mprintf(msg,td,test,k); bugmes();quit;end
-  h=hypermat([2 3 2],data);
-  h(2,3)=I;
-  if or(size(h)<>[2 3 2]) then mprintf(msg,td,test,k); bugmes();quit;end
-  if h(2,3,1)<>I then mprintf(msg,td,test,k); bugmes();quit;end
-  h=hypermat([2 3 2],data);
-  h(2)=I;
-  if or(size(h)<>[2 3 2]) then mprintf(msg,td,test,k); bugmes();quit;end
-  if h(2,1,1)<>I then mprintf(msg,td,test,k); bugmes();quit;end
-  h=hypermat([2 3 2],data);
-  h(3)=I;
-  if or(size(h)<>[2 3 2]) then mprintf(msg,td,test,k); bugmes();quit;end
-  if h(1,2,1)<>I then mprintf(msg,td,test,k); bugmes();quit;end
-  h=hypermat([2 3 2],data);
-  h(3)=I;
-  if or(size(h)<>[2 3 2]) then mprintf(msg,td,test,k); bugmes();quit;end
-  if h(1,2,1)<>I then mprintf(msg,td,test,k); bugmes();quit;end
-  h=hypermat([2 3 2],data);
-  h([3,7])=I;
-  if or(size(h)<>[2 3 2]) then mprintf(msg,td,test,k); bugmes();quit;end
-  if h(1,2,1)<>I|h(1,1,2)<>I then mprintf(msg,td,test,k); bugmes();quit;end
-  h=hypermat([2 3 2],data);
-  h(13:15)=I;
-  if type(h)<>type(data) then mprintf(msg,td,test,k); bugmes();quit;end
-  if or(size(h)<>[15,1]) then mprintf(msg,td,test,k); bugmes();quit;end
-  if or(h(13:15)<>I) then mprintf(msg,td,test,k); bugmes();quit;end
-  msgToPrint=msprintf('    test%d.%d completed\n',test,k);write(%io(2),msgToPrint);
+    data=Data(k);td=typeof(data);
+    I=data(1);
+    h=hypermat([2 3 2],data);
+    h(2,3,2)=I;
+    if or(size(h)<>[2 3 2]) then mprintf(msg,td,test,k); bugmes();quit;end
+    if h(2,3,2)<>I then mprintf(msg,td,test,k); bugmes();quit;end
+    h=hypermat([2 3 2],data);
+    h(2,3)=I;
+    if or(size(h)<>[2 3 2]) then mprintf(msg,td,test,k); bugmes();quit;end
+    if h(2,3,1)<>I then mprintf(msg,td,test,k); bugmes();quit;end
+    h=hypermat([2 3 2],data);
+    h(2)=I;
+    if or(size(h)<>[2 3 2]) then mprintf(msg,td,test,k); bugmes();quit;end
+    if h(2,1,1)<>I then mprintf(msg,td,test,k); bugmes();quit;end
+    h=hypermat([2 3 2],data);
+    h(3)=I;
+    if or(size(h)<>[2 3 2]) then mprintf(msg,td,test,k); bugmes();quit;end
+    if h(1,2,1)<>I then mprintf(msg,td,test,k); bugmes();quit;end
+    h=hypermat([2 3 2],data);
+    h(3)=I;
+    if or(size(h)<>[2 3 2]) then mprintf(msg,td,test,k); bugmes();quit;end
+    if h(1,2,1)<>I then mprintf(msg,td,test,k); bugmes();quit;end
+    h=hypermat([2 3 2],data);
+    h([3,7])=I;
+    if or(size(h)<>[2 3 2]) then mprintf(msg,td,test,k); bugmes();quit;end
+    if h(1,2,1)<>I|h(1,1,2)<>I then mprintf(msg,td,test,k); bugmes();quit;end
+    msrExpected = msprintf(_("Submatrix incorrectly defined.\n"));
+    assert_checkerror("h=hypermat([2 3 2],data);h(13:15)=I", msrExpected);
+    msgToPrint=msprintf("    test%d.%d completed\n",test,k);write(%io(2),msgToPrint);
 end
     test3.1 completed
     test3.2 completed
@@ -97,15 +94,15 @@ end
 //extension of a 2D matrix to a 3D one
 test=4;
 for k=1:size(Data)
-  data=matrix(Data(k),3,-1);td=typeof(data);
-  I=data(1,1);
-  h=data;
-  h(3,4,2)=I;
-  if or(size(h)<>[3 4 2]) then mprintf(msg,td,test,k); bugmes();quit;end
-  if h(:,:,1)<>data then mprintf(msg,td,test,k); bugmes();quit;end
-  d=[];d(3,4)=I;
-  if h(:,:,2)<>d then mprintf(msg,td,test,k); bugmes();quit;end
-  msgToPrint=msprintf('    test%d.%d completed\n',test,k);write(%io(2),msgToPrint);
+    data=matrix(Data(k),3,-1);td=typeof(data);
+    I=data(1,1);
+    h=data;
+    h(3,4,2)=I;
+    if or(size(h)<>[3 4 2]) then mprintf(msg,td,test,k); bugmes();quit;end
+    if h(:,:,1)<>data then mprintf(msg,td,test,k); bugmes();quit;end
+    d=[];d(3,4)=I;
+    if h(:,:,2)<>d then mprintf(msg,td,test,k); bugmes();quit;end
+    msgToPrint=msprintf("    test%d.%d completed\n",test,k);write(%io(2),msgToPrint);
 end
     test4.1 completed
     test4.2 completed
index ecda38b..d688d44 100644 (file)
 Data=list(1:12,(1:12)+rand(1,12)*%i,int32(1:12),(1:12)+%s,rand(1,12)>0.5,string(1:12));
 
 test=1;
-msg='Problem with extraction for hypermatrix of type %s in test %d.%d \n';
+msg="Problem with extraction for hypermatrix of type %s in test %d.%d \n";
 for k=1:size(Data)
-  data=Data(k);td=typeof(data);
-  h=hypermat([2 3 2],data);
-  if h(2,3,2)<>data(12) then mprintf(msg,td,test,k); pause,end
-  if or(h(2,:,2)<>data([8 10 12])) then mprintf(msg,td,test,k); pause,end
-  if or(h($,:,2)<>data([8 10 12])) then mprintf(msg,td,test,k); pause,end
-  if or(h(:,3,2)<>matrix(data([11 12]),-1,1)) then mprintf(msg,test,k); pause,end
-  if or(h(1:2)<>matrix(data([1 2]),-1,1)) then mprintf(msg,td,test,k); pause,end
-  if or(h(1:3)<>matrix(data([1 2 3]),-1,1)) then mprintf(msg,td,test,k); pause,end
-  if or(h(1,2:3)<>data([3 5])) then mprintf(msg,td,test,k); pause,end
-  if or(h(1,4:5)<>data([7 9])) then mprintf(msg,td,test,k); pause,end
-  msgToPrint=msprintf('    test%d.%d completed\n',test,k);write(%io(2),msgToPrint);
+    data=Data(k);td=typeof(data);
+    h=hypermat([2 3 2],data);
+    if h(2,3,2)<>data(12) then mprintf(msg,td,test,k); pause,end
+    if or(h(2,:,2)<>data([8 10 12])) then mprintf(msg,td,test,k); pause,end
+    if or(h($,:,2)<>data([8 10 12])) then mprintf(msg,td,test,k); pause,end
+    if or(h(:,3,2)<>matrix(data([11 12]),-1,1)) then mprintf(msg,test,k); pause,end
+    if or(h(1:2)<>matrix(data([1 2]),-1,1)) then mprintf(msg,td,test,k); pause,end
+    if or(h(1:3)<>matrix(data([1 2 3]),-1,1)) then mprintf(msg,td,test,k); pause,end
+    if or(h(1,2:3)<>data([3 5])) then mprintf(msg,td,test,k); pause,end
+    if or(h(1,4:5)<>data([7 9])) then mprintf(msg,td,test,k); pause,end
+    msgToPrint=msprintf("    test%d.%d completed\n",test,k);write(%io(2),msgToPrint);
 end
 //insertion of []
 test=2;
 for k=1:size(Data)
-  data=Data(k);td=typeof(data);
-  h=hypermat([2 3 2],data);h1=h;
-  h(2,:,:)=[];
-  if or(size(h)<>[1 3 2]) then mprintf(msg,td,test,k); pause,end
-  if or(h<>h1(1,:,:))  then mprintf(msg,td,test,k); pause,end
-
-  h=hypermat([2 3 2],data);h1=h;
-  h(:,1:2,:)=[];
-  if or(size(h)<>[2 1 2]) then mprintf(msg,td,test,k); pause,end
-  if or(h<>h1(:,3,:))  then mprintf(msg,td,test,k); pause,end
-
-  h=hypermat([2 3 2],data);
-  h(:,:,:)=[];
-  if h<>[] then mprintf(msg,td,test,k); pause,end
-  msgToPrint=msprintf('    test%d.%d completed\n',test,k);write(%io(2),msgToPrint);
+    data=Data(k);td=typeof(data);
+    h=hypermat([2 3 2],data);h1=h;
+    h(2,:,:)=[];
+    if or(size(h)<>[1 3 2]) then mprintf(msg,td,test,k); pause,end
+    if or(h<>h1(1,:,:))  then mprintf(msg,td,test,k); pause,end
+
+    h=hypermat([2 3 2],data);h1=h;
+    h(:,1:2,:)=[];
+    if or(size(h)<>[2 1 2]) then mprintf(msg,td,test,k); pause,end
+    if or(h<>h1(:,3,:))  then mprintf(msg,td,test,k); pause,end
+
+    h=hypermat([2 3 2],data);
+    h(:,:,:)=[];
+    if h<>[] then mprintf(msg,td,test,k); pause,end
+    msgToPrint=msprintf("    test%d.%d completed\n",test,k);write(%io(2),msgToPrint);
 
 end
 
 
-msg='Problem with insertion for hypermatrix of type %s in test %d.%d \n';  
+msg="Problem with insertion for hypermatrix of type %s in test %d.%d \n";
 //insertion of a single element
 test=3;
 for k=1:size(Data)
-  data=Data(k);td=typeof(data);
-  I=data(1);
-  h=hypermat([2 3 2],data);
-  h(2,3,2)=I;
-  if or(size(h)<>[2 3 2]) then mprintf(msg,td,test,k); pause,end
-  if h(2,3,2)<>I then mprintf(msg,td,test,k); pause,end
-  
-  h=hypermat([2 3 2],data);
-  h(2,3)=I;
-  if or(size(h)<>[2 3 2]) then mprintf(msg,td,test,k); pause,end
-  if h(2,3,1)<>I then mprintf(msg,td,test,k); pause,end
-
-  h=hypermat([2 3 2],data);
-  h(2)=I;
-  if or(size(h)<>[2 3 2]) then mprintf(msg,td,test,k); pause,end
-  if h(2,1,1)<>I then mprintf(msg,td,test,k); pause,end
-
-  h=hypermat([2 3 2],data);
-  h(3)=I;
-  if or(size(h)<>[2 3 2]) then mprintf(msg,td,test,k); pause,end
-  if h(1,2,1)<>I then mprintf(msg,td,test,k); pause,end
-
-  h=hypermat([2 3 2],data);
-  h(3)=I;
-  if or(size(h)<>[2 3 2]) then mprintf(msg,td,test,k); pause,end
-  if h(1,2,1)<>I then mprintf(msg,td,test,k); pause,end
-
-  h=hypermat([2 3 2],data);
-  h([3,7])=I;
-  if or(size(h)<>[2 3 2]) then mprintf(msg,td,test,k); pause,end
-  if h(1,2,1)<>I|h(1,1,2)<>I then mprintf(msg,td,test,k); pause,end
-
-  h=hypermat([2 3 2],data);
-  h(13:15)=I;
-  if type(h)<>type(data) then mprintf(msg,td,test,k); pause,end
-  if or(size(h)<>[15,1]) then mprintf(msg,td,test,k); pause,end
-  if or(h(13:15)<>I) then mprintf(msg,td,test,k); pause,end
-  msgToPrint=msprintf('    test%d.%d completed\n',test,k);write(%io(2),msgToPrint);
+    data=Data(k);td=typeof(data);
+    I=data(1);
+    h=hypermat([2 3 2],data);
+    h(2,3,2)=I;
+    if or(size(h)<>[2 3 2]) then mprintf(msg,td,test,k); pause,end
+    if h(2,3,2)<>I then mprintf(msg,td,test,k); pause,end
+
+    h=hypermat([2 3 2],data);
+    h(2,3)=I;
+    if or(size(h)<>[2 3 2]) then mprintf(msg,td,test,k); pause,end
+    if h(2,3,1)<>I then mprintf(msg,td,test,k); pause,end
+
+    h=hypermat([2 3 2],data);
+    h(2)=I;
+    if or(size(h)<>[2 3 2]) then mprintf(msg,td,test,k); pause,end
+    if h(2,1,1)<>I then mprintf(msg,td,test,k); pause,end
+
+    h=hypermat([2 3 2],data);
+    h(3)=I;
+    if or(size(h)<>[2 3 2]) then mprintf(msg,td,test,k); pause,end
+    if h(1,2,1)<>I then mprintf(msg,td,test,k); pause,end
+
+    h=hypermat([2 3 2],data);
+    h(3)=I;
+    if or(size(h)<>[2 3 2]) then mprintf(msg,td,test,k); pause,end
+    if h(1,2,1)<>I then mprintf(msg,td,test,k); pause,end
+
+    h=hypermat([2 3 2],data);
+    h([3,7])=I;
+    if or(size(h)<>[2 3 2]) then mprintf(msg,td,test,k); pause,end
+    if h(1,2,1)<>I|h(1,1,2)<>I then mprintf(msg,td,test,k); pause,end
+
+    msrExpected = msprintf(_("Submatrix incorrectly defined.\n"));
+    assert_checkerror("h=hypermat([2 3 2],data);h(13:15)=I", msrExpected);
+
+    msgToPrint=msprintf("    test%d.%d completed\n",test,k);write(%io(2),msgToPrint);
 
 end
 
+
+
+
 //extension of a 2D matrix to a 3D one
 test=4;
 for k=1:size(Data)
-  data=matrix(Data(k),3,-1);td=typeof(data);
-  I=data(1,1);
-  h=data;
-  h(3,4,2)=I;
-  if or(size(h)<>[3 4 2]) then mprintf(msg,td,test,k); pause,end
-  if h(:,:,1)<>data then mprintf(msg,td,test,k); pause,end
-  d=[];d(3,4)=I;
-  if h(:,:,2)<>d then mprintf(msg,td,test,k); pause,end
-  msgToPrint=msprintf('    test%d.%d completed\n',test,k);write(%io(2),msgToPrint);
+    data=matrix(Data(k),3,-1);td=typeof(data);
+    I=data(1,1);
+    h=data;
+    h(3,4,2)=I;
+    if or(size(h)<>[3 4 2]) then mprintf(msg,td,test,k); pause,end
+    if h(:,:,1)<>data then mprintf(msg,td,test,k); pause,end
+    d=[];d(3,4)=I;
+    if h(:,:,2)<>d then mprintf(msg,td,test,k); pause,end
+    msgToPrint=msprintf("    test%d.%d completed\n",test,k);write(%io(2),msgToPrint);
 end