123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- {$mode objfpc}
- uses
- sysutils;
- procedure testcard;
- const
- h = 1;
- hexch : array[0..15] of char='0123456789ABCDEF';
- var
- c: cardinal;
- l: longint;
- s: shortstring;
- b, b2: byte;
- ch, ch2: char;
- {$ifdef cpu64}
- caught: boolean;
- {$endif cpu64}
- begin
- s:='$0fffffff';
- for b := low(hexch) to high(hexch) do
- begin
- s[2]:=hexch[b];
- val(s,c,l);
- if (l<>0) then
- halt(b+h);
- end;
-
- s:='$fffffff0';
- for b := low(hexch) to high(hexch) do
- begin
- s[length(s)]:=hexch[b];
- val(s,c,l);
- if (l<>0) then
- halt(b+16+h);
- end;
- setlength(s,10);
- s[1]:='$';
- for b2:= 1 to high(hexch) do
- begin
- for b := 2 to length(s)-1 do
- s[b]:=hexch[b2];
- for b := low(hexch) to high(hexch) do
- begin
- s[length(s)]:=hexch[b];
- {$ifdef cpu64}
- {$r+}
- try
- caught:=false;
- {$endif cpu64}
- val(s,c,l);
- {$ifdef cpu64}
- except on e : exception do
- caught:=true;
- end;
- if not caught then
- {$else cpu64}
- if (l=0) then
- {$endif}
- halt(b2+32+h);
- end;
- end;
- s:='0294967295';
- for ch := '0' to '4' do
- begin
- s[1]:=ch;
- val(s,c,l);
- if (l<>0) then
- halt(ord(ch)-ord('0')+b+49+h);
- end;
-
- s:='4294967290';
- for ch := '0' to '5' do
- begin
- s[length(s)]:=ch;
- val(s,c,l);
- if (l<>0) then
- halt(ord(ch)-ord('0')+b+54+h);
- end;
- s:='4294967290';
- for ch := '6' to '9' do
- begin
- s[length(s)]:=ch;
- {$ifdef cpu64}
- {$r+}
- try
- caught:=false;
- {$endif cpu64}
- val(s,c,l);
- {$ifdef cpu64}
- except on e : exception do
- caught:=true;
- end;
- if not caught then
- {$else cpu64}
- if (l=0) then
- {$endif cpu64}
- halt(ord(ch)-ord('0')+b+54+h);
- end;
- setlength(s,length('4294967295')+1);
- for ch2:= '1' to '3' do
- begin
- for b := 1 to length(s)-1 do
- s[b]:=ch2;
- for ch := '0' to '9' do
- begin
- s[length(s)]:=ch;
- {$ifdef cpu64}
- {$r+}
- try
- caught:=false;
- {$endif cpu64}
- val(s,c,l);
- {$ifdef cpu64}
- except on e : exception do
- caught:=true;
- end;
- if not caught then
- {$else cpu64}
- if (l=0) then
- {$endif cpu64}
- halt(ord(ch2)-ord('1')+65+h);
- end;
- end;
- end;
- procedure testqword;
- const
- h = 71;
- hexch : array[0..15] of char='0123456789ABCDEF';
- var
- c: qword;
- l: longint;
- s: shortstring;
- b, b2: byte;
- ch, ch2: char;
- begin
- s:='$0fffffffffffffff';
- for b := low(hexch) to high(hexch) do
- begin
- s[2]:=hexch[b];
- val(s,c,l);
- if (l<>0) then
- halt(b+h);
- end;
-
- s:='$fffffffffffffff0';
- for b := low(hexch) to high(hexch) do
- begin
- s[length(s)]:=hexch[b];
- val(s,c,l);
- if (l<>0) then
- halt(b+16+h);
- end;
- setlength(s,18);
- s[1]:='$';
- for b2:= 1 to high(hexch) do
- begin
- for b := 2 to length(s)-1 do
- s[b]:=hexch[b2];
- for b := low(hexch) to high(hexch) do
- begin
- s[length(s)]:=hexch[b];
- val(s,c,l);
- if (l=0) then
- halt(b2+32+h);
- end;
- end;
- s:='18446744073709551615';
- for ch := '0' to '1' do
- begin
- s[1]:=ch;
- val(s,c,l);
- if (l<>0) then
- halt(ord(ch)-ord('0')+b+49+h);
- end;
-
- s:='18446744073709551615';
- for ch := '0' to '5' do
- begin
- s[length(s)]:=ch;
- val(s,c,l);
- if (l<>0) then
- halt(ord(ch)-ord('0')+b+54+h);
- end;
- s:='18446744073709551615';
- for ch := '6' to '9' do
- begin
- s[length(s)]:=ch;
- val(s,c,l);
- if (l=0) then
- halt(ord(ch)-ord('0')+b+54+h);
- end;
- setlength(s,length('18446744073709551615')+1);
- for ch2:= '1' to '1' do
- begin
- for b := 1 to length(s)-1 do
- s[b]:=ch2;
- for ch := '0' to '9' do
- begin
- s[length(s)]:=ch;
- val(s,c,l);
- if (l=0) then
- halt(ord(ch2)-ord('1')+61+h);
- end;
- end;
- end;
- begin
- testcard;
- testqword;
- end.
|