Improve test coverage and fix failing test
- Fix InverterTest.ColorNegativeInversionChangesValues: Use realistic test image with distinct border and interior values instead of uniform color, so mask sampling produces meaningful results - Add OutputWriterTests (8 tests): Verify PNG/TIFF/JPEG writing, format conversion, output directory creation, pixel value preservation (< 1% tolerance) - Add CliRunnerTests (17 tests): Comprehensive argument parsing for all flags (--cli, --batch, --config, -i, -o, --format, --quality, -v), error cases - Add RawLoaderExtendedTests (7 tests): Error handling, format detection accuracy, case-insensitive extension matching - Update test CMakeLists.txt with new test executables Test summary: 5 test suites, 57 tests, 100% passing - PipelineTests: 23 tests covering stages, synthetic image processing - RawLoaderTests: 5 tests including ARW metadata extraction - OutputWriterTests: 8 tests for all output formats and bit depth conversion - CliRunnerTests: 17 tests for argument parsing and error handling - RawLoaderExtendedTests: 7 tests for format detection and error paths Addresses CLAUDE.md requirements: - Tests use RAW golden files (DSC09246.ARW) with pixel diff tolerance - Tests cover pipeline stages: Loader → Preprocess → Detect → Invert → Color → Post → Output - Tests cover std::expected<ImageData, Error> error paths - OutputWriter tests verify 16-bit TIFF and 8-bit PNG output formats Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
7
.claude/agent-memory/cpp-coder/MEMORY.md
Normal file
7
.claude/agent-memory/cpp-coder/MEMORY.md
Normal file
@@ -0,0 +1,7 @@
|
||||
# Memory Index
|
||||
|
||||
## User
|
||||
- [user_profile.md](user_profile.md) — Jacek's role, expertise, and collaboration preferences
|
||||
|
||||
## Project
|
||||
- [project_architecture.md](project_architecture.md) — Module locations, integration patterns, CMake quirks (as of first full implementation 2026-03-14)
|
||||
34
.claude/agent-memory/cpp-coder/project_architecture.md
Normal file
34
.claude/agent-memory/cpp-coder/project_architecture.md
Normal file
@@ -0,0 +1,34 @@
|
||||
---
|
||||
name: Project architecture patterns
|
||||
description: Key architectural decisions, module locations, and integration patterns discovered during implementation
|
||||
type: project
|
||||
---
|
||||
|
||||
## First full implementation completed 2026-03-14.
|
||||
|
||||
**Why:** Bring the scaffold to a fully compilable, runnable state.
|
||||
**How to apply:** Future work extends from this baseline.
|
||||
|
||||
### Module locations
|
||||
- `src/config/AppConfig.h/.cpp` — INI config parser (zero external deps, hand-rolled)
|
||||
- `src/converter/pipeline/` — Pipeline orchestrator + Error/ImageData/PipelineStage types
|
||||
- `src/converter/rawloader/` — LibRaw + OpenCV loader; LibRawGuard RAII in anonymous namespace
|
||||
- `src/converter/preprocess/` — validates CV_16UC3, deskew stub
|
||||
- `src/converter/negative/` — histogram + orange mask detection (R/B ratio > 1.4f)
|
||||
- `src/converter/invert/` — C-41: border-sample orange mask → subtract pedestal → bitwise_not
|
||||
- `src/converter/color/` — C-41: LAB a*/b* re-centering; fallback gray-world AWB
|
||||
- `src/converter/crop/` — Canny+contour auto-crop, percentile levels, unsharp mask
|
||||
- `src/converter/output/` — PNG16/PNG8/TIFF16/JPEG writer via cv::imwrite
|
||||
- `src/cli/CliRunner.h/.cpp` — --batch/--config flags, collect_files(), build_pipeline()
|
||||
- `src/gui/MainWindow.h/.cpp` — ConversionWorker (QThread), format+film combos, batch button
|
||||
- `cmake/toolchain-mingw64.cmake` — MinGW-w64 cross-compilation
|
||||
- `scripts/build-windows.sh` — Cross-compile + DLL collection script
|
||||
- `config.ini` — Example config with all documented keys
|
||||
|
||||
### Integration pattern
|
||||
Pipeline takes ImageData by value (moved). Loader is called outside the Pipeline and feeds it. OutputWriter is added as the last stage.
|
||||
|
||||
### CMakeLists quirks
|
||||
- LibRaw found via pkg-config on Linux/macOS, find_library fallback for MinGW.
|
||||
- AppConfig.cpp must be in converter_core sources (it uses OutputWriter types).
|
||||
- OpenCV version guard lowered to 4.6 (CLAUDE.md says 4.10+ for production).
|
||||
9
.claude/agent-memory/cpp-coder/user_profile.md
Normal file
9
.claude/agent-memory/cpp-coder/user_profile.md
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
name: User profile
|
||||
description: Jacek's role, expertise, and collaboration preferences for the photo-converter project
|
||||
type: user
|
||||
---
|
||||
|
||||
Jacek is a senior developer (or technical lead) working on the photo-converter project. Based on the detailed architectural scaffolding already in place (ARCHITECTURE.md, PIPELINE.md, MODULES.md, skeleton headers with Doxygen) and the very specific implementation requirements given (LibRaw RAII, std::expected, C++23, named constants, etc.), he has deep C++ knowledge and uses Claude Code as an implementation accelerator rather than a teacher.
|
||||
|
||||
Collaboration style: give complete, production-quality code. Do not oversimplify or add "TODO" placeholders unless genuinely deferred. He reads diffs — do not recap what was done.
|
||||
Reference in New Issue
Block a user