blasoxide 0.3.2

BLAS implementation in rust
Documentation
#![deny(warnings)]

use blasoxide::*;

const SIZES: [(usize, usize, usize); 5] = [
    (251, 251, 251),
    (251, 551, 375),
    (251, 3001, 2001),
    (1025, 1025, 1025),
    (551, 251, 1001),
];

fn dgemm_driver(m: usize, n: usize, k: usize, lda: usize, ldb: usize, ldc: usize) {
    let a = vec![2.; k * lda];
    let b = vec![3.; n * ldb];
    let mut c = vec![5.; n * ldc];

    unsafe {
        dgemm(
            false,
            false,
            m,
            n,
            k,
            7.,
            a.as_ptr(),
            lda,
            b.as_ptr(),
            ldb,
            11.,
            c.as_mut_ptr(),
            ldc,
        );
    }

    for j in 0..n {
        for i in 0..m {
            assert_eq!(c[i + j * ldc], 55. + k as f64 * 6. * 7.);
        }
        for i in m..ldc {
            assert_eq!(c[i + j * ldc], 5.);
        }
    }
}

#[test]
fn test_dgemm() {
    let ld = 251;
    for &(m, n, k) in SIZES.iter() {
        dgemm_driver(m, n, k, ld + m, ld + k, ld + m);
    }
}