#![feature(use_extern_macros)]
pub mod types;
pub mod consts;
pub mod fresnel;
use types::*;
use consts::*;
pub fn free_space_path_loss(freq: Frequency, dist: Distance) -> Attenuation {
let fading = 20.0 * (4.0 * PI * dist.0 * freq.0 / C).log10();
return Attenuation(fading);
}
#[cfg(test)]
mod tests {
extern crate assert_approx_eq;
use super::*;
#[test]
fn fspl() {
let mut path_loss: Attenuation;
path_loss = free_space_path_loss(ghz(2.4), m(1e0));
assert_approx_eq::assert_approx_eq!(40.05, path_loss.0, 0.01);
path_loss = free_space_path_loss(ghz(2.4), m(1e3));
assert_approx_eq::assert_approx_eq!(100.05, path_loss.0, 0.01);
path_loss = free_space_path_loss(ghz(2.4), m(1e6));
assert_approx_eq::assert_approx_eq!(160.05, path_loss.0, 0.01);
path_loss = free_space_path_loss(mhz(433.0), m(1e3));
assert_approx_eq::assert_approx_eq!(85.178, path_loss.0, 0.01);
path_loss = free_space_path_loss(mhz(433.0), m(1e6));
assert_approx_eq::assert_approx_eq!(145.178, path_loss.0, 0.01);
}
}