Skip to main content

sil_semantic/
lib.rs

1#![warn(clippy::pedantic)]
2
3pub mod cluster;
4pub mod similarity;
5
6pub use cluster::cluster_intents;
7pub use similarity::semantic_similarity;
8
9#[cfg(test)]
10mod tests {
11    use super::*;
12
13    #[test]
14    fn test_similarity_related() {
15        let score = semantic_similarity("login_user", "authenticate_user");
16        assert!(score > 0.0);
17        assert!(score <= 1.0);
18    }
19
20    #[test]
21    fn test_similarity_identical() {
22        let score = semantic_similarity("login_user", "login_user");
23        assert_eq!(score, 1.0);
24    }
25
26    #[test]
27    fn test_similarity_unrelated() {
28        let score = semantic_similarity("login_user", "payment_process");
29        assert_eq!(score, 0.0);
30    }
31
32    #[test]
33    fn test_cluster_intents() {
34        let items = vec![
35            "login_user",
36            "authenticate_user",
37            "user_login_handler",
38            "payment_process",
39        ];
40        let clusters = cluster_intents(items);
41
42        assert!(clusters.contains_key("AUTH"));
43        assert!(clusters.contains_key("USER_MGMT"));
44        assert!(clusters.contains_key("PAYMENT"));
45    }
46
47    #[test]
48    fn test_cluster_auth_count() {
49        let items = vec!["login_user", "authenticate_user", "user_login_handler"];
50        let clusters = cluster_intents(items);
51
52        let auth = clusters.get("AUTH").unwrap();
53        assert_eq!(auth.len(), 2);
54
55        let user_mgmt = clusters.get("USER_MGMT").unwrap();
56        assert_eq!(user_mgmt.len(), 1);
57    }
58
59    #[test]
60    fn test_empty_input_cluster() {
61        let items: Vec<&str> = vec![];
62        let clusters = cluster_intents(items);
63        assert!(clusters.is_empty());
64    }
65
66    #[test]
67    fn test_general_fallback() {
68        let items = vec!["unknown_function"];
69        let clusters = cluster_intents(items);
70        assert!(clusters.contains_key("GENERAL"));
71    }
72}