#![doc(html_root_url = "https://docs.rs/test_gmp_mpir/0.4.2")]
use std::error::Error;
use std::collections::HashMap;
use mpir::*;
use mpir::gmp::{__gmp_allocate_func, __gmp_reallocate_func, __gmp_free_func};
pub fn main() -> Result<(), Box<dyn Error>> {
let zinv64 = (!0 as i32) as si_t; let zinv32 = (!0 as u32) as ui_t;
let a = &mpz_s::from(zinv64); gmp_printf("a [%Zx]\n", a); println!("dbg a {:?}\nfmt a {}", a, a);
let a = &mut mpz_s::from(zinv32); gmp_printf("a [%Zx]\n", a); println!("dbg a {:?}\nfmt a {}", a, a);
a.add_ui(1); gmp_printf("a [%Zx]\n", a); println!("dbg a {:?}\nfmt a {}", a, a);
let b = &a.com(); gmp_printf("b [%Zx]\n", b); println!("dbg b {:?}\nfmt b {}", b, b);
a.mul_ui(zinv32); gmp_printf("a [%Zx]\n", a); println!("dbg a {:?}\nfmt a {}", a, a);
let b = &mpz_s::from(0); let a = &b.com(); gmp_printf("a [%Zx]\n", a); println!("dbg a {:?}\nfmt a {}", a, a);
let a = &mut mpz_s::from(1234567890);
gmp_printf("a [%Zd]\n", a);
println!("dbg a {:?}\nfmt a {}", a, a);
let b = &mut mpz_s::from("9876543210"); gmp_printf("b [%Zd]\n", b);
println!("dbg b {:?}\nfmt b {}", b, b);
let c = &mut mpz_s::from("1234987654321"); gmp_printf("c [%Zd]\n", c);
println!("dbg c {:?}\nfmt c {}", c, c);
b.set(a);
gmp_printf("b <- a [%Zd]\n", b);
a.set_str("12394872039846520983745092837458238947528346283745802837468238947520137489572463589", 10);
b.set_str("39846520983745092837458238947528346283745802837468238947520137489572463589", 10);
c.set_str("12394872039846520983745092837458238947528346283745802837468238947520137489572463589", 10);
gmp_printf_u8z(b"a %Zd\n\0", a);
gmp_printf_u8z(to_u8z!("b %Zd\n"), b);
gmp_printf_u8z(term_z!(b"c %Zd\n"), c);
println!("dbg a {:?}\nfmt a {}", a, a);
println!("dbg b {:?}\nfmt b {}", b, b);
println!("dbg c {:?}\nfmt c {}", c, c);
let r = &mpz_s::from(-1234567890);
gmp_printf("r [%Zd]\n", r);
println!("dbg r {:?}\nfmt r {}", r, r);
let f = &mpf_s::from(5.0);
gmp_printf_1f("f [%.*Ff]\n", 17, f);
println!("dbg f {:?}\nfmt f {}", f, f);
let g = &mpf_s::sqrt(f);
gmp_printf_2f("sqrt(%.*Ff) = %.*Ff\n", 17, f, 17, g);
println!("dbg g {:?}\nfmt g {}", g, g);
let q = &mpq_s::from((2, 8 as ui_t));
gmp_printf("q hex rational [%#40Qx]\n", q);
println!("dbg q {:?}\nfmt q {}", q, q);
let mut mp_alloc: FnPtrAllocate = __gmp_allocate_func; let mut mp_realloc: FnPtrReallocate = __gmp_reallocate_func; let mut mp_free: FnPtrFree = __gmp_free_func; println!("{:016x}, {:016x}, {:016x}",
mp_alloc as u64, mp_realloc as u64, mp_free as u64);
mp_get_memory_functions(&mut mp_alloc, &mut mp_realloc, &mut mp_free);
println!("{:016x}, {:016x}, {:016x}",
mp_alloc as u64, mp_realloc as u64, mp_free as u64);
c.set_ui(65);
if let Ok(s) = mpz_get_str(None, 10, c) {
println!("c [{}]", s);
}
let mut buf = String::from_utf8(vec![37u8; 48]).unwrap();
println!("buf [{:?}]", buf);
let s = match mpz_get_str(Some(&mut buf), 10, c) {
Err(e) => e.to_string(),
Ok(s) => s
};
println!("buf [{:?}]", buf);
println!("c [{}]", s);
let t = &mpf_s::from("-1234.56789012345678901234567890");
let e = &mut (0 as mp_exp_t);
if let Ok(s) = mpf_get_str(None, e, 10, 20, t) {
println!("t [{}] [{}]", e, s);
}
println!("dbg t {:?}\nfmt t {}", t, t);
let z = &mpf_s::from(-0.0);
let e = &mut 0i32; if let Ok(s) = mpf_get_str(None, e, 10, 20, z) {
println!("z [{}] [{}]", e, s);
}
println!("dbg z {:?}\nfmt z {}", z, z);
let y = &mpf_s::from(-0.3);
let e = &mut 0i32; if let Ok(s) = mpf_get_str(None, e, 10, 20, y) {
println!("y [{}] [{}]", e, s);
}
println!("dbg y {:?}\nfmt y {}", y, y);
let x = &mpf_s::from(-3.0);
let e = &mut 0i32; if let Ok(s) = mpf_get_str(None, e, 10, 20, x) {
println!("x [{}] [{}]", e, s);
}
println!("dbg x {:?}\nfmt x {}", x, x);
let w = &mpf_s::from(-30.0);
let e = &mut 0i32; if let Ok(s) = mpf_get_str(None, e, 10, 20, w) {
println!("w [{}] [{}]", e, s);
}
println!("dbg w {:?}\nfmt w {}", w, w);
let v = &mpf_s::from(-0.03);
let e = &mut 0i32; if let Ok(s) = mpf_get_str(None, e, 10, 20, v) {
println!("v [{}] [{}]", e, s);
}
println!("dbg v {:?}\nfmt v {}", v, v);
let q = &mpq_s::from((1, 3 as ui_t));
if let Ok(s) = mpq_get_str(None, 10, q) {
println!("q [{}]", s);
}
let a = &mut mpz_s::init();
let f = &mut mpf_s::init();
let g = &mut mpf_s::init();
a.set_str("987654321098765432109", 10);
println!("dbg a {:?}\nfmt a {}", a, a);
println!("f {}", f.set_z(a).div(g.set_str("1.0e+11", 10)));
println!("f {}", f.fmtstr(10, 22));
(0..=20).for_each(|n: usize| {
let t = &mpz_s::fac_ui(n as ui_t);
println!("{}! = {}", n, t);
});
(0..=20).for_each(|n: usize| {
let t = &mpz_s::fact(n as ui_t);
println!("{}! = {}", n, t);
});
let m = &mut HashMap::<ui_t, mpz_s>::new();
(0..=20).for_each(|n: usize| {
let t = &mpz_s::fact_cached(n as ui_t, m);
println!("{}! = {}", n, t);
});
println!("prec {}", mpf_get_default_prec()); mpf_set_default_prec(100); println!("prec {}", mpf_get_default_prec()); let digits = mpf_s::calc_digits_from_bits(128);
println!("digits {}", digits);
let digits = 40;
mpf_set_default_prec(mpf_s::calc_bits_from_digits(digits + 3));
let e = &util::Sigma::from(digits).calc_napier(&mpf_s::from(1.0));
assert_eq!(format!("{}", e),
"0.27182818284590452354e+1");
assert_eq!(e.fmtstr(10, digits),
"0.2718281828459045235360287471352662497757e+1");
let digits = 150;
mpf_set_default_prec(mpf_s::calc_bits_from_digits(digits + 3));
let e = &util::Sigma::from(digits).calc_napier(&mpf_s::from(1.0));
assert_eq!(format!("{}", e),
"0.27182818284590452354e+1");
assert_eq!(e.fmtstr(10, digits),
"0.271828182845904523536028747135266249775724709369995957496696762772407663035354759457138217852516642742746639193200305992181741359662904357290033429526e+1");
minimum::calc_pi_gauss_legendre_test();
minimum::calc_pi_euler_test();
minimum::calc_pi_leibniz_test();
minimum::calc_pi_machin_test();
minimum::calc_pi_takano_test();
minimum::ept_test();
let lc = &mut randstate_s::init_default();
let t = 0; lc.seed_ui(t);
let r = &mpz_s::urandomb(lc, 100);
println!("{}", r.hexstr());
println!("done");
Ok(())
}