#![cfg_attr(coverage_nightly, coverage(off))]
use anyhow::{Context, Result};
use std::path::PathBuf;
use tokio::process::Command;
#[derive(Debug, Clone)]
pub struct CoverageImprovementConfig {
pub project_path: PathBuf,
pub target_coverage: f64,
pub max_iterations: usize,
pub fast_mode: bool,
pub mutation_threshold: f64,
pub focus_patterns: Vec<String>,
pub exclude_patterns: Vec<String>,
}
impl Default for CoverageImprovementConfig {
fn default() -> Self {
Self {
project_path: PathBuf::from("."),
target_coverage: 95.0,
max_iterations: 10,
fast_mode: false,
mutation_threshold: 80.0,
focus_patterns: vec![],
exclude_patterns: vec![],
}
}
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct IterationReport {
pub iteration: usize,
pub files_targeted: Vec<PathBuf>,
pub tests_generated: usize,
pub coverage_gain: f64,
pub mutation_score: f64,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct CoverageImprovementReport {
pub baseline_coverage: f64,
pub target_coverage: f64,
pub final_coverage: f64,
pub iterations: Vec<IterationReport>,
pub success: bool,
pub stop_reason: String,
}
pub struct CoverageImprovementService {
config: CoverageImprovementConfig,
}
impl CoverageImprovementService {
pub fn new(config: CoverageImprovementConfig) -> Self {
Self { config }
}
}
include!("baseline_measurement.rs");
include!("target_prioritization.rs");
include!("test_generation.rs");
include!("mutation_testing.rs");
#[cfg(all(test, feature = "broken-tests"))]
#[path = "tests.rs"]
mod tests;
#[cfg(all(test, feature = "broken-tests"))]
#[path = "property_tests.rs"]
mod property_tests;
#[cfg(all(test, feature = "broken-tests"))]
#[path = "generate_strategy_tests.rs"]
mod generate_strategy_tests;
#[cfg(all(test, feature = "broken-tests"))]
#[path = "extract_functions_tests.rs"]
mod extract_functions_tests;
#[cfg(all(test, feature = "broken-tests"))]
#[path = "proptest_generation_tests.rs"]
mod proptest_generation_tests;