lens_core/benchmark/
statistical_testing.rs1use serde::{Deserialize, Serialize};
5use anyhow::Result;
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct StatisticalTestConfig {
9 pub significance_level: f64,
10 pub power: f64,
11 pub effect_size: f64,
12 pub sample_size: usize,
13}
14
15impl Default for StatisticalTestConfig {
16 fn default() -> Self {
17 Self {
18 significance_level: 0.05,
19 power: 0.8,
20 effect_size: 0.5,
21 sample_size: 100,
22 }
23 }
24}
25
26pub struct StatisticalTestRunner {
27 config: StatisticalTestConfig,
28}
29
30impl StatisticalTestRunner {
31 pub fn new(config: StatisticalTestConfig) -> Self {
32 Self { config }
33 }
34
35 pub async fn run_significance_tests(&self) -> Result<StatisticalTestResult> {
36 Ok(StatisticalTestResult {
38 test_name: "default".to_string(),
39 p_value: 0.01,
40 significant: true,
41 })
42 }
43}
44
45#[derive(Debug, Clone, Serialize, Deserialize)]
46pub struct StatisticalTestResult {
47 pub test_name: String,
48 pub p_value: f64,
49 pub significant: bool,
50}
51
52#[cfg(test)]
53mod tests {
54 use super::*;
55
56 #[test]
57 fn test_statistical_test_config_default() {
58 let config = StatisticalTestConfig::default();
59 assert_eq!(config.significance_level, 0.05);
60 assert_eq!(config.power, 0.8);
61 assert_eq!(config.effect_size, 0.5);
62 assert_eq!(config.sample_size, 100);
63 }
64
65 #[test]
66 fn test_statistical_test_runner_creation() {
67 let config = StatisticalTestConfig::default();
68 let runner = StatisticalTestRunner::new(config);
69 assert_eq!(runner.config.significance_level, 0.05);
70 }
71
72 #[tokio::test]
73 async fn test_significance_tests() {
74 let config = StatisticalTestConfig::default();
75 let runner = StatisticalTestRunner::new(config);
76
77 let result = runner.run_significance_tests().await;
78 assert!(result.is_ok());
79
80 let test_result = result.unwrap();
81 assert_eq!(test_result.test_name, "default");
82 assert_eq!(test_result.p_value, 0.01);
83 assert!(test_result.significant);
84 }
85
86 #[test]
87 fn test_statistical_test_result_creation() {
88 let result = StatisticalTestResult {
89 test_name: "t-test".to_string(),
90 p_value: 0.03,
91 significant: true,
92 };
93
94 assert_eq!(result.test_name, "t-test");
95 assert_eq!(result.p_value, 0.03);
96 assert!(result.significant);
97 }
98
99 #[test]
100 fn test_custom_statistical_config() {
101 let config = StatisticalTestConfig {
102 significance_level: 0.01,
103 power: 0.9,
104 effect_size: 0.8,
105 sample_size: 200,
106 };
107
108 assert_eq!(config.significance_level, 0.01);
109 assert_eq!(config.power, 0.9);
110 assert_eq!(config.effect_size, 0.8);
111 assert_eq!(config.sample_size, 200);
112 }
113
114 #[test]
115 fn test_non_significant_result() {
116 let result = StatisticalTestResult {
117 test_name: "chi-square".to_string(),
118 p_value: 0.12,
119 significant: false,
120 };
121
122 assert_eq!(result.test_name, "chi-square");
123 assert_eq!(result.p_value, 0.12);
124 assert!(!result.significant);
125 }
126}