• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

supabase / edge-runtime / 13536652177

26 Feb 2025 04:39AM UTC coverage: 47.89% (-0.7%) from 48.599%
13536652177

Pull #503

github

web-flow
Merge 402685cc2 into 1e680abaa
Pull Request #503: fix: add integration tests for commonjs and enhance entrypoint discovery

49 of 54 new or added lines in 3 files covered. (90.74%)

644 existing lines in 8 files now uncovered.

16579 of 34619 relevant lines covered (47.89%)

1629.18 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

83.96
/ext/node/ops/crypto/primes.rs
1
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2

3
use num_bigint::BigInt;
4
use num_bigint_dig::RandPrime;
5
use num_integer::Integer;
6
use num_traits::One;
7
use num_traits::Zero;
8
use rand::Rng;
9
use std::ops::Deref;
10

11
#[derive(Clone)]
12
pub struct Prime(pub num_bigint_dig::BigUint);
13

14
impl Prime {
15
  pub fn generate(n: usize) -> Self {
×
16
    let mut rng = rand::thread_rng();
×
17
    Self(rng.gen_prime(n))
×
18
  }
×
19
}
20

21
impl From<&[u8]> for Prime {
22
  fn from(value: &[u8]) -> Self {
×
23
    Self(num_bigint_dig::BigUint::from_bytes_be(value))
×
24
  }
×
25
}
26

27
impl Deref for Prime {
28
  type Target = num_bigint_dig::BigUint;
29

30
  fn deref(&self) -> &Self::Target {
×
31
    &self.0
×
32
  }
×
33
}
34

35
struct Witness {
36
  pow: BigInt,
37
  wit: BigInt,
38
}
39

40
/// Modified version of bigpowmod() from http://nickle.org/examples/miller-rabin.5c
41
/// Computes core of Miller-Rabin test as suggested by
42
/// Cormen/Leiserson/Rivest.
43
fn witnessexp(b: &BigInt, e: &BigInt, m: &BigInt) -> Witness {
768✔
44
  if *e == BigInt::zero() {
768✔
45
    return Witness {
×
46
      pow: BigInt::zero(),
×
47
      wit: BigInt::one(),
×
48
    };
×
49
  }
768✔
50
  if *e == BigInt::one() {
768✔
51
    return Witness {
20✔
52
      pow: b % m,
20✔
53
      wit: BigInt::zero(),
20✔
54
    };
20✔
55
  }
748✔
56
  let ehalf = e / BigInt::from(2);
748✔
57
  let mut tmp = witnessexp(b, &ehalf, m);
748✔
58
  if tmp.wit != BigInt::zero() {
748✔
UNCOV
59
    return tmp;
×
60
  }
748✔
61
  let t: BigInt = BigInt::pow(&tmp.pow, 2) % m;
748✔
62
  if t == BigInt::one()
748✔
63
    && tmp.pow != BigInt::one()
18✔
64
    && &tmp.pow + BigInt::one() != *m
5✔
65
  {
66
    tmp.wit = tmp.pow;
2✔
67
    tmp.pow = t;
2✔
68
    return tmp;
2✔
69
  }
746✔
70
  if e % BigInt::from(2) == BigInt::zero() {
746✔
71
    tmp.pow = t;
146✔
72
  } else {
600✔
73
    tmp.pow = (t * b) % m;
600✔
74
  }
600✔
75
  tmp
746✔
76
}
768✔
77

78
pub(crate) fn is_probably_prime(n: &BigInt, count: usize) -> bool {
2,061✔
79
  if *n == BigInt::from(1) {
2,061✔
80
    return false;
×
81
  }
2,061✔
82

2,061✔
83
  if *n == BigInt::from(2) {
2,061✔
84
    return true;
×
85
  }
2,061✔
86

2,061✔
87
  if n.is_even() {
2,061✔
88
    return false;
2✔
89
  }
2,059✔
90

91
  for p in SMALL_PRIMES.into_iter() {
2,107,967✔
92
    let p = BigInt::from(p);
2,107,967✔
93
    if *n == p {
2,107,967✔
94
      return true;
2,047✔
95
    }
2,105,920✔
96

2,105,920✔
97
    if n % p == BigInt::zero() {
2,105,920✔
98
      return false;
7✔
99
    }
2,105,913✔
100
  }
101

102
  let mut rng = rand::thread_rng();
5✔
103
  for _ in 0..count {
5✔
104
    let a = rng.gen_range(BigInt::one()..n.clone());
20✔
105
    let we = witnessexp(&a, &(n - BigInt::one()), n);
20✔
106
    if we.wit != BigInt::zero() || we.pow != BigInt::one() {
20✔
107
      return false;
4✔
108
    }
16✔
109
  }
110

111
  true
1✔
112
}
2,061✔
113

