1mod float;
5mod gcd;
6mod jacobi;
7mod lucas;
8mod miller_rabin;
9mod precomputed;
10mod primecount;
11#[cfg(test)]
12pub(crate) mod primes;
13#[cfg(test)]
14pub(crate) mod pseudoprimes;
15mod sieve;
16
17pub use lucas::{AStarBase, BruteForceBase, LucasBase, LucasCheck, SelfridgeBase, lucas_test};
18pub use miller_rabin::{MillerRabin, minimum_mr_iterations};
19pub use primecount::estimate_primecount;
20pub use sieve::{SetBits, SieveFactory, SmallFactorsSieve, SmallFactorsSieveFactory, random_odd_integer};
21
22pub(crate) use sieve::{ConventionsTestResult, conventions_test, equals_primitive, small_factors_test};
23
24#[derive(Copy, Clone, Debug, PartialEq, Eq)]
26pub enum Primality {
27 Prime,
29 ProbablyPrime,
32 Composite,
34}
35
36impl Primality {
37 pub fn is_composite(&self) -> bool {
39 match self {
40 Self::Prime => false,
41 Self::ProbablyPrime => false,
42 Self::Composite => true,
43 }
44 }
45
46 pub fn is_probably_prime(&self) -> bool {
48 match self {
49 Self::Prime => true,
50 Self::ProbablyPrime => true,
51 Self::Composite => false,
52 }
53 }
54}
55
56#[cfg(test)]
57mod tests {
58 use alloc::format;
59
60 use super::Primality;
61
62 #[test]
63 fn primality_derived_traits() {
64 assert_eq!(format!("{:?}", Primality::Prime), "Prime");
65 assert_eq!(Primality::Prime, Primality::Prime);
66 assert!(Primality::Prime != Primality::ProbablyPrime);
67 assert_eq!(Primality::Prime.clone(), Primality::Prime);
68 }
69
70 #[test]
71 fn primality_to_bool() {
72 assert!(Primality::Prime.is_probably_prime());
73 assert!(Primality::ProbablyPrime.is_probably_prime());
74 assert!(!Primality::Composite.is_probably_prime());
75
76 assert!(!Primality::Prime.is_composite());
77 assert!(!Primality::ProbablyPrime.is_composite());
78 assert!(Primality::Composite.is_composite());
79 }
80}