spalinalg 0.0.2

Sparse Linear Algebra Library
Documentation
use std::ops::Neg;

use crate::{scalar::Scalar, CscMatrix};

impl<T: Scalar> Neg for &CscMatrix<T> {
    type Output = CscMatrix<T>;

    fn neg(self) -> Self::Output {
        let values: Vec<_> = self.values.iter().map(|&x| -x).collect();
        CscMatrix {
            nrows: self.nrows(),
            ncols: self.ncols(),
            colptr: self.colptr.to_vec(),
            rowind: self.rowind.to_vec(),
            values,
        }
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn neg() {
        let mat = CscMatrix::new(1, 2, vec![0, 1, 2], vec![0, 0], vec![1.0, 2.0]);
        let neg = -&mat;
        assert_eq!(neg.nrows, 1);
        assert_eq!(neg.ncols, 2);
        assert_eq!(neg.colptr, [0, 1, 2]);
        assert_eq!(neg.rowind, [0, 0]);
        assert_eq!(neg.values, [-1.0, -2.0]);
        assert_eq!(neg.colptr.capacity(), neg.ncols() + 1);
        assert_eq!(neg.rowind.capacity(), neg.nnz());
        assert_eq!(neg.values.capacity(), neg.nnz());
    }
}