|  | #[path = "support/macros.rs"] | 
|  | #[macro_use] | 
|  | mod macros; | 
|  | mod support; | 
|  |  | 
|  | use criterion::{criterion_group, criterion_main, Criterion}; | 
|  | use glam::Vec3; | 
|  | use std::ops::Mul; | 
|  | use support::*; | 
|  |  | 
|  | bench_binop!( | 
|  | vec3_mul_vec3, | 
|  | "vec3 mul vec3", | 
|  | op => mul, | 
|  | from1 => random_vec3, | 
|  | from2 => random_vec3 | 
|  | ); | 
|  |  | 
|  | #[inline] | 
|  | fn vec3_to_rgb_op(v: Vec3) -> u32 { | 
|  | let (red, green, blue) = (v.min(Vec3::ONE).max(Vec3::ZERO) * 255.0).into(); | 
|  | (red as u32) << 16 | (green as u32) << 8 | (blue as u32) | 
|  | } | 
|  |  | 
|  | #[inline] | 
|  | fn vec3_fields(v: Vec3) -> [f32; 3] { | 
|  | [v.x, v.y, v.z] | 
|  | } | 
|  |  | 
|  | #[inline] | 
|  | fn vec3_into_array(v: Vec3) -> [f32; 3] { | 
|  | v.into() | 
|  | } | 
|  |  | 
|  | #[inline] | 
|  | fn vec3_into_tuple(v: Vec3) -> (f32, f32, f32) { | 
|  | v.into() | 
|  | } | 
|  |  | 
|  | bench_func!( | 
|  | vec3_to_rgb, | 
|  | "vec3 to rgb", | 
|  | op => vec3_to_rgb_op, | 
|  | from => random_vec3 | 
|  | ); | 
|  |  | 
|  | bench_func!( | 
|  | vec3_to_array_fields, | 
|  | "vec3 into array fields", | 
|  | op => vec3_fields, | 
|  | from => random_vec3 | 
|  | ); | 
|  |  | 
|  | bench_func!( | 
|  | vec3_to_array_into, | 
|  | "vec3 into array fast", | 
|  | op => vec3_into_array, | 
|  | from => random_vec3 | 
|  | ); | 
|  |  | 
|  | bench_func!( | 
|  | vec3_to_tuple_into, | 
|  | "vec3 into tuple fast", | 
|  | op => vec3_into_tuple, | 
|  | from => random_vec3 | 
|  | ); | 
|  |  | 
|  | // --- | 
|  |  | 
|  | #[inline] | 
|  | fn vec3_normalize(v: Vec3) -> Vec3 { | 
|  | v.normalize() | 
|  | } | 
|  |  | 
|  | bench_func!( | 
|  | vec3_normalize_bench, | 
|  | "vec3 normalize", | 
|  | op => vec3_normalize, | 
|  | from => random_vec3 | 
|  | ); | 
|  |  | 
|  | #[inline] | 
|  | fn vec3_normalize_or(v: Vec3) -> Vec3 { | 
|  | v.normalize_or(Vec3::X) | 
|  | } | 
|  |  | 
|  | bench_func!( | 
|  | vec3_normalize_or_bench, | 
|  | "vec3 normalize_or", | 
|  | op => vec3_normalize_or, | 
|  | from => random_vec3 | 
|  | ); | 
|  |  | 
|  | #[inline] | 
|  | fn vec3_normalize_or_zero(v: Vec3) -> Vec3 { | 
|  | v.normalize_or_zero() | 
|  | } | 
|  |  | 
|  | bench_func!( | 
|  | vec3_normalize_or_zero_bench, | 
|  | "vec3 normalize_or_zero", | 
|  | op => vec3_normalize_or_zero, | 
|  | from => random_vec3 | 
|  | ); | 
|  |  | 
|  | // --- | 
|  |  | 
|  | #[inline(always)] | 
|  | fn vec3_any_orthogonal_vector(v: Vec3) -> Vec3 { | 
|  | v.any_orthogonal_vector() | 
|  | } | 
|  |  | 
|  | bench_func!( | 
|  | vec3_any_orthogonal_vector_bench, | 
|  | "vec3 any_orthogonal_vector", | 
|  | op => vec3_any_orthogonal_vector, | 
|  | from => random_vec3 | 
|  | ); | 
|  |  | 
|  | #[inline(always)] | 
|  | fn vec3_any_orthonormal_vector(v: Vec3) -> Vec3 { | 
|  | v.any_orthonormal_vector() | 
|  | } | 
|  |  | 
|  | bench_func!( | 
|  | vec3_any_orthonormal_vector_bench, | 
|  | "vec3 any_orthonormal_vector", | 
|  | op => vec3_any_orthonormal_vector, | 
|  | from => random_vec3 | 
|  | ); | 
|  |  | 
|  | #[inline(always)] | 
|  | fn vec3_any_orthonormal_pair(v: Vec3) -> (Vec3, Vec3) { | 
|  | v.any_orthonormal_pair() | 
|  | } | 
|  |  | 
|  | bench_func!( | 
|  | vec3_any_orthonormal_pair_bench, | 
|  | "vec3 any_orthonormal_pair", | 
|  | op => vec3_any_orthonormal_pair, | 
|  | from => random_vec3 | 
|  | ); | 
|  |  | 
|  | // --- | 
|  |  | 
|  | euler!(vec3_euler, "vec3 euler", ty => Vec3, storage => Vec3, zero => Vec3::ZERO, rand => random_vec3); | 
|  |  | 
|  | bench_binop!( | 
|  | vec3_angle_between, | 
|  | "vec3 angle_between", | 
|  | op => angle_between, | 
|  | from1 => random_vec3, | 
|  | from2 => random_vec3 | 
|  | ); | 
|  |  | 
|  | bench_binop!( | 
|  | vec3_cross, | 
|  | "vec3 cross", | 
|  | op => cross, | 
|  | from1 => random_vec3, | 
|  | from2 => random_vec3 | 
|  | ); | 
|  |  | 
|  | bench_binop!( | 
|  | vec3_dot, | 
|  | "vec3 dot", | 
|  | op => dot, | 
|  | from1 => random_vec3, | 
|  | from2 => random_vec3 | 
|  | ); | 
|  |  | 
|  | bench_unop!( | 
|  | vec3_length, | 
|  | "vec3 length", | 
|  | op => length, | 
|  | from => random_vec3 | 
|  | ); | 
|  |  | 
|  | bench_select!( | 
|  | vec3_select, | 
|  | "vec3 select", | 
|  | ty => Vec3, | 
|  | op => cmple, | 
|  | from => random_vec3 | 
|  | ); | 
|  |  | 
|  | bench_trinop!( | 
|  | vec3_slerp, | 
|  | "vec3 slerp", | 
|  | op => slerp, | 
|  | from1 => random_vec3, | 
|  | from2 => random_vec3, | 
|  | from3 => random_f32 | 
|  | ); | 
|  |  | 
|  | criterion_group!( | 
|  | benches, | 
|  | vec3_angle_between, | 
|  | vec3_any_orthogonal_vector_bench, | 
|  | vec3_any_orthonormal_pair_bench, | 
|  | vec3_any_orthonormal_vector_bench, | 
|  | vec3_cross, | 
|  | vec3_dot, | 
|  | vec3_euler, | 
|  | vec3_length, | 
|  | vec3_mul_vec3, | 
|  | vec3_normalize_bench, | 
|  | vec3_normalize_or_bench, | 
|  | vec3_normalize_or_zero_bench, | 
|  | vec3_select, | 
|  | vec3_to_array_fields, | 
|  | vec3_to_array_into, | 
|  | vec3_to_rgb, | 
|  | vec3_to_tuple_into, | 
|  | vec3_slerp, | 
|  | ); | 
|  |  | 
|  | criterion_main!(benches); |