forked from Maxluli/RustyPropagation
remove casts and correct 0 limit situation on roll()
This commit is contained in:
+5
-5
@@ -5,14 +5,14 @@
|
|||||||
|
|
||||||
// #[derive(Debug)]
|
// #[derive(Debug)]
|
||||||
pub struct Disease {
|
pub struct Disease {
|
||||||
pub infection_rate: u32,
|
pub infection_rate: i32,
|
||||||
pub curing_rate: u32,
|
pub curing_rate: i32,
|
||||||
pub death_rate: u32,
|
pub death_rate: i32,
|
||||||
pub traits: Vec<u32>,
|
pub traits: Vec<i32>,
|
||||||
pub name: String,
|
pub name: String,
|
||||||
}
|
}
|
||||||
impl Disease {
|
impl Disease {
|
||||||
pub fn new(infection_r: u32, curing_r: u32, death_r: u32, the_name: String) -> Self {
|
pub fn new(infection_r: i32, curing_r: i32, death_r: i32, the_name: String) -> Self {
|
||||||
Self {
|
Self {
|
||||||
infection_rate: infection_r,
|
infection_rate: infection_r,
|
||||||
curing_rate: curing_r,
|
curing_rate: curing_r,
|
||||||
|
|||||||
+56
-50
@@ -6,29 +6,10 @@ pub struct Point {
|
|||||||
y: i32,
|
y: i32,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
struct Stats {
|
|
||||||
normal: i32,
|
|
||||||
infected: i32,
|
|
||||||
immune: i32,
|
|
||||||
dead: i32,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Stats {
|
|
||||||
fn new() -> Stats {
|
|
||||||
Stats {
|
|
||||||
normal: 0,
|
|
||||||
infected: 0,
|
|
||||||
immune: 0,
|
|
||||||
dead: 0,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub struct Population {
|
pub struct Population {
|
||||||
pub start_infected_ratio: u32,
|
pub start_infected_ratio: i32,
|
||||||
pub start_immune_ratio: u32,
|
pub start_immune_ratio: i32,
|
||||||
pub start_dead_ratio: u32,
|
pub start_dead_ratio: i32,
|
||||||
pub humans: Vec<Human>,
|
pub humans: Vec<Human>,
|
||||||
pub width: i32,
|
pub width: i32,
|
||||||
pub height: i32,
|
pub height: i32,
|
||||||
@@ -40,32 +21,12 @@ pub fn human_idx(x: i32, y: i32, width: i32) -> usize {
|
|||||||
((y * width) + x) as usize
|
((y * width) + x) as usize
|
||||||
}
|
}
|
||||||
|
|
||||||
fn humans_stats(humans: &Vec<Human>) -> Stats {
|
|
||||||
let mut stats: Stats = Stats::new();
|
|
||||||
for human in humans.iter() {
|
|
||||||
match human.present_state {
|
|
||||||
State::Normal => {
|
|
||||||
stats.normal += 1;
|
|
||||||
}
|
|
||||||
State::Infected => {
|
|
||||||
stats.infected += 1;
|
|
||||||
}
|
|
||||||
State::Immune => {
|
|
||||||
stats.immune += 1;
|
|
||||||
}
|
|
||||||
State::Dead => {
|
|
||||||
stats.dead += 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stats
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Population {
|
impl Population {
|
||||||
pub fn new(
|
pub fn new(
|
||||||
start_infected_ratio: u32,
|
start_infected_ratio: i32,
|
||||||
start_immune_ratio: u32,
|
start_immune_ratio: i32,
|
||||||
start_dead_ratio: u32,
|
start_dead_ratio: i32,
|
||||||
width: i32,
|
width: i32,
|
||||||
height: i32,
|
height: i32,
|
||||||
plague: Disease,
|
plague: Disease,
|
||||||
@@ -313,9 +274,13 @@ impl Population {
|
|||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn roll(probability: u32) -> bool {
|
pub fn roll(probability: i32) -> bool {
|
||||||
|
if probability > 0 {
|
||||||
let mut rng = rand::thread_rng();
|
let mut rng = rand::thread_rng();
|
||||||
rng.gen_range(0..CORRECTED_PERCENTAGE) <= probability as i32
|
rng.gen_range(0..CORRECTED_PERCENTAGE) <= probability
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
@@ -323,6 +288,46 @@ mod tests {
|
|||||||
use super::*;
|
use super::*;
|
||||||
use parameterized::parameterized;
|
use parameterized::parameterized;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct Stats {
|
||||||
|
normal: i32,
|
||||||
|
infected: i32,
|
||||||
|
immune: i32,
|
||||||
|
dead: i32,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Stats {
|
||||||
|
fn new() -> Stats {
|
||||||
|
Stats {
|
||||||
|
normal: 0,
|
||||||
|
infected: 0,
|
||||||
|
immune: 0,
|
||||||
|
dead: 0,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn humans_stats(humans: &Vec<Human>) -> Stats {
|
||||||
|
let mut stats: Stats = Stats::new();
|
||||||
|
for human in humans.iter() {
|
||||||
|
match human.present_state {
|
||||||
|
State::Normal => {
|
||||||
|
stats.normal += 1;
|
||||||
|
}
|
||||||
|
State::Infected => {
|
||||||
|
stats.infected += 1;
|
||||||
|
}
|
||||||
|
State::Immune => {
|
||||||
|
stats.immune += 1;
|
||||||
|
}
|
||||||
|
State::Dead => {
|
||||||
|
stats.dead += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stats
|
||||||
|
}
|
||||||
|
|
||||||
#[parameterized(x = {
|
#[parameterized(x = {
|
||||||
2, 3, 5
|
2, 3, 5
|
||||||
}, y = {
|
}, y = {
|
||||||
@@ -429,9 +434,10 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[parameterized(rate = {0, 100}, expected = {false, true})]
|
#[parameterized(rate = {0, 100}, expected = {false, true})]
|
||||||
fn roll_test(rate: u32, expected: bool) {
|
fn roll_test(rate: i32, expected: bool) {
|
||||||
let tries = 1000;
|
let tries = 1000;
|
||||||
let mut result = 0;
|
let mut result = 0;
|
||||||
|
println!("Testing roll, rate {}, expected {}", rate, expected);
|
||||||
for _x in 0..1000 {
|
for _x in 0..1000 {
|
||||||
if roll(rate) == expected {
|
if roll(rate) == expected {
|
||||||
result += 1;
|
result += 1;
|
||||||
@@ -442,8 +448,8 @@ mod tests {
|
|||||||
|
|
||||||
#[parameterized(infection_rate = {0, 100, 0}, death_rate = {0, 0, 100}, infected_expected = {0, 1, 1})]
|
#[parameterized(infection_rate = {0, 100, 0}, death_rate = {0, 0, 100}, infected_expected = {0, 1, 1})]
|
||||||
fn propage_test(
|
fn propage_test(
|
||||||
infection_rate: u32,
|
infection_rate: i32,
|
||||||
death_rate: u32,
|
death_rate: i32,
|
||||||
infected_expected: i32,
|
infected_expected: i32,
|
||||||
) {
|
) {
|
||||||
let disease: Disease;
|
let disease: Disease;
|
||||||
|
|||||||
Reference in New Issue
Block a user