haar_lib/math/prime_test/
mod.rs1pub mod eratosthenes;
4pub mod miller_rabin;
5
6pub trait CheckPrime<T> {
8 fn is_prime(&self, value: T) -> bool;
10}
11
12#[cfg(test)]
13mod tests {
14 use super::{eratosthenes::*, miller_rabin::*, CheckPrime};
15
16 #[test]
17 fn test_eratosthenes() {
18 let n = 100;
19 let sieve = EratosthenesSieve::new(n);
20
21 let primes = (1..=n).filter(|&i| sieve.is_prime(i)).collect::<Vec<_>>();
22
23 assert_eq!(
24 primes,
25 [
26 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79,
27 83, 89, 97
28 ]
29 );
30 }
31
32 #[test]
33 fn test_miller_rabin() {
34 let n = 1000;
35 let sieve = EratosthenesSieve::new(n);
36
37 let primes = (1..=n).filter(|&i| sieve.is_prime(i)).collect::<Vec<_>>();
38
39 assert_eq!(
40 (1..=n)
41 .filter(|&i| MillerRabin.is_prime(i as u64))
42 .collect::<Vec<_>>(),
43 primes
44 );
45 }
46}