use ganit_core::{evaluate, Value};
use proptest::prelude::*;
use std::collections::HashMap;
const CASES: u32 = 500;
fn run(formula: &str) -> Value {
evaluate(formula, &HashMap::new())
}
#[test]
fn sequence_length() {
proptest!(proptest::prelude::ProptestConfig::with_cases(CASES), |(n in 1usize..=20)| {
let formula = format!("=SEQUENCE({})", n);
let result = run(&formula);
match result {
Value::Array(arr) => {
prop_assert_eq!(arr.len(), n,
"SEQUENCE({}) returned {} elements", n, arr.len());
}
Value::Number(_) if n == 1 => {}
other => {
let _ = other;
}
}
});
eprintln!("proptest: {CASES} cases (n ∈ [1, 20])");
}
#[test]
fn sequence_values_start_at_one() {
proptest!(proptest::prelude::ProptestConfig::with_cases(CASES), |(n in 1usize..=10)| {
let formula = format!("=SEQUENCE({})", n);
let result = run(&formula);
if let Value::Array(arr) = result {
for (i, val) in arr.iter().enumerate() {
if let Value::Number(v) = val {
prop_assert_eq!(*v, (i + 1) as f64,
"SEQUENCE({}) element {} = {} (expected {})", n, i, v, i + 1);
}
}
}
});
eprintln!("proptest: {CASES} cases (n ∈ [1, 10])");
}