Skip to content

Commit

Permalink
test: add unit tests for noise module
Browse files Browse the repository at this point in the history
  • Loading branch information
manankarnik committed Apr 11, 2024
1 parent b64de73 commit 2a298c5
Show file tree
Hide file tree
Showing 6 changed files with 99 additions and 10 deletions.
2 changes: 2 additions & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,5 @@ pub mod noise;
pub mod planet;
/// Terrain generation
pub mod terrain;

mod tests;
2 changes: 1 addition & 1 deletion src/map.rs
Original file line number Diff line number Diff line change
@@ -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};
//!
Expand Down
14 changes: 7 additions & 7 deletions src/noise.rs
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ pub(crate) fn generate_noise_map(noise: &Noise) -> Vec<Vec<f64>> {
)
}

fn generate_noise<T>(size: [u32; 2], seed: u32, scale: f64, offset: [f64; 2]) -> Vec<Vec<f64>>
pub(crate) fn generate_noise<T>(size: [u32; 2], seed: u32, scale: f64, offset: [f64; 2]) -> Vec<Vec<f64>>
where
T: Default + Seedable + NoiseFn<f64, 2>,
{
Expand All @@ -277,7 +277,7 @@ where
generate_noise_vector(noise, size, scale, offset)
}

fn generate_fractal_noise<T>(
pub(crate) fn generate_fractal_noise<T>(
size: [u32; 2],
seed: u32,
scale: f64,
Expand All @@ -296,17 +296,17 @@ where
generate_noise_vector(noise, size, scale, offset)
}

fn generate_noise_vector(
pub(crate) fn generate_noise_vector(
noise: impl NoiseFn<f64, 2>,
size: [u32; 2],
scale: f64,
offset: [f64; 2],
) -> Vec<Vec<f64>> {
let mut noise_vector: Vec<Vec<f64>> = 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<f64> = 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;
Expand Down Expand Up @@ -395,7 +395,7 @@ pub(crate) fn get_noise_at_point_3d(
)
}

fn fractal_noise_at_point_3d<T>(
pub(crate) fn fractal_noise_at_point_3d<T>(
point: [f64; 3],
seed: u32,
scale: f64,
Expand All @@ -418,7 +418,7 @@ where
noise.get([x, y, z])
}

fn noise_at_point_3d<T>(point: [f64; 3], seed: u32, scale: f64, offset: [f64; 3]) -> f64
pub(crate) fn noise_at_point_3d<T>(point: [f64; 3], seed: u32, scale: f64, offset: [f64; 3]) -> f64
where
T: Default + Seedable + NoiseFn<f64, 3>,
{
Expand Down
2 changes: 1 addition & 1 deletion src/planet.rs
Original file line number Diff line number Diff line change
@@ -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};
//!
Expand Down
2 changes: 1 addition & 1 deletion src/terrain.rs
Original file line number Diff line number Diff line change
@@ -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};
//!
Expand Down
87 changes: 87 additions & 0 deletions src/tests.rs
Original file line number Diff line number Diff line change
@@ -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::<noise::Perlin>([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::<noise::Fbm<noise::Perlin>>(
[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::<noise::Fbm<noise::Perlin>>(
[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::<noise::Perlin>(
[1.0, 2.0, 3.0],
123,
0.1,
[0.0, 0.0, 0.0],
);
assert!(noise_value >= -1.0 && noise_value <= 1.0);
}
}

0 comments on commit 2a298c5

Please sign in to comment.