fpc/packages/hash/examples/crctest.pas
ivost c3c1cfbb9f * added crc128 support
* fixed crc example

git-svn-id: trunk@15152 -
2010-04-19 11:28:26 +00:00

79 lines
2.1 KiB
ObjectPascal

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.