volas-core 3.0.4

Pure-Rust data model for volas: DataFrame / Series / Index
Documentation
use volas_core::{Column, DataFrame};

fn frame_with_computed_f64() -> DataFrame {
    let mut df = DataFrame::new(
        vec!["value".into()],
        vec![Column::f64(vec![1.0, 2.0, 3.0])],
        None,
    )
    .unwrap();
    df.set_computed("value", 1);
    df
}

#[test]
fn computed_scalar_update_refreshes_valid_rows_and_reports_errors() {
    let mut df = frame_with_computed_f64();
    df.update_computed_f64_value("value", 1, 8.0).unwrap();
    assert_eq!(
        df.column("value").unwrap().as_f64().unwrap(),
        &[1.0, 8.0, 3.0]
    );
    assert_eq!(df.computed_columns()[0].1.valid_rows, 3);

    df.update_computed_f64_value("value", 99, 9.0).unwrap();
    assert_eq!(
        df.column("value").unwrap().as_f64().unwrap(),
        &[1.0, 8.0, 3.0]
    );

    assert!(df.update_computed_f64_value("missing", 0, 1.0).is_err());

    let mut bool_df = DataFrame::new(
        vec!["flag".into()],
        vec![Column::bool(vec![true, false])],
        None,
    )
    .unwrap();
    bool_df.set_computed("flag", 0);
    assert!(bool_df.update_computed_f64_value("flag", 0, 1.0).is_err());
}

#[test]
fn append_missing_rejects_columns_without_placeholder() {
    let mut int_col = Column::i64(vec![1, 2]);
    assert!(int_col.append_missing(1).is_err());

    let mut str_col = Column::str(vec!["a".into()]);
    assert!(str_col.append_missing(1).is_err());
}