use crate::evaluate;
use crate::types::Value;
use std::collections::HashMap;
fn ev(formula: &str) -> Value {
evaluate(formula, &HashMap::new())
}
fn num(n: f64) -> Value {
Value::Number(n)
}
fn row(vals: &[f64]) -> Value {
Value::Array(vals.iter().copied().map(num).collect())
}
fn grid(rows: &[&[f64]]) -> Value {
Value::Array(rows.iter().map(|r| row(r)).collect())
}
#[test]
fn sequence_n_is_column_vector() {
assert_eq!(ev("=SEQUENCE(3)"), grid(&[&[1.0], &[2.0], &[3.0]]));
}
#[test]
fn sequence_n_1_is_column_vector() {
assert_eq!(ev("=SEQUENCE(3,1)"), grid(&[&[1.0], &[2.0], &[3.0]]));
}
#[test]
fn sequence_column_vector_with_start_and_step() {
assert_eq!(ev("=SEQUENCE(3,1,5,2)"), grid(&[&[5.0], &[7.0], &[9.0]]));
}
#[test]
fn sequence_1_n_stays_single_row() {
assert_eq!(ev("=SEQUENCE(1,3)"), grid(&[&[1.0, 2.0, 3.0]]));
}
#[test]
fn sequence_m_n_stays_2d() {
assert_eq!(
ev("=SEQUENCE(2,3)"),
grid(&[&[1.0, 2.0, 3.0], &[4.0, 5.0, 6.0]])
);
}
#[test]
fn sequence_m_n_row_major_fill_with_step() {
assert_eq!(
ev("=SEQUENCE(2,2,10,-1)"),
grid(&[&[10.0, 9.0], &[8.0, 7.0]])
);
}
#[test]
fn sequence_1_is_single_cell() {
assert_eq!(ev("=SEQUENCE(1)"), grid(&[&[1.0]]));
}