opensrdk_linear_algebra/tensor/sparse/operators/
neg.rs1use crate::{sparse::SparseTensor, Number};
2use std::ops::Neg;
3
4impl<T> Neg for SparseTensor<T>
5where
6 T: Number,
7{
8 type Output = Self;
9
10 fn neg(self) -> Self::Output {
11 self * (-T::one())
12 }
13}
14
15#[cfg(test)]
16mod tests {
17 use crate::{sparse::SparseTensor, *};
18 #[test]
19 fn it_works() {
20 let mut a = SparseTensor::new(vec![3, 2, 2]);
21 a[&[0, 0, 0]] = 2.0;
22 a[&[0, 0, 1]] = 4.0;
23 a[&[1, 1, 0]] = 2.0;
24 a[&[1, 1, 1]] = 4.0;
25 a[&[2, 0, 0]] = 2.0;
26 a[&[2, 0, 1]] = 4.0;
27
28 let a = -a;
29
30 let mut b = SparseTensor::new(vec![3, 2, 2]);
31 b[&[0, 0, 0]] = -2.0;
32 b[&[0, 0, 1]] = -4.0;
33 b[&[1, 1, 0]] = -2.0;
34 b[&[1, 1, 1]] = -4.0;
35 b[&[2, 0, 0]] = -2.0;
36 b[&[2, 0, 1]] = -4.0;
37
38 assert_eq!(a[&[0, 0, 0]], b[&[0, 0, 0]]);
39 assert_eq!(a[&[0, 0, 1]], b[&[0, 0, 1]]);
40 assert_eq!(a[&[1, 1, 0]], b[&[1, 1, 0]]);
41 assert_eq!(a[&[1, 1, 1]], b[&[1, 1, 1]]);
42 assert_eq!(a[&[2, 0, 0]], b[&[2, 0, 0]]);
43 assert_eq!(a[&[2, 0, 1]], b[&[2, 0, 1]]);
44 }
45}