#![doc = include_str!("../README.md")]
#![deny(missing_docs)]
#![deny(unsafe_code)]
#![deny(unsafe_op_in_unsafe_fn)]
#[allow(dead_code)]
mod f2;
#[allow(dead_code)]
mod natural;
#[allow(dead_code)]
mod progress;
#[allow(dead_code)]
mod qs;
#[allow(dead_code)]
mod engine;
#[allow(dead_code)]
mod factor;
mod factors;
#[allow(dead_code)]
mod primality;
#[cfg(any(unix, windows))]
mod native;
#[cfg(any(unix, windows))]
#[allow(unsafe_code)]
pub mod capi;
mod smallfactor;
mod u64math;
#[cfg(all(target_arch = "wasm32", target_os = "unknown"))]
#[allow(unsafe_code)]
mod wasm;
pub use factor::{FactorConfig, FactorError, Parallelism, ProgressAction, ResourceLimitKind};
pub use factors::{ExpandedPrimeFactors, PrimeFactorIter, PrimeFactors};
pub use natural::{BufferTooSmall, CapacityError, InvalidDigit, Natural, ParseNaturalError};
pub use progress::{ProgressAmount, ProgressPhase, ProgressSnapshot, ProgressTotal, ProgressUnit};
#[cfg(feature = "fuzzing")]
#[doc(hidden)]
pub fn fuzz_validate_worker_packet(bytes: &[u8]) -> bool {
engine::validate_worker_packet(bytes)
}
pub(crate) use natural::{PARTS, jacobi_u64, legendre_u32, tonelli_shanks_u32};
#[cfg(any(unix, windows))]
pub(crate) use primality::{PrimalityConfig, WitnessPolicy, is_probable_prime};
#[cfg(any(unix, windows))]
pub use native::{factor, factor_with, factor_with_progress};
#[macro_export]
macro_rules! natural {
($value:literal, $parts:literal) => {{
const VALUE: $crate::Natural<$parts> = match $crate::Natural::<$parts>::from_decimal($value)
{
Ok(value) => value,
Err(_) => panic!("invalid or overflowing Natural literal"),
};
VALUE
}};
}