use crate::lab::gc_ratio;
use crate::*;
#[test]
fn metric_builder_eval() {
let m = metric("gc")
.measure()
.by(|dna: &&str| gc_ratio(dna))
.map01()
.by(|raw: &f64, _: &&str| Value01::witness(*raw).unwrap());
assert_eq!(m.name(), "gc");
let result = m.eval(&"ACGT");
assert!((*result - 0.5).abs() < 1e-10);
}
#[test]
fn metric_with_empty_input() {
let m = metric("gc-empty")
.measure()
.by(|dna: &&str| gc_ratio(dna))
.map01()
.by(|raw: &f64, _: &&str| Value01::witness(*raw).unwrap());
let result = m.eval(&"");
assert!((*result - 0.0).abs() < 1e-10);
}
#[test]
fn metric_usize_input() {
let m = metric("len")
.measure()
.by(|len: &usize| *len)
.map01()
.by(|raw: &usize, _: &usize| {
Value01::witness((*raw as f64 / 100.0).min(1.0)).unwrap()
});
assert_eq!(m.name(), "len");
let result = m.eval(&50);
assert!((*result - 0.5).abs() < 1e-10);
let result2 = m.eval(&200);
assert!((*result2 - 1.0).abs() < 1e-10);
}