Skip to main content

endf_mat/
za.rs

1//! ZA encoding/decoding utilities.
2//!
3//! The ENDF ZA identifier encodes an isotope as Z×1000 + A, where Z is the
4//! atomic number and A is the mass number.
5
6/// Encode an isotope as ENDF ZA = Z×1000 + A.
7pub fn za(z: u32, a: u32) -> u32 {
8    z * 1000 + a
9}
10
11/// Extract atomic number Z from an ENDF ZA value.
12pub fn z_from_za(za: u32) -> u32 {
13    za / 1000
14}
15
16/// Extract mass number A from an ENDF ZA value.
17pub fn a_from_za(za: u32) -> u32 {
18    za % 1000
19}
20
21#[cfg(test)]
22mod tests {
23    use super::*;
24
25    #[test]
26    fn test_za_roundtrip() {
27        for &(z, a) in &[(92, 238), (1, 1), (26, 56), (94, 239), (0, 1)] {
28            let encoded = za(z, a);
29            assert_eq!(z_from_za(encoded), z);
30            assert_eq!(a_from_za(encoded), a);
31        }
32    }
33
34    #[test]
35    fn test_za_known_values() {
36        assert_eq!(za(92, 238), 92238);
37        assert_eq!(za(1, 1), 1001);
38        assert_eq!(za(0, 1), 1);
39    }
40}