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}