aboutsummaryrefslogtreecommitdiff
path: root/tests/vec3.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/vec3.rs')
-rw-r--r--tests/vec3.rs863
1 files changed, 809 insertions, 54 deletions
diff --git a/tests/vec3.rs b/tests/vec3.rs
index 5df8d09..0997826 100644
--- a/tests/vec3.rs
+++ b/tests/vec3.rs
@@ -20,6 +20,8 @@ macro_rules! impl_vec3_tests {
assert_eq!($vec3::X, $new(1 as $t, 0 as $t, 0 as $t));
assert_eq!($vec3::Y, $new(0 as $t, 1 as $t, 0 as $t));
assert_eq!($vec3::Z, $new(0 as $t, 0 as $t, 1 as $t));
+ assert_eq!($vec3::MIN, $new($t::MIN, $t::MIN, $t::MIN));
+ assert_eq!($vec3::MAX, $new($t::MAX, $t::MAX, $t::MAX));
});
glam_test!(test_new, {
@@ -108,6 +110,18 @@ macro_rules! impl_vec3_tests {
let y = $new(0 as $t, 1 as $t, 0 as $t);
assert_eq!(1 as $t, x.dot(x));
assert_eq!(0 as $t, x.dot(y));
+
+ assert_eq!(
+ $new(14 as $t, 14 as $t, 14 as $t),
+ $new(0 as $t, 4 as $t, 6 as $t).dot_into_vec($new(3 as $t, 2 as $t, 1 as $t))
+ );
+ });
+
+ glam_test!(test_length_squared_unsigned, {
+ let x = $new(1 as $t, 0 as $t, 0 as $t);
+ let z = $new(0 as $t, 0 as $t, 1 as $t);
+ assert_eq!(4 as $t, (2 as $t * x).length_squared());
+ assert_eq!(16 as $t, (4 as $t * z).length_squared());
});
glam_test!(test_cross, {
@@ -462,6 +476,36 @@ macro_rules! impl_vec3_tests {
assert_ne!(b, c);
});
+ glam_test!(test_mask_test, {
+ let a = $mask::new(true, false, true);
+ assert_eq!(a.test(0), true);
+ assert_eq!(a.test(1), false);
+ assert_eq!(a.test(2), true);
+
+ let b = $mask::new(false, true, false);
+ assert_eq!(b.test(0), false);
+ assert_eq!(b.test(1), true);
+ assert_eq!(b.test(2), false);
+ });
+
+ glam_test!(test_mask_set, {
+ let mut a = $mask::new(false, true, false);
+ a.set(0, true);
+ assert_eq!(a.test(0), true);
+ a.set(1, false);
+ assert_eq!(a.test(1), false);
+ a.set(2, true);
+ assert_eq!(a.test(2), true);
+
+ let mut b = $mask::new(true, false, true);
+ b.set(0, false);
+ assert_eq!(b.test(0), false);
+ b.set(1, true);
+ assert_eq!(b.test(1), true);
+ b.set(2, false);
+ assert_eq!(b.test(2), false);
+ });
+
glam_test!(test_mask_hash, {
use std::collections::hash_map::DefaultHasher;
use std::hash::Hash;
@@ -501,14 +545,14 @@ macro_rules! impl_vec3_tests {
glam_test!(test_sum, {
let one = $vec3::ONE;
- assert_eq!(vec![one, one].iter().sum::<$vec3>(), one + one);
- assert_eq!(vec![one, one].into_iter().sum::<$vec3>(), one + one);
+ assert_eq!([one, one].iter().sum::<$vec3>(), one + one);
+ assert_eq!([one, one].into_iter().sum::<$vec3>(), one + one);
});
glam_test!(test_product, {
let two = $vec3::new(2 as $t, 2 as $t, 2 as $t);
- assert_eq!(vec![two, two].iter().product::<$vec3>(), two * two);
- assert_eq!(vec![two, two].into_iter().product::<$vec3>(), two * two);
+ assert_eq!([two, two].iter().product::<$vec3>(), two * two);
+ assert_eq!([two, two].into_iter().product::<$vec3>(), two * two);
});
};
}
@@ -530,6 +574,38 @@ macro_rules! impl_vec3_signed_tests {
);
});
+ glam_test!(test_is_negative_bitmask, {
+ assert_eq!($vec3::ZERO.is_negative_bitmask(), 0b000);
+ assert_eq!($vec3::ONE.is_negative_bitmask(), 0b000);
+ assert_eq!((-$vec3::ONE).is_negative_bitmask(), 0b111);
+ assert_eq!(
+ $vec3::new(-1 as $t, 2 as $t, 3 as $t).is_negative_bitmask(),
+ 0b001
+ );
+ assert_eq!(
+ $vec3::new(8 as $t, 3 as $t, 1 as $t).is_negative_bitmask(),
+ 0b000
+ );
+ assert_eq!(
+ $vec3::new(1 as $t, 5 as $t, -3 as $t).is_negative_bitmask(),
+ 0b100
+ );
+ assert_eq!(
+ $vec3::new(3 as $t, -4 as $t, 1 as $t).is_negative_bitmask(),
+ 0b010
+ );
+ assert_eq!(
+ $vec3::new(-2 as $t, 6 as $t, -5 as $t).is_negative_bitmask(),
+ 0b101
+ );
+ });
+
+ glam_test!(test_abs, {
+ assert_eq!($vec3::ZERO.abs(), $vec3::ZERO);
+ assert_eq!($vec3::ONE.abs(), $vec3::ONE);
+ assert_eq!((-$vec3::ONE).abs(), $vec3::ONE);
+ });
+
glam_test!(test_dot_signed, {
let x = $new(1 as $t, 0 as $t, 0 as $t);
let y = $new(0 as $t, 1 as $t, 0 as $t);
@@ -538,6 +614,52 @@ macro_rules! impl_vec3_signed_tests {
assert_eq!(0 as $t, x.dot(y));
assert_eq!(-1 as $t, z.dot(-z));
});
+
+ glam_test!(test_length_squared_signed, {
+ let x = $new(1 as $t, 0 as $t, 0 as $t);
+ let y = $new(0 as $t, 1 as $t, 0 as $t);
+ let z = $new(0 as $t, 0 as $t, 1 as $t);
+ assert_eq!(9 as $t, (-3 as $t * y).length_squared());
+ assert_eq!(
+ 2 as $t * 2 as $t + 3 as $t * 3 as $t + 4 as $t * 4 as $t,
+ $new(2 as $t, 3 as $t, 4 as $t).length_squared()
+ );
+ assert_eq!(2 as $t, x.distance_squared(y));
+ assert_eq!(13 as $t, (2 as $t * x).distance_squared(-3 as $t * z));
+ });
+
+ glam_test!(test_div_euclid, {
+ let one = $vec3::ONE;
+ let two = one + one;
+ let three = two + one;
+ assert_eq!(three.div_euclid(two), one);
+ assert_eq!((-three).div_euclid(two), -two);
+ assert_eq!(three.div_euclid(-two), -one);
+ assert_eq!((-three).div_euclid(-two), two);
+ });
+
+ glam_test!(test_rem_euclid, {
+ let one = $vec3::ONE;
+ let two = one + one;
+ let three = two + one;
+ let four = three + one;
+ assert_eq!(four.rem_euclid(three), one);
+ assert_eq!((-four).rem_euclid(three), two);
+ assert_eq!(four.rem_euclid(-three), one);
+ assert_eq!((-four).rem_euclid(-three), two);
+ });
+ };
+}
+
+macro_rules! impl_vec3_signed_integer_tests {
+ ($t:ident, $new:ident, $vec3:ident, $mask:ident) => {
+ impl_vec3_signed_tests!($t, $new, $vec3, $mask);
+
+ glam_test!(test_signum, {
+ assert_eq!($vec3::ZERO.signum(), $vec3::ZERO);
+ assert_eq!($vec3::ONE.signum(), $vec3::ONE);
+ assert_eq!((-$vec3::ONE).signum(), -$vec3::ONE);
+ });
};
}
@@ -592,14 +714,9 @@ macro_rules! impl_vec3_float_tests {
let z = $new(0.0, 0.0, 1.0);
assert_eq!(y, z.cross(x));
assert_eq!(z, x.cross(y));
- assert_eq!(4.0, (2.0 * x).length_squared());
- assert_eq!(9.0, (-3.0 * y).length_squared());
- assert_eq!(16.0, (4.0 * z).length_squared());
assert_eq!(2.0, (-2.0 * x).length());
assert_eq!(3.0, (3.0 * y).length());
assert_eq!(4.0, (-4.0 * z).length());
- assert_eq!(2.0, x.distance_squared(y));
- assert_eq!(13.0, (2.0 * x).distance_squared(-3.0 * z));
assert_eq!((2.0 as $t).sqrt(), x.distance(y));
assert_eq!(5.0, (3.0 * x).distance(-4.0 * y));
assert_eq!(13.0, (-5.0 * z).distance(12.0 * y));
@@ -609,14 +726,6 @@ macro_rules! impl_vec3_float_tests {
$new(1.0, 2.0, 3.0).dot($new(4.0, 5.0, 6.0))
);
assert_eq!(
- $new(14.0, 14.0, 14.0),
- $new(0.0, 4.0, 6.0).dot_into_vec($new(3.0, 2.0, 1.0))
- );
- assert_eq!(
- 2.0 * 2.0 + 3.0 * 3.0 + 4.0 * 4.0,
- $new(2.0, 3.0, 4.0).length_squared()
- );
- assert_eq!(
(2.0 as $t * 2.0 + 3.0 * 3.0 + 4.0 * 4.0).sqrt(),
$new(2.0, 3.0, 4.0).length()
);
@@ -660,9 +769,9 @@ macro_rules! impl_vec3_float_tests {
assert_eq!((-$vec3::ZERO).signum(), -$vec3::ONE);
assert_eq!($vec3::ONE.signum(), $vec3::ONE);
assert_eq!((-$vec3::ONE).signum(), -$vec3::ONE);
- assert_eq!($vec3::splat(INFINITY).signum(), $vec3::ONE);
- assert_eq!($vec3::splat(NEG_INFINITY).signum(), -$vec3::ONE);
- assert!($vec3::splat(NAN).signum().is_nan_mask().all());
+ assert_eq!($vec3::INFINITY.signum(), $vec3::ONE);
+ assert_eq!($vec3::NEG_INFINITY.signum(), -$vec3::ONE);
+ assert!($vec3::NAN.signum().is_nan_mask().all());
});
glam_test!(test_copysign, {
@@ -682,42 +791,27 @@ macro_rules! impl_vec3_float_tests {
assert_eq!((-$vec3::ONE).copysign(-$vec3::ONE), -$vec3::ONE);
assert_eq!($vec3::ONE.copysign($vec3::ONE), $vec3::ONE);
assert_eq!((-$vec3::ONE).copysign($vec3::ONE), $vec3::ONE);
+ assert_eq!($vec3::INFINITY.copysign($vec3::ONE), $vec3::INFINITY);
+ assert_eq!($vec3::INFINITY.copysign(-$vec3::ONE), $vec3::NEG_INFINITY);
+ assert_eq!($vec3::NEG_INFINITY.copysign($vec3::ONE), $vec3::INFINITY);
assert_eq!(
- $vec3::splat(INFINITY).copysign($vec3::ONE),
- $vec3::splat(INFINITY)
+ $vec3::NEG_INFINITY.copysign(-$vec3::ONE),
+ $vec3::NEG_INFINITY
);
- assert_eq!(
- $vec3::splat(INFINITY).copysign(-$vec3::ONE),
- $vec3::splat(NEG_INFINITY)
- );
- assert_eq!(
- $vec3::splat(NEG_INFINITY).copysign($vec3::ONE),
- $vec3::splat(INFINITY)
- );
- assert_eq!(
- $vec3::splat(NEG_INFINITY).copysign(-$vec3::ONE),
- $vec3::splat(NEG_INFINITY)
- );
- assert!($vec3::splat(NAN).copysign($vec3::ONE).is_nan_mask().all());
- assert!($vec3::splat(NAN).copysign(-$vec3::ONE).is_nan_mask().all());
+ assert!($vec3::NAN.copysign($vec3::ONE).is_nan_mask().all());
+ assert!($vec3::NAN.copysign(-$vec3::ONE).is_nan_mask().all());
});
- glam_test!(test_is_negative_bitmask, {
+ glam_test!(test_float_is_negative_bitmask, {
assert_eq!($vec3::ZERO.is_negative_bitmask(), 0b000);
assert_eq!((-$vec3::ZERO).is_negative_bitmask(), 0b111);
assert_eq!($vec3::ONE.is_negative_bitmask(), 0b000);
assert_eq!((-$vec3::ONE).is_negative_bitmask(), 0b111);
- assert_eq!($vec3::new(-0.1, 0.2, 0.3).is_negative_bitmask(), 0b001);
- assert_eq!($vec3::new(0.8, 0.3, 0.1).is_negative_bitmask(), 0b000);
- assert_eq!($vec3::new(0.1, 0.5, -0.3).is_negative_bitmask(), 0b100);
- assert_eq!($vec3::new(0.3, -0.4, 0.1).is_negative_bitmask(), 0b010);
- assert_eq!($vec3::new(-0.2, 0.6, -0.5).is_negative_bitmask(), 0b101);
- });
-
- glam_test!(test_abs, {
- assert_eq!($vec3::ZERO.abs(), $vec3::ZERO);
- assert_eq!($vec3::ONE.abs(), $vec3::ONE);
- assert_eq!((-$vec3::ONE).abs(), $vec3::ONE);
+ assert_eq!($vec3::new(-1.0, 2.0, 3.0).is_negative_bitmask(), 0b001);
+ assert_eq!($vec3::new(8.0, 3.0, 1.0).is_negative_bitmask(), 0b000);
+ assert_eq!($vec3::new(1.0, 5.0, -3.0).is_negative_bitmask(), 0b100);
+ assert_eq!($vec3::new(3.0, -4.0, 1.0).is_negative_bitmask(), 0b010);
+ assert_eq!($vec3::new(-2.0, 6.0, -5.0).is_negative_bitmask(), 0b101);
});
glam_test!(test_round, {
@@ -779,6 +873,22 @@ macro_rules! impl_vec3_float_tests {
);
});
+ glam_test!(test_trunc, {
+ assert_eq!(
+ $vec3::new(1.35, 1.5, -1.5).trunc(),
+ $vec3::new(1.0, 1.0, -1.0)
+ );
+ assert_eq!(
+ $vec3::new(INFINITY, NEG_INFINITY, 0.0).trunc(),
+ $vec3::new(INFINITY, NEG_INFINITY, 0.0)
+ );
+ assert!($vec3::new(0.0, NAN, 0.0).trunc().y.is_nan());
+ assert_eq!(
+ $vec3::new(-0.0, -2000000.123, 10000000.123).trunc(),
+ $vec3::new(-0.0, -2000000.0, 10000000.0)
+ );
+ });
+
glam_test!(test_lerp, {
let v0 = $vec3::new(-1.0, -1.0, -1.0);
let v1 = $vec3::new(1.0, 1.0, 1.0);
@@ -793,7 +903,9 @@ macro_rules! impl_vec3_float_tests {
assert!(!$vec3::new(INFINITY, 0.0, 0.0).is_finite());
assert!(!$vec3::new(0.0, NAN, 0.0).is_finite());
assert!(!$vec3::new(0.0, 0.0, NEG_INFINITY).is_finite());
- assert!(!$vec3::splat(NAN).is_finite());
+ assert!(!$vec3::NAN.is_finite());
+ assert!(!$vec3::INFINITY.is_finite());
+ assert!(!$vec3::NEG_INFINITY.is_finite());
});
glam_test!(test_powf, {
@@ -933,6 +1045,10 @@ macro_rules! impl_vec3_scalar_shift_op_tests {
use glam::$vec3;
impl_vec3_scalar_shift_op_test!($vec3, $t_min, $t_max, 0i32, 2);
}
+ mod shift_by_i64 {
+ use glam::$vec3;
+ impl_vec3_scalar_shift_op_test!($vec3, $t_min, $t_max, 0i64, 2);
+ }
mod shift_by_u8 {
use glam::$vec3;
impl_vec3_scalar_shift_op_test!($vec3, $t_min, $t_max, 0u8, 2);
@@ -945,6 +1061,10 @@ macro_rules! impl_vec3_scalar_shift_op_tests {
use glam::$vec3;
impl_vec3_scalar_shift_op_test!($vec3, $t_min, $t_max, 0u32, 2);
}
+ mod shift_by_u64 {
+ use glam::$vec3;
+ impl_vec3_scalar_shift_op_test!($vec3, $t_min, $t_max, 0u64, 2);
+ }
};
}
@@ -1060,33 +1180,75 @@ mod vec3 {
});
glam_test!(test_as, {
- use glam::{DVec3, IVec3, UVec3, Vec3A};
+ use glam::{DVec3, I16Vec3, I64Vec3, IVec3, U16Vec3, U64Vec3, UVec3, Vec3A};
assert_eq!(
DVec3::new(-1.0, -2.0, -3.0),
Vec3::new(-1.0, -2.0, -3.0).as_dvec3()
);
assert_eq!(
+ I16Vec3::new(-1, -2, -3),
+ Vec3::new(-1.0, -2.0, -3.0).as_i16vec3()
+ );
+ assert_eq!(U16Vec3::new(1, 2, 3), Vec3::new(1.0, 2.0, 3.0).as_u16vec3());
+ assert_eq!(
IVec3::new(-1, -2, -3),
Vec3::new(-1.0, -2.0, -3.0).as_ivec3()
);
assert_eq!(UVec3::new(1, 2, 3), Vec3::new(1.0, 2.0, 3.0).as_uvec3());
+ assert_eq!(
+ I64Vec3::new(-1, -2, -3),
+ Vec3::new(-1.0, -2.0, -3.0).as_i64vec3()
+ );
+ assert_eq!(U64Vec3::new(1, 2, 3), Vec3::new(1.0, 2.0, 3.0).as_u64vec3());
assert_eq!(
DVec3::new(-1.0, -2.0, -3.0),
Vec3A::new(-1.0, -2.0, -3.0).as_dvec3()
);
assert_eq!(
+ I16Vec3::new(-1, -2, -3),
+ Vec3A::new(-1.0, -2.0, -3.0).as_i16vec3()
+ );
+ assert_eq!(
+ U16Vec3::new(1, 2, 3),
+ Vec3A::new(1.0, 2.0, 3.0).as_u16vec3()
+ );
+ assert_eq!(
IVec3::new(-1, -2, -3),
Vec3A::new(-1.0, -2.0, -3.0).as_ivec3()
);
assert_eq!(UVec3::new(1, 2, 3), Vec3A::new(1.0, 2.0, 3.0).as_uvec3());
+ assert_eq!(
+ I64Vec3::new(-1, -2, -3),
+ Vec3A::new(-1.0, -2.0, -3.0).as_i64vec3()
+ );
+ assert_eq!(
+ U64Vec3::new(1, 2, 3),
+ Vec3A::new(1.0, 2.0, 3.0).as_u64vec3()
+ );
assert_eq!(
+ I16Vec3::new(-1, -2, -3),
+ DVec3::new(-1.0, -2.0, -3.0).as_i16vec3()
+ );
+ assert_eq!(
+ U16Vec3::new(1, 2, 3),
+ DVec3::new(1.0, 2.0, 3.0).as_u16vec3()
+ );
+ assert_eq!(
IVec3::new(-1, -2, -3),
DVec3::new(-1.0, -2.0, -3.0).as_ivec3()
);
assert_eq!(UVec3::new(1, 2, 3), DVec3::new(1.0, 2.0, 3.0).as_uvec3());
assert_eq!(
+ I64Vec3::new(-1, -2, -3),
+ DVec3::new(-1.0, -2.0, -3.0).as_i64vec3()
+ );
+ assert_eq!(
+ U64Vec3::new(1, 2, 3),
+ DVec3::new(1.0, 2.0, 3.0).as_u64vec3()
+ );
+ assert_eq!(
Vec3::new(-1.0, -2.0, -3.0),
DVec3::new(-1.0, -2.0, -3.0).as_vec3()
);
@@ -1097,10 +1259,50 @@ mod vec3 {
assert_eq!(
DVec3::new(-1.0, -2.0, -3.0),
+ I16Vec3::new(-1, -2, -3).as_dvec3()
+ );
+ assert_eq!(U16Vec3::new(1, 2, 3), I16Vec3::new(1, 2, 3).as_u16vec3());
+ assert_eq!(IVec3::new(-1, -2, -3), I16Vec3::new(-1, -2, -3).as_ivec3());
+ assert_eq!(UVec3::new(1, 2, 3), I16Vec3::new(1, 2, 3).as_uvec3());
+ assert_eq!(
+ I64Vec3::new(-1, -2, -3),
+ I16Vec3::new(-1, -2, -3).as_i64vec3()
+ );
+ assert_eq!(U64Vec3::new(1, 2, 3), I16Vec3::new(1, 2, 3).as_u64vec3());
+ assert_eq!(
+ Vec3::new(-1.0, -2.0, -3.0),
+ I16Vec3::new(-1, -2, -3).as_vec3()
+ );
+ assert_eq!(
+ Vec3A::new(-1.0, -2.0, -3.0),
+ I16Vec3::new(-1, -2, -3).as_vec3a()
+ );
+
+ assert_eq!(DVec3::new(1.0, 2.0, 3.0), U16Vec3::new(1, 2, 3).as_dvec3());
+ assert_eq!(I16Vec3::new(1, 2, 3), U16Vec3::new(1, 2, 3).as_i16vec3());
+ assert_eq!(IVec3::new(1, 2, 3), U16Vec3::new(1, 2, 3).as_ivec3());
+ assert_eq!(UVec3::new(1, 2, 3), U16Vec3::new(1, 2, 3).as_uvec3());
+ assert_eq!(I64Vec3::new(1, 2, 3), U16Vec3::new(1, 2, 3).as_i64vec3());
+ assert_eq!(U64Vec3::new(1, 2, 3), U16Vec3::new(1, 2, 3).as_u64vec3());
+ assert_eq!(Vec3::new(1.0, 2.0, 3.0), U16Vec3::new(1, 2, 3).as_vec3());
+ assert_eq!(Vec3A::new(1.0, 2.0, 3.0), U16Vec3::new(1, 2, 3).as_vec3a());
+
+ assert_eq!(
+ DVec3::new(-1.0, -2.0, -3.0),
IVec3::new(-1, -2, -3).as_dvec3()
);
+ assert_eq!(
+ I16Vec3::new(-1, -2, -3),
+ IVec3::new(-1, -2, -3).as_i16vec3()
+ );
+ assert_eq!(U16Vec3::new(1, 2, 3), IVec3::new(1, 2, 3).as_u16vec3());
assert_eq!(UVec3::new(1, 2, 3), IVec3::new(1, 2, 3).as_uvec3());
assert_eq!(
+ I64Vec3::new(-1, -2, -3),
+ IVec3::new(-1, -2, -3).as_i64vec3()
+ );
+ assert_eq!(U64Vec3::new(1, 2, 3), IVec3::new(1, 2, 3).as_u64vec3());
+ assert_eq!(
Vec3::new(-1.0, -2.0, -3.0),
IVec3::new(-1, -2, -3).as_vec3()
);
@@ -1110,9 +1312,43 @@ mod vec3 {
);
assert_eq!(DVec3::new(1.0, 2.0, 3.0), UVec3::new(1, 2, 3).as_dvec3());
+ assert_eq!(I16Vec3::new(1, 2, 3), UVec3::new(1, 2, 3).as_i16vec3());
+ assert_eq!(U16Vec3::new(1, 2, 3), UVec3::new(1, 2, 3).as_u16vec3());
assert_eq!(IVec3::new(1, 2, 3), UVec3::new(1, 2, 3).as_ivec3());
+ assert_eq!(I64Vec3::new(1, 2, 3), UVec3::new(1, 2, 3).as_i64vec3());
+ assert_eq!(U64Vec3::new(1, 2, 3), UVec3::new(1, 2, 3).as_u64vec3());
assert_eq!(Vec3::new(1.0, 2.0, 3.0), UVec3::new(1, 2, 3).as_vec3());
assert_eq!(Vec3A::new(1.0, 2.0, 3.0), UVec3::new(1, 2, 3).as_vec3a());
+
+ assert_eq!(
+ DVec3::new(-1.0, -2.0, -3.0),
+ I64Vec3::new(-1, -2, -3).as_dvec3()
+ );
+ assert_eq!(U16Vec3::new(1, 2, 3), I64Vec3::new(1, 2, 3).as_u16vec3());
+ assert_eq!(
+ I16Vec3::new(-1, -2, -3),
+ I64Vec3::new(-1, -2, -3).as_i16vec3()
+ );
+ assert_eq!(UVec3::new(1, 2, 3), I64Vec3::new(1, 2, 3).as_uvec3());
+ assert_eq!(IVec3::new(-1, -2, -3), I64Vec3::new(-1, -2, -3).as_ivec3());
+ assert_eq!(U64Vec3::new(1, 2, 3), I64Vec3::new(1, 2, 3).as_u64vec3());
+ assert_eq!(
+ Vec3::new(-1.0, -2.0, -3.0),
+ I64Vec3::new(-1, -2, -3).as_vec3()
+ );
+ assert_eq!(
+ Vec3A::new(-1.0, -2.0, -3.0),
+ I64Vec3::new(-1, -2, -3).as_vec3a()
+ );
+
+ assert_eq!(DVec3::new(1.0, 2.0, 3.0), U64Vec3::new(1, 2, 3).as_dvec3());
+ assert_eq!(I16Vec3::new(1, 2, 3), U64Vec3::new(1, 2, 3).as_i16vec3());
+ assert_eq!(U16Vec3::new(1, 2, 3), U64Vec3::new(1, 2, 3).as_u16vec3());
+ assert_eq!(IVec3::new(1, 2, 3), U64Vec3::new(1, 2, 3).as_ivec3());
+ assert_eq!(UVec3::new(1, 2, 3), U64Vec3::new(1, 2, 3).as_uvec3());
+ assert_eq!(I64Vec3::new(1, 2, 3), U64Vec3::new(1, 2, 3).as_i64vec3());
+ assert_eq!(Vec3::new(1.0, 2.0, 3.0), U64Vec3::new(1, 2, 3).as_vec3());
+ assert_eq!(Vec3A::new(1.0, 2.0, 3.0), U64Vec3::new(1, 2, 3).as_vec3a());
});
impl_vec3_float_tests!(f32, vec3, Vec3, BVec3);
@@ -1189,7 +1425,7 @@ mod vec3a {
}
mod dvec3 {
- use glam::{dvec3, BVec3, DVec3};
+ use glam::{dvec3, BVec3, DVec3, IVec3, UVec3, Vec3};
glam_test!(test_align, {
use std::mem;
@@ -1199,11 +1435,262 @@ mod dvec3 {
assert_eq!(1, mem::align_of::<BVec3>());
});
+ glam_test!(test_try_from, {
+ assert_eq!(
+ DVec3::new(1.0, 2.0, 3.0),
+ DVec3::from(Vec3::new(1.0, 2.0, 3.0))
+ );
+ assert_eq!(DVec3::new(1.0, 2.0, 3.0), DVec3::from(IVec3::new(1, 2, 3)));
+ assert_eq!(DVec3::new(1.0, 2.0, 3.0), DVec3::from(UVec3::new(1, 2, 3)));
+ });
+
impl_vec3_float_tests!(f64, dvec3, DVec3, BVec3);
}
+mod i16vec3 {
+ use glam::{i16vec3, BVec3, I16Vec3, I64Vec3, IVec3, U16Vec3, U64Vec3, UVec3};
+
+ glam_test!(test_align, {
+ use std::mem;
+ assert_eq!(6, mem::size_of::<I16Vec3>());
+ assert_eq!(2, mem::align_of::<I16Vec3>());
+ });
+
+ glam_test!(test_try_from, {
+ assert_eq!(
+ I16Vec3::new(1, 2, 3),
+ I16Vec3::try_from(U16Vec3::new(1, 2, 3)).unwrap()
+ );
+ assert!(I16Vec3::try_from(U16Vec3::new(u16::MAX, 2, 3)).is_err());
+ assert!(I16Vec3::try_from(U16Vec3::new(1, u16::MAX, 3)).is_err());
+ assert!(I16Vec3::try_from(U16Vec3::new(1, 2, u16::MAX)).is_err());
+
+ assert_eq!(
+ I16Vec3::new(1, 2, 3),
+ I16Vec3::try_from(IVec3::new(1, 2, 3)).unwrap()
+ );
+ assert!(I16Vec3::try_from(IVec3::new(i32::MAX, 2, 3)).is_err());
+ assert!(I16Vec3::try_from(IVec3::new(1, i32::MAX, 3)).is_err());
+ assert!(I16Vec3::try_from(IVec3::new(1, 2, i32::MAX)).is_err());
+
+ assert_eq!(
+ I16Vec3::new(1, 2, 3),
+ I16Vec3::try_from(UVec3::new(1, 2, 3)).unwrap()
+ );
+ assert!(I16Vec3::try_from(UVec3::new(u32::MAX, 2, 3)).is_err());
+ assert!(I16Vec3::try_from(UVec3::new(1, u32::MAX, 3)).is_err());
+ assert!(I16Vec3::try_from(UVec3::new(1, 2, u32::MAX)).is_err());
+
+ assert_eq!(
+ I16Vec3::new(1, 2, 3),
+ I16Vec3::try_from(I64Vec3::new(1, 2, 3)).unwrap()
+ );
+ assert!(I16Vec3::try_from(I64Vec3::new(i64::MAX, 2, 3)).is_err());
+ assert!(I16Vec3::try_from(I64Vec3::new(1, i64::MAX, 3)).is_err());
+ assert!(I16Vec3::try_from(I64Vec3::new(1, 2, i64::MAX)).is_err());
+
+ assert_eq!(
+ I16Vec3::new(1, 2, 3),
+ I16Vec3::try_from(U64Vec3::new(1, 2, 3)).unwrap()
+ );
+ assert!(I16Vec3::try_from(U64Vec3::new(u64::MAX, 2, 3)).is_err());
+ assert!(I16Vec3::try_from(U64Vec3::new(1, u64::MAX, 3)).is_err());
+ assert!(I16Vec3::try_from(U64Vec3::new(1, 2, u64::MAX)).is_err());
+ });
+
+ glam_test!(test_wrapping_add, {
+ assert_eq!(
+ I16Vec3::new(i16::MAX, 5, i16::MIN).wrapping_add(I16Vec3::new(1, 3, i16::MAX)),
+ I16Vec3::new(i16::MIN, 8, -1),
+ );
+ });
+
+ glam_test!(test_wrapping_sub, {
+ assert_eq!(
+ I16Vec3::new(i16::MAX, 5, i16::MIN).wrapping_sub(I16Vec3::new(1, 3, i16::MAX)),
+ I16Vec3::new(32766, 2, 1),
+ );
+ });
+
+ glam_test!(test_wrapping_mul, {
+ assert_eq!(
+ I16Vec3::new(i16::MAX, 5, i16::MIN).wrapping_mul(I16Vec3::new(3, 3, 5)),
+ I16Vec3::new(32765, 15, -32768)
+ );
+ });
+
+ glam_test!(test_wrapping_div, {
+ assert_eq!(
+ I16Vec3::new(i16::MAX, 5, i16::MIN).wrapping_div(I16Vec3::new(3, 3, 5)),
+ I16Vec3::new(10922, 1, -6553)
+ );
+ });
+
+ glam_test!(test_saturating_add, {
+ assert_eq!(
+ I16Vec3::new(i16::MAX, i16::MIN, 0).saturating_add(I16Vec3::new(1, -1, 2)),
+ I16Vec3::new(i16::MAX, i16::MIN, 2)
+ );
+ });
+
+ glam_test!(test_saturating_sub, {
+ assert_eq!(
+ I16Vec3::new(i16::MIN, i16::MAX, 0).saturating_sub(I16Vec3::new(1, -1, 2)),
+ I16Vec3::new(i16::MIN, i16::MAX, -2)
+ );
+ });
+
+ glam_test!(test_saturating_mul, {
+ assert_eq!(
+ I16Vec3::new(i16::MAX, i16::MIN, 0).saturating_mul(I16Vec3::new(2, 2, 0)),
+ I16Vec3::new(i16::MAX, i16::MIN, 0)
+ );
+ });
+
+ glam_test!(test_saturating_div, {
+ assert_eq!(
+ I16Vec3::new(i16::MAX, i16::MIN, 0).saturating_div(I16Vec3::new(2, 2, 3)),
+ I16Vec3::new(16383, -16384, 0)
+ );
+ });
+
+ impl_vec3_signed_integer_tests!(i16, i16vec3, I16Vec3, BVec3);
+ impl_vec3_eq_hash_tests!(i16, i16vec3);
+
+ impl_vec3_scalar_shift_op_tests!(I16Vec3, -2, 2);
+ impl_vec3_shift_op_tests!(I16Vec3);
+
+ impl_vec3_scalar_bit_op_tests!(I16Vec3, -2, 2);
+ impl_vec3_bit_op_tests!(I16Vec3, -2, 2);
+}
+
+mod u16vec3 {
+ use glam::{u16vec3, BVec3, I16Vec3, I64Vec3, IVec3, U16Vec3, U64Vec3, UVec3};
+
+ glam_test!(test_align, {
+ use std::mem;
+ assert_eq!(6, mem::size_of::<U16Vec3>());
+ assert_eq!(2, mem::align_of::<U16Vec3>());
+ });
+
+ glam_test!(test_try_from, {
+ assert_eq!(
+ U16Vec3::new(1, 2, 3),
+ U16Vec3::try_from(I16Vec3::new(1, 2, 3)).unwrap()
+ );
+ assert!(U16Vec3::try_from(I16Vec3::new(-1, 2, 3)).is_err());
+ assert!(U16Vec3::try_from(I16Vec3::new(1, -2, 3)).is_err());
+ assert!(U16Vec3::try_from(I16Vec3::new(1, 2, -3)).is_err());
+
+ assert_eq!(
+ U16Vec3::new(1, 2, 3),
+ U16Vec3::try_from(IVec3::new(1, 2, 3)).unwrap()
+ );
+ assert!(U16Vec3::try_from(IVec3::new(-1, 2, 3)).is_err());
+ assert!(U16Vec3::try_from(IVec3::new(1, -2, 3)).is_err());
+ assert!(U16Vec3::try_from(IVec3::new(1, 2, -3)).is_err());
+
+ assert!(U16Vec3::try_from(IVec3::new(i32::MAX, 2, 3)).is_err());
+ assert!(U16Vec3::try_from(IVec3::new(1, i32::MAX, 3)).is_err());
+ assert!(U16Vec3::try_from(IVec3::new(1, 2, i32::MAX)).is_err());
+
+ assert_eq!(
+ U16Vec3::new(1, 2, 3),
+ U16Vec3::try_from(UVec3::new(1, 2, 3)).unwrap()
+ );
+ assert!(U16Vec3::try_from(UVec3::new(u32::MAX, 2, 3)).is_err());
+ assert!(U16Vec3::try_from(UVec3::new(1, u32::MAX, 3)).is_err());
+ assert!(U16Vec3::try_from(UVec3::new(1, 2, u32::MAX)).is_err());
+
+ assert_eq!(
+ U16Vec3::new(1, 2, 3),
+ U16Vec3::try_from(I64Vec3::new(1, 2, 3)).unwrap()
+ );
+ assert!(U16Vec3::try_from(I64Vec3::new(-1, 2, 3)).is_err());
+ assert!(U16Vec3::try_from(I64Vec3::new(1, -2, 3)).is_err());
+ assert!(U16Vec3::try_from(I64Vec3::new(1, 2, -3)).is_err());
+
+ assert!(U16Vec3::try_from(I64Vec3::new(i64::MAX, 2, 3)).is_err());
+ assert!(U16Vec3::try_from(I64Vec3::new(1, i64::MAX, 3)).is_err());
+ assert!(U16Vec3::try_from(I64Vec3::new(1, 2, i64::MAX)).is_err());
+
+ assert_eq!(
+ U16Vec3::new(1, 2, 3),
+ U16Vec3::try_from(U64Vec3::new(1, 2, 3)).unwrap()
+ );
+ assert!(U16Vec3::try_from(U64Vec3::new(u64::MAX, 2, 3)).is_err());
+ assert!(U16Vec3::try_from(U64Vec3::new(1, u64::MAX, 3)).is_err());
+ assert!(U16Vec3::try_from(U64Vec3::new(1, 2, u64::MAX)).is_err());
+ });
+
+ glam_test!(test_wrapping_add, {
+ assert_eq!(
+ U16Vec3::new(u16::MAX, 5, u16::MAX).wrapping_add(U16Vec3::new(1, 3, u16::MAX)),
+ U16Vec3::new(0, 8, 65534),
+ );
+ });
+
+ glam_test!(test_wrapping_sub, {
+ assert_eq!(
+ U16Vec3::new(u16::MAX, 5, u16::MAX - 1).wrapping_sub(U16Vec3::new(1, 3, u16::MAX)),
+ U16Vec3::new(65534, 2, 65535)
+ );
+ });
+
+ glam_test!(test_wrapping_mul, {
+ assert_eq!(
+ U16Vec3::new(u16::MAX, 5, u16::MAX).wrapping_mul(U16Vec3::new(3, 3, 5)),
+ U16Vec3::new(65533, 15, 65531)
+ );
+ });
+
+ glam_test!(test_wrapping_div, {
+ assert_eq!(
+ U16Vec3::new(u16::MAX, 5, u16::MAX).wrapping_div(U16Vec3::new(3, 3, 5)),
+ U16Vec3::new(21845, 1, 13107)
+ );
+ });
+
+ glam_test!(test_saturating_add, {
+ assert_eq!(
+ U16Vec3::new(u16::MAX, u16::MAX, 0).saturating_add(U16Vec3::new(1, u16::MAX, 2)),
+ U16Vec3::new(u16::MAX, u16::MAX, 2)
+ );
+ });
+
+ glam_test!(test_saturating_sub, {
+ assert_eq!(
+ U16Vec3::new(0, u16::MAX, 0).saturating_sub(U16Vec3::new(1, 1, 2)),
+ U16Vec3::new(0, 65534, 0)
+ );
+ });
+
+ glam_test!(test_saturating_mul, {
+ assert_eq!(
+ U16Vec3::new(u16::MAX, u16::MAX, 0).saturating_mul(U16Vec3::new(2, u16::MAX, 0)),
+ U16Vec3::new(u16::MAX, u16::MAX, 0)
+ );
+ });
+
+ glam_test!(test_saturating_div, {
+ assert_eq!(
+ U16Vec3::new(u16::MAX, u16::MAX, 0).saturating_div(U16Vec3::new(2, u16::MAX, 3)),
+ U16Vec3::new(32767, 1, 0)
+ );
+ });
+
+ impl_vec3_tests!(u16, u16vec3, U16Vec3, BVec3);
+ impl_vec3_eq_hash_tests!(u16, u16vec3);
+
+ impl_vec3_scalar_shift_op_tests!(U16Vec3, 0, 2);
+ impl_vec3_shift_op_tests!(U16Vec3);
+
+ impl_vec3_scalar_bit_op_tests!(U16Vec3, 0, 2);
+ impl_vec3_bit_op_tests!(U16Vec3, 0, 2);
+}
+
mod ivec3 {
- use glam::{ivec3, BVec3, IVec3, UVec3};
+ use glam::{ivec3, BVec3, I16Vec3, I64Vec3, IVec3, U16Vec3, U64Vec3, UVec3};
glam_test!(test_align, {
use std::mem;
@@ -1213,7 +1700,92 @@ mod ivec3 {
assert_eq!(1, mem::align_of::<BVec3>());
});
- impl_vec3_signed_tests!(i32, ivec3, IVec3, BVec3);
+ glam_test!(test_try_from, {
+ assert_eq!(IVec3::new(1, 2, 3), IVec3::from(U16Vec3::new(1, 2, 3)));
+ assert_eq!(IVec3::new(1, 2, 3), IVec3::from(I16Vec3::new(1, 2, 3)));
+
+ assert_eq!(
+ IVec3::new(1, 2, 3),
+ IVec3::try_from(UVec3::new(1, 2, 3)).unwrap()
+ );
+ assert!(IVec3::try_from(UVec3::new(u32::MAX, 2, 3)).is_err());
+ assert!(IVec3::try_from(UVec3::new(1, u32::MAX, 3)).is_err());
+ assert!(IVec3::try_from(UVec3::new(1, 2, u32::MAX)).is_err());
+
+ assert_eq!(
+ IVec3::new(1, 2, 3),
+ IVec3::try_from(I64Vec3::new(1, 2, 3)).unwrap()
+ );
+ assert!(IVec3::try_from(I64Vec3::new(i64::MAX, 2, 3)).is_err());
+ assert!(IVec3::try_from(I64Vec3::new(1, i64::MAX, 3)).is_err());
+ assert!(IVec3::try_from(I64Vec3::new(1, 2, i64::MAX)).is_err());
+
+ assert_eq!(
+ IVec3::new(1, 2, 3),
+ IVec3::try_from(U64Vec3::new(1, 2, 3)).unwrap()
+ );
+ assert!(IVec3::try_from(U64Vec3::new(u64::MAX, 2, 3)).is_err());
+ assert!(IVec3::try_from(U64Vec3::new(1, u64::MAX, 3)).is_err());
+ assert!(IVec3::try_from(U64Vec3::new(1, 2, u64::MAX)).is_err());
+ });
+
+ glam_test!(test_wrapping_add, {
+ assert_eq!(
+ IVec3::new(i32::MAX, 5, i32::MIN).wrapping_add(IVec3::new(1, 3, i32::MAX)),
+ IVec3::new(i32::MIN, 8, -1),
+ );
+ });
+
+ glam_test!(test_wrapping_sub, {
+ assert_eq!(
+ IVec3::new(i32::MAX, 5, i32::MIN).wrapping_sub(IVec3::new(1, 3, i32::MAX)),
+ IVec3::new(2147483646, 2, 1),
+ );
+ });
+
+ glam_test!(test_wrapping_mul, {
+ assert_eq!(
+ IVec3::new(i32::MAX, 5, i32::MIN).wrapping_mul(IVec3::new(3, 3, 5)),
+ IVec3::new(2147483645, 15, -2147483648)
+ );
+ });
+
+ glam_test!(test_wrapping_div, {
+ assert_eq!(
+ IVec3::new(i32::MAX, 5, i32::MIN).wrapping_div(IVec3::new(3, 3, 5)),
+ IVec3::new(715827882, 1, -429496729)
+ );
+ });
+
+ glam_test!(test_saturating_add, {
+ assert_eq!(
+ IVec3::new(i32::MAX, i32::MIN, 0).saturating_add(IVec3::new(1, -1, 2)),
+ IVec3::new(i32::MAX, i32::MIN, 2)
+ );
+ });
+
+ glam_test!(test_saturating_sub, {
+ assert_eq!(
+ IVec3::new(i32::MIN, i32::MAX, 0).saturating_sub(IVec3::new(1, -1, 2)),
+ IVec3::new(i32::MIN, i32::MAX, -2)
+ );
+ });
+
+ glam_test!(test_saturating_mul, {
+ assert_eq!(
+ IVec3::new(i32::MAX, i32::MIN, 0).saturating_mul(IVec3::new(2, 2, 0)),
+ IVec3::new(i32::MAX, i32::MIN, 0)
+ );
+ });
+
+ glam_test!(test_saturating_div, {
+ assert_eq!(
+ IVec3::new(i32::MAX, i32::MIN, 0).saturating_div(IVec3::new(2, 2, 3)),
+ IVec3::new(1073741823, -1073741824, 0)
+ );
+ });
+
+ impl_vec3_signed_integer_tests!(i32, ivec3, IVec3, BVec3);
impl_vec3_eq_hash_tests!(i32, ivec3);
impl_vec3_scalar_shift_op_tests!(IVec3, -2, 2);
@@ -1224,7 +1796,7 @@ mod ivec3 {
}
mod uvec3 {
- use glam::{uvec3, BVec3, IVec3, UVec3};
+ use glam::{uvec3, BVec3, I16Vec3, I64Vec3, IVec3, U16Vec3, U64Vec3, UVec3};
glam_test!(test_align, {
use std::mem;
@@ -1234,6 +1806,102 @@ mod uvec3 {
assert_eq!(1, mem::align_of::<BVec3>());
});
+ glam_test!(test_try_from, {
+ assert_eq!(
+ UVec3::new(1, 2, 3),
+ UVec3::try_from(I16Vec3::new(1, 2, 3)).unwrap()
+ );
+ assert!(UVec3::try_from(I16Vec3::new(-1, 2, 3)).is_err());
+ assert!(UVec3::try_from(I16Vec3::new(1, -2, 3)).is_err());
+ assert!(UVec3::try_from(I16Vec3::new(1, 2, -3)).is_err());
+
+ assert_eq!(UVec3::new(1, 2, 3), UVec3::from(U16Vec3::new(1, 2, 3)));
+
+ assert_eq!(
+ UVec3::new(1, 2, 3),
+ UVec3::try_from(IVec3::new(1, 2, 3)).unwrap()
+ );
+ assert!(UVec3::try_from(IVec3::new(-1, 2, 3)).is_err());
+ assert!(UVec3::try_from(IVec3::new(1, -2, 3)).is_err());
+ assert!(UVec3::try_from(IVec3::new(1, 2, -3)).is_err());
+
+ assert_eq!(
+ UVec3::new(1, 2, 3),
+ UVec3::try_from(I64Vec3::new(1, 2, 3)).unwrap()
+ );
+ assert!(UVec3::try_from(I64Vec3::new(-1, 2, 3)).is_err());
+ assert!(UVec3::try_from(I64Vec3::new(1, -2, 3)).is_err());
+ assert!(UVec3::try_from(I64Vec3::new(1, 2, -3)).is_err());
+
+ assert!(UVec3::try_from(I64Vec3::new(i64::MAX, 2, 3)).is_err());
+ assert!(UVec3::try_from(I64Vec3::new(1, i64::MAX, 3)).is_err());
+ assert!(UVec3::try_from(I64Vec3::new(1, 2, i64::MAX)).is_err());
+
+ assert_eq!(
+ UVec3::new(1, 2, 3),
+ UVec3::try_from(U64Vec3::new(1, 2, 3)).unwrap()
+ );
+ assert!(UVec3::try_from(U64Vec3::new(u64::MAX, 2, 3)).is_err());
+ assert!(UVec3::try_from(U64Vec3::new(1, u64::MAX, 3)).is_err());
+ assert!(UVec3::try_from(U64Vec3::new(1, 2, u64::MAX)).is_err());
+ });
+
+ glam_test!(test_wrapping_add, {
+ assert_eq!(
+ UVec3::new(u32::MAX, 5, u32::MAX).wrapping_add(UVec3::new(1, 3, u32::MAX)),
+ UVec3::new(0, 8, 4294967294),
+ );
+ });
+
+ glam_test!(test_wrapping_sub, {
+ assert_eq!(
+ UVec3::new(u32::MAX, 5, u32::MAX - 1).wrapping_sub(UVec3::new(1, 3, u32::MAX)),
+ UVec3::new(4294967294, 2, 4294967295)
+ );
+ });
+
+ glam_test!(test_wrapping_mul, {
+ assert_eq!(
+ UVec3::new(u32::MAX, 5, u32::MAX).wrapping_mul(UVec3::new(3, 3, 5)),
+ UVec3::new(4294967293, 15, 4294967291)
+ );
+ });
+
+ glam_test!(test_wrapping_div, {
+ assert_eq!(
+ UVec3::new(u32::MAX, 5, u32::MAX).wrapping_div(UVec3::new(3, 3, 5)),
+ UVec3::new(1431655765, 1, 858993459)
+ );
+ });
+
+ glam_test!(test_saturating_add, {
+ assert_eq!(
+ UVec3::new(u32::MAX, u32::MAX, 0).saturating_add(UVec3::new(1, u32::MAX, 2)),
+ UVec3::new(u32::MAX, u32::MAX, 2)
+ );
+ });
+
+ glam_test!(test_saturating_sub, {
+ assert_eq!(
+ UVec3::new(0, u32::MAX, 0).saturating_sub(UVec3::new(1, 1, 2)),
+ UVec3::new(0, 4294967294, 0)
+ );
+ });
+
+ glam_test!(test_saturating_mul, {
+ assert_eq!(
+ UVec3::new(u32::MAX, u32::MAX, 0).saturating_mul(UVec3::new(2, u32::MAX, 0)),
+ UVec3::new(u32::MAX, u32::MAX, 0)
+ );
+ });
+
+ glam_test!(test_saturating_div, {
+ assert_eq!(
+ UVec3::new(u32::MAX, u32::MAX, 0).saturating_div(UVec3::new(2, u32::MAX, 3)),
+ UVec3::new(2147483647, 1, 0)
+ );
+ });
+
impl_vec3_tests!(u32, uvec3, UVec3, BVec3);
impl_vec3_eq_hash_tests!(u32, uvec3);
@@ -1243,3 +1911,90 @@ mod uvec3 {
impl_vec3_scalar_bit_op_tests!(UVec3, 0, 2);
impl_vec3_bit_op_tests!(UVec3, 0, 2);
}
+
+mod i64vec3 {
+ use glam::{i64vec3, BVec3, I16Vec3, I64Vec3, IVec3, U16Vec3, U64Vec3, UVec3};
+
+ glam_test!(test_align, {
+ use std::mem;
+ assert_eq!(24, mem::size_of::<I64Vec3>());
+ assert_eq!(8, mem::align_of::<I64Vec3>());
+ assert_eq!(3, mem::size_of::<BVec3>());
+ assert_eq!(1, mem::align_of::<BVec3>());
+ });
+
+ glam_test!(test_try_from, {
+ assert_eq!(I64Vec3::new(1, 2, 3), I64Vec3::from(I16Vec3::new(1, 2, 3)));
+ assert_eq!(I64Vec3::new(1, 2, 3), I64Vec3::from(U16Vec3::new(1, 2, 3)));
+ assert_eq!(I64Vec3::new(1, 2, 3), I64Vec3::from(IVec3::new(1, 2, 3)));
+ assert_eq!(I64Vec3::new(1, 2, 3), I64Vec3::from(UVec3::new(1, 2, 3)));
+
+ assert_eq!(
+ I64Vec3::new(1, 2, 3),
+ I64Vec3::try_from(U64Vec3::new(1, 2, 3)).unwrap()
+ );
+ assert!(I64Vec3::try_from(U64Vec3::new(u64::MAX, 2, 3)).is_err());
+ assert!(I64Vec3::try_from(U64Vec3::new(1, u64::MAX, 3)).is_err());
+ assert!(I64Vec3::try_from(U64Vec3::new(1, 2, u64::MAX)).is_err());
+ });
+
+ impl_vec3_signed_integer_tests!(i64, i64vec3, I64Vec3, BVec3);
+ impl_vec3_eq_hash_tests!(i64, i64vec3);
+
+ impl_vec3_scalar_shift_op_tests!(I64Vec3, -2, 2);
+ impl_vec3_shift_op_tests!(I64Vec3);
+
+ impl_vec3_scalar_bit_op_tests!(I64Vec3, -2, 2);
+ impl_vec3_bit_op_tests!(I64Vec3, -2, 2);
+}
+
+mod u64vec3 {
+ use glam::{u64vec3, BVec3, I16Vec3, I64Vec3, IVec3, U16Vec3, U64Vec3, UVec3};
+
+ glam_test!(test_align, {
+ use std::mem;
+ assert_eq!(24, mem::size_of::<U64Vec3>());
+ assert_eq!(8, mem::align_of::<U64Vec3>());
+ assert_eq!(3, mem::size_of::<BVec3>());
+ assert_eq!(1, mem::align_of::<BVec3>());
+ });
+
+ glam_test!(test_try_from, {
+ assert_eq!(
+ U64Vec3::new(1, 2, 3),
+ U64Vec3::try_from(I16Vec3::new(1, 2, 3)).unwrap()
+ );
+ assert!(U64Vec3::try_from(I16Vec3::new(-1, 2, 3)).is_err());
+ assert!(U64Vec3::try_from(I16Vec3::new(1, -2, 3)).is_err());
+ assert!(U64Vec3::try_from(I16Vec3::new(1, 2, -3)).is_err());
+
+ assert_eq!(U64Vec3::new(1, 2, 3), U64Vec3::from(U16Vec3::new(1, 2, 3)));
+
+ assert_eq!(
+ U64Vec3::new(1, 2, 3),
+ U64Vec3::try_from(IVec3::new(1, 2, 3)).unwrap()
+ );
+ assert!(U64Vec3::try_from(IVec3::new(-1, 2, 3)).is_err());
+ assert!(U64Vec3::try_from(IVec3::new(1, -2, 3)).is_err());
+ assert!(U64Vec3::try_from(IVec3::new(1, 2, -3)).is_err());
+
+ assert_eq!(U64Vec3::new(1, 2, 3), U64Vec3::from(UVec3::new(1, 2, 3)));
+
+ assert_eq!(
+ U64Vec3::new(1, 2, 3),
+ U64Vec3::try_from(I64Vec3::new(1, 2, 3)).unwrap()
+ );
+ assert!(U64Vec3::try_from(I64Vec3::new(-1, 2, 3)).is_err());
+ assert!(U64Vec3::try_from(I64Vec3::new(1, -2, 3)).is_err());
+ assert!(U64Vec3::try_from(I64Vec3::new(1, 2, -3)).is_err());
+ });
+
+ impl_vec3_tests!(u64, u64vec3, U64Vec3, BVec3);
+ impl_vec3_eq_hash_tests!(u64, u64vec3);
+
+ impl_vec3_scalar_shift_op_tests!(U64Vec3, 0, 2);
+ impl_vec3_shift_op_tests!(U64Vec3);
+
+ impl_vec3_scalar_bit_op_tests!(U64Vec3, 0, 2);
+ impl_vec3_bit_op_tests!(U64Vec3, 0, 2);
+}