tcrctest.pp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. program crctest;
  2. {$mode objfpc}
  3. {$h+}
  4. uses
  5. sysutils,
  6. crc;
  7. const
  8. testseq1: RawByteString = 'MNIIQGNLVGTGLKIGIVVGRFNDFITSKLLSGAEDALLRHGVDTNDIDVAWVPGAFEIPFAAKKMAETKKYDAIITLGTVIRGATTSYDYVCNEAAKGIAQAANTTGVPVIFGIVTTENIEQAIERAGTKAGNKGVDCAVSAIEMANLNRSFE';
  9. testseq2: RawByteString = 'MNIIQGNLVGTGLKIGIVVGRFNDFITSKLLSGAEDALLRHGVDTNDIDVAWVPGAFEIPFAAKKMAETKKYDAIITLGDVIRGATTHYDYVCNEAAKGIAQAANTTGVPVIFGIVTTENIEQAIERAGTKAGNKGVDCAVSAIEMANLNRSFE';
  10. test1_crc128: u128 = (lo:7787709990548801016; hi:8484981956151821693);
  11. test2_crc128: u128 = (lo:17574279593289983859; hi:10166839289973635932);
  12. test1_crc64: qword = 14444300186948028230;
  13. test2_crc64: qword = 3310614217963326015;
  14. test1_crc32: longword = 3405150022;
  15. test2_crc32: longword = 1264209917;
  16. function IntToStr128(v: u128): RawByteString;
  17. begin
  18. result := '$'+hexstr(v.hi,16)+hexstr(v.lo,16);
  19. end;
  20. procedure perform_crc32(const name, testcase: RawByteString; result: longword);
  21. var
  22. crc: longword;
  23. begin
  24. crc := crc32(0,nil,0);
  25. crc := crc32(crc,@testcase[1],length(testcase));
  26. write(name,'(size=',length(testcase),'): ');
  27. if crc=result then
  28. writeln('passed')
  29. else
  30. begin
  31. writeln('failed (got=',crc,',expected=',result,')');
  32. halt(1);
  33. end;
  34. end;
  35. procedure perform_crc64(const name, testcase: RawByteString; result: qword);
  36. var
  37. crc: qword;
  38. begin
  39. crc := crc64(0,nil,0);
  40. crc := crc64(crc,@testcase[1],length(testcase));
  41. write(name,'(size=',length(testcase),'): ');
  42. if crc=result then
  43. writeln('passed')
  44. else
  45. begin
  46. writeln('failed (got=',crc,',expected=',result,')');
  47. halt(1);
  48. end;
  49. end;
  50. procedure perform_crc128(const name, testcase: RawByteString; result: u128);
  51. var
  52. crc: u128;
  53. begin
  54. crc := crc128(0,nil,0);
  55. crc := crc128(crc,@testcase[1],length(testcase));
  56. write(name,'(size=',length(testcase),'): ');
  57. if crc=result then
  58. writeln('passed')
  59. else
  60. begin
  61. writeln('failed (got=',IntToStr128(crc),',expected=',IntToStr128(result),')');
  62. halt(1);
  63. end;
  64. end;
  65. begin
  66. perform_crc32('crc32', testseq1, test1_crc32);
  67. perform_crc32('crc32', testseq2, test2_crc32);
  68. perform_crc64('crc64', testseq1, test1_crc64);
  69. perform_crc64('crc64', testseq2, test2_crc64);
  70. perform_crc128('crc128', testseq1, test1_crc128);
  71. perform_crc128('crc128', testseq2, test2_crc128);
  72. end.