Browse Source

+ catch RTE 201

pierre 22 years ago
parent
commit
d24fa6492c
1 changed files with 121 additions and 97 deletions
  1. 121 97
      tests/test/tintuint.pp

+ 121 - 97
tests/test/tintuint.pp

@@ -28,6 +28,20 @@ var
   a,b,c : longint;
   d,e,f : cardinal;
   res,res2 : int64;
+  RTE201Buf : Jmp_Buf;
+  OldExit : pointer;
+
+procedure RTE201Exit;
+begin
+  ExitProc:=OldExit;
+  if ExitCode=201 then
+    begin
+      ErrorAddr:=0;
+      longjmp(RTE201Buf,1);
+    end;
+end;
+
+
 begin
   a:=2;
   b:=-2;
@@ -35,104 +49,109 @@ begin
   d:=1;
   e:=$ffffffff;
   f:=$fffffffe;
+  oldexit:=exitproc;
+  exitproc:=@RTE201Exit;
 
 {$R+}
 
-  res:=a+d;
-  if res<>3 then
-    fail(a,d,3,res,true);
-
-  res:=a+e;
-  res2:=e;
-  res2:=res2+a;
-  if (res-2<>e) or ((res and $ffff) <>1) or (res<>res2) then
-    fail(a,e,res2,res,true);
-
-  res:=a+f;
-  res2:=f;
-  res2:=res2+a;
-  if (res-2<>f) or ((res and $ffff) <>0) or (res<>res2) then
-    fail(a,f,res2,res,true);
-
-  res:=b+d;
-  if res<>-1 then
-    fail(b,d,-1,res,true);
-
-  res:=b+e;
-  res2:=e;
-  res2:=res2+b;
-  if (res+2<>e) or ((res and $ffff) <>$fffd) or (res<>res2) then
-    fail(b,e,res2,res,true);
-
-  res:=b+f;
-  res2:=f;
-  res2:=res2+b;
-  if (res+2<>f) or ((res and $ffff) <>$fffc) or (res<>res2) then
-    fail(b,f,res2,res,true);
-
-  res:=c+d;
-  if res<>-4 then
-    fail(c,d,-4,res,true);
-
-  res:=c+e;
-  res2:=e;
-  res2:=res2+c;
-  if (res+5<>e) or ((res and $ffff) <>$fffa) or (res<>res2) then
-    fail(c,e,res2,res,true);
-
-  res:=c+f;
-  res2:=f;
-  res2:=res2+c;
-  if (res+5<>f) or ((res and $ffff) <>$fff9) or (res<>res2) then
-    fail(c,f,res2,res,true);
-
-  res:=d+a;
-  if res<>3 then
-    fail(d,a,3,res,true);
-
-  res:=e+a;
-  res2:=e;
-  res2:=res2+a;
-  if (res-2<>e) or ((res and $ffff) <>1) or (res<>res2) then
-    fail(e,a,res2,res,true);
-
-  res:=f+a;
-  res2:=f;
-  res2:=res2+a;
-  if (res-2<>f) or ((res and $ffff) <>0) or (res<>res2) then
-    fail(f,a,res2,res,true);
-
-  res:=d+b;
-  if res<>-1 then
-    fail(d,b,-1,res,true);
-
-  res:=e+b;
-  res2:=e;
-  res2:=res2+b;
-  if (res+2<>e) or ((res and $ffff) <>$fffd) or (res<>res2) then
-    fail(e,b,res2,res,true);
-
-  res:=f+b;
-  res2:=f;
-  res2:=res2+b;
-  if (res+2<>f) or ((res and $ffff) <>$fffc) or (res<>res2) then
-    fail(f,b,res2,res,true);
-
-  res:=d+c;
-  if res<>-4 then
-    fail(d,c,-4,res,true);
-
-  res:=e+c;
-  res2:=e;
-  res2:=res2+c;
-  if (res+5<>e) or ((res and $ffff) <>$fffa) or (res<>res2) then
-    fail(e,c,res2,res,true);
-
-  res:=f+c;
-  res2:=f;
-  res2:=res2+c;
-  if (res+5<>f) or ((res and $ffff) <>$fff9) or (res<>res2) then
-    fail(f,c,res2,res,true);
+  if setjmp(RTE201Buf)=0 then
+    begin
+      res:=a+d;
+      if res<>3 then
+        fail(a,d,3,res,true);
+
+      res:=a+e;
+      res2:=e;
+      res2:=res2+a;
+      if (res-2<>e) or ((res and $ffff) <>1) or (res<>res2) then
+        fail(a,e,res2,res,true);
+
+      res:=a+f;
+      res2:=f;
+      res2:=res2+a;
+      if (res-2<>f) or ((res and $ffff) <>0) or (res<>res2) then
+        fail(a,f,res2,res,true);
+
+      res:=b+d;
+      if res<>-1 then
+        fail(b,d,-1,res,true);
+
+      res:=b+e;
+      res2:=e;
+      res2:=res2+b;
+      if (res+2<>e) or ((res and $ffff) <>$fffd) or (res<>res2) then
+        fail(b,e,res2,res,true);
+
+      res:=b+f;
+      res2:=f;
+      res2:=res2+b;
+      if (res+2<>f) or ((res and $ffff) <>$fffc) or (res<>res2) then
+        fail(b,f,res2,res,true);
+
+      res:=c+d;
+      if res<>-4 then
+        fail(c,d,-4,res,true);
+
+      res:=c+e;
+      res2:=e;
+      res2:=res2+c;
+      if (res+5<>e) or ((res and $ffff) <>$fffa) or (res<>res2) then
+        fail(c,e,res2,res,true);
+
+      res:=c+f;
+      res2:=f;
+      res2:=res2+c;
+      if (res+5<>f) or ((res and $ffff) <>$fff9) or (res<>res2) then
+        fail(c,f,res2,res,true);
+
+      res:=d+a;
+      if res<>3 then
+        fail(d,a,3,res,true);
+
+      res:=e+a;
+      res2:=e;
+      res2:=res2+a;
+      if (res-2<>e) or ((res and $ffff) <>1) or (res<>res2) then
+        fail(e,a,res2,res,true);
+
+      res:=f+a;
+      res2:=f;
+      res2:=res2+a;
+      if (res-2<>f) or ((res and $ffff) <>0) or (res<>res2) then
+        fail(f,a,res2,res,true);
+
+      res:=d+b;
+      if res<>-1 then
+        fail(d,b,-1,res,true);
+
+      res:=e+b;
+      res2:=e;
+      res2:=res2+b;
+      if (res+2<>e) or ((res and $ffff) <>$fffd) or (res<>res2) then
+        fail(e,b,res2,res,true);
+
+      res:=f+b;
+      res2:=f;
+      res2:=res2+b;
+      if (res+2<>f) or ((res and $ffff) <>$fffc) or (res<>res2) then
+        fail(f,b,res2,res,true);
+
+      res:=d+c;
+      if res<>-4 then
+        fail(d,c,-4,res,true);
+
+      res:=e+c;
+      res2:=e;
+      res2:=res2+c;
+      if (res+5<>e) or ((res and $ffff) <>$fffa) or (res<>res2) then
+        fail(e,c,res2,res,true);
+
+      res:=f+c;
+      res2:=f;
+      res2:=res2+c;
+      if (res+5<>f) or ((res and $ffff) <>$fff9) or (res<>res2) then
+        fail(f,c,res2,res,true);
+    end;
 
 {$R-}
 
@@ -232,8 +251,13 @@ begin
   if (res+5<>f) or ((res and $ffff) <>$fff9) or (res<>res2) then
     fail(f,c,res2,res,false);
 
-  if {$R-} a+e <> {$R+} a+e then
-    has_severe_errors:=true;
+  exitproc:=@RTE201Exit;
+  if setjmp(RTE201Buf)=0 then
+    begin
+      if {$R-} a+e <> {$R+} a+e then
+        has_severe_errors:=true;
+    end;
+
   if has_severe_errors then
     halt(1);