tenferro-internal-ops 0.8.0

Graph op vocabulary and AD rule implementations for the tenferro workspace.
Documentation
use crate::shape_extent::ShapeExtent;
use crate::SymDim;

#[test]
fn exact_extent_exposes_exact_dim() {
    let extent = ShapeExtent::exact(SymDim::from(4usize));
    assert_eq!(extent.as_exact(), Some(&SymDim::from(4usize)));
    assert!(extent.is_exact());
}

#[test]
fn upper_bound_is_not_exact() {
    let extent = ShapeExtent::upper_bound(SymDim::from(4usize));
    assert_eq!(extent.as_exact(), None);
    assert_eq!(extent.bound_expr(), Some(&SymDim::from(4usize)));
    assert!(!extent.is_exact());
}

#[test]
fn map_preserves_extent_kind() {
    let extent = ShapeExtent::upper_bound(SymDim::from(4usize)).map(|dim| dim + SymDim::from(1));
    assert!(matches!(extent, ShapeExtent::UpperBound(_)));
    assert_eq!(
        extent.bound_expr().and_then(SymDim::constant_value),
        Some(5)
    );
}