1 use na::{Orthographic3, Perspective3, Point3};
2 
3 #[test]
perspective_inverse()4 fn perspective_inverse() {
5     let proj = Perspective3::new(800.0 / 600.0, 3.14 / 2.0, 1.0, 1000.0);
6     let inv = proj.inverse();
7 
8     let id = inv * proj.into_inner();
9 
10     assert!(id.is_identity(1.0e-7));
11 }
12 
13 #[test]
orthographic_inverse()14 fn orthographic_inverse() {
15     let proj = Orthographic3::new(1.0, 2.0, -3.0, -2.5, 10.0, 900.0);
16     let inv = proj.inverse();
17 
18     let id = inv * proj.into_inner();
19 
20     assert!(id.is_identity(1.0e-7));
21 }
22 
23 #[test]
perspective_matrix_point_transformation()24 fn perspective_matrix_point_transformation() {
25     // https://github.com/dimforge/nalgebra/issues/640
26     let proj = Perspective3::new(4.0 / 3.0, 90.0, 0.1, 100.0);
27     let perspective_inv = proj.as_matrix().try_inverse().unwrap();
28     let some_point = Point3::new(1.0, 2.0, 0.0);
29 
30     assert_eq!(
31         perspective_inv.transform_point(&some_point),
32         Point3::from_homogeneous(perspective_inv * some_point.coords.push(1.0)).unwrap()
33     );
34 }
35 
36 #[cfg(feature = "proptest-support")]
37 mod proptest_tests {
38     use na::{Orthographic3, Perspective3};
39 
40     use crate::proptest::*;
41     use proptest::{prop_assert, proptest};
42 
43     proptest! {
44         #[test]
45         fn perspective_project_unproject(pt in point3()) {
46             let proj = Perspective3::new(800.0 / 600.0, 3.14 / 2.0, 1.0, 1000.0);
47 
48             let projected   = proj.project_point(&pt);
49             let unprojected = proj.unproject_point(&projected);
50 
51             prop_assert!(relative_eq!(pt, unprojected, epsilon = 1.0e-7))
52         }
53 
54         #[test]
55         fn orthographic_project_unproject(pt in point3()) {
56             let proj = Orthographic3::new(1.0, 2.0, -3.0, -2.5, 10.0, 900.0);
57 
58             let projected   = proj.project_point(&pt);
59             let unprojected = proj.unproject_point(&projected);
60 
61             prop_assert!(relative_eq!(pt, unprojected, epsilon = 1.0e-7))
62         }
63     }
64 }
65