From 2a298c5f161c71d5e78f5ef78ad0c6df09b52273 Mon Sep 17 00:00:00 2001 From: Manan Karnik Date: Fri, 12 Apr 2024 00:34:21 +0530 Subject: [PATCH] test: add unit tests for noise module --- src/lib.rs | 2 ++ src/map.rs | 2 +- src/noise.rs | 14 ++++---- src/planet.rs | 2 +- src/terrain.rs | 2 +- src/tests.rs | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 99 insertions(+), 10 deletions(-) create mode 100644 src/tests.rs diff --git a/src/lib.rs b/src/lib.rs index 1322dbb..1fb391a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -27,3 +27,5 @@ pub mod noise; pub mod planet; /// Terrain generation pub mod terrain; + +mod tests; diff --git a/src/map.rs b/src/map.rs index c09e155..34ea79e 100644 --- a/src/map.rs +++ b/src/map.rs @@ -1,7 +1,7 @@ //! Generate map //! # Example //! For configuration, see [`Map`](struct.Map.html) -//! ``` +//! ```no_run //! use bevy::prelude::*; //! use bevy_generative::map::{MapBundle, MapPlugin}; //! diff --git a/src/noise.rs b/src/noise.rs index 87aad49..257bd40 100644 --- a/src/noise.rs +++ b/src/noise.rs @@ -268,7 +268,7 @@ pub(crate) fn generate_noise_map(noise: &Noise) -> Vec> { ) } -fn generate_noise(size: [u32; 2], seed: u32, scale: f64, offset: [f64; 2]) -> Vec> +pub(crate) fn generate_noise(size: [u32; 2], seed: u32, scale: f64, offset: [f64; 2]) -> Vec> where T: Default + Seedable + NoiseFn, { @@ -277,7 +277,7 @@ where generate_noise_vector(noise, size, scale, offset) } -fn generate_fractal_noise( +pub(crate) fn generate_fractal_noise( size: [u32; 2], seed: u32, scale: f64, @@ -296,7 +296,7 @@ where generate_noise_vector(noise, size, scale, offset) } -fn generate_noise_vector( +pub(crate) fn generate_noise_vector( noise: impl NoiseFn, size: [u32; 2], scale: f64, @@ -304,9 +304,9 @@ fn generate_noise_vector( ) -> Vec> { let mut noise_vector: Vec> = Vec::with_capacity(size[0] as usize); let noise = noise::Clamp::new(noise).set_bounds(-1.0, 1.0); - for i in 0..=size[0] { + for i in 0..size[0] { let mut row: Vec = Vec::with_capacity(size[1] as usize); - for j in 0..=size[1] { + for j in 0..size[1] { let x = f64::from(i as i32 - (size[0] / 2) as i32) / scale + offset[0]; let y = f64::from(j as i32 - (size[1] / 2) as i32) / scale + offset[1]; let value = (noise.get([x, y]) + 1.0) / 2.0 * 100.0; @@ -395,7 +395,7 @@ pub(crate) fn get_noise_at_point_3d( ) } -fn fractal_noise_at_point_3d( +pub(crate) fn fractal_noise_at_point_3d( point: [f64; 3], seed: u32, scale: f64, @@ -418,7 +418,7 @@ where noise.get([x, y, z]) } -fn noise_at_point_3d(point: [f64; 3], seed: u32, scale: f64, offset: [f64; 3]) -> f64 +pub(crate) fn noise_at_point_3d(point: [f64; 3], seed: u32, scale: f64, offset: [f64; 3]) -> f64 where T: Default + Seedable + NoiseFn, { diff --git a/src/planet.rs b/src/planet.rs index 9e3a6e0..954d5f1 100644 --- a/src/planet.rs +++ b/src/planet.rs @@ -1,7 +1,7 @@ //! Generate planet //! # Example //! For configuration, see [`Planet`](struct.Planet.html) -//! ``` +//! ```no_run //! use bevy::prelude::*; //! use bevy_generative::planet::{PlanetBundle, PlanetPlugin}; //! diff --git a/src/terrain.rs b/src/terrain.rs index 658d235..53d7f8e 100644 --- a/src/terrain.rs +++ b/src/terrain.rs @@ -1,7 +1,7 @@ //! Generate terrain //! # Example //! For configuration, see [`Terrain`](struct.Terrain.html) -//! ``` +//! ```no_run //! use bevy::prelude::*; //! use bevy_generative::terrain::{TerrainBundle, TerrainPlugin}; //! diff --git a/src/tests.rs b/src/tests.rs new file mode 100644 index 0000000..6b49d53 --- /dev/null +++ b/src/tests.rs @@ -0,0 +1,87 @@ +#[cfg(test)] +mod tests { + use crate::noise::*; + + #[test] + fn test_generate_noise_map() { + let noise = Noise { + size: [100, 100], + seed: 123, + scale: 0.1, + offset: [0.0, 0.0], + method: Method::Perlin, + function: Function::default(), + regions: vec![], + gradient: Gradient::default(), + base_color: [255, 255, 255, 255], + }; + let noise_map = generate_noise_map(&noise); + assert_eq!(noise_map.len(), 100); + assert_eq!(noise_map[0].len(), 100); + } + + #[test] + fn test_generate_noise() { + let noise_map = generate_noise::([100, 100], 123, 0.1, [0.0, 0.0]); + assert_eq!(noise_map.len(), 100); + assert_eq!(noise_map[0].len(), 100); + } + + #[test] + fn test_generate_fractal_noise() { + let function = Function::default(); + let noise_map = generate_fractal_noise::>( + [100, 100], + 123, + 0.1, + [0.0, 0.0], + &function, + ); + assert_eq!(noise_map.len(), 100); + assert_eq!(noise_map[0].len(), 100); + } + + #[test] + fn test_generate_noise_vector() { + let noise_fn = noise::Perlin::new(0); + let noise_map = generate_noise_vector(noise_fn, [100, 100], 0.1, [0.0, 0.0]); + assert_eq!(noise_map.len(), 100); + assert_eq!(noise_map[0].len(), 100); + } + + #[test] + fn test_get_noise_at_point_3d() { + let noise_value = get_noise_at_point_3d( + [1.0, 2.0, 3.0], + 123, + 0.1, + [0.0, 0.0, 0.0], + &Method::Perlin, + &Function::default(), + ); + assert!(noise_value >= -1.0 && noise_value <= 1.0); + } + + #[test] + fn test_fractal_noise_at_point_3d() { + let noise_value = fractal_noise_at_point_3d::>( + [1.0, 2.0, 3.0], + 123, + 0.1, + [0.0, 0.0, 0.0], + &Function::default(), + ); + assert!(noise_value >= -1.0 && noise_value <= 1.0); + } + + #[test] + fn test_noise_at_point_3d() { + let noise_value = noise_at_point_3d::( + [1.0, 2.0, 3.0], + 123, + 0.1, + [0.0, 0.0, 0.0], + ); + assert!(noise_value >= -1.0 && noise_value <= 1.0); + } +}