flashlight_tensor/tests/cpu/
subtypes.rs1#[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}