summaryrefslogtreecommitdiff
path: root/fpcsrc/packages/hash/examples/crctest.pas
blob: 3fc19fc7922b5e44f61b858b9f050862f4766a4d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
program crctest;

{$mode objfpc}
{$h+}

uses
  sysutils,
  crc;

const
  testseq1: string = 'MNIIQGNLVGTGLKIGIVVGRFNDFITSKLLSGAEDALLRHGVDTNDIDVAWVPGAFEIPFAAKKMAETKKYDAIITLGTVIRGATTSYDYVCNEAAKGIAQAANTTGVPVIFGIVTTENIEQAIERAGTKAGNKGVDCAVSAIEMANLNRSFE';
  testseq2: string = 'MNIIQGNLVGTGLKIGIVVGRFNDFITSKLLSGAEDALLRHGVDTNDIDVAWVPGAFEIPFAAKKMAETKKYDAIITLGDVIRGATTHYDYVCNEAAKGIAQAANTTGVPVIFGIVTTENIEQAIERAGTKAGNKGVDCAVSAIEMANLNRSFE';

  test1_crc128: u128 = (lo:14444300186948028230; hi:0);
  test2_crc128: u128 = (lo:3310614217963326015; hi:0);
  test1_crc64: qword = 14444300186948028230;
  test2_crc64: qword = 3310614217963326015;
  test1_crc32: longword = 3405150022;
  test2_crc32: longword = 1264209917;


function IntToStr128(v: u128): string;
begin
  result := 'todo';
end;


procedure perform_crc32(const name, testcase: string; result: longword);
var
  crc: longword;
begin
  crc := crc32(0,nil,0);
  crc := crc32(crc,@testcase[1],length(testcase));

  write(name,'(size=',length(testcase),'): ');
  if crc=result then
    writeln('passed')
  else
    writeln('failed (got=',crc,',expected=',result,')');
end;

procedure perform_crc64(const name, testcase: string; result: qword);
var
  crc: qword;
begin
  crc := crc64(0,nil,0);
  crc := crc64(crc,@testcase[1],length(testcase));

  write(name,'(size=',length(testcase),'): ');
  if crc=result then
    writeln('passed')
  else
    writeln('failed (got=',crc,',expected=',result,')');
end;

procedure perform_crc128(const name, testcase: string; result: u128);
var
  crc: u128;
begin
  crc := crc128(0,nil,0);
  crc := crc128(crc,@testcase[1],length(testcase));

  write(name,'(size=',length(testcase),'): ');
  if crc=result then
    writeln('passed')
  else
    writeln('failed (got=',IntToStr128(crc),',expected=',IntToStr128(result),')');
end;


begin
  perform_crc32('crc32', testseq1, test1_crc32);
  perform_crc32('crc32', testseq2, test2_crc32);
  perform_crc64('crc64', testseq1, test1_crc64);
  perform_crc64('crc64', testseq2, test2_crc64);
  perform_crc128('crc128', testseq1, test1_crc128);
  perform_crc128('crc128', testseq2, test2_crc128);
end.