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


Quelle  listindex.tst   Sprache: unbekannt

 
#############################################################################
##
#A  listindex.tst               GAP 4.0 library                   Steve Linton
##
##
##
##
#@local foo,l,o,r,res,s,t,x
gap> START_TEST("listindex.tst");

# custom list implementation, pretending to have infinite length
gap> r := NewCategory("ListTestObject",IsList and HasLength and HasIsFinite);
<Category "ListTestObject">
gap> InstallMethod(Length,[r],l->infinity);
gap> InstallMethod(IsFinite,[r],ReturnFalse);

#
gap> InstallOtherMethod(\[\],[r,IsObject],function(l,ix)
>     if ix = 123456789 then return; fi;
>     return ix;
> end);
gap> InstallOtherMethod(\[\]\:\=,[r and IsMutable,IsObject, IsObject],function(l,ix,x
>     Print("Assign ",ix," ",x,"\n");
> end);
gap> InstallOtherMethod(Unbind\[\],[r and IsMutable,IsObject],function(l,ix) 
>     Print("Unbind ",ix,"\n");
> end);
gap> InstallOtherMethod(IsBound\[\],[r and IsMutable,IsObject],function(l,ix) 
>     Print("IsBound ",ix,"\n");
>     return false;
> end);
gap> InstallOtherMethod(GetWithDefault, [r and IsMutable, IsInt, IsObject], function(a,ix,d)
>     Print("GetWithDefault ", ix, ":", d, "\n");
>     return d;
> end);

#
gap> InstallOtherMethod(\[\,\],[r,IsPosInt,IsPosInt],function(l,i,j)
>     Print("ELM_MAT [",i,",",j,"]\n");
>     if i = 123456789 then return; fi;
>     return [i,j];
> end);
gap> InstallOtherMethod(\[\,\]\:\=,[r and IsMutable,IsPosInt,IsPosInt, IsObject],function(l,i,j,x)
>     Print("ASS_MAT [",i,",",j,"] := ",x,"\n");
> end);
gap> InstallOtherMethod(Unbind\[\],[r and IsMutable,IsPosInt,IsPosInt],function(l,i,j) 
>     Print("Unbind [",i,",",j,"]\n");
> end);
gap> InstallOtherMethod(IsBound\[\],[r and IsMutable,IsPosInt,IsPosInt],function(l,i,j) 
>     Print("IsBound [",i,",",j,"]\n");
>     return false;
> end);

#
gap> t := NewType(ListsFamily, r and IsMutable and IsPositionalObjectRep);;
gap> o := Objectify(t,[]);;
gap> o[1];
1
gap> o[-17];
-17
gap> o[Z(3)];
Z(3)
gap> o["abc"];
"abc"
gap> o[[1,2]];
[ 1, 2 ]
gap> o[3,4];
ELM_MAT [3,4]
[ 3, 4 ]
gap> MatElm(o, 5, 6);
ELM_MAT [5,6]
[ 5, 6 ]
gap> o[123456789];
Error, List access method must return a value
gap> o[123456789,4];
ELM_MAT [123456789,4]
Error, Matrix access method must return a value
gap> MatElm(o, 123456789, 6);
ELM_MAT [123456789,6]
Error, Matrix access method must return a value
gap> o[2] := 3;
Assign 2 3
3
gap> o[2^200] := fail;
Assign 1606938044258990275541962092341162602522202993782792835301376 fail
fail
gap> o[E(4)] := "i";
Assign E(4) i
"i"
gap> o[[12,34,56]] := 99;
Assign [ 12, 34, 56 ] 99
99
gap> o[3,4] := 42;
ASS_MAT [3,4] := 42
42
gap> SetMatElm(o, 5, 6, 23);
ASS_MAT [5,6] := 23
gap> Unbind(o[1]);
Unbind 1
gap> Unbind(o[-17]);
Unbind -17
gap> Unbind(o[Z(3)]);
Unbind Z(3)
gap> Unbind(o[[1,2]]);
Unbind [ 1, 2 ]
gap> Unbind(o[3,4]);
Unbind [3,4]
gap> Unbind(o["abc"]);
Unbind abc
gap> IsBound(o[1]);
IsBound 1
false
gap> IsBound(o[-17]);
IsBound -17
false
gap> IsBound(o[Z(3)]);
IsBound Z(3)
false
gap> IsBound(o[[1,2]]);
IsBound [ 1, 2 ]
false
gap> IsBound(o[3,4]);
IsBound [3,4]
false
gap> IsBound(o["abc"]);
IsBound abc
false
gap> GetWithDefault(o, 2, "abc");
GetWithDefault 2:abc
"abc"
gap> foo := function(a)
>     return[ a[2,3],
>             o[4,5],
>             function()
>         return [a[6,7], o[8,9]];
>     end];
> end;
function( a ) ... end
gap> Print(foo,"\n");
function ( a )
    return [ a[2, 3], o[4, 5], function (  )
              return [ a[6, 7], o[8, 9] ];
          end ];
end
gap> res := foo(o);
ELM_MAT [2,3]
ELM_MAT [4,5]
[ [ 2, 3 ], [ 4, 5 ], function(  ) ... end ]
gap> res[3]();
ELM_MAT [6,7]
ELM_MAT [8,9]
[ [ 6, 7 ], [ 8, 9 ] ]
gap> s := [];; Add(s, 1); s;
[ 1 ]
gap> Add(s, 4); s;
[ 1, 4 ]
gap> s := [];; Add(s,1,3); s;
[ ,, 1 ]
gap> s := [];; Add(s,1,1); s;
[ 1 ]
gap> s := [];; Add(s, ' ',1); s;
" "
gap> s := [];; Add(s, ' ',2); s;
[ , ' ' ]
gap> s := [];; Add(s, 0, 0);
Error, no method found! For debugging hints type ?Recovery from NoMethodFound
Error, no 1st choice method found for `Add' on 3 arguments
gap> s;
[  ]
gap> s := [];; Add(s, 0, -1);
Error, no method found! For debugging hints type ?Recovery from NoMethodFound
Error, no 1st choice method found for `Add' on 3 arguments
gap> s := [];; GetWithDefault(s, 0, -1);
Error, GetWithDefault: <pos> must be a positive small integer (not the integer\
 0)
gap> s := [];; GetWithDefault(s, "cheese", -1);
Error, GetWithDefault: <pos> must be a positive small integer (not a list (str\
ing))
gap> t := [];; GetWithDefault(t, 1, -1);
-1
gap> t := [6];; GetWithDefault(t, 1, -1);
6
gap> t := [6];; GetWithDefault(t, 2, -1);
-1
gap> t := "cheese";; GetWithDefault(t, 2, -1);
'h'
gap> t := "cheese";; GetWithDefault(t, 7, -1);
-1
gap> t := BlistList([1..5], [2]);; GetWithDefault(t, 2, -1);
true
gap> t := BlistList([1..5], [2]);; GetWithDefault(t, 6, -1);
-1
gap> l := [];; Append(l, [1]); l;
[ 1 ]
gap> l := [];; Append(l, "cheese"); l;
"cheese"
gap> l := [true];; Append(l, "cheese"); l;
[ true, 'c', 'h', 'e', 'e', 's', 'e' ]
gap> l := [true];; Append(l, [true]); l;
[ true, true ]
gap> l := [true];; Append(l, [1,2,3]); l;
[ true, 1, 2, 3 ]
gap> l := [true];; Append(l, []); l;
[ true ]
gap> l := [true];; Append(l, "cheese"); l;
[ true, 'c', 'h', 'e', 'e', 's', 'e' ]
gap> l := "cheese";; Append(l, [1,2,3]); l;
[ 'c', 'h', 'e', 'e', 's', 'e', 1, 2, 3 ]
gap> l := "cheese";; Append(l, "core"); l;
"cheesecore"
gap> l := "cheese";; Append(l, [true]); l;
[ 'c', 'h', 'e', 'e', 's', 'e', true ]
gap> l := "cheese";; Append(l, []); l;
"cheese"
gap> Append(l, l); l;
"cheesecheese"
gap> l := "chee";; Append(l, l); l;
"cheechee"
gap> l := "cheeseXX";; Append(l, l); l;
"cheeseXXcheeseXX"
gap> l := [true];; Append(l, l); l;
[ true, true ]
gap> Append(l,l); l;
[ true, true, true, true ]
gap> l := [];; Append(l,l); l;
[  ]
gap> l := [1,2,3,4];; Append(l,l); l;
[ 1, 2, 3, 4, 1, 2, 3, 4 ]
gap> Append(Immutable([1,2,3]), [1,2,3]);
Error, FuncAPPEND_LIST_INTR: <list1> must be a mutable list (not an immutable \
plain list of cyclotomics)
gap> Append([1,2,3], () );
Error, FuncAPPEND_LIST_INTR: <list2> must be a small list (not a permutation (\
small))
gap> Append( () , [1,2,3] );
Error, FuncAPPEND_LIST_INTR: <list1> must be a mutable list (not a permutation\
 (small))
gap> s;
[  ]

#
gap> s := [1,2,3];; l := [4,5,6];;
gap> CopyListEntries(s,1,1,l,1,1,1); l;
[ 1, 5, 6 ]
gap> CopyListEntries(s,2,2,l,2,2,1); l;
[ 1, 2, 6 ]
gap> CopyListEntries(s,8,2,l,1,1,2); l;
[ ,, 6 ]
gap> CopyListEntries(s,3,-1,l,1,1,2); l;
[ 3, 2, 6 ]
gap> CopyListEntries(s,3,-1,l,6,-1,2); l;
[ 3, 2, 6,, 2, 3 ]
gap> CopyListEntries(s,3,-1,l,4,-3,2); l;
[ 2, 2, 6, 3, 2, 3 ]

#
gap> l := [1,2,3,4,5];;
gap> CopyListEntries(l,2,2,l,2,2,2); l;
[ 1, 2, 3, 4, 5 ]
gap> CopyListEntries(l,2,2,l,1,2,2); l;
[ 2, 2, 4, 4, 5 ]
gap> l := [1,2,3,4,5];;
gap> CopyListEntries(l,2,2,l,3,2,2); l;
[ 1, 2, 2, 4, 4 ]
gap> l := [1,2,3,4,5];;
gap> CopyListEntries(l,1,1,l,3,2,2); l;
[ 1, 2, 1, 4, 2 ]
gap> l := [1,2,3,4,5];;
gap> CopyListEntries([],1,1,l,1,1,5); l;
[  ]
gap> l := [1,2,3,4,5];;
gap> CopyListEntries([],1,1,l,1,1,6); l;
[  ]
gap> l := [1,2,3,4,5];;
gap> CopyListEntries([1,,,,,,7],1,1,l,1,1,6); l;
[ 1 ]

#
gap> CopyListEntries();
Error, Function: number of arguments must be 7 (not 0)
gap> CopyListEntries("abc",3,-1,l,4,-3,2);
Error, COPY_LIST_ENTRIES: <fromlst> must be a plain list (not a list (string))
gap> CopyListEntries(s,3,-1,"abc",4,-3,2);
Error, COPY_LIST_ENTRIES: <tolst> must be a mutable plain list (not a list (st\
ring))
gap> CopyListEntries(s,3,-1,Immutable([1,2,3]),4,-3,2);
Error, COPY_LIST_ENTRIES: <tolst> must be a mutable plain list (not an immutab\
le plain list of cyclotomics)
gap> CopyListEntries(s, "cheese", 1, l, 1, 1, 2);
Error, CopyListEntries: <fromind> must be a small integer (not a list (string)\
)
gap> CopyListEntries(s, 1, "cheese", l, 1, 1, 2);
Error, CopyListEntries: <fromstep> must be a small integer (not a list (string\
))
gap> CopyListEntries(s, 1, 1, l, "cheese", 1, 2);
Error, CopyListEntries: <toind> must be a small integer (not a list (string))
gap> CopyListEntries(s, 1, 1, l, 1, "cheese", 2);
Error, CopyListEntries: <tostep> must be a small integer (not a list (string))
gap> CopyListEntries(s, 1, 1, l, 1, 1, "cheese");
Error, CopyListEntries: <n> must be a small integer (not a list (string))
gap> CopyListEntries(s,0,1,l,1,1,2);
Error, CopyListEntries: list indices must be positive integers
gap> CopyListEntries(s,1,-1,l,1,1,2);
Error, CopyListEntries: list indices must be positive integers
gap> CopyListEntries(s,1,1,l,1,-1,2);
Error, CopyListEntries: list indices must be positive integers
gap> CopyListEntries(s,1,1,l,0,1,2);
Error, CopyListEntries: list indices must be positive integers

#
gap> x := [1,3,4];;
gap> \[\](x,-1);
Error, no method found! For debugging hints type ?Recovery from NoMethodFound
Error, no 1st choice method found for `[]' on 2 arguments
gap> \[\](x,2);
3
gap> \[\](x,100);
Error, List Element: <list>[100] must have an assigned value
gap> \[\](x,(1,2,3));
Error, no method found! For debugging hints type ?Recovery from NoMethodFound
Error, no 1st choice method found for `[]' on 2 arguments
gap> \[\]\:\=(x,2,1);
gap> x;
[ 1, 1, 4 ]
gap> \[\]\:\=(x,-1,1);
Error, no method found! For debugging hints type ?Recovery from NoMethodFound
Error, no 1st choice method found for `[]:=' on 3 arguments
gap> \[\]\:\=(x,5,1);
gap> x;
[ 1, 1, 4,, 1 ]
gap> \[\]\:\=(x,(1,2,3),1);
Error, no method found! For debugging hints type ?Recovery from NoMethodFound
Error, no 1st choice method found for `[]:=' on 3 arguments

# Indexing into plain lists
gap> l := [,[,4]];
[ , [ , 4 ] ]
gap> l[0,1];  # row is out of bounds
Error, no method found! For debugging hints type ?Recovery from NoMethodFound
Error, no 1st choice method found for `[,]' on 3 arguments
gap> l[1,1];  # row is in bounds but missing
Error, Matrix Element: <mat>[1] must have an assigned value
gap> l[2,1];  # row is there but entry is missing
Error, Matrix Element: <mat>[2,1] must have an assigned value
gap> l[3,1];  # row is out of bounds
Error, no method found! For debugging hints type ?Recovery from NoMethodFound
Error, no 1st choice method found for `[,]' on 3 arguments
gap> l[2,0];  # column is out of bounds
Error, no method found! For debugging hints type ?Recovery from NoMethodFound
Error, no 1st choice method found for `[,]' on 3 arguments
gap> l[2,2];  # OK
4
gap> l[2,3];  # column is out of bounds
Error, List Element: <list>[3] must have an assigned value
gap> l[2,2] := 4;
4
gap> l;
[ , [ , 4 ] ]
gap> l[0,1] := 3; # error, row out of bounds
Error, no method found! For debugging hints type ?Recovery from NoMethodFound
Error, no 1st choice method found for `[,]:=' on 4 arguments
gap> l[1,1] := 3; # error, row is missing
Error, Matrix Assignment: <mat>[1] must have an assigned value
gap> l[2,1] := 3; # OK
3
gap> l[3,1] := 3; # error, row out of bounds
Error, no method found! For debugging hints type ?Recovery from NoMethodFound
Error, no 1st choice method found for `[,]:=' on 4 arguments
gap> l;
[ , [ 3, 4 ] ]
gap> l[2,1];
3
gap> MakeImmutable(l[2]);;
gap> l[2,1] := 2;;
Error, List Assignment: <list> must be a mutable list
gap> l;
[ , [ 3, 4 ] ]

# test indentation
gap> foo := function( x )
>    local a, b, c;
>    a := x[1, 1];
>    b := x[1, 1];
>    c := x[1, 1];
>    return 1;
> end;;
gap> Print(foo,"\n");
function ( x )
    local a, b, c;
    a := x[1, 1];
    b := x[1, 1];
    c := x[1, 1];
    return 1;
end
gap> foo := function( x )
>    local a, b, c;
>    a := x{[ 1 ]}[1, 1];
>    b := x{[ 1 ]}[1, 1];
>    c := x{[ 1 ]}[1, 1];
>    return 1;
> end;;
gap> Print(foo,"\n");
function ( x )
    local a, b, c;
    a := x{[ 1 ]}[1, 1];
    b := x{[ 1 ]}[1, 1];
    c := x{[ 1 ]}[1, 1];
    return 1;
end

# that's all, folks
gap> STOP_TEST("listindex.tst");

[ Dauer der Verarbeitung: 0.39 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