extern crate oxygen_quark as quark; use quark::fraction::Fraction; use quark::matrix::{matrix2x2::*, matrix3x3::*, matrix4x4::*, Matrix, TransformVector}; use quark::vector::{vector2d::Vector2D, vector3d::Vector3D, Vector}; #[test] fn transform_vector2d_with_matrix2x2_test() { let values: [Fraction; 4] = [ Fraction::new_denom(5, 1), Fraction::new_denom(3, 1), Fraction::new_denom(6, 1), Fraction::new_denom(3, 1), ]; let matrix = Matrix2x2::from_slice(&values); let vector = Vector::from(&[Fraction::new_denom(3, 1), Fraction::new_denom(4, 1)]); let result_x = Fraction::new_denom(3, 1) * Fraction::new_denom(5, 1) + Fraction::new_denom(4, 1) * Fraction::new_denom(3, 1); let result_y = Fraction::new_denom(3, 1) * Fraction::new_denom(6, 1) + Fraction::new_denom(4, 1) * Fraction::new_denom(3, 1); let result_vector = Vector::from(&[result_x, result_y]); let transformed_vector = matrix.transform_vector(vector).unwrap(); println!("{:?}", transformed_vector); assert_eq!(transformed_vector, result_vector); } #[test] fn transform_vector2d_with_matrix3x3_test() { let values: [Fraction; 9] = [ Fraction::new_denom(5, 1), Fraction::new_denom(3, 1), Fraction::new_denom(2, 1), Fraction::new_denom(6, 1), Fraction::new_denom(3, 1), Fraction::new_denom(5, 1), Fraction::new_denom(12, 1), Fraction::new_denom(64, 1), Fraction::new_denom(62, 1), ]; let matrix = Matrix3x3::from_slice(&values); let vector: Vector2D = Vector::from(&[Fraction::new_denom(3, 1), Fraction::new_denom(4, 1)]); let result_x = Fraction::new_denom(3, 1) * Fraction::new_denom(5, 1) + Fraction::new_denom(4, 1) * Fraction::new_denom(3, 1) + Fraction::new_denom(2, 1); let result_y = Fraction::new_denom(3, 1) * Fraction::new_denom(6, 1) + Fraction::new_denom(4, 1) * Fraction::new_denom(3, 1) + Fraction::new_denom(5, 1); let result_vector = Vector::from(&[result_x, result_y]); let transformed_vector = matrix.transform_vector(vector).unwrap(); println!("{:?}", transformed_vector); assert_eq!(transformed_vector, result_vector); } #[test] fn transform_vector3d_with_matrix3x3_test() { let values: [Fraction; 9] = [ Fraction::new_denom(5, 1), Fraction::new_denom(3, 1), Fraction::new_denom(2, 1), Fraction::new_denom(6, 1), Fraction::new_denom(3, 1), Fraction::new_denom(5, 1), Fraction::new_denom(12, 1), Fraction::new_denom(64, 1), Fraction::new_denom(62, 1), ]; let matrix = Matrix3x3::from_slice(&values); let vector: Vector3D = Vector::from(&[ Fraction::new_denom(3, 1), Fraction::new_denom(4, 1), Fraction::new_denom(5, 1), ]); let result_x = Fraction::new_denom(3, 1) * Fraction::new_denom(5, 1) + Fraction::new_denom(4, 1) * Fraction::new_denom(3, 1) + Fraction::new_denom(5, 1) * Fraction::new_denom(2, 1); let result_y = Fraction::new_denom(3, 1) * Fraction::new_denom(6, 1) + Fraction::new_denom(4, 1) * Fraction::new_denom(3, 1) + Fraction::new_denom(5, 1) * Fraction::new_denom(5, 1); let result_z = Fraction::new_denom(3, 1) * Fraction::new_denom(12, 1) + Fraction::new_denom(4, 1) * Fraction::new_denom(64, 1) + Fraction::new_denom(5, 1) * Fraction::new_denom(62, 1); let result_vector = Vector::from(&[result_x, result_y, result_z]); let transformed_vector = matrix.transform_vector(vector).unwrap(); println!("{:?}", transformed_vector); assert_eq!(transformed_vector, result_vector); } #[test] fn transform_vector3d_with_matrix4x4_test() { let values: [Fraction; 16] = [ Fraction::new_denom(5, 1), Fraction::new_denom(3, 1), Fraction::new_denom(2, 1), Fraction::new_denom(15, 1), Fraction::new_denom(6, 1), Fraction::new_denom(3, 1), Fraction::new_denom(5, 1), Fraction::new_denom(13, 1), Fraction::new_denom(17, 5), Fraction::new_denom(13, 2), Fraction::new_denom(6, 1), Fraction::new_denom(23, 4), Fraction::new_denom(5, 1), Fraction::new_denom(2, 1), Fraction::new_denom(1, 1), Fraction::new_denom(50, 1), ]; let matrix = Matrix4x4::from_slice(&values); let vector = Vector::from(&[ Fraction::new_denom(3, 1), Fraction::new_denom(4, 1), Fraction::new_denom(5, 1), ]); let result_x = Fraction::new_denom(3, 1) * Fraction::new_denom(5, 1) + Fraction::new_denom(4, 1) * Fraction::new_denom(3, 1) + Fraction::new_denom(5, 1) * Fraction::new_denom(2, 1) + Fraction::new_denom(15, 1); let result_y = Fraction::new_denom(3, 1) * Fraction::new_denom(6, 1) + Fraction::new_denom(4, 1) * Fraction::new_denom(3, 1) + Fraction::new_denom(5, 1) * Fraction::new_denom(5, 1) + Fraction::new_denom(13, 1); let result_z = Fraction::new_denom(3, 1) * Fraction::new_denom(17, 5) + Fraction::new_denom(4, 1) * Fraction::new_denom(13, 2) + Fraction::new_denom(5, 1) * Fraction::new_denom(6, 1) + Fraction::new_denom(23, 4); let result_vector = Vector::from(&[result_x, result_y, result_z]); let transformed_vector = matrix.transform_vector(vector).unwrap(); println!("{:?}", transformed_vector); assert_eq!(transformed_vector, result_vector); }