1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
use crate::FromVariant; use crate::ToVariant; use crate::Variant; use crate::Vector3; impl ToVariant for Vector3 { fn to_variant(&self) -> Variant { Variant::from_vector3(self) } } impl FromVariant for Vector3 { fn from_variant(variant: &Variant) -> Option<Self> { variant.try_to_vector3() } } godot_test!( test_vector3_variants { fn test(vector: Vector3, set_to: Vector3) { let api = crate::get_api(); let copied = vector; unsafe { assert_eq!(vector.x, (api.godot_vector3_get_axis)( &copied as *const _ as *const sys::godot_vector3, crate::Vector3Axis::X as u32 as sys::godot_vector3_axis )); assert_eq!(vector.y, (api.godot_vector3_get_axis)( &copied as *const _ as *const sys::godot_vector3, crate::Vector3Axis::Y as u32 as sys::godot_vector3_axis )); assert_eq!(vector.z, (api.godot_vector3_get_axis)( &copied as *const _ as *const sys::godot_vector3, crate::Vector3Axis::Z as u32 as sys::godot_vector3_axis )); } assert_eq!(vector, copied); let mut copied = vector; unsafe { (api.godot_vector3_set_axis)( &mut copied as *mut _ as *mut sys::godot_vector3, crate::Vector3Axis::X as u32 as sys::godot_vector3_axis, set_to.x ); (api.godot_vector3_set_axis)( &mut copied as *mut _ as *mut sys::godot_vector3, crate::Vector3Axis::Y as u32 as sys::godot_vector3_axis, set_to.y ); (api.godot_vector3_set_axis)( &mut copied as *mut _ as *mut sys::godot_vector3, crate::Vector3Axis::Z as u32 as sys::godot_vector3_axis, set_to.z ); } assert_eq!(set_to, copied); let variant = vector.to_variant(); let vector_from_variant = Vector3::from_variant(&variant).unwrap(); assert_eq!(vector, vector_from_variant); } test(Vector3::new(1.0, 2.0, 3.0), Vector3::new(4.0, 5.0, 6.0)); test(Vector3::new(4.0, 5.0, 6.0), Vector3::new(7.0, 8.0, 9.0)); } ); #[cfg(test)] mod tests { use super::Vector3; #[test] fn it_is_copy() { fn copy<T: Copy>() {} copy::<Vector3>(); } #[test] fn it_has_the_same_size() { use std::mem::size_of; assert_eq!(size_of::<sys::godot_vector3>(), size_of::<Vector3>()); } #[test] fn it_supports_equality() { assert_eq!(Vector3::new(1.0, 2.0, 3.0), Vector3::new(1.0, 2.0, 3.0)); } #[test] fn it_supports_inequality() { assert_ne!(Vector3::new(1.0, 10.0, 100.0), Vector3::new(1.0, 2.0, 3.0)); } }