pub fn mul<'out, T>(
out: &'out mut [T; 4],
a: &[T; 4],
b: &[T; 4]
) -> &'out mut [T; 4] where
T: Add<T, Output = T> + Sub<T, Output = T>,
&'a T: Mul<&'b T, Output = T>,
use std::f32::consts::FRAC_2_PI;
let mut a = quat::new_identity::<f32>();
let mut b = quat::new_identity::<f32>();
quat::set_axis_angle(&mut a, &[0_f32, 0_f32, 1_f32], &FRAC_2_PI);
quat::set_axis_angle(&mut b, &[0_f32, 0_f32, 1_f32], &-FRAC_2_PI);
let mut q = quat::new_identity::<f32>();
quat::mul(&mut q, &a, &b);
assert_eq!(q, [0_f32, 0_f32, 0_f32, 1_f32]);
let mut axis = [0_f32; 3];
let angle = quat::axis_angle(&mut q, &mut axis);
assert_eq!(angle, 0_f32);
assert_eq!(axis, [0_f32, 0_f32, 1_f32]);