From 385be2eca72eb3833efa4be0a0088b34e764788a Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Mon, 31 Aug 2026 09:04:45 +0800
Subject: [PATCH] feat(pointcloud): complete annotation and result lifecycle workflows

---
 capabilities/05-3d-pointcloud/tests/test_cpu_dense_reconstruction.py |   20 ++++++++++++++++++++
 1 files changed, 20 insertions(+), 0 deletions(-)

diff --git a/capabilities/05-3d-pointcloud/tests/test_cpu_dense_reconstruction.py b/capabilities/05-3d-pointcloud/tests/test_cpu_dense_reconstruction.py
index a9bab65..b8fdccd 100644
--- a/capabilities/05-3d-pointcloud/tests/test_cpu_dense_reconstruction.py
+++ b/capabilities/05-3d-pointcloud/tests/test_cpu_dense_reconstruction.py
@@ -55,6 +55,26 @@
 
 
 class ReliableTexturePreviewTests(unittest.TestCase):
+    def test_cuda_dense_log_requires_explicit_cuda_or_gpu_evidence(self) -> None:
+        MODULE.verify_cuda_dense_log("OpenMVS CUDA device 0 initialized")
+        MODULE.verify_cuda_dense_log("GPU depth maps are enabled")
+        with self.assertRaisesRegex(RuntimeError, "did not report"):
+            MODULE.verify_cuda_dense_log("OpenMVS x64 v2.4.0")
+
+    def test_openmvs_tool_log_uses_the_latest_timestamped_log(self) -> None:
+        with tempfile.TemporaryDirectory() as temporary:
+            directory = Path(temporary)
+            (directory / "DensifyPointCloud-older.log").write_text("CPU", encoding="utf-8")
+            (directory / "DensifyPointCloud-newer.log").write_text("CUDA device 0", encoding="utf-8")
+            self.assertEqual(MODULE.openmvs_tool_log(directory, "DensifyPointCloud"), "CUDA device 0")
+
+    def test_openmvs_failure_includes_native_log(self) -> None:
+        with tempfile.TemporaryDirectory() as temporary:
+            directory = Path(temporary)
+            (directory / "DensifyPointCloud-native.log").write_text("CUDA error (code 801)", encoding="utf-8")
+            error = MODULE.with_openmvs_log(RuntimeError("DensifyPointCloud.exe failed"), directory, "DensifyPointCloud")
+            self.assertIn("CUDA error (code 801)", str(error))
+
     def test_external_tool_paths_are_absolute(self) -> None:
         args = Namespace(input=Path("images"), sparse_model=Path("sparse"), output=Path("output"), openmvs_bin=Path("tools"))
         MODULE.resolve_external_tool_paths(args)

--
Gitblit v1.9.3