{ Тестирование алгоритма Хаффмана Упаковка файла. } {--------------------------------------------------------------------------- (c) Copyright Aleksandrov O.E., 2000 Molecular Physics department, USTU, Ekaterinsburg, K-2, 620002, RUSSIA phone 75-47-15 E-mail: aleks@dpt.ustu.ru (c) Copyright Александров О.Е., 1999 620002, Екатеринбург, К-2, УГТУ, Кафедра молекулярной физики тел. 75-47-15 E-mail: aleks@dpt.ustu.ru ----------------------------------------------------------------------------} program HuffmanFileTest; USES PrgFuncs, xStrings, uMiscFun, DHufType, DHufBase, DhCodec, DhFile, HuffmanF, FCmdLine; procedure Compress( var Huffman:tHuffman; Count:word; Fl1,Fl2:string); var sz1,sz2:longint; t0:tTimerTiks; dt:tTimerDecimalTiks; i:word; begin write(' Упаковка: "',Fl1,'" -> "',Fl2,'" (повтор, раз: ',Count,')...'); Huffman.FlagSet(fOverwriteCompressed); if Count<=0 then Count:=1; t0:=WaitNextTickCount; for i:=1 to Count do begin Huffman.EncodeFile(Fl1,Fl2); end; GetTickSpent(t0,Count,dt); writeln(' завершено.'); if ORD(Huffman.LastError)=0 then begin writeln(' Время на 1 упаковку, мс: ',dt.mSec,'.',dt.mAfterDotSec); sz1:=SizeOfFile(Fl2); sz2:=SizeOfFile(Fl1); writeln(' Отношение (Размер упакованного файла)/(Размер исходного): ', (sz1/sz2):2:4); end else writeln(^G' ОШИБКА: ',ORD(Huffman.LastError)); end; procedure Decompress( var Huffman:tHuffman; Count:word; Fl1,Fl2:string); var t0:longint; dt:tTimerDecimalTiks; i:word; begin write(' Распаковка: "',Fl1,'" -> "',Fl2,'" (повтор, раз: ',Count,')...'); Huffman.FlagSet(fOverwriteUncompressed); if Count<=0 then Count:=1; t0:=WaitNextTickCount; for i:=1 to Count do begin Huffman.DecodeFile(Fl1,Fl2); end; GetTickSpent(t0,Count,dt); writeln(' завершено.'); if ORD(Huffman.LastError)=0 then writeln(' Время на 1 распаковку, мс: ',dt.mSec,'.',dt.mAfterDotSec) else writeln(^G' ОШИБКА: ',ORD(Huffman.LastError)); end; var Huffman:tHuffman; ProgParams:tProgramParameters; {тестирование } TreeData:tDynHuffmanFullTreeData; hf0:tDHCodec; BEGIN {тестирование } dhInitTree(4, 1, TreeData); dhEncodeChar(10, TreeData); dhEncodeChar(10, TreeData); exit; writeln; write('Программа DynHuffmanFileTest запущена '); {$IfDef MsDOS} write('(real mode)'); {$Else} write('(protected mode)'); {$EndIF} writeln('...'); FCmdLine.ParseCmdLine(ProgParams); if ProgParams.Action=aHelp then begin FCmdLine.ShowHelp; end else begin Huffman.Init(ProgParams.BufLength{, ProgParams.RebuildTreeCount}); if ProgParams.Action in [aCompress, aCompressAndDecompress] then begin Compress(Huffman, ProgParams.iMax, ProgParams.FNameIn, ProgParams.FNameOut1); end; if ProgParams.Action in [aDecompress] then begin Decompress(Huffman, ProgParams.iMax, ProgParams.FNameIn, ProgParams.FNameOut1); end; if ProgParams.Action in [aCompressAndDecompress] then begin Decompress(Huffman, ProgParams.iMax, ProgParams.FNameOut1, ProgParams.FNameOut2); if CompareFiles(ProgParams.FNameIn,ProgParams.FNameOut2,cBufLength) then writeln(' Правильно.') else writeln(' НЕправильно.'); end; end; writeln('программа DynHuffmanFileTest завершена.'); END.