test(tkg): add integration tests for TKG optimizations
- test_build_frame_index: verifies frame-to-point index creation - test_build_frame_index_empty: edge case for empty input - test_find_trace_in_frame_exact_match: exact bbox match - test_find_trace_in_frame_closest_match: closest bbox match - test_find_trace_in_frame_no_matching_frame: missing frame returns None - test_find_trace_in_frame_empty_index: empty index returns None - test_node_id_map_lookup: verifies HashMap-based node ID lookup Note: Pre-existing test compilation errors (E0063 in asr/asrx/face) block test execution.
This commit is contained in:
@@ -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<FacePoint> = 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<FacePoint> = 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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user