Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  matobjtest.g   Sprache: unbekannt

 
RowListMatrixObjTester := function( m, level )
  local MyError,a,bd,dims,errors,i,j,k,l,n,nn,one,s,three,two,u,v,vv,w,wi,wit,
        wt,z,zero,vi,filter,pol,vvv,vvv2;
  
  MyError := function(nr)
    Print("ERROR: Number ",nr," see code of RowListMatrixObjTester!\n\n");
    Add(errors,nr);
  end;

  errors := [];

  Print("Testing matrix/vector interface...\n\n");

  if not(IsMatrixObj(m)) then
      Print("Warning, matrix is not in IsMatrixObj, ");
      Print("let's see what it can do...\n");
  fi;
  
  # Prepare things:
  bd := BaseDomain(m);
  zero := Zero(bd);
  one := One(bd);
  two := one+one;
  three := two+one;

  # Let's first look at its attributes:
  dims := DimensionsMat(m);
  if dims[1] <> NumberRows(m) then MyError(1); fi;
  if dims[2] <> NumberColumns(m) then MyError(2); fi;

  # We do not like too small matrices here:
  if dims[1] < 2 or dims[2] < 2 then
      Print("Please give me a matrix of dimensions at least 2x2!\n");
      return;
  fi;

  # Now first consider the vectors:
  v := m[1];
  if not(IsVectorObj(v)) then
      Print("Warning, corresp. vectors are not in IsVectorObj,\n");
      Print("let's see what they can do...\n");
  fi;

  # Test attributes:
  l := Length(v);
  if not(IsIdenticalObj(BaseDomain(v),bd)) then MyError(3); fi;
  if Characteristic(v) <> Characteristic(BaseDomain(v)) then MyError(7/2); fi;

  # Element access:
  s := 0;
  for i in [1..l] do
      s := s + v[i];
  od;

  # Make a shallow copy:
  w := ShallowCopy(v);
  if not(IsVectorObj(w)) then
      Print("Warning, ShallowCopy of vectors are not in IsVectorObj.\n");
  fi;

  # Is it a copy?
  w[1] := w[1] + one;
  if w[1] = v[1] then MyError(4); fi;

  # Write access:
  for i in [1..l] do
      w[i] := one;
  od;

  # Slicing:
  u := w{[1]};
  if not(IsVectorObj(u)) then
      Print("Warning, slices of vectors are not in IsVectorObj\n");
  fi;

  # PositionNonZero:
  w[1] := zero;
  w[2] := one;
  if PositionNonZero(w) <> 2 then MyError(5); fi;

  # PositionLastNonZero:
  w[l] := zero;
  w[l-1] := one;
  #if PositionLastNonZero(w) <> l-1 then MyError(6); fi;

  # The List command:
  w := List(v);
  if not(IsList(w)) then MyError(7); fi;
  for i in [1..l] do
      if w[i] <> v[i] then MyError(8); fi;
  od;

  # The List command with function:
  w := List(v,x->x*two);
  if not(IsList(w)) then MyError(9); fi;
  for i in [1..l] do
      if w[i] <> v[i] * two then MyError(10); fi;
  od;

  # StructuralCopy:
  w := StructuralCopy(v);

  # Viewing and printing of vectors:
  w := v{[1..2]};
  Print("A vector is printed as follows:\n",w,"\n\n");
  Print("ViewObj does the following to it:\n");
  ViewObj(w);
  Print("\n\n");
  Print("String gives the following:\n",String(w),"\n\n");
  Print("Display does this:\n");
  Display(w);
  Print("\n");

  # Make an immutable copy:
  w := ShallowCopy(v);
  wi := ShallowCopy(w);
  MakeImmutable(wi);
  if not(IsMutable(w)) then MyError(10); fi;
  if IsMutable(wi) then MyError(11); fi;
  
  # Now we try to do some arithmetic:
  u := w + w;
  for i in [1..l] do if u[i] <> w[i]+w[i] then MyError(12); fi; od;
  if not(IsMutable(u)) then MyError(13); fi;
  u := w + wi;
  if not(IsMutable(u)) then MyError(14); fi;
  u := wi + w;
  if not(IsMutable(u)) then MyError(15); fi;
  u := wi + wi;
  if IsMutable(u) then MyError(16); fi;
  u := w - w;
  if not(IsZero(u)) then MyError(17); fi;
  for i in [1..l] do if u[i] <> w[i]-w[i] then MyError(18); fi; od;
  if not(IsMutable(u)) then MyError(19); fi;
  u := w - wi;
  if not(IsMutable(u)) then MyError(20); fi;
  u := wi - w;
  if not(IsMutable(u)) then MyError(21); fi;
  u := wi - wi;
  if IsMutable(u) then MyError(22); fi;

  # Comparison and scalar multiplication:
  u := w * one;
  if not(u = w) then MyError(23); fi;
  if not(IsMutable(u)) then MyError(24); fi;
  u := wi * one;
  if IsMutable(u) then MyError(25); fi;
  u := one * w;
  if not(u = w) then MyError(26); fi;
  if not(IsMutable(u)) then MyError(27); fi;
  u := one * wi;
  if IsMutable(u) then MyError(28); fi;
  if u < w then MyError(29); fi;

  # Now in place:
  u := ZeroVector(l,w);
  AddRowVector(u,w);
  for i in [1..l] do if u[i] <> w[i] then MyError(30); fi; od;
  AddRowVector(u,w,two);
  for i in [1..l] do if u[i] <> w[i]*three then MyError(31); fi; od;
  AddRowVector(u,w,-two,1,l);
  if u <> w then MyError(32); fi;
  MultVector(u,two);
  for i in [1..l] do if u[i] <> w[i]*two then MyError(33); fi; od;
  MultVector(u,[1,2],w,[2,1],two);
  if u[1] <> w[2]*two or u[2] <> w[1]*two then MyError(34); fi;
  if w/one <> w then MyError(35); fi;

  # AdditiveInverse*:
  a := -w;
  for i in [1..l] do if a[i] <> -w[i] then MyError(36); fi; od;
  u := AdditiveInverseSameMutability(w);
  if a <> u then MyError(37); fi;
  if not(IsMutable(u)) then MyError(38); fi;
  u := AdditiveInverseImmutable(w);
  if a <> u then MyError(38); fi;
  if IsMutable(u) then MyError(39); fi;
  u := AdditiveInverseMutable(w);
  if a <> u then MyError(40); fi;
  if not(IsMutable(u)) then MyError(41); fi;
  u := AdditiveInverseSameMutability(wi);
  if a <> u then MyError(42); fi;
  if IsMutable(u) then MyError(43); fi;
  u := AdditiveInverseImmutable(wi);
  if a <> u then MyError(44); fi;
  if IsMutable(u) then MyError(45); fi;
  u := AdditiveInverseMutable(wi);
  if a <> u then MyError(46); fi;
  if not(IsMutable(u)) then MyError(47); fi;

  # Zero*
  u := ZeroSameMutability(w);
  if not(IsZero(u)) then MyError(48); fi;
  if not(IsMutable(u)) then MyError(49); fi;
  u := ZeroImmutable(w);
  if not(IsZero(u)) then MyError(50); fi;
  if IsMutable(u) then MyError(51); fi;
  u := ZeroMutable(w);
  if not(IsZero(u)) then MyError(52); fi;
  if not(IsMutable(u)) then MyError(53); fi;
  u := ZeroSameMutability(wi);
  if not(IsZero(u)) then MyError(54); fi;
  if IsMutable(u) then MyError(55); fi;
  u := ZeroImmutable(wi);
  if not(IsZero(u)) then MyError(56); fi;
  if IsMutable(u) then MyError(57); fi;
  u := ZeroMutable(wi);
  if not(IsZero(u)) then MyError(58); fi;
  if not(IsMutable(u)) then MyError(59); fi;

  # Constructors:
  z := ZeroVector(10,v);
  if not(IsZero(z)) then MyError(60); fi;
  if not(IsMutable(z)) then MyError(61); fi;
  if not(Length(z) = 10) then MyError(62); fi;
  z := ZeroVector(10,ZeroImmutable(v));
  if not(IsZero(z)) then MyError([60,1]); fi;
  if not(IsMutable(z)) then MyError([61,1]); fi;
  if not(Length(z) = 10) then MyError([62,1]); fi;
  z := Vector([zero,one,zero,one,zero,one,zero,one],z);
  if not(IsMutable(z)) then MyError(63); fi;
  if not(Length(z) = 8) then MyError(64); fi;
  z := Vector([zero,one,zero,one,zero,one,zero,one],ZeroImmutable(z));
  if not(IsMutable(z)) then MyError([63,1]); fi;
  if not(Length(z) = 8) then MyError([64,2]); fi;

  # Randomize:
  Randomize(z);

  # CopySubVector:
  CopySubVector(v,z,[2,1],[1,2]);
  if not(z[1] = v[2] and z[2] = v[1]) then MyError(65); fi;

  Print("Vector test completed.\n\n");

  # Now matrices:

  n := MutableCopyMat(m);
  if not(IsMatrixObj(n)) then
      Print("Warning: MutableCopyMat produces object not in IsMatrixObj!\n");
  fi;

  # Test RowList behaviour:
  v := n[1];
  v[1] := one;
  if n[1,1] <> one then MyError(66); fi;
  v[1] := two;
  if n[1,1] <> two then MyError(67); fi;
  n[1,1] := one;
  if v[1] <> one then MyError(68); fi;

  # Test sharing of rows:
  n[2] := v;
  n[1,2] := one;
  if n[2,2] <> one then MyError(69); fi;
  n[2,1] := two;
  if n[1,1] <> two then MyError(70); fi;
  # Test for identical row objects:
  if not(IsIdenticalObj(n[1],n[1])) then
      Print("Warning: Row objects of same row are not identical!\n");
  fi;
  if not(IsIdenticalObj(n[1],n[2])) then
      Print("Warning: Row objects are not identical!\n");
  fi;

  # PositionNonZero and friends:
  n := Matrix([[zero,zero],[one,two],[zero,zero]],2,m);
  if PositionNonZero(n) <> 2 then MyError(71); fi;
  if PositionNonZero(n,2) <> 4 then MyError(72); fi;
  if PositionLastNonZero(n) <> 2 then MyError(73); fi;
  if PositionLastNonZero(n,2) <> 0 then MyError(74); fi;
  v := Vector([one,two],m[1]);
  if Position(n,v) <> 2 then MyError(75); fi;
  v[2] := one;
  if Position(n,v) <> fail then MyError(76); fi;
  v[2] := two;
  n := Matrix([[one,two],[zero,zero]],2,m);
  if n[1] > n[2] then n := n{[2,1]}; fi;
  if not(n[1] <= n[2]) then MyError(78); fi;
  if PositionSorted(n,v) <> Position(n,v) then MyError(79); fi;
  v[2] := one;
  PositionSorted(n,v); # we cannot know what this will be, it only has to work

  # List operations:
  nn := MutableCopyMat(n);
  Add(n,v);
  if not(NrRows(n) = 3) then MyError(80); fi;
  Add(n,v,1);
  if not(NrRows(n) = 4) then MyError(81); fi;
  if not(IsIdenticalObj(n[1],n[4])) then MyError(82); fi;
  Remove(n,1);
  if not(NrRows(n) = 3) then MyError(83); fi;
  Remove(n);
  if not(NrRows(n) = 2) then MyError(84); fi;
  if not(n = nn) then MyError(85); fi;
  Unbind(n[2]);
  if not(NrRows(n) = 1) then MyError(85); fi;
  if not(n = nn{[1]}) then MyError(86); fi;
  Append(nn,n);
  if not(NrRows(nn) = 3 and nn[1] = nn[3]) then MyError(87); fi;
  u := Concatenation(n,nn);
  if not(NrRows(u) = 4 and IsIdenticalObj(u[1],u[4])) then MyError(88); fi;

  # We already have tested MutableCopyMat, how about ExtractSubMatrix?
  n := ExtractSubMatrix(m,[1,2],[1,2]);
  if not(IsMatrixObj(n)) then
      Print("Warning: ExtractSubMatrix does not return an object in ",
            "IsMatrixObj!\n");
  fi;
  if not(m[1,1] = n[1,1] and m[1,2] = n[1,2] and m[2,1] = n[2,1] and
         m[2,2] = n[2,2] and NumberRows(n) = 2 and NumberColumns(n) = 2) then
      MyError(89);
  fi;
  n := MutableCopyMat(n);
  CopySubMatrix(m,n,[2,1],[1,2],[2,1],[1,2]);
  if not(m[1,1] = n[2,2] and m[1,2] = n[2,1] and m[2,1] = n[1,2] and
         m[2,2] = n[1,1] and NumberRows(n) = 2 and NumberColumns(n) = 2) then
      MyError(90);
  fi;
  n := StructuralCopy(m);
  if not(m=n) then MyError(91); fi;
  n := ShallowCopy(m);
  if not(m=n and IsIdenticalObj(m[1],n[1])) then MyError(92); fi;

  # Printing and viewing:
  n := Matrix([[zero,one],[two,three]],2,m);
  Print("A matrix is printed as follows:\n",n,"\n\n");
  Print("ViewObj does the following to it:\n");
  ViewObj(n);
  Print("\n\n");
  Print("String gives the following:\n",String(n),"\n\n");
  Print("Display does this:\n");
  Display(n);
  Print("\n");

  # MakeImmutable:
  w := MutableCopyMat(m);
  wi := MutableCopyMat(w);
  MakeImmutable(wi);
  if IsMutable(wi) or IsMutable(wi[1]) then MyError(93); fi;
  
  # Now we try to do some arithmetic:
  l := NrRows(w);
  u := w + w;
  for i in [1..l] do if u[i] <> w[i]+w[i] then MyError(94); fi; od;
  if not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(95); fi;
  u := w + wi;
  if not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(96); fi;
  u := wi + w;
  if not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(97); fi;
  u := wi + wi;
  if IsMutable(u) or IsMutable(u[1]) then MyError(98); fi;
  u := w - w;
  if not(IsZero(u)) then MyError(99); fi;
  for i in [1..l] do if u[i] <> w[i]-w[i] then MyError(100); fi; od;
  if not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(101); fi;
  u := w - wi;
  if not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(102); fi;
  u := wi - w;
  if not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(103); fi;
  u := wi - wi;
  if IsMutable(u) or IsMutable(u[1]) then MyError(104); fi;

  # Comparison and scalar multiplication:
  u := w * one;
  if not(u = w) then MyError(105); fi;
  if not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(105); fi;
  u := wi * one;
  if IsMutable(u) or IsMutable(u[1]) then MyError(106); fi;
  u := one * w;
  if not(u = w) then MyError(107); fi;
  if not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(108); fi;
  u := one * wi;
  if IsMutable(u) or IsMutable(u[1]) then MyError(109); fi;
  if u < w then MyError(110); fi;

  # AdditiveInverse*:
  a := -w;
  for i in [1..l] do if a[i] <> -w[i] then MyError(111); fi; od;
  u := AdditiveInverseSameMutability(w);
  if a <> u then MyError(112); fi;
  if not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(113); fi;
  u := AdditiveInverseImmutable(w);
  if a <> u then MyError(114); fi;
  if IsMutable(u) or IsMutable(u[1]) then MyError(115); fi;
  u := AdditiveInverseMutable(w);
  if a <> u then MyError(116); fi;
  if not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(117); fi;
  u := AdditiveInverseSameMutability(wi);
  if a <> u then MyError(118); fi;
  if IsMutable(u) or IsMutable(u[1]) then MyError(119); fi;
  u := AdditiveInverseImmutable(wi);
  if a <> u then MyError(120); fi;
  if IsMutable(u) or IsMutable(u[1]) then MyError(121); fi;
  u := AdditiveInverseMutable(wi);
  if a <> u then MyError(122); fi;
  if not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(123); fi;

  # Zero*
  u := ZeroSameMutability(w);
  if not(IsZero(u)) then MyError(124); fi;
  if not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(125); fi;
  u := ZeroImmutable(w);
  if not(IsZero(u)) then MyError(126); fi;
  if IsMutable(u) or IsMutable(u[1]) then MyError(127); fi;
  u := ZeroMutable(w);
  if not(IsZero(u)) then MyError(128); fi;
  if not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(129); fi;
  u := ZeroSameMutability(wi);
  if not(IsZero(u)) then MyError(130); fi;
  if IsMutable(u) or IsMutable(u[1]) then MyError(131); fi;
  u := ZeroImmutable(wi);
  if not(IsZero(u)) then MyError(132); fi;
  if IsMutable(u) or IsMutable(u[1]) then MyError(133); fi;
  u := ZeroMutable(wi);
  if not(IsZero(u)) then MyError(134); fi;
  if not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(135); fi;

  # Characteristic:
  if Characteristic(m) <> Characteristic(BaseDomain(m)) then MyError(136); fi;

  # TransposedMat*:
  wt := TransposedMatMutable(w);
  if not(IsMutable(wt)) or not(IsMutable(wt[1])) then MyError(137); fi;
  wit := TransposedMatImmutable(w);
  if IsMutable(wit) or IsMutable(wit[1]) then MyError(138); fi;
  
  # Matrix product:
  a := w * wt;
  u := a;
  for i in [1..l] do 
      for j in [1..NumberColumns(wt)] do
          s := Zero(BaseDomain(w));
          for k in [1..NumberColumns(w)] do
              s := s + w[i,k] * wt[k,j];
          od;
          if s <> u[i,j] then MyError(139); fi;
      od;
  od;
  if not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(140); fi;
  u := w * wit;
  if u <> a then MyError(141); fi;
  if not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(142); fi;
  u := wi * wt;
  if u <> a then MyError(143); fi;
  if not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(144); fi;
  u := wi * wit;
  if u <> a then MyError(145); fi;
  if IsMutable(u) or IsMutable(u[1]) then MyError(146); fi;

  # One*
  w := Matrix([[zero,one],[two,three]],2,m);
  wi := MutableCopyMat(w);
  MakeImmutable(wi);
  u := OneSameMutability(w);
  if not(IsOne(u)) then MyError(147); fi;
  if not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(148); fi;
  u := OneImmutable(w);
  if not(IsOne(u)) then MyError(149); fi;
  if IsMutable(u) or IsMutable(u[1]) then MyError(150); fi;
  u := OneMutable(w);
  if not(IsOne(u)) then MyError(151); fi;
  if not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(152); fi;
  u := OneSameMutability(wi);
  if not(IsOne(u)) then MyError(153); fi;
  if IsMutable(u) or IsMutable(u[1]) then MyError(154); fi;
  u := OneImmutable(wi);
  if not(IsOne(u)) then MyError(155); fi;
  if IsMutable(u) or IsMutable(u[1]) then MyError(156); fi;
  u := OneMutable(wi);
  if not(IsOne(u)) then MyError(157); fi;
  if not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(158); fi;

  # ZeroMatrix, IsDiagonalMat, Is{Upper,Lower}TriangularMat:
  u := ZeroMatrix(3,3,m);
  if not(IsMutable(u)) then MyError(159); fi;
  if not(IsZero(u)) then MyError(160); fi;
  u[1,1] := one;
  u[2,1] := one;
  u[1,2] := one;
  if IsDiagonalMat(u) then MyError(161); fi;
  if IsLowerTriangularMat(u) then MyError(162); fi;
  if IsUpperTriangularMat(u) then MyError(163); fi;
  u[1,2] := zero;
  if not(IsLowerTriangularMat(u)) then MyError(164); fi;
  u[2,1] := zero;
  if not(IsUpperTriangularMat(u)) then MyError(165); fi;
  if not(IsDiagonalMat(u)) then MyError(166); fi;

  # IdentityMatrix, Matrix:
  u := IdentityMatrix(7,m);
  if not(NumberRows(u) = 7) or not(NumberColumns(u) = 7) or not(IsOne(u)) or
     not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(167); fi;
  v := Matrix(List(u),7,m);
  if u <> v or not(IsMutable(v)) or not(IsMutable(v[1])) then MyError(168); fi;

  # Randomize:
  Randomize(u);

  # List:
  v := Matrix(List(u,x->-x),7,u);
  if v <> -u then MyError(169); fi;

  # Vector times matrix:
  w := MutableCopyMat(m);
  wi := MutableCopyMat(w);
  MakeImmutable(wi);
  u := Matrix(List(w,v->v*wt),NrRows(w),w);
  if u <> w*wt then MyError(170); fi;
  v := w[1];
  vi := ShallowCopy(v);
  MakeImmutable(vi);
  u := v * wt;
  if not(IsMutable(u)) then MyError(171); fi;
  u := vi * wt;
  if not(IsMutable(u)) then MyError(172); fi;
  u := v * wit;
  if not(IsMutable(u)) then MyError(173); fi;
  u := vi * wit;
  if IsMutable(u) then MyError(174); fi;

  # Unpack:
  u := Unpack(m);
  if not(IsList(u)) and not(ForAll(u,IsList)) then MyError(175); fi;
  if u <> List(m,List) then MyError(176); fi;
  
  # KroneckerProduct:
  w := Matrix([[one,zero],[two,one]],2,m);
  wi := MutableCopyMat(w);
  MakeImmutable(wi);
  u := Matrix([[zero,one],[one,one]],2,m);
  a := KroneckerProduct(u,w);
  if not(IsZero(ExtractSubMatrix(a,[1,2],[1,2]))) then MyError(177); fi;
  if ExtractSubMatrix(a,[1,2],[3,4]) <> w then MyError(178); fi;
  if ExtractSubMatrix(a,[3,4],[1,2]) <> w then MyError(179); fi;
  if ExtractSubMatrix(a,[3,4],[3,4]) <> w then MyError(180); fi;

  # Inverse:
  u := InverseMutable(w);
  if not(IsOne(u*w)) then MyError(181); fi;
  if not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(182); fi;
  a := u;
  u := InverseImmutable(w);
  if a <> u then MyError(183); fi;
  if IsMutable(u) or IsMutable(u[1]) then MyError(184); fi;
  u := InverseSameMutability(w);
  if a <> u then MyError(185); fi;
  if not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(186); fi;
  u := InverseMutable(wi);
  if a <> u then MyError(187); fi;
  if not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(188); fi;
  u := InverseImmutable(wi);
  if a <> u then MyError(189); fi;
  if IsMutable(u) or IsMutable(u[1]) then MyError(190); fi;
  u := InverseSameMutability(wi);
  if a <> u then MyError(191); fi;
  if IsMutable(u) or IsMutable(u[1]) then MyError(192); fi;
  
  # Powering:
  u := w^2;
  if not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(193); fi;
  u := w^1;
  if not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(194); fi;
  if IsIdenticalObj(u,w) then MyError(195); fi;
  u := w^0;
  if not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(196); fi;
  if not(IsOne(u)) then MyError(197); fi;
  u := w^-1;
  if not(IsMutable(u)) or not(IsMutable(u[1])) then MyError(197); fi;
  if not(IsOne(u*w)) then MyError(198); fi;
  u := wi^2;
  if IsMutable(u) or IsMutable(u[1]) then MyError(199); fi;
  u := wi^1;
  if IsMutable(u) or IsMutable(u[1]) then MyError(200); fi;
  if not(IsIdenticalObj(u,wi)) then MyError(201); fi;
  u := wi^0;
  if IsMutable(u) or IsMutable(u[1]) then MyError(202); fi;
  if not(IsOne(u)) then MyError(203); fi;
  u := wi^-1;
  if IsMutable(u) or IsMutable(u[1]) then MyError(204); fi;
  if not(IsOne(u*wi)) then MyError(205); fi;

  # Now the constructors:
  filter := ConstructingFilter(v);
  vv := NewRowVector(filter,bd,Unpack(v));
  if v <> vv or not(IsIdenticalObj(TypeObj(v),TypeObj(vv))) then 
      MyError(208); 
  fi;
  vv := NewZeroVector(filter,bd,Length(v));
  if ZeroMutable(v) <> vv or 
     not(IsIdenticalObj(TypeObj(ZeroMutable(v)),TypeObj(vv))) then 
      MyError(209); 
  fi;
  filter := ConstructingFilter(m);
  vv := NewMatrix(filter,bd,NumberColumns(m),Unpack(m));
  if not(IsMutable(m)) then MakeImmutable(vv); fi;
  if vv <> m or not(IsIdenticalObj(TypeObj(vv),TypeObj(m))) then
      MyError(210);
  fi;
  vv := NewZeroMatrix(filter,bd,NumberRows(m),NumberColumns(m));
  if vv <> ZeroMutable(m) or
     not(IsIdenticalObj(TypeObj(vv),TypeObj(ZeroMutable(m)))) then
      MyError(211);
  fi;
  vv := NewIdentityMatrix(filter,bd,NumberRows(m));
  if not(IsOne(vv)) or
     not(IsIdenticalObj(TypeObj(vv),TypeObj(MutableCopyMat(m)))) then
      MyError(212);
  fi;

  # Now CompanionMatrix:
  pol := PolynomialRing(bd);
  vv := Unpack(m[1]);
  vvv := CompanionMatrix(UnivariatePolynomialByCoefficients(FamilyObj(one),
                         Concatenation(vv,[one]),1),m);
  if vvv[Length(vv)] <> -Vector(vv,CompatibleVector(m)) then MyError(216); fi;
  # Now NewCompanionMatrix:
  vvv2 := NewCompanionMatrix(ConstructingFilter(m),
                             UnivariatePolynomialByCoefficients(FamilyObj(one),
                             Concatenation(vv,[one]),1),BaseDomain(m));
  if vvv2 <> vvv then MyError(217); fi;

  # Now ConcatenationOfVectors:
  vvv2 := ConcatenationOfVectors(vvv[1],vvv[2]);
  if vvv2{[1..Length(vvv[1])]} <> vvv[1] or
     vvv2{[Length(vvv[1])+1..Length(vvv[1])+Length(vvv[2])]} <> vvv[2] then
      MyError(219);
  fi;

  # Now ExtractSubVector:
  vvv2 := ExtractSubVector(vvv[1],[1..Length(vvv[1])-1]);
  if vvv2 <> vvv[1]{[1..Length(vvv[1])-1]} then MyError(220); fi;

  # Now ScalarProduct:
  vvv2 := ScalarProduct(vvv[1],vvv[1]);
  if vvv2 <> Sum([1..Length(vvv[1])],i->vvv[1,i] * vvv[1,i]) then
      MyError(222);
  fi;

  # Now TraceMat:
  vvv2 := TraceMat(vvv);
  if vvv2 <> Sum([1..Length(vvv)],i->vvv[i,i]) then MyError(223); fi;

  # Now WeightOfVector:
  vvv2 := WeightOfVector(vvv[1]);
  if vvv2 <> Number([1..Length(vvv[1])],i->not(IsZero(vvv[1,i]))) then
      MyError(224);
  fi;

  # Now DistanceOfVectors:
  vvv2 := DistanceOfVectors(vvv[1],vvv[2]);
  if vvv2 <> Number([1..Length(vvv[1])],i->vvv[1,i] <> vvv[2,i]) then
      MyError(225);
  fi;

  if level = 0 then
      Print("Standard matrix tests completed.\n\n");
      Print("Errors: ",errors,"\n");
      return;
  fi;

  Print("Standard matrix tests completed, the rest is a bit strange!\n\n");

  # A few more absurd tests:

  # Try empty matrices and vectors:
  v := w[1];
  u := v{[]};
  if not(IsVectorObj(u)) then
      Print("Warning: Empty vector is not in IsVectorObj!\n");
  fi;
  if Length(u) <> 0 then MyError(413); fi;
  u := w{[]};
  if not(IsMatrixObj(u)) then
      Print("Warning: Matrix with no rows is not in IsMatrixObj!\n");
  fi;
  if NumberRows(u) <> 0 then MyError(414); fi;
  u := ExtractSubMatrix(w,[1..2],[]);
  if not(IsMatrixObj(u)) then
      Print("Warning: Matrix with empty rows is not in IsMatrixObj!\n");
  fi;
  if NumberColumns(u) <> 0 then MyError(415); fi;
  if NumberRows(u) <> 2 then MyError(416); fi;

  w := Matrix( [[one,two]],2,m );
  if IsOne(w) <> false then MyError(408); fi;
  # IsOne is a property and hence must only return false or true
  if OneMutable(w) <> fail then MyError(409); fi;
  if Inverse(w) <> fail then MyError(410); fi;
  # Error 211 taken out.
  w := Matrix( [[one,zero],[one,zero]],2,m );
  if Inverse(w) <> fail then MyError(412); fi;

  # Now Memory:
  vv := MemoryUsage(m[1]);
  vv := MemoryUsage(m);
  # This is only tried, not tested.

  Print("Strange tests completed.\n\n");

  Print("Errors: ",errors,"\n");
  return;
end;


[ Dauer der Verarbeitung: 0.31 Sekunden  (vorverarbeitet)  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge