flashlight_tensor/tests/cpu/
subtypes.rs

1#[cfg(test)]
2mod matrix_tests{
3    use crate::prelude::*;
4    use super::*;
5
6    #[test]
7    fn matrix_row(){
8        let data: Vec<f32> = vec!{1.0, 2.0, 3.0, 4.0};
9        let sizes: Vec<u32> = vec!{2,2};
10        let tensor: Tensor<f32> = Tensor::from_data(&data, &sizes).unwrap();
11
12        let expected: Tensor<f32> = Tensor::from_data(&vec!{1.0, 2.0}, &vec!{1, 2}).unwrap();
13
14        let result = tensor.matrix_row(0).unwrap();
15
16        assert_eq!(result.get_data(), expected.get_data());
17        assert_eq!(result.get_shape(), expected.get_shape());
18    }
19    #[test]
20    fn matrix_collumn(){
21        let data: Vec<f32> = vec!{1.0, 2.0, 3.0, 4.0};
22        let sizes: Vec<u32> = vec!{2,2};
23        let tensor: Tensor<f32> = Tensor::from_data(&data, &sizes).unwrap();
24
25        let expected: Tensor<f32> = Tensor::from_data(&vec!{2.0, 4.0}, &vec!{2, 1}).unwrap();
26
27        let result = tensor.matrix_col(1).unwrap();
28
29        assert_eq!(result.get_data(), expected.get_data());
30        assert_eq!(result.get_shape(), expected.get_shape());
31    }
32    #[test]
33    fn matrix_collumn_2(){
34        let data: Vec<f32> = vec!{1.0, 2.0, 3.0, 4.0};
35        let sizes: Vec<u32> = vec!{1,4};
36        let tensor: Tensor<f32> = Tensor::from_data(&data, &sizes).unwrap();
37
38        let expected: Tensor<f32> = Tensor::from_data(&vec!{1.0}, &vec!{1, 1}).unwrap();
39
40        let result = tensor.matrix_col(0).unwrap();
41
42        assert_eq!(result.get_data(), expected.get_data());
43        assert_eq!(result.get_shape(), expected.get_shape());
44    }
45    #[test]
46    fn matrix_multiplication(){
47        let data: Vec<f32> = vec!{1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
48        let sizes1: Vec<u32> = vec!{3,2};
49
50        let sizes2: Vec<u32> = vec!{2,3};
51
52        let tensor1: Tensor<f32> = Tensor::from_data(&data, &sizes1).unwrap();
53        let tensor2: Tensor<f32> = Tensor::from_data(&data, &sizes2).unwrap();
54
55        let expected_data: Vec<f32> = vec!{9.0, 12.0, 15.0, 19.0, 26.0, 33.0, 29.0, 40.0, 51.0};
56        let expected_sizes: Vec<u32> = vec!{3,3};
57
58        let result: Tensor<f32> = tensor1.matrix_mul(&tensor2).unwrap();
59    
60        assert_eq!(result.get_data(), &expected_data);
61        assert_eq!(result.get_shape(), &expected_sizes);
62    }
63    #[test]
64    fn matrix_transpose(){
65        let data: Vec<f32> = vec!{1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
66        let sizes: Vec<u32> = vec!{2,3};
67
68        let tensor: Tensor<f32> = Tensor::from_data(&data, &sizes).unwrap();
69
70        let expected_data: Vec<f32> = vec!{1.0, 4.0, 2.0, 5.0, 3.0, 6.0};
71        let expected_sizes: Vec<u32> = vec!{3, 2};
72
73        let result = tensor.matrix_transpose().unwrap();
74
75        assert_eq!(result.get_data(), &expected_data);
76        assert_eq!(result.get_shape(), &expected_sizes);
77    }
78}