ndarray_cg 0.4.0

High-performance computer graphics mathematics library based on ndarray with vectors, matrices, and transformations
Documentation
use ndarray_cg::approx::assert_abs_diff_eq;

use super::*;

#[ test ]
fn test_multiply()
{
  use the_module::
  {
    QuatF64,
  };

  let q1 = QuatF64::from( [ 1.0, 2.0, 3.0, 4.0 ] );
  let q2 = QuatF64::from( [ -5.0, 1.0, 3.0, 10.0 ] );

  let exp = QuatF64::from( [ -13.0, 42.0, 31.0, 34.0 ] );
  assert_eq!( q2 * q1, exp, "Quaternion * Quaternion multiplication mismatch" );

  let exp = QuatF64::from( [ -7.0, 6.0, 53.0, 34.0 ] );
  assert_eq!( q1 * q2, exp, "Quaternion * Quaternion multiplication mismatch" );

  let exp =  QuatF64::from( [ 5.0, 10.0, 15.0, 20.0 ] );
  assert_eq!( q1 * 5.0, exp, "Quaternion * Scalar multiplication mismatch" );

  let mut q1 = QuatF64::from( [ 1.0, 2.0, 3.0, 4.0 ] );
  let q2 = QuatF64::from( [ -5.0, 1.0, 3.0, 10.0 ] );

  let exp =  QuatF64::from( [ -7.0, 6.0, 53.0, 34.0 ] );

  q1 *= q2;
  assert_eq!( q1, exp, "Quaternion *= Quaternion multiplication mismatch" );
}

#[ test ]
fn test_devide()
{
  use the_module::
  {
    QuatF64,
  };

  let q1 = QuatF64::from( [ 1.0, 2.0, 3.0, 4.0 ] ).normalize();
  let q2 = QuatF64::from( [ -5.0, 1.0, 3.0, 10.0 ] ).normalize();

  let exp = QuatF64::from( [ 0.4242640687119285, 0.5342584568965025, 0.10999438818457405, 0.7228202652129152 ] );
  assert_abs_diff_eq!( q1 / q2, exp, );

  let q1 = QuatF64::from( [ 1.0, 2.0, 3.0, 4.0 ] ).normalize();
  let q2 = QuatF64::from( [ 0.9, 2.0, 3.0, 4.0 ] ).normalize();

  let exp = QuatF64::from( [ 0.013375757175498215, 0.010031817881623634, -0.006687878587749038, 0.999837848868489 ] );
  assert_abs_diff_eq!( q1 / q2, exp, );
}

#[ test ]
fn test_from_angle_x()
{
  use the_module::
  {
    QuatF64,
  };

  let q = QuatF64::from_angle_x( 1.0 );
  let exp = QuatF64::from( [ 0.479425538604203, 0.0, 0.0, 0.8775825618903728 ] );
  assert_abs_diff_eq!( q, exp );

  let q = QuatF64::from_angle_x( -1.0 );
  let exp = QuatF64::from( [ -0.479425538604203, 0.0, 0.0, 0.8775825618903728 ] );
  assert_abs_diff_eq!( q, exp );

  let q = QuatF64::from_angle_x( 256.0 );
  let exp = QuatF64::from( [ 0.7210377105017316, -0.0, 0.0, -0.6928958219201651 ] );
  assert_abs_diff_eq!( q, exp );
}

#[ test ]
fn test_from_angle_y()
{
  use the_module::
  {
    QuatF64,
  };

  let q = QuatF64::from_angle_y( 1.0 );
  let exp = QuatF64::from( [ 0.0, 0.479425538604203, 0.0, 0.8775825618903728 ] );
  assert_abs_diff_eq!( q, exp );

  let q = QuatF64::from_angle_y( -1.0 );
  let exp = QuatF64::from( [ 0.0, -0.479425538604203, 0.0, 0.8775825618903728 ] );
  assert_abs_diff_eq!( q, exp );

  let q = QuatF64::from_angle_y( 256.0 );
  let exp = QuatF64::from( [ 0.0, 0.7210377105017316, 0.0, -0.6928958219201651 ] );
  assert_abs_diff_eq!( q, exp );
}

#[ test ]
fn test_from_angle_z()
{
  use the_module::
  {
    QuatF64,
  };

  let q = QuatF64::from_angle_z( 1.0 );
  let exp = QuatF64::from( [ 0.0, 0.0, 0.479425538604203, 0.8775825618903728 ] );
  assert_abs_diff_eq!( q, exp );

  let q = QuatF64::from_angle_z( -1.0 );
  let exp = QuatF64::from( [ 0.0, 0.0, -0.479425538604203, 0.8775825618903728 ] );
  assert_abs_diff_eq!( q, exp );

  let q = QuatF64::from_angle_z( 256.0 );
  let exp = QuatF64::from( [ 0.0, 0.0, 0.7210377105017316, -0.6928958219201651 ] );
  assert_abs_diff_eq!( q, exp );
}

#[ test ]
fn test_from_euler_xyz()
{
  use the_module::
  {
    QuatF64,
  };

  let q = QuatF64::from_euler_xyz( [ 1.0, 2.0, 3.0 ] );
  let exp = QuatF64::from( [ 0.7549338012644525, -0.2061492260268777, 0.5015090964037221, -0.3688713577132898 ] );
  assert_abs_diff_eq!( q, exp );

  let q = QuatF64::from_euler_xyz( [ 0.0, 0.0, 0.0 ] );
  let exp = QuatF64::from( [ 0.0, 0.0, 0.0, 1.0 ] );
  assert_abs_diff_eq!( q, exp );

  let q = QuatF64::from_euler_xyz( [ -23.0, 123.0, 0.53 ] );
  let exp = QuatF64::from( [ 0.0769801414111575, -0.5074489930731315, -0.7909288495020033, 0.3331683242489008 ] );
  assert_abs_diff_eq!( q, exp );
}