1mod gcd;
5mod jacobi;
6mod lucas;
7mod miller_rabin;
8mod precomputed;
9#[cfg(test)]
10pub(crate) mod primes;
11#[cfg(test)]
12pub(crate) mod pseudoprimes;
13mod sieve;
14
15pub use lucas::{lucas_test, AStarBase, BruteForceBase, LucasBase, LucasCheck, SelfridgeBase};
16pub use miller_rabin::MillerRabin;
17pub use sieve::{random_odd_integer, SetBits, SmallPrimesSieve, SmallPrimesSieveFactory};
18
19#[derive(Copy, Clone, Debug, PartialEq, Eq)]
21pub enum Primality {
22 Prime,
24 ProbablyPrime,
27 Composite,
29}
30
31impl Primality {
32 pub fn is_probably_prime(&self) -> bool {
34 match self {
35 Self::Prime => true,
36 Self::ProbablyPrime => true,
37 Self::Composite => false,
38 }
39 }
40}
41
42#[cfg(test)]
43mod tests {
44 use alloc::format;
45
46 use super::Primality;
47
48 #[test]
49 fn primality_derived_traits() {
50 assert_eq!(format!("{:?}", Primality::Prime), "Prime");
51 assert_eq!(Primality::Prime, Primality::Prime);
52 assert!(Primality::Prime != Primality::ProbablyPrime);
53 assert_eq!(Primality::Prime.clone(), Primality::Prime);
54 }
55
56 #[test]
57 fn primality_to_bool() {
58 assert!(Primality::Prime.is_probably_prime());
59 assert!(Primality::ProbablyPrime.is_probably_prime());
60 assert!(!Primality::Composite.is_probably_prime());
61 }
62}