Funkcje minimalizacji korpusu

function HPDFMinimizeCorpusCase(const Input: TBytes;
  const Predicate: THPDFFailurePredicate; MaximumAttempts: Integer;
  out AInfo: THPDFCorpusMinimizationInfo): TBytes;

Reducer najpierw usuwa kompletne zakresy obiektów pośrednich, a potem stosuje coraz mniejsze redukcje zakresów bajtów

Kandydat jest akceptowany tylko wtedy, gdy predykat dalej raportuje oryginalną sygnaturę awarii

AInfo raportuje próby, zaakceptowane redukcje, usunięte zakresy obiektów, usunięte zakresy bajtów, rozmiary początkowy i końcowy oraz zachowaną sygnaturę

Ciągły magazyn korpusu

function HPDFDefaultCorpusStoreOptions: THPDFCorpusStoreOptions;

function HPDFMinimizeAndStoreCorpusCase(const Input: TBytes;
  const Predicate: THPDFFailurePredicate;
  const CorpusDirectory: string;
  const Options: THPDFCorpusStoreOptions;
  out AInfo: THPDFCorpusCaseInfo): Boolean;

function HPDFCorpusCaseInfoToJSON(
  const AInfo: THPDFCorpusCaseInfo): AnsiString;
type
  THPDFCorpusStoreAction = (csaAdded, csaReplaced, csaKeptExisting);

  THPDFCorpusStoreOptions = record
    MaximumAttempts: Integer;
    MaximumInputBytes: Int64;
    MaximumStoredBytes: Int64;
    LockRetryCount: Integer;
  end;

Magazyn wyprowadza stabilne ID przypadku ze skrótu SHA-256 sygnatury awarii, rewaliduje każdy istniejący przypadek, minimalizuje zarówno istniejącego, jak i nadchodzącego kandydata i zachowuje najmniejszy wynik

Blokada międzyprocesowa szereguje decyzje dla jednego katalogu korpusu, a zapis przez pliki tymczasowe i atomowa podmiana uniemożliwiają czytnikom obserwację częściowych plików PDF lub metadanych

THPDFCorpusStoreOptions ogranicza próby minimalizacji, bajty nadchodzące, bajty przechowywane i ponowienia blokady, a THPDFCorpusCaseInfo.Action raportuje, czy przypadek został dodany, podmieniony czy zachowany

Schemat sidecara hotpdf.corpus.case.v1 zapisuje ID przypadku, dokładną sygnaturę awarii, SHA-256 zawartości i liczbę przechowywanych bajtów w stabilnej kolejności pól

HPDFCompareRegressionResultsDeterministic porównuje powtarzane sygnatury między silnikami w domenach parse, render, text i save oraz odrzuca przebiegi niestabilne lub nieudane