apple-accelerate 0.3.2

Safe Rust bindings for Apple's Accelerate framework on macOS with exhaustive optional raw C FFI
Documentation
use apple_accelerate::{sdot, sgemm_row_major, sgemv_row_major};

#[test]
fn cblas_smoke() {
    let dot = sdot(&[1.0_f32, 2.0, 3.0], &[4.0_f32, 5.0, 6.0]).expect("sdot");
    assert!((dot - 32.0).abs() < 1.0e-6);

    let mut gemv = vec![0.0_f32; 2];
    sgemv_row_major(
        2,
        3,
        1.0,
        &[1.0_f32, 2.0, 3.0, 4.0, 5.0, 6.0],
        &[1.0_f32, 0.5, -1.0],
        0.0,
        &mut gemv,
    )
    .expect("sgemv");
    assert!((gemv[0] + 1.0).abs() < 1.0e-6);
    assert!((gemv[1] - 0.5).abs() < 1.0e-6);

    let mut matrix_product = vec![0.0_f32; 4];
    sgemm_row_major(
        2,
        2,
        3,
        1.0,
        &[1.0_f32, 2.0, 3.0, 4.0, 5.0, 6.0],
        &[7.0_f32, 8.0, 9.0, 10.0, 11.0, 12.0],
        0.0,
        &mut matrix_product,
    )
    .expect("sgemm");
    assert!(matrix_product
        .iter()
        .zip([58.0_f32, 64.0, 139.0, 154.0])
        .all(|(actual, expected)| (*actual - expected).abs() < 1.0e-6));
}