use super::Q;
use crate::integer::Z;
use flint_sys::fmpz::fmpz_init_set;
impl Q {
pub fn get_denominator(&self) -> Z {
let mut result = Z::default();
unsafe { fmpz_init_set(&mut result.value, &self.value.den) };
result
}
pub fn get_numerator(&self) -> Z {
let mut result = Z::default();
unsafe { fmpz_init_set(&mut result.value, &self.value.num) };
result
}
}
#[cfg(test)]
mod test_get_denominator {
use crate::{integer::Z, rational::Q};
#[test]
fn get_small() {
let value = Q::from((2, 20));
let den = value.get_denominator();
assert_eq!(den, Z::from(10));
}
#[test]
fn get_large() {
let value = Q::from((1, i64::MAX));
let den = value.get_denominator();
assert_eq!(den, Z::from(i64::MAX));
}
}
#[cfg(test)]
mod test_get_numerator {
use crate::{integer::Z, rational::Q};
#[test]
fn get_small() {
let value = Q::from((2, 20));
let num = value.get_numerator();
assert_eq!(num, Z::from(1));
}
#[test]
fn get_large() {
let value = Q::from(i64::MAX);
let num = value.get_numerator();
assert_eq!(num, Z::from(i64::MAX));
}
}