The classify_page function was defined twice (at line 564 and line 744) in crates/pdftract-core/src/classify.rs, causing compilation errors during test builds. Removed the duplicate definition. This fix enables the object parser test suite to compile and run successfully, verifying all acceptance criteria for pdftract-4fa9: - 10 fixture files with golden outputs - 5 proptest properties passing - circular_self test with 64KB stack passing - proptest-regressions directories in place Verification: notes/pdftract-4fa9.md Closes pdftract-4fa9
3.7 KiB
3.7 KiB
pdftract-4fa9: Object parser fixture corpus + proptest harness + critical-test suite
Work Summary
This bead verifies that the object parser has:
- A curated fixture corpus of 10 test cases
- Proptest properties verifying core invariants
- Golden output tests with BLESS=1 support
Fix Applied
Fixed a duplicate classify_page function definition in crates/pdftract-core/src/classify.rs (lines 731-747). The function was defined twice (at line 564 and line 744), causing compilation errors. Removed the duplicate.
Acceptance Criteria Status
PASS: All 10 fixture files exist with sibling .expected.json goldens
- nested_dict.pdf.in + nested_dict.expected.json
- mixed_array.pdf.in + mixed_array.expected.json
- indirect_simple.pdf.in + indirect_simple.expected.json
- indirect_stream.pdf.in + indirect_stream.expected.json
- objstm_basic.pdf.in + objstm_basic.expected.json
- objstm_extends.pdf.in + objstm_extends.expected.json
- circular_self.pdf.in + circular_self.expected.json
- circular_three.pdf.in + circular_three.expected.json
- truncated_dict.pdf.in + truncated_dict.expected.json
- deep_nesting.pdf.in + deep_nesting.expected.json
Location: /home/coding/pdftract/tests/object_parser/fixtures/
PASS: cargo test -p pdftract-core --features proptest -- object_parser passes
running 12 tests
test test_circular_self ... ok
test test_circular_self_with_64kb_stack ... ok
test test_circular_three ... ok
test test_all_fixtures ... ok
test test_indirect_simple ... ok
test test_deep_nesting ... ok
test test_indirect_stream ... ok
test test_mixed_array ... ok
test test_objstm_basic ... ok
test test_nested_dict ... ok
test test_objstm_extends ... ok
test test_truncated_dict ... ok
PASS: Proptest properties implemented and passing
5 properties in tests/proptest/object_parser.rs:
prop_parser_never_panics- Verifies INV-8: parser is total over its input domainprop_resolve_terminates- Verifies resolution terminates within 1000 operationsprop_dict_order_preserved- Verifies INV-3: dict order is deterministic for fingerprint stabilityprop_cache_consistency- Verifies identical inputs produce identical outputsprop_inv8_no_panic- Core INV-8 property: any input produces valid result or EOF, never panics
Test run:
running 5 tests
test prop_cache_consistency ... ok
test prop_dict_order_preserved ... ok
test prop_inv8_no_panic ... ok
test prop_resolve_terminates ... ok
test prop_parser_never_panics ... ok
PASS: circular_self.pdf.in test runs with --stack-size 64KB
Test test_circular_self_with_64kb_stack in crates/pdftract-core/tests/object_parser.rs spawns a thread with 64KB stack and verifies that cycle detection works without stack overflow.
PASS: proptest-regressions directories exist
/home/coding/pdftract/tests/proptest/proptest-regressions//home/coding/pdftract/crates/pdftract-core/proptest-regressions/
Note: Regression files are created by proptest when a failing test case is found. Since all properties currently pass, these directories are empty, which is expected.
Files Modified
crates/pdftract-core/src/classify.rs- Removed duplicateclassify_pagefunction definition
Test Infrastructure
- Fixture test harness:
/home/coding/pdftract/tests/object_parser.rs - In-tree fixture test:
/home/coding/pdftract/crates/pdftract-core/tests/object_parser.rs - Proptest properties:
/home/coding/pdftract/tests/proptest/object_parser.rs - Additional proptest:
/home/coding/pdftract/crates/pdftract-core/tests/object_parser_proptest.rs
Related Plan Sections
- Phase 1.2 lines 1077-1081 (critical tests)
- INV-3 (fingerprint byte-stability)
- INV-8 (no panic)
- EC-08 (circular refs)