#[no_mangle]
pub extern "C" fn si_eisenstein_norm(a: i32, b: i32) -> i64 {
let a = a as i64;
let b = b as i64;
a * a - a * b + b * b
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_eisenstein_unit() {
assert_eq!(si_eisenstein_norm(1, 0), 1);
assert_eq!(si_eisenstein_norm(0, 1), 1);
}
#[test]
fn test_eisenstein_zero() {
assert_eq!(si_eisenstein_norm(0, 0), 0);
}
#[test]
fn test_eisenstein_symmetric() {
assert_eq!(si_eisenstein_norm(3, 5), si_eisenstein_norm(5, 3));
}
#[test]
fn test_eisenstein_known() {
assert_eq!(si_eisenstein_norm(3, 7), 37);
}
}