Funciones de minimización de corpus

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

El reductor primero elimina los tramos completos de objetos indirectos y luego aplica reducciones de rango de bytes progresivamente menores

Un candidato se acepta solo cuando el predicado sigue informando de la firma de error original

AInfo informa de los intentos, las reducciones aceptadas, los tramos de objetos eliminados, los rangos de bytes eliminados, los tamaños original y final y la firma conservada

Almacenamiento continuo de corpus

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;

El almacén deriva un ID de caso estable del resumen SHA-256 de la firma de error, revalida cualquier caso existente, minimiza tanto los candidatos existentes como los entrantes y conserva el resultado más pequeño

Un bloqueo entre procesos serializa las decisiones de un directorio de corpus, mientras que los archivos temporales de escritura directa y el reemplazo atómico evitan que los lectores observen archivos PDF o de metadatos parciales

THPDFCorpusStoreOptions limita los intentos de minimización, los bytes entrantes, los bytes almacenados y los reintentos de bloqueo, y THPDFCorpusCaseInfo.Action informa de si el caso se añadió, se reemplazó o se conservó

El esquema de archivo auxiliar hotpdf.corpus.case.v1 registra el ID de caso, la firma de error exacta, el SHA-256 del contenido y el recuento de bytes almacenados en un orden de campos estable

HPDFCompareRegressionResultsDeterministic compara las firmas repetidas entre motores en los dominios de análisis, renderizado, texto y guardado, y rechaza las ejecuciones inestables o fallidas