vec3
pub fn dot<T>(a: &[T; 3], b: &[T; 3]) -> T where T: Add<T, Output = T>, &'a T: Mul<&'b T, Output = T>,
assert_eq!(vec3::dot::<f32>(&vec3::new_one(), &vec3::new_one()), 3_f32);