diff --git a/src/core/processor/tkg.rs b/src/core/processor/tkg.rs index d6c2b89..1ed9778 100644 --- a/src/core/processor/tkg.rs +++ b/src/core/processor/tkg.rs @@ -3175,4 +3175,90 @@ mod tests { assert_eq!(r.object_nodes, 10); assert_eq!(r.speaker_nodes, 3); } + + // ── Integration Tests for TKG Optimizations ───────────────────── + + #[test] + fn test_build_frame_index() { + let points = vec![ + FacePoint { trace_id: 1, frame: 0, x: 100.0, y: 100.0, w: 50.0, h: 50.0 }, + FacePoint { trace_id: 1, frame: 0, x: 200.0, y: 200.0, w: 50.0, h: 50.0 }, + FacePoint { trace_id: 2, frame: 1, x: 150.0, y: 150.0, w: 50.0, h: 50.0 }, + FacePoint { trace_id: 1, frame: 2, x: 120.0, y: 120.0, w: 50.0, h: 50.0 }, + ]; + + let index = build_frame_index(&points); + + assert_eq!(index.len(), 3); // 3 unique frames + assert_eq!(index.get(&0).map(|v| v.len()), Some(2)); + assert_eq!(index.get(&1).map(|v| v.len()), Some(1)); + assert_eq!(index.get(&2).map(|v| v.len()), Some(1)); + } + + #[test] + fn test_build_frame_index_empty() { + let points: Vec = vec![]; + let index = build_frame_index(&points); + assert!(index.is_empty()); + } + + #[test] + fn test_find_trace_in_frame_exact_match() { + let points = vec![ + FacePoint { trace_id: 1, frame: 0, x: 100.0, y: 100.0, w: 100.0, h: 100.0 }, + FacePoint { trace_id: 2, frame: 0, x: 300.0, y: 300.0, w: 100.0, h: 100.0 }, + ]; + let index = build_frame_index(&points); + + // Query face exactly matches trace 1's bbox + let result = find_trace_in_frame(&index, 0, 100.0, 100.0, 100.0, 100.0); + assert_eq!(result, Some(1)); + } + + #[test] + fn test_find_trace_in_frame_closest_match() { + let points = vec![ + FacePoint { trace_id: 1, frame: 0, x: 100.0, y: 100.0, w: 100.0, h: 100.0 }, + FacePoint { trace_id: 2, frame: 0, x: 500.0, y: 500.0, w: 100.0, h: 100.0 }, + ]; + let index = build_frame_index(&points); + + // Query face is closer to trace 1 + let result = find_trace_in_frame(&index, 0, 110.0, 110.0, 100.0, 100.0); + assert_eq!(result, Some(1)); + } + + #[test] + fn test_find_trace_in_frame_no_matching_frame() { + let points = vec![ + FacePoint { trace_id: 1, frame: 0, x: 100.0, y: 100.0, w: 100.0, h: 100.0 }, + ]; + let index = build_frame_index(&points); + + // Query for frame 1 which doesn't exist + let result = find_trace_in_frame(&index, 1, 100.0, 100.0, 100.0, 100.0); + assert_eq!(result, None); + } + + #[test] + fn test_find_trace_in_frame_empty_index() { + let points: Vec = vec![]; + let index = build_frame_index(&points); + + let result = find_trace_in_frame(&index, 0, 100.0, 100.0, 100.0, 100.0); + assert_eq!(result, None); + } + + #[test] + fn test_node_id_map_lookup() { + let mut map: HashMap<(String, String), i64> = HashMap::new(); + map.insert(("face_track".to_string(), "face_track_1".to_string()), 100); + map.insert(("speaker".to_string(), "SPEAKER_0".to_string()), 200); + map.insert(("object".to_string(), "person".to_string()), 300); + + assert_eq!(map.get(&("face_track".to_string(), "face_track_1".to_string())), Some(&100)); + assert_eq!(map.get(&("speaker".to_string(), "SPEAKER_0".to_string())), Some(&200)); + assert_eq!(map.get(&("object".to_string(), "person".to_string())), Some(&300)); + assert_eq!(map.get(&("face_track".to_string(), "face_track_99".to_string())), None); + } }