114
static SMALL_PRIMES: [u32; 2047] = [
115
  3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73,
116
  79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157,
117
  163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239,
118
  241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331,
119
  337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421,
120
  431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509,
121
  521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613,
122
  617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709,
123
  719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821,
124
  823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919,
125
  929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013, 1019,
126
  1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063, 1069, 1087, 1091, 1093, 1097,
127
  1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163, 1171, 1181, 1187, 1193, 1201,
128
  1213, 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283, 1289, 1291,
129
  1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367, 1373, 1381, 1399, 1409,
130
  1423, 1427, 1429, 1433, 1439, 1447, 1451, 1453, 1459, 1471, 1481, 1483, 1487,
131
  1489, 1493, 1499, 1511, 1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571, 1579,
132
  1583, 1597, 1601, 1607, 1609, 1613, 1619, 1621, 1627, 1637, 1657, 1663, 1667,
133
  1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733, 1741, 1747, 1753, 1759, 1777,
134
  1783, 1787, 1789, 1801, 1811, 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877,
135
  1879, 1889, 1901, 1907, 1913, 1931, 1933, 1949, 1951, 1973, 1979, 1987, 1993,
136
  1997, 1999, 2003, 2011, 2017, 2027, 2029, 2039, 2053, 2063, 2069, 2081, 2083,
137
  2087, 2089, 2099, 2111, 2113, 2129, 2131, 2137, 2141, 2143, 2153, 2161, 2179,
138
  2203, 2207, 2213, 2221, 2237, 2239, 2243, 2251, 2267, 2269, 2273, 2281, 2287,
139
  2293, 2297, 2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357, 2371, 2377, 2381,
140
  2383, 2389, 2393, 2399, 2411, 2417, 2423, 2437, 2441, 2447, 2459, 2467, 2473,
141
  2477, 2503, 2521, 2531, 2539, 2543, 2549, 2551, 2557, 2579, 2591, 2593, 2609,
142
  2617, 2621, 2633, 2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687, 2689, 2693,
143
  2699, 2707, 2711, 2713, 2719, 2729, 2731, 2741, 2749, 2753, 2767, 2777, 2789,
144
  2791, 2797, 2801, 2803, 2819, 2833, 2837, 2843, 2851, 2857, 2861, 2879, 2887,
145
  2897, 2903, 2909, 2917, 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999, 3001,
146
  3011, 3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079, 3083, 3089, 3109, 3119,
147
  3121, 3137, 3163, 3167, 3169, 3181, 3187, 3191, 3203, 3209, 3217, 3221, 3229,
148
  3251, 3253, 3257, 3259, 3271, 3299, 3301, 3307, 3313, 3319, 3323, 3329, 3331,
149
  3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391, 3407, 3413, 3433, 3449, 3457,
150
  3461, 3463, 3467, 3469, 3491, 3499, 3511, 3517, 3527, 3529, 3533, 3539, 3541,
151
  3547, 3557, 3559, 3571, 3581, 3583, 3593, 3607, 3613, 3617, 3623, 3631, 3637,
152
  3643, 3659, 3671, 3673, 3677, 3691, 3697, 3701, 3709, 3719, 3727, 3733, 3739,
153
  3761, 3767, 3769, 3779, 3793, 3797, 3803, 3821, 3823, 3833, 3847, 3851, 3853,
154
  3863, 3877, 3881, 3889, 3907, 3911, 3917, 3919, 3923, 3929, 3931, 3943, 3947,
155
  3967, 3989, 4001, 4003, 4007, 4013, 4019, 4021, 4027, 4049, 4051, 4057, 4073,
156
  4079, 4091, 4093, 4099, 4111, 4127, 4129, 4133, 4139, 4153, 4157, 4159, 4177,
157
  4201, 4211, 4217, 4219, 4229, 4231, 4241, 4243, 4253, 4259, 4261, 4271, 4273,
158
  4283, 4289, 4297, 4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391, 4397, 4409,
159
  4421, 4423, 4441, 4447, 4451, 4457, 4463, 4481, 4483, 4493, 4507, 4513, 4517,
160
  4519, 4523, 4547, 4549, 4561, 4567, 4583, 4591, 4597, 4603, 4621, 4637, 4639,
161
  4643, 4649, 4651, 4657, 4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729, 4733,
162
  4751, 4759, 4783, 4787, 4789, 4793, 4799, 4801, 4813, 4817, 4831, 4861, 4871,
163
  4877, 4889, 4903, 4909, 4919, 4931, 4933, 4937, 4943, 4951, 4957, 4967, 4969,
164
  4973, 4987, 4993, 4999, 5003, 5009, 5011, 5021, 5023, 5039, 5051, 5059, 5077,
165
  5081, 5087, 5099, 5101, 5107, 5113, 5119, 5147, 5153, 5167, 5171, 5179, 5189,
166
  5197, 5209, 5227, 5231, 5233, 5237, 5261, 5273, 5279, 5281, 5297, 5303, 5309,
167
  5323, 5333, 5347, 5351, 5381, 5387, 5393, 5399, 5407, 5413, 5417, 5419, 5431,
168
  5437, 5441, 5443, 5449, 5471, 5477, 5479, 5483, 5501, 5503, 5507, 5519, 5521,
169
  5527, 5531, 5557, 5563, 5569, 5573, 5581, 5591, 5623, 5639, 5641, 5647, 5651,
170
  5653, 5657, 5659, 5669, 5683, 5689, 5693, 5701, 5711, 5717, 5737, 5741, 5743,
171
  5749, 5779, 5783, 5791, 5801, 5807, 5813, 5821, 5827, 5839, 5843, 5849, 5851,
172
  5857, 5861, 5867, 5869, 5879, 5881, 5897, 5903, 5923, 5927, 5939, 5953, 5981,
173
  5987, 6007, 6011, 6029, 6037, 6043, 6047, 6053, 6067, 6073, 6079, 6089, 6091,
174
  6101, 6113, 6121, 6131, 6133, 6143, 6151, 6163, 6173, 6197, 6199, 6203, 6211,
175
  6217, 6221, 6229, 6247, 6257, 6263, 6269, 6271, 6277, 6287, 6299, 6301, 6311,
176
  6317, 6323, 6329, 6337, 6343, 6353, 6359, 6361, 6367, 6373, 6379, 6389, 6397,
177
  6421, 6427, 6449, 6451, 6469, 6473, 6481, 6491, 6521, 6529, 6547, 6551, 6553,
178
  6563, 6569, 6571, 6577, 6581, 6599, 6607, 6619, 6637, 6653, 6659, 6661, 6673,
179
  6679, 6689, 6691, 6701, 6703, 6709, 6719, 6733, 6737, 6761, 6763, 6779, 6781,
180
  6791, 6793, 6803, 6823, 6827, 6829, 6833, 6841, 6857, 6863, 6869, 6871, 6883,
181
  6899, 6907, 6911, 6917, 6947, 6949, 6959, 6961, 6967, 6971, 6977, 6983, 6991,
182
  6997, 7001, 7013, 7019, 7027, 7039, 7043, 7057, 7069, 7079, 7103, 7109, 7121,
183
  7127, 7129, 7151, 7159, 7177, 7187, 7193, 7207, 7211, 7213, 7219, 7229, 7237,
184
  7243, 7247, 7253, 7283, 7297, 7307, 7309, 7321, 7331, 7333, 7349, 7351, 7369,
185
  7393, 7411, 7417, 7433, 7451, 7457, 7459, 7477, 7481, 7487, 7489, 7499, 7507,
186
  7517, 7523, 7529, 7537, 7541, 7547, 7549, 7559, 7561, 7573, 7577, 7583, 7589,
187
  7591, 7603, 7607, 7621, 7639, 7643, 7649, 7669, 7673, 7681, 7687, 7691, 7699,
188
  7703, 7717, 7723, 7727, 7741, 7753, 7757, 7759, 7789, 7793, 7817, 7823, 7829,
189
  7841, 7853, 7867, 7873, 7877, 7879, 7883, 7901, 7907, 7919, 7927, 7933, 7937,
190
  7949, 7951, 7963, 7993, 8009, 8011, 8017, 8039, 8053, 8059, 8069, 8081, 8087,
191
  8089, 8093, 8101, 8111, 8117, 8123, 8147, 8161, 8167, 8171, 8179, 8191, 8209,
192
  8219, 8221, 8231, 8233, 8237, 8243, 8263, 8269, 8273, 8287, 8291, 8293, 8297,
193
  8311, 8317, 8329, 8353, 8363, 8369, 8377, 8387, 8389, 8419, 8423, 8429, 8431,
194
  8443, 8447, 8461, 8467, 8501, 8513, 8521, 8527, 8537, 8539, 8543, 8563, 8573,
195
  8581, 8597, 8599, 8609, 8623, 8627, 8629, 8641, 8647, 8663, 8669, 8677, 8681,
196
  8689, 8693, 8699, 8707, 8713, 8719, 8731, 8737, 8741, 8747, 8753, 8761, 8779,
197
  8783, 8803, 8807, 8819, 8821, 8831, 8837, 8839, 8849, 8861, 8863, 8867, 8887,
198
  8893, 8923, 8929, 8933, 8941, 8951, 8963, 8969, 8971, 8999, 9001, 9007, 9011,
199
  9013, 9029, 9041, 9043, 9049, 9059, 9067, 9091, 9103, 9109, 9127, 9133, 9137,
200
  9151, 9157, 9161, 9173, 9181, 9187, 9199, 9203, 9209, 9221, 9227, 9239, 9241,
201
  9257, 9277, 9281, 9283, 9293, 9311, 9319, 9323, 9337, 9341, 9343, 9349, 9371,
202
  9377, 9391, 9397, 9403, 9413, 9419, 9421, 9431, 9433, 9437, 9439, 9461, 9463,
203
  9467, 9473, 9479, 9491, 9497, 9511, 9521, 9533, 9539, 9547, 9551, 9587, 9601,
204
  9613, 9619, 9623, 9629, 9631, 9643, 9649, 9661, 9677, 9679, 9689, 9697, 9719,
205
  9721, 9733, 9739, 9743, 9749, 9767, 9769, 9781, 9787, 9791, 9803, 9811, 9817,
206
  9829, 9833, 9839, 9851, 9857, 9859, 9871, 9883, 9887, 9901, 9907, 9923, 9929,
207
  9931, 9941, 9949, 9967, 9973, 10007, 10009, 10037, 10039, 10061, 10067,
208
  10069, 10079, 10091, 10093, 10099, 10103, 10111, 10133, 10139, 10141, 10151,
209
  10159, 10163, 10169, 10177, 10181, 10193, 10211, 10223, 10243, 10247, 10253,
210
  10259, 10267, 10271, 10273, 10289, 10301, 10303, 10313, 10321, 10331, 10333,
211
  10337, 10343, 10357, 10369, 10391, 10399, 10427, 10429, 10433, 10453, 10457,
212
  10459, 10463, 10477, 10487, 10499, 10501, 10513, 10529, 10531, 10559, 10567,
213
  10589, 10597, 10601, 10607, 10613, 10627, 10631, 10639, 10651, 10657, 10663,
214
  10667, 10687, 10691, 10709, 10711, 10723, 10729, 10733, 10739, 10753, 10771,
215
  10781, 10789, 10799, 10831, 10837, 10847, 10853, 10859, 10861, 10867, 10883,
216
  10889, 10891, 10903, 10909, 10937, 10939, 10949, 10957, 10973, 10979, 10987,
217
  10993, 11003, 11027, 11047, 11057, 11059, 11069, 11071, 11083, 11087, 11093,
218
  11113, 11117, 11119, 11131, 11149, 11159, 11161, 11171, 11173, 11177, 11197,
219
  11213, 11239, 11243, 11251, 11257, 11261, 11273, 11279, 11287, 11299, 11311,
220
  11317, 11321, 11329, 11351, 11353, 11369, 11383, 11393, 11399, 11411, 11423,
221
  11437, 11443, 11447, 11467, 11471, 11483, 11489, 11491, 11497, 11503, 11519,
222
  11527, 11549, 11551, 11579, 11587, 11593, 11597, 11617, 11621, 11633, 11657,
223
  11677, 11681, 11689, 11699, 11701, 11717, 11719, 11731, 11743, 11777, 11779,
224
  11783, 11789, 11801, 11807, 11813, 11821, 11827, 11831, 11833, 11839, 11863,
225
  11867, 11887, 11897, 11903, 11909, 11923, 11927, 11933, 11939, 11941, 11953,
226
  11959, 11969, 11971, 11981, 11987, 12007, 12011, 12037, 12041, 12043, 12049,
227
  12071, 12073, 12097, 12101, 12107, 12109, 12113, 12119, 12143, 12149, 12157,
228
  12161, 12163, 12197, 12203, 12211, 12227, 12239, 12241, 12251, 12253, 12263,
229
  12269, 12277, 12281, 12289, 12301, 12323, 12329, 12343, 12347, 12373, 12377,
230
  12379, 12391, 12401, 12409, 12413, 12421, 12433, 12437, 12451, 12457, 12473,
231
  12479, 12487, 12491, 12497, 12503, 12511, 12517, 12527, 12539, 12541, 12547,
232
  12553, 12569, 12577, 12583, 12589, 12601, 12611, 12613, 12619, 12637, 12641,
233
  12647, 12653, 12659, 12671, 12689, 12697, 12703, 12713, 12721, 12739, 12743,
234
  12757, 12763, 12781, 12791, 12799, 12809, 12821, 12823, 12829, 12841, 12853,
235
  12889, 12893, 12899, 12907, 12911, 12917, 12919, 12923, 12941, 12953, 12959,
236
  12967, 12973, 12979, 12983, 13001, 13003, 13007, 13009, 13033, 13037, 13043,
237
  13049, 13063, 13093, 13099, 13103, 13109, 13121, 13127, 13147, 13151, 13159,
238
  13163, 13171, 13177, 13183, 13187, 13217, 13219, 13229, 13241, 13249, 13259,
239
  13267, 13291, 13297, 13309, 13313, 13327, 13331, 13337, 13339, 13367, 13381,
240
  13397, 13399, 13411, 13417, 13421, 13441, 13451, 13457, 13463, 13469, 13477,
241
  13487, 13499, 13513, 13523, 13537, 13553, 13567, 13577, 13591, 13597, 13613,
242
  13619, 13627, 13633, 13649, 13669, 13679, 13681, 13687, 13691, 13693, 13697,
243
  13709, 13711, 13721, 13723, 13729, 13751, 13757, 13759, 13763, 13781, 13789,
244
  13799, 13807, 13829, 13831, 13841, 13859, 13873, 13877, 13879, 13883, 13901,
245
  13903, 13907, 13913, 13921, 13931, 13933, 13963, 13967, 13997, 13999, 14009,
246
  14011, 14029, 14033, 14051, 14057, 14071, 14081, 14083, 14087, 14107, 14143,
247
  14149, 14153, 14159, 14173, 14177, 14197, 14207, 14221, 14243, 14249, 14251,
248
  14281, 14293, 14303, 14321, 14323, 14327, 14341, 14347, 14369, 14387, 14389,
249
  14401, 14407, 14411, 14419, 14423, 14431, 14437, 14447, 14449, 14461, 14479,
250
  14489, 14503, 14519, 14533, 14537, 14543, 14549, 14551, 14557, 14561, 14563,
251
  14591, 14593, 14621, 14627, 14629, 14633, 14639, 14653, 14657, 14669, 14683,
252
  14699, 14713, 14717, 14723, 14731, 14737, 14741, 14747, 14753, 14759, 14767,
253
  14771, 14779, 14783, 14797, 14813, 14821, 14827, 14831, 14843, 14851, 14867,
254
  14869, 14879, 14887, 14891, 14897, 14923, 14929, 14939, 14947, 14951, 14957,
255
  14969, 14983, 15013, 15017, 15031, 15053, 15061, 15073, 15077, 15083, 15091,
256
  15101, 15107, 15121, 15131, 15137, 15139, 15149, 15161, 15173, 15187, 15193,
257
  15199, 15217, 15227, 15233, 15241, 15259, 15263, 15269, 15271, 15277, 15287,
258
  15289, 15299, 15307, 15313, 15319, 15329, 15331, 15349, 15359, 15361, 15373,
259
  15377, 15383, 15391, 15401, 15413, 15427, 15439, 15443, 15451, 15461, 15467,
260
  15473, 15493, 15497, 15511, 15527, 15541, 15551, 15559, 15569, 15581, 15583,
261
  15601, 15607, 15619, 15629, 15641, 15643, 15647, 15649, 15661, 15667, 15671,
262
  15679, 15683, 15727, 15731, 15733, 15737, 15739, 15749, 15761, 15767, 15773,
263
  15787, 15791, 15797, 15803, 15809, 15817, 15823, 15859, 15877, 15881, 15887,
264
  15889, 15901, 15907, 15913, 15919, 15923, 15937, 15959, 15971, 15973, 15991,
265
  16001, 16007, 16033, 16057, 16061, 16063, 16067, 16069, 16073, 16087, 16091,
266
  16097, 16103, 16111, 16127, 16139, 16141, 16183, 16187, 16189, 16193, 16217,
267
  16223, 16229, 16231, 16249, 16253, 16267, 16273, 16301, 16319, 16333, 16339,
268
  16349, 16361, 16363, 16369, 16381, 16411, 16417, 16421, 16427, 16433, 16447,
269
  16451, 16453, 16477, 16481, 16487, 16493, 16519, 16529, 16547, 16553, 16561,
270
  16567, 16573, 16603, 16607, 16619, 16631, 16633, 16649, 16651, 16657, 16661,
271
  16673, 16691, 16693, 16699, 16703, 16729, 16741, 16747, 16759, 16763, 16787,
272
  16811, 16823, 16829, 16831, 16843, 16871, 16879, 16883, 16889, 16901, 16903,
273
  16921, 16927, 16931, 16937, 16943, 16963, 16979, 16981, 16987, 16993, 17011,
274
  17021, 17027, 17029, 17033, 17041, 17047, 17053, 17077, 17093, 17099, 17107,
275
  17117, 17123, 17137, 17159, 17167, 17183, 17189, 17191, 17203, 17207, 17209,
276
  17231, 17239, 17257, 17291, 17293, 17299, 17317, 17321, 17327, 17333, 17341,
277
  17351, 17359, 17377, 17383, 17387, 17389, 17393, 17401, 17417, 17419, 17431,
278
  17443, 17449, 17467, 17471, 17477, 17483, 17489, 17491, 17497, 17509, 17519,
279
  17539, 17551, 17569, 17573, 17579, 17581, 17597, 17599, 17609, 17623, 17627,
280
  17657, 17659, 17669, 17681, 17683, 17707, 17713, 17729, 17737, 17747, 17749,
281
  17761, 17783, 17789, 17791, 17807, 17827, 17837, 17839, 17851, 17863,
282
];
283

