crctest.pas 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. program crctest;
  2. {$mode objfpc}
  3. {$h+}
  4. uses
  5. sysutils,
  6. crc;
  7. const
  8. testseq1: string = 'MNIIQGNLVGTGLKIGIVVGRFNDFITSKLLSGAEDALLRHGVDTNDIDVAWVPGAFEIPFAAKKMAETKKYDAIITLGTVIRGATTSYDYVCNEAAKGIAQAANTTGVPVIFGIVTTENIEQAIERAGTKAGNKGVDCAVSAIEMANLNRSFE';
  9. testseq2: string = 'MNIIQGNLVGTGLKIGIVVGRFNDFITSKLLSGAEDALLRHGVDTNDIDVAWVPGAFEIPFAAKKMAETKKYDAIITLGDVIRGATTHYDYVCNEAAKGIAQAANTTGVPVIFGIVTTENIEQAIERAGTKAGNKGVDCAVSAIEMANLNRSFE';
  10. test1_crc64: qword = 14444300186948028230;
  11. test2_crc64: qword = 3310614217963326015;
  12. test1_crc32: longword = 3319070459;
  13. test2_crc32: longword = 1148765760;
  14. procedure perform_crc32(const name, testcase: string; result: longword);
  15. var
  16. crc: longword;
  17. begin
  18. crc := crc32(0,nil,0);
  19. crc := crc32(crc,@testcase[1],length(testcase));
  20. write(name,'(size=',length(testcase),'): ');
  21. if crc=result then
  22. writeln('passed')
  23. else
  24. writeln('failed (got=',crc,',expected=',result,')');
  25. end;
  26. procedure perform_crc64(const name, testcase: string; result: qword);
  27. var
  28. crc: qword;
  29. begin
  30. crc := crc64(0,nil,0);
  31. crc := crc64(crc,@testcase[1],length(testcase));
  32. write(name,'(size=',length(testcase),'): ');
  33. if crc=result then
  34. writeln('passed')
  35. else
  36. writeln('failed (got=',crc,',expected=',result,')');
  37. end;
  38. begin
  39. perform_crc32('crc32', testseq1, test1_crc32);
  40. perform_crc32('crc32', testseq2, test2_crc32);
  41. perform_crc64('crc64', testseq1, test1_crc64);
  42. perform_crc64('crc64', testseq2, test2_crc64);
  43. end.