Browse Source

* Test negative return values from compare functions.

git-svn-id: trunk@9063 -
yury 18 years ago
parent
commit
59b5a3b928
1 changed files with 61 additions and 24 deletions
  1. 61 24
      tests/test/tcmp.pp

+ 61 - 24
tests/test/tcmp.pp

@@ -30,53 +30,90 @@ begin
               writeln('cmpbyte error 2 for (',i,',',j,',',k,')');
               halt(2);
             end;
+          if comparebyte(b[k+4],a[j],i+1)>0 then
+            begin
+              writeln(b[k+4+i],' ',a[j+i]);
+              writeln('cmpbyte error 3 for (',i,',',j,',',k,')');
+              halt(3);
+            end;
 
           if (i and 1 = 0) then
             begin
               if compareword(a[j],b[k+4],i shr 1)<>0 then
                 begin
-                  writeln('cmpword error 3 for (',i,',',j,',',k,')');
-                  halt(3);
+                  writeln('cmpword error 4 for (',i,',',j,',',k,')');
+                  halt(4);
                 end;
               if compareword(a[j],b[k+4],i shr 1 + 1)<0 then
                 begin
-                  writeln('cmpword error 4 for (',i,',',j,',',k,')');
-                  halt(4);
+                  writeln('cmpword error 5 for (',i,',',j,',',k,')');
+                  halt(5);
+                end;
+              if compareword(b[k+4],a[j],i shr 1 + 1)>0 then
+                begin
+                  writeln('cmpword error 6 for (',i,',',j,',',k,')');
+                  halt(6);
                 end;
             end
           else
-            if compareword(a[j],b[k+4],(i+1) shr 1)<0 then
-              begin
-                writeln('cmpword error 5 for (',i,',',j,',',k,')');
-                halt(5);
-              end;
+            begin
+              if compareword(a[j],b[k+4],(i+1) shr 1)<0 then
+                begin
+                  writeln('cmpword error 7 for (',i,',',j,',',k,')');
+                  halt(7);
+                end;
+              if compareword(b[k+4],a[j],(i+1) shr 1)>0 then
+                begin
+                  writeln('cmpword error 8 for (',i,',',j,',',k,')');
+                  halt(8);
+                end;
+            end;
 
           if (i and 3 = 0) then
             begin
               if comparedword(a[j],b[k+4],i shr 2)<>0 then
                 begin
-                  writeln('cmpdword error 6 for (',i,',',j,',',k,')');
-                  halt(6);
+                  writeln('cmpdword error 9 for (',i,',',j,',',k,')');
+                  halt(9);
                 end;
               if comparedword(a[j],b[k+4],i shr 2 + 1)<=0 then
                 begin
                   writeln(comparedword(a[j],b[k+4],i shr 2+1));
-                  writeln(pdword(@a[j])^,' ',pdword(@b[k+4])^);
-                  writeln(pdword(@a[j+i])^,' ',pdword(@b[k+4+i])^);
-                  writeln(pdword(@a[j+i+4])^,' ',pdword(@b[k+4+i+4])^);
-                  writeln('cmpdword error 7 for (',i,',',j,',',k,')');
-                  halt(7);
+                  writeln(unaligned(pdword(@a[j])^),' ',unaligned(pdword(@b[k+4])^));
+                  writeln(unaligned(pdword(@a[j+i])^),' ',unaligned(pdword(@b[k+4+i])^));
+                  writeln(unaligned(pdword(@a[j+i+4])^),' ',unaligned(pdword(@b[k+4+i+4])^));
+                  writeln('cmpdword error 10 for (',i,',',j,',',k,')');
+                  halt(10);
+                end;
+              if comparedword(b[k+4],a[j],i shr 2 + 1)>=0 then
+                begin
+                  writeln(comparedword(b[k+4],a[j],i shr 2+1));
+                  writeln(unaligned(pdword(@b[k+4])^),' ',unaligned(pdword(@a[j])^));
+                  writeln(unaligned(pdword(@b[k+4+i])^),' ',unaligned(pdword(@a[j+i])^));
+                  writeln(unaligned(pdword(@b[k+4+i+4])^),' ',unaligned(pdword(@a[j+i+4])^));
+                  writeln('cmpdword error 11 for (',i,',',j,',',k,')');
+                  halt(11);
                 end;
             end
           else
-            if comparedword(a[j],b[k+4],(i+3) shr 2)<0 then
-              begin
-                writeln(comparedword(a[j],b[k+4],(i+3) shr 2));
-                writeln(pdword(@a[j])^,' ',pdword(@b[k+4])^);
-                writeln(pdword(@a[j+(i+3) shr 2-1])^,' ',pdword(@b[k+4+(i+3) shr 2-1])^);
-                writeln('cmpdword error 8 for (',i,',',j,',',k,')');
-                halt(8);
-              end;
+            begin
+              if comparedword(a[j],b[k+4],(i+3) shr 2)<0 then
+                begin
+                  writeln(comparedword(a[j],b[k+4],(i+3) shr 2));
+                  writeln(unaligned(pdword(@a[j])^),' ',unaligned(pdword(@b[k+4])^));
+                  writeln(unaligned(pdword(@a[j+(i+3) shr 2-1])^),' ',unaligned(pdword(@b[k+4+(i+3) shr 2-1])^));
+                  writeln('cmpdword error 12 for (',i,',',j,',',k,')');
+                  halt(12);
+                end;
+              if comparedword(b[k+4],a[j],(i+3) shr 2)>0 then
+                begin
+                  writeln(comparedword(b[k+4],a[j],(i+3) shr 2));
+                  writeln(unaligned(pdword(@b[k+4])^),' ',unaligned(pdword(@a[j])^));
+                  writeln(unaligned(pdword(@b[k+4+(i+3) shr 2-1])^),' ',unaligned(pdword(@a[j+(i+3) shr 2-1])^));
+                  writeln('cmpdword error 13 for (',i,',',j,',',k,')');
+                  halt(13);
+                end;
+            end;
         end;
 end;