use hunjing_lingtai::{decide, check_budget, transform_version, validate_path, validate_url, Engine}; #[test] fn lifecycle_and_transform_golden() { assert_eq!(transform_version(), "hunjing-markdown-v1"); let engine = Engine::new().expect("引擎初始化"); let out = engine .transform_markdown("x\n```mermaid\nA-->B\n```\n$$\nz\n$$\n") .expect("transform"); let want = r#"{"parser_version":"hunjing-markdown-v1","blocks":[{"type":"markdown","text":"x","flavor":"hunjing-gfm-v1","status":"completed"},{"type":"mermaid","source":"A-->B","status":"completed"},{"type":"math","notation":"latex","display":"block","source":"z","status":"completed"}]}"#; assert_eq!(out, want); } #[test] fn policy_primitives() { validate_url("https://ok.example").unwrap(); assert!(validate_url("javascript:alert(1)").is_err()); validate_path("/data/d/f", "/data/d").unwrap(); assert!(validate_path("/data/d/../x", "/data/d").is_err()); assert_eq!(decide(1, 0), 0); // 循律+只读 = allow assert_eq!(decide(0, 2), 2); // 自省+高影响 = deny assert!(check_budget(10, 10).is_err()); } #[test] fn recall_rerank_deterministic() { let engine = Engine::new().unwrap(); let input = r#"{"query_terms":["魂镜"],"candidates":[{"id":"a","text":"魂镜 系统"},{"id":"b","text":"无"}]}"#; let out1 = engine.recall_rerank(input).unwrap(); let out2 = engine.recall_rerank(input).unwrap(); assert_eq!(out1, out2); assert_eq!(out1, r#"{"ranked":[{"id":"a","score":10},{"id":"b","score":0}]}"#); }