conspire 0.7.7

The Rust interface to conspire.
Documentation
use super::finalize;
use crate::io::netcdf::format::{
    AttValue, Attribute, DimSpec, NC_DOUBLE, NC_INT, Storage, VarSpec,
};

fn double_var(name: &str, dimids: Vec<usize>) -> VarSpec {
    VarSpec {
        name: name.to_string(),
        xtype: NC_DOUBLE,
        dimids,
        atts: Vec::new(),
        begin: 0,
        vsize: 0,
        storage: Storage::Classic,
    }
}

#[test]
fn header_layout_is_contiguous_after_itself() {
    let dims = vec![DimSpec {
        name: "nodes".to_string(),
        len: 4,
    }];
    let gatts = vec![Attribute {
        name: "title".to_string(),
        value: AttValue::Text("t".to_string()),
    }];
    let mut vars = vec![
        double_var("coordx", vec![0]),
        VarSpec {
            name: "connect".to_string(),
            xtype: NC_INT,
            dimids: vec![0],
            atts: vec![Attribute {
                name: "elem_type".to_string(),
                value: AttValue::Text("hex8".to_string()),
            }],
            begin: 0,
            vsize: 0,
            storage: Storage::Classic,
        },
    ];
    let header = finalize(&dims, &gatts, &mut vars);
    assert_eq!(&header[..4], b"CDF\x05");
    assert_eq!(vars[0].begin, header.len() as u64);
    assert_eq!(vars[0].vsize, 4 * 8);
    assert_eq!(vars[1].begin, vars[0].begin + vars[0].vsize);
    assert_eq!(vars[1].vsize, 4 * 4);
}

#[test]
#[should_panic(expected = "unsupported netCDF external type")]
fn finalize_rejects_unknown_type() {
    let mut vars = vec![VarSpec {
        name: "x".to_string(),
        xtype: 99,
        dimids: vec![],
        atts: Vec::new(),
        begin: 0,
        vsize: 0,
        storage: Storage::Classic,
    }];
    finalize(&[], &[], &mut vars);
}