use super::*;
use proptest::prelude::*;
proptest! {
#![proptest_config(ProptestConfig::with_cases(50))]
#[test]
fn prop_grade_from_score_valid(value in 0.0f64..=1.0) {
let grade = Grade::from_score(value);
let rank = grade.to_rank();
prop_assert!((0..=10).contains(&rank));
}
#[test]
fn prop_grade_rank_consistent(value in 0.0f64..=1.0) {
let grade1 = Grade::from_score(value);
let grade2 = Grade::from_score(value);
prop_assert_eq!(grade1.to_rank(), grade2.to_rank());
}
#[test]
fn prop_score_config_default_valid(_dummy: u8) {
let _config = ScoreConfig::default();
prop_assert!(true);
}
#[test]
fn prop_score_engine_new_never_panics(_dummy: u8) {
let config = ScoreConfig::default();
let _engine = ScoreEngine::new(config);
prop_assert!(true);
}
#[test]
fn prop_dependency_tracker_new_never_panics(_dummy: u8) {
let tracker = DependencyTracker::new();
let _is_stale = tracker.is_stale(&PathBuf::from("test.rs"));
prop_assert!(true);
}
#[test]
fn prop_score_parsed_integer(n in -1000i64..1000) {
let code = format!("{n}");
let mut parser = crate::frontend::parser::Parser::new(&code);
if let Ok(ast) = parser.parse() {
let score = score_correctness(&ast);
prop_assert!((0.0..=100.0).contains(&score));
}
}
#[test]
fn prop_score_parsed_let(n in -100i64..100) {
let code = format!("let x = {n}");
let mut parser = crate::frontend::parser::Parser::new(&code);
if let Ok(ast) = parser.parse() {
let score = score_performance(&ast);
prop_assert!((0.0..=100.0).contains(&score));
}
}
#[test]
fn prop_score_parsed_function(_dummy: u8) {
let code = "fun add(a, b) { a + b }";
let mut parser = crate::frontend::parser::Parser::new(code);
if let Ok(ast) = parser.parse() {
let score = score_maintainability(&ast);
prop_assert!((0.0..=100.0).contains(&score));
}
}
#[test]
fn prop_score_safety_bounded(_dummy: u8) {
let code = "let x = 42";
let mut parser = crate::frontend::parser::Parser::new(code);
if let Ok(ast) = parser.parse() {
let score = score_safety(&ast);
prop_assert!((0.0..=100.0).contains(&score));
}
}
#[test]
fn prop_score_idiomaticity_bounded(_dummy: u8) {
let code = "true && false";
let mut parser = crate::frontend::parser::Parser::new(code);
if let Ok(ast) = parser.parse() {
let score = score_idiomaticity(&ast);
prop_assert!((0.0..=100.0).contains(&score));
}
}
}