- Add decode_page_content_streams() function for per-page lazy decode - Update extract_page_from_dict() to support lazy stream decoding - Modify extract_pdf() and extract_pdf_ndjson() to enable lazy decoding - Fix borrow checker issue in LazyPageIter::next() This ensures content streams are decoded lazily per page and dropped immediately after processing, keeping peak RSS flat across page count. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
86 lines
2.6 KiB
C
86 lines
2.6 KiB
C
#include <stdio.h>
|
|
#include <string.h>
|
|
#include "../include/pdftract.h"
|
|
|
|
int main() {
|
|
printf("=== Testing libpdftract ===\n\n");
|
|
|
|
// Test version
|
|
const char *version = pdftract_version();
|
|
printf("Version: %s\n", version);
|
|
|
|
// Test ABI version
|
|
uint32_t abi = pdftract_abi_version();
|
|
printf("ABI Version: 0x%08x\n", abi);
|
|
|
|
// Test free NULL
|
|
pdftract_free(NULL);
|
|
printf("free(NULL): OK\n");
|
|
|
|
// Test hash with nonexistent file
|
|
printf("\nTesting nonexistent file:\n");
|
|
char *result = pdftract_hash("/nonexistent/file.pdf");
|
|
if (result == NULL) {
|
|
printf(" Result: NULL\n");
|
|
const char *err = pdftract_last_error();
|
|
if (err) printf(" Error: %s\n", err);
|
|
} else {
|
|
printf(" Result: %s\n", result);
|
|
pdftract_free(result);
|
|
}
|
|
|
|
// Test with valid PDF
|
|
printf("\nTesting valid-minimal.pdf:\n");
|
|
result = pdftract_hash("/home/coding/pdftract/tests/fixtures/valid-minimal.pdf");
|
|
if (result == NULL) {
|
|
printf(" Result: NULL\n");
|
|
const char *err = pdftract_last_error();
|
|
if (err) printf(" Error: %s\n", err);
|
|
} else {
|
|
printf(" Result: %s\n", result);
|
|
if (strstr(result, "\"error\"") == NULL) {
|
|
printf(" SUCCESS: Got valid response\n");
|
|
} else {
|
|
printf(" Got error response\n");
|
|
}
|
|
pdftract_free(result);
|
|
}
|
|
|
|
// Test extract_text
|
|
printf("\nTesting extract_text:\n");
|
|
result = pdftract_extract_text("/home/coding/pdftract/tests/fixtures/valid-minimal.pdf", "{}");
|
|
if (result == NULL) {
|
|
printf(" Result: NULL\n");
|
|
const char *err = pdftract_last_error();
|
|
if (err) printf(" Error: %s\n", err);
|
|
} else {
|
|
printf(" Result: %s\n", result);
|
|
pdftract_free(result);
|
|
}
|
|
|
|
// Test classify
|
|
printf("\nTesting classify:\n");
|
|
result = pdftract_classify("/home/coding/pdftract/tests/fixtures/valid-minimal.pdf");
|
|
if (result == NULL) {
|
|
printf(" Result: NULL\n");
|
|
const char *err = pdftract_last_error();
|
|
if (err) printf(" Error: %s\n", err);
|
|
} else {
|
|
printf(" Result: %s\n", result);
|
|
pdftract_free(result);
|
|
}
|
|
|
|
// Test get_metadata
|
|
printf("\nTesting get_metadata:\n");
|
|
result = pdftract_get_metadata("/home/coding/pdftract/tests/fixtures/valid-minimal.pdf", "{}");
|
|
if (result == NULL) {
|
|
printf(" Result: NULL\n");
|
|
const char *err = pdftract_last_error();
|
|
if (err) printf(" Error: %s\n", err);
|
|
} else {
|
|
printf(" Result: %s\n", result);
|
|
pdftract_free(result);
|
|
}
|
|
|
|
return 0;
|
|
}
|