blob: 9a8fe3e41db1ddfd5f71d4305916ade241682f47 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
pub trait Semiring {
fn one() -> f64;
fn null() -> f64;
fn add(a: f64, b: f64) -> f64;
fn multiply(a: f64, b: f64) -> f64;
}
pub struct ViterbiSemiring;
impl Semiring for ViterbiSemiring {
fn one() -> f64 {
1.0
}
fn null() -> f64 {
0.0
}
fn add(a: f64, b: f64) -> f64 {
a.max(b)
}
fn multiply(a: f64, b: f64) -> f64 {
a * b
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_viterbi() {
assert_eq!(ViterbiSemiring::one(), 1.0);
assert_eq!(ViterbiSemiring::null(), 0.0);
assert_eq!(ViterbiSemiring::add(0.3, 0.7), 0.7);
assert_eq!(ViterbiSemiring::multiply(0.5, 0.6), 0.3);
}
}
|