Document RegularPolygon (#11017)
By writing a test. For changes like https://github.com/bevyengine/bevy/pull/10928, it is useful to observe possible behavior change not only by running examples.
This commit is contained in:
		
							parent
							
								
									069a8776f5
								
							
						
					
					
						commit
						3a2e00a7d3
					
				| @ -111,3 +111,64 @@ impl From<Circle> for Mesh { | |||||||
|         Mesh::from(RegularPolygon::from(circle)) |         Mesh::from(RegularPolygon::from(circle)) | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | #[cfg(test)] | ||||||
|  | mod tests { | ||||||
|  |     use crate::mesh::shape::RegularPolygon; | ||||||
|  |     use crate::mesh::{Mesh, VertexAttributeValues}; | ||||||
|  | 
 | ||||||
|  |     /// Sin/cos and multiplication computations result in numbers like 0.4999999.
 | ||||||
|  |     /// Round these to numbers we expect like 0.5.
 | ||||||
|  |     fn fix_floats<const N: usize>(points: &mut [[f32; N]]) { | ||||||
|  |         for point in points.iter_mut() { | ||||||
|  |             for coord in point.iter_mut() { | ||||||
|  |                 let round = (*coord * 2.).round() / 2.; | ||||||
|  |                 if (*coord - round).abs() < 0.00001 { | ||||||
|  |                     *coord = round; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     #[test] | ||||||
|  |     fn test_regular_polygon() { | ||||||
|  |         let mut mesh = Mesh::from(RegularPolygon { | ||||||
|  |             radius: 7., | ||||||
|  |             sides: 4, | ||||||
|  |         }); | ||||||
|  | 
 | ||||||
|  |         let Some(VertexAttributeValues::Float32x3(mut positions)) = | ||||||
|  |             mesh.remove_attribute(Mesh::ATTRIBUTE_POSITION) | ||||||
|  |         else { | ||||||
|  |             panic!("Expected positions f32x3"); | ||||||
|  |         }; | ||||||
|  |         let Some(VertexAttributeValues::Float32x2(mut uvs)) = | ||||||
|  |             mesh.remove_attribute(Mesh::ATTRIBUTE_UV_0) | ||||||
|  |         else { | ||||||
|  |             panic!("Expected uvs f32x2"); | ||||||
|  |         }; | ||||||
|  |         let Some(VertexAttributeValues::Float32x3(normals)) = | ||||||
|  |             mesh.remove_attribute(Mesh::ATTRIBUTE_NORMAL) | ||||||
|  |         else { | ||||||
|  |             panic!("Expected normals f32x3"); | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         fix_floats(&mut positions); | ||||||
|  |         fix_floats(&mut uvs); | ||||||
|  | 
 | ||||||
|  |         assert_eq!( | ||||||
|  |             [ | ||||||
|  |                 [0.0, 7.0, 0.0], | ||||||
|  |                 [7.0, 0.0, 0.0], | ||||||
|  |                 [0.0, -7.0, 0.0], | ||||||
|  |                 [-7.0, 0.0, 0.0], | ||||||
|  |             ], | ||||||
|  |             &positions[..] | ||||||
|  |         ); | ||||||
|  | 
 | ||||||
|  |         // Note V coordinate increases in the opposite direction to the Y coordinate.
 | ||||||
|  |         assert_eq!([[0.5, 0.0], [1.0, 0.5], [0.5, 1.0], [0.0, 0.5]], &uvs[..]); | ||||||
|  | 
 | ||||||
|  |         assert_eq!(&[[0.0, 0.0, 1.0]; 4], &normals[..]); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Stepan Koltsov
						Stepan Koltsov