use approx::assert_abs_diff_eq;
use soilrust::enums::SelectionMethod;
use soilrust::models::point_load_test::*;
fn create_test_data() -> PointLoadTest {
let sk1 = PointLoadExp::new(
"Borehole1".to_string(),
vec![
PointLoadSample::new(1.5, 2.67, 50.0),
PointLoadSample::new(3., 2.38, 50.0),
],
);
let sk2 = PointLoadExp::new(
"Borehole2".to_string(),
vec![
PointLoadSample::new(1.5, 2.66, 50.0),
PointLoadSample::new(3., 2.96, 50.0),
],
);
let sk3 = PointLoadExp::new(
"Borehole3".to_string(),
vec![
PointLoadSample::new(3., 2.53, 50.0),
PointLoadSample::new(4.5, 2.84, 50.0),
],
);
PointLoadTest::new(vec![sk1, sk2, sk3], SelectionMethod::Min)
}
#[test]
fn test_get_sample_at_depth_1() {
let exp = create_test_data().exps[0].clone();
let sample = exp.get_sample_at_depth(1.5);
assert_eq!(sample.depth.unwrap(), 1.5);
assert_eq!(sample.is50.unwrap(), 2.67);
}
#[test]
fn test_get_sample_at_depth_2() {
let exp = create_test_data().exps[0].clone();
let sample = exp.get_sample_at_depth(2.);
assert_eq!(sample.depth.unwrap(), 3.);
assert_eq!(sample.is50.unwrap(), 2.38);
}
#[test]
fn test_get_sample_at_depth_3() {
let exp = create_test_data().exps[0].clone();
let sample = exp.get_sample_at_depth(4.);
assert_eq!(sample.depth.unwrap(), 3.);
assert_eq!(sample.is50.unwrap(), 2.38);
}
#[test]
fn test_get_idealized_exp_min_mode() {
let data = create_test_data();
let ideal = data.get_idealized_exp("Ideal_Min".into());
assert_eq!(ideal.borehole_id, "Ideal_Min");
assert_eq!(ideal.samples.len(), 3);
let layer1 = &ideal.samples[0];
assert_abs_diff_eq!(layer1.depth.unwrap(), 1.5, epsilon = 1e-6);
assert_abs_diff_eq!(layer1.is50.unwrap(), 2.66, epsilon = 1e-6);
assert_abs_diff_eq!(layer1.d.unwrap(), 50., epsilon = 1e-6);
let layer2 = &ideal.samples[1];
assert_abs_diff_eq!(layer2.depth.unwrap(), 3., epsilon = 1e-6);
assert_abs_diff_eq!(layer2.is50.unwrap(), 2.38, epsilon = 1e-6);
assert_abs_diff_eq!(layer2.d.unwrap(), 50., epsilon = 1e-6);
let last_layer = ideal.samples.last().unwrap();
assert_abs_diff_eq!(last_layer.depth.unwrap(), 4.5, epsilon = 1e-6);
}
#[test]
fn test_get_idealized_exp_avg_mode() {
let mut data = create_test_data();
data.idealization_method = SelectionMethod::Avg;
let ideal = data.get_idealized_exp("Ideal_Avg".into());
assert_eq!(ideal.borehole_id, "Ideal_Avg");
assert_eq!(ideal.samples.len(), 3);
let layer1 = &ideal.samples[0];
assert_abs_diff_eq!(layer1.depth.unwrap(), 1.5, epsilon = 1e-6);
assert_abs_diff_eq!(layer1.is50.unwrap(), 2.665, epsilon = 1e-6);
assert_abs_diff_eq!(layer1.d.unwrap(), 50., epsilon = 1e-6);
let layer2 = &ideal.samples[1];
assert_abs_diff_eq!(layer2.depth.unwrap(), 3., epsilon = 1e-6);
assert_abs_diff_eq!(layer2.is50.unwrap(), 2.623, epsilon = 1e-3);
assert_abs_diff_eq!(layer2.d.unwrap(), 50., epsilon = 1e-6);
let last_layer = ideal.samples.last().unwrap();
assert_abs_diff_eq!(last_layer.depth.unwrap(), 4.5, epsilon = 1e-6);
}
#[test]
fn test_get_idealized_exp_max_mode() {
let mut data = create_test_data();
data.idealization_method = SelectionMethod::Max;
let ideal = data.get_idealized_exp("Ideal_Max".into());
assert_eq!(ideal.borehole_id, "Ideal_Max");
assert_eq!(ideal.samples.len(), 3);
let layer1 = &ideal.samples[0];
assert_abs_diff_eq!(layer1.depth.unwrap(), 1.5, epsilon = 1e-6);
assert_abs_diff_eq!(layer1.is50.unwrap(), 2.67, epsilon = 1e-6);
assert_abs_diff_eq!(layer1.d.unwrap(), 50., epsilon = 1e-6);
let layer2 = &ideal.samples[1];
assert_abs_diff_eq!(layer2.depth.unwrap(), 3., epsilon = 1e-6);
assert_abs_diff_eq!(layer2.is50.unwrap(), 2.96, epsilon = 1e-3);
assert_abs_diff_eq!(layer2.d.unwrap(), 50., epsilon = 1e-6);
let last_layer = ideal.samples.last().unwrap();
assert_abs_diff_eq!(last_layer.depth.unwrap(), 4.5, epsilon = 1e-6);
}