tcmp.pp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. const
  2. err: boolean = false;
  3. var
  4. a, b: array[0..512] of byte;
  5. procedure test_compare;
  6. type
  7. pdword = ^cardinal;
  8. var
  9. i, j, k: longint;
  10. l: longint;
  11. begin
  12. for i := 0 to 512 do
  13. a[i] := byte(i);
  14. for i := 0 to 256 do
  15. for j := 0 to 31 do
  16. for k := 0 to 31 do
  17. begin
  18. fillchar(b,sizeof(b),0);
  19. move(a[j],b[k+4],i);
  20. if comparebyte(a[j],b[k+4],i)<>0 then
  21. begin
  22. writeln('cmpbyte error 1 for (',i,',',j,',',k,')');
  23. halt(1);
  24. end;
  25. if comparebyte(a[j],b[k+4],i+1)<0 then
  26. begin
  27. writeln(a[j+i],' ',b[k+4+i]);
  28. writeln('cmpbyte error 2 for (',i,',',j,',',k,')');
  29. halt(2);
  30. end;
  31. if comparebyte(b[k+4],a[j],i+1)>0 then
  32. begin
  33. writeln(b[k+4+i],' ',a[j+i]);
  34. writeln('cmpbyte error 3 for (',i,',',j,',',k,')');
  35. halt(3);
  36. end;
  37. if (i and 1 = 0) then
  38. begin
  39. if compareword(a[j],b[k+4],i shr 1)<>0 then
  40. begin
  41. writeln('cmpword error 4 for (',i,',',j,',',k,')');
  42. halt(4);
  43. end;
  44. if compareword(a[j],b[k+4],i shr 1 + 1)<0 then
  45. begin
  46. writeln('cmpword error 5 for (',i,',',j,',',k,')');
  47. halt(5);
  48. end;
  49. if compareword(b[k+4],a[j],i shr 1 + 1)>0 then
  50. begin
  51. writeln('cmpword error 6 for (',i,',',j,',',k,')');
  52. halt(6);
  53. end;
  54. end
  55. else
  56. begin
  57. if compareword(a[j],b[k+4],(i+1) shr 1)<0 then
  58. begin
  59. writeln('cmpword error 7 for (',i,',',j,',',k,')');
  60. halt(7);
  61. end;
  62. if compareword(b[k+4],a[j],(i+1) shr 1)>0 then
  63. begin
  64. writeln('cmpword error 8 for (',i,',',j,',',k,')');
  65. halt(8);
  66. end;
  67. end;
  68. if (i and 3 = 0) then
  69. begin
  70. if comparedword(a[j],b[k+4],i shr 2)<>0 then
  71. begin
  72. writeln('cmpdword error 9 for (',i,',',j,',',k,')');
  73. halt(9);
  74. end;
  75. if comparedword(a[j],b[k+4],i shr 2 + 1)<=0 then
  76. begin
  77. writeln(comparedword(a[j],b[k+4],i shr 2+1));
  78. writeln(unaligned(pdword(@a[j])^),' ',unaligned(pdword(@b[k+4])^));
  79. writeln(unaligned(pdword(@a[j+i])^),' ',unaligned(pdword(@b[k+4+i])^));
  80. writeln(unaligned(pdword(@a[j+i+4])^),' ',unaligned(pdword(@b[k+4+i+4])^));
  81. writeln('cmpdword error 10 for (',i,',',j,',',k,')');
  82. halt(10);
  83. end;
  84. if comparedword(b[k+4],a[j],i shr 2 + 1)>=0 then
  85. begin
  86. writeln(comparedword(b[k+4],a[j],i shr 2+1));
  87. writeln(unaligned(pdword(@b[k+4])^),' ',unaligned(pdword(@a[j])^));
  88. writeln(unaligned(pdword(@b[k+4+i])^),' ',unaligned(pdword(@a[j+i])^));
  89. writeln(unaligned(pdword(@b[k+4+i+4])^),' ',unaligned(pdword(@a[j+i+4])^));
  90. writeln('cmpdword error 11 for (',i,',',j,',',k,')');
  91. halt(11);
  92. end;
  93. end
  94. else
  95. begin
  96. if comparedword(a[j],b[k+4],(i+3) shr 2)<0 then
  97. begin
  98. writeln(comparedword(a[j],b[k+4],(i+3) shr 2));
  99. writeln(unaligned(pdword(@a[j])^),' ',unaligned(pdword(@b[k+4])^));
  100. writeln(unaligned(pdword(@a[j+(i+3) shr 2-1])^),' ',unaligned(pdword(@b[k+4+(i+3) shr 2-1])^));
  101. writeln('cmpdword error 12 for (',i,',',j,',',k,')');
  102. halt(12);
  103. end;
  104. if comparedword(b[k+4],a[j],(i+3) shr 2)>0 then
  105. begin
  106. writeln(comparedword(b[k+4],a[j],(i+3) shr 2));
  107. writeln(unaligned(pdword(@b[k+4])^),' ',unaligned(pdword(@a[j])^));
  108. writeln(unaligned(pdword(@b[k+4+(i+3) shr 2-1])^),' ',unaligned(pdword(@a[j+(i+3) shr 2-1])^));
  109. writeln('cmpdword error 13 for (',i,',',j,',',k,')');
  110. halt(13);
  111. end;
  112. end;
  113. end;
  114. end;
  115. begin
  116. test_compare;
  117. end.