123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- {$mode objfpc}
- uses sysutils;
- {$r+}
- var
- a1: array[-5..6] of byte;
- a2: array[-12..-1] of byte;
- a3: array[0..6] of byte;
- a4: array[1..12] of byte;
- c: cardinal;
- l: longint;
- b: byte;
- finalerror: boolean;
- function check_longint(l: longint; res1, res2, res3, res4: boolean): boolean;
- var
- caught,
- error: boolean;
- begin
- result := false;
- caught := false;
- try
- b := a1[l];
- except
- caught := true;
- end;
- error := caught <> res1;
- if error then writeln('long 1 failed for ',l);
- result := result or error;
- caught := false;
- try
- b := a2[l];
- except
- caught := true;
- end;
- error := caught <> res2;
- if error then writeln('long 2 failed for ',l);
- result := result or error;
- caught := false;
- try
- b := a3[l];
- except
- caught := true;
- end;
- error := caught <> res3;
- if error then writeln('long 3 failed for ',l);
- result := result or error;
- caught := false;
- try
- b := a4[l];
- except
- caught := true;
- end;
- error := caught <> res4;
- if error then writeln('long 4 failed for ',l);
- result := result or error;
- writeln;
- end;
- function check_cardinal(l: cardinal; res1, res2, res3, res4: boolean): boolean;
- var
- caught,
- error: boolean;
- begin
- result := false;
- caught := false;
- try
- b := a1[l];
- except
- caught := true;
- end;
- error := caught <> res1;
- if error then writeln('card 1 failed for ',l);
- result := result or error;
- caught := false;
- try
- b := a2[l];
- except
- caught := true;
- end;
- error := caught <> res2;
- if error then writeln('card 2 failed for ',l);
- result := result or error;
- caught := false;
- try
- b := a3[l];
- except
- caught := true;
- end;
- error := caught <> res3;
- if error then writeln('card 3 failed for ',l);
- result := result or error;
- caught := false;
- try
- b := a4[l];
- except
- caught := true;
- end;
- error := caught <> res4;
- if error then writeln('card 4 failed for ',l);
- result := result or error;
- writeln;
- end;
- begin
- finalerror :=
- check_longint(-1,false,false,true,true);
- finalerror :=
- check_longint(-6,true,false,true,true) or finalerror;
- finalerror :=
- check_longint(0,false,true,false,true) or finalerror;
- finalerror :=
- check_cardinal(0,false,true,false,true);
- finalerror :=
- check_cardinal(cardinal($ffffffff),true,true,true,true) or finalerror;
- finalerror :=
- check_cardinal(5,false,true,false,false) or finalerror;
- if finalerror then
- begin
- writeln('Still errors in range checking for array indexes');
- halt(1);
- end;
- end.
|