crctest.pas 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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_crc128: u128 = (lo:14444300186948028230; hi:0);
  11. test2_crc128: u128 = (lo:3310614217963326015; hi:0);
  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): string;
  17. begin
  18. result := 'todo';
  19. end;
  20. procedure perform_crc32(const name, testcase: string; 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. writeln('failed (got=',crc,',expected=',result,')');
  31. end;
  32. procedure perform_crc64(const name, testcase: string; result: qword);
  33. var
  34. crc: qword;
  35. begin
  36. crc := crc64(0,nil,0);
  37. crc := crc64(crc,@testcase[1],length(testcase));
  38. write(name,'(size=',length(testcase),'): ');
  39. if crc=result then
  40. writeln('passed')
  41. else
  42. writeln('failed (got=',crc,',expected=',result,')');
  43. end;
  44. procedure perform_crc128(const name, testcase: string; result: u128);
  45. var
  46. crc: u128;
  47. begin
  48. crc := crc128(0,nil,0);
  49. crc := crc128(crc,@testcase[1],length(testcase));
  50. write(name,'(size=',length(testcase),'): ');
  51. if crc=result then
  52. writeln('passed')
  53. else
  54. writeln('failed (got=',IntToStr128(crc),',expected=',IntToStr128(result),')');
  55. end;
  56. begin
  57. perform_crc32('crc32', testseq1, test1_crc32);
  58. perform_crc32('crc32', testseq2, test2_crc32);
  59. perform_crc64('crc64', testseq1, test1_crc64);
  60. perform_crc64('crc64', testseq2, test2_crc64);
  61. perform_crc128('crc128', testseq1, test1_crc128);
  62. perform_crc128('crc128', testseq2, test2_crc128);
  63. end.