diff options
| author | pks <pks@users.noreply.github.com> | 2026-02-27 12:09:49 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-02-27 12:09:49 +0100 |
| commit | e7189f97ec29bd576fe79a260fa0e8cd25dcc968 (patch) | |
| tree | 227bc72ff0f7f72b8c6b3e6f735d922dd13da147 /rs/src/semiring.rs | |
| parent | c13b5650ac4bee7e674d263fcb778599bb449bff (diff) | |
| parent | 1377ffbdd2791e50cb3ca21d11c8c21febdbf911 (diff) | |
Claude
Diffstat (limited to 'rs/src/semiring.rs')
| -rw-r--r-- | rs/src/semiring.rs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/rs/src/semiring.rs b/rs/src/semiring.rs new file mode 100644 index 0000000..9a8fe3e --- /dev/null +++ b/rs/src/semiring.rs @@ -0,0 +1,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); + } +} |
