1 module matrix_test
2
3 import matrix/rotate_y
4 translate
5
6 let are_similar (x : f32) (y : f32) = x / y - 1 |> abs < 0.001
7
8 let are_similar (u : Vector4<f32>) (v : Vector4<f32>) =
9 are_similar u.x v.x && are_similar u.y v.y
10 && are_similar u.z v.z && are_similar u.w v.w
11
12 do
13 let rotate_matrix = rotate_y (f32.pi / 2)
14 let translate_matrix = translate 5 6 7
15 let matrix = translate_matrix * rotate_matrix
16 let v = Vector4 1 2 3 1
17
18 let result = matrix * v
19
20 assert are_similar result (Vector4 8 8 6 1)
21
22 do
23 let rotate_matrix = rotate_y (f32.pi / 2)
24 let translate_matrix = translate 5 6 7
25 let matrix = translate_matrix * rotate_matrix
26 let v = Vector4 1 2 3 1
27
28 let rotate_result = rotate_matrix * v
29 let translate_result = translate_matrix * rotate_result
30 let result = matrix * v
31
32 assert are_similar result translate_result
33
34 do
35 let rotate_matrix = rotate_y (f32.pi / 2)
36 let translate_matrix = translate 5 6 7
37 let matrix = translate_matrix * rotate_matrix
38 let v = Vector4 1 2 3 1
39
40 let forward = matrix * v
41 let backward = matrix.inverse * forward
42
43 assert are_similar backward v
44
45 endmodule
46