284
#[cfg(test)]
285
mod tests {
286
  use super::*;
287
  use num_bigint::BigInt;
288

289
  #[test]
290
  fn test_prime() {
1✔
291
    for &p in SMALL_PRIMES.iter() {
2,047✔
292
      assert!(is_probably_prime(&BigInt::from(p), 16));
2,047✔
293
    }
294

295
    assert!(is_probably_prime(&BigInt::from(0x7FFF_FFFF), 16));
1✔
296
  }
1✔
297

298
  #[test]
299
  fn test_composite() {
1✔
300
    assert!(!is_probably_prime(&BigInt::from(0x7FFF_FFFE), 16));
1✔
301
    assert!(!is_probably_prime(
1✔
302
      &BigInt::from(0xFFFF_FFFF_FFFF_FFFF_u64),
1✔
303
      16
1✔
304
    ));
1✔
305
    assert!(!is_probably_prime(&BigInt::parse_bytes(b"12345678901234567890123456789012345678901234567890123456789012345678901234567890", 10).unwrap(), 16));
1✔
306
  }
1✔
307

308
  #[test]
309
  fn oeis_a014233() {
1✔
310
    // https://oeis.org/A014233
1✔
311
    //
1✔
312
    // Smallest odd number for which Miller-Rabin primality test
1✔
313
    // on bases <= n-th prime does not reveal compositeness.
1✔
314
    let a014233: [BigInt; 10] = [
1✔
315
      2047u64.into(),
1✔
316
      1373653u64.into(),
1✔
317
      25326001u64.into(),
1✔
318
      3215031751u64.into(),
1✔
319
      2152302898747u64.into(),
1✔
320
      3474749660383u64.into(),
1✔
321
      341550071728321u64.into(),
1✔
322
      3825123056546413051u64.into(),
1✔
323
      BigInt::parse_bytes(b"318665857834031151167461", 10).unwrap(),
1✔
324
      BigInt::parse_bytes(b"3317044064679887385961981", 10).unwrap(),
1✔
325
    ];
1✔
326

327
    for p in a014233 {
11✔
328
      assert!(!is_probably_prime(&p, 16), "{} should be composite", p);
10✔
329
    }
330
  }
1✔
331
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc