Skip to content

Commit 2fc7568

Browse files
authored
primefield: extract dev module (#1323)
Moves all of the `test_*!` macros to the `dev` module
1 parent 05a1ff0 commit 2fc7568

File tree

2 files changed

+117
-117
lines changed

2 files changed

+117
-117
lines changed

primefield/src/dev.rs

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
/// Implement all tests for a type which impls the `PrimeField` trait.
2+
#[macro_export]
3+
macro_rules! test_primefield {
4+
($fe:tt, $t:expr) => {
5+
$crate::test_primefield_constants!($fe, $t);
6+
$crate::test_field_identity!($fe);
7+
$crate::test_field_invert!($fe);
8+
$crate::test_field_sqrt!($fe);
9+
};
10+
}
11+
12+
/// Implement tests for constants defined by the `PrimeField` trait.
13+
#[macro_export]
14+
macro_rules! test_primefield_constants {
15+
($fe:tt, $t:expr) => {
16+
#[test]
17+
fn two_inv_constant() {
18+
use $crate::ff::PrimeField;
19+
assert_eq!($fe::from(2u32) * $fe::TWO_INV, $fe::ONE);
20+
}
21+
22+
#[test]
23+
fn root_of_unity_constant() {
24+
use $crate::ff::PrimeField;
25+
assert!($fe::S < 128);
26+
let two_to_s = 1u128 << $fe::S;
27+
28+
// ROOT_OF_UNITY^{2^s} mod m == 1
29+
assert_eq!(
30+
$fe::ROOT_OF_UNITY.pow_vartime(&[
31+
(two_to_s & 0xFFFFFFFFFFFFFFFF) as u64,
32+
(two_to_s >> 64) as u64,
33+
0,
34+
0
35+
]),
36+
$fe::ONE
37+
);
38+
39+
// MULTIPLICATIVE_GENERATOR^{t} mod m == ROOT_OF_UNITY
40+
assert_eq!(
41+
$fe::MULTIPLICATIVE_GENERATOR.pow_vartime(&$t),
42+
$fe::ROOT_OF_UNITY
43+
)
44+
}
45+
46+
#[test]
47+
fn root_of_unity_inv_constant() {
48+
use $crate::ff::PrimeField;
49+
assert_eq!($fe::ROOT_OF_UNITY * $fe::ROOT_OF_UNITY_INV, $fe::ONE);
50+
}
51+
52+
#[test]
53+
fn delta_constant() {
54+
use $crate::ff::PrimeField;
55+
56+
// DELTA^{t} mod m == 1
57+
assert_eq!($fe::DELTA.pow_vartime(&$t), $fe::ONE);
58+
}
59+
};
60+
}
61+
62+
/// Implement field element identity tests.
63+
#[macro_export]
64+
macro_rules! test_field_identity {
65+
($fe:tt) => {
66+
#[test]
67+
fn zero_is_additive_identity() {
68+
let zero = $fe::ZERO;
69+
let one = $fe::ONE;
70+
assert_eq!(zero.add(&zero), zero);
71+
assert_eq!(one.add(&zero), one);
72+
}
73+
74+
#[test]
75+
fn one_is_multiplicative_identity() {
76+
let one = $fe::ONE;
77+
assert_eq!(one.multiply(&one), one);
78+
}
79+
};
80+
}
81+
82+
/// Implement field element inversion tests.
83+
#[macro_export]
84+
macro_rules! test_field_invert {
85+
($fe:tt) => {
86+
#[test]
87+
fn invert() {
88+
let one = $fe::ONE;
89+
assert_eq!(one.invert().unwrap(), one);
90+
91+
let three = one + &one + &one;
92+
let inv_three = three.invert().unwrap();
93+
assert_eq!(three * &inv_three, one);
94+
95+
let minus_three = -three;
96+
let inv_minus_three = minus_three.invert().unwrap();
97+
assert_eq!(inv_minus_three, -inv_three);
98+
assert_eq!(three * &inv_minus_three, -one);
99+
}
100+
};
101+
}
102+
103+
/// Implement field element square root tests.
104+
#[macro_export]
105+
macro_rules! test_field_sqrt {
106+
($fe:tt) => {
107+
#[test]
108+
fn sqrt() {
109+
for &n in &[1u64, 4, 9, 16, 25, 36, 49, 64] {
110+
let fe = $fe::from(n);
111+
let sqrt = fe.sqrt().unwrap();
112+
assert_eq!(sqrt.square(), fe);
113+
}
114+
}
115+
};
116+
}

primefield/src/lib.rs

Lines changed: 1 addition & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ pub use rand_core;
1414
pub use subtle;
1515
pub use zeroize;
1616

17+
mod dev;
1718
mod fiat;
1819

1920
/// Implements a field element type whose internal representation is in
@@ -463,120 +464,3 @@ macro_rules! field_op {
463464
}
464465
};
465466
}
466-
467-
/// Implement all tests for a type which impls the `PrimeField` trait.
468-
#[macro_export]
469-
macro_rules! test_primefield {
470-
($fe:tt, $t:expr) => {
471-
$crate::test_primefield_constants!($fe, $t);
472-
$crate::test_field_identity!($fe);
473-
$crate::test_field_invert!($fe);
474-
$crate::test_field_sqrt!($fe);
475-
};
476-
}
477-
478-
/// Implement tests for constants defined by the `PrimeField` trait.
479-
#[macro_export]
480-
macro_rules! test_primefield_constants {
481-
($fe:tt, $t:expr) => {
482-
#[test]
483-
fn two_inv_constant() {
484-
use $crate::ff::PrimeField;
485-
assert_eq!($fe::from(2u32) * $fe::TWO_INV, $fe::ONE);
486-
}
487-
488-
#[test]
489-
fn root_of_unity_constant() {
490-
use $crate::ff::PrimeField;
491-
assert!($fe::S < 128);
492-
let two_to_s = 1u128 << $fe::S;
493-
494-
// ROOT_OF_UNITY^{2^s} mod m == 1
495-
assert_eq!(
496-
$fe::ROOT_OF_UNITY.pow_vartime(&[
497-
(two_to_s & 0xFFFFFFFFFFFFFFFF) as u64,
498-
(two_to_s >> 64) as u64,
499-
0,
500-
0
501-
]),
502-
$fe::ONE
503-
);
504-
505-
// MULTIPLICATIVE_GENERATOR^{t} mod m == ROOT_OF_UNITY
506-
assert_eq!(
507-
$fe::MULTIPLICATIVE_GENERATOR.pow_vartime(&$t),
508-
$fe::ROOT_OF_UNITY
509-
)
510-
}
511-
512-
#[test]
513-
fn root_of_unity_inv_constant() {
514-
use $crate::ff::PrimeField;
515-
assert_eq!($fe::ROOT_OF_UNITY * $fe::ROOT_OF_UNITY_INV, $fe::ONE);
516-
}
517-
518-
#[test]
519-
fn delta_constant() {
520-
use $crate::ff::PrimeField;
521-
522-
// DELTA^{t} mod m == 1
523-
assert_eq!($fe::DELTA.pow_vartime(&$t), $fe::ONE);
524-
}
525-
};
526-
}
527-
528-
/// Implement field element identity tests.
529-
#[macro_export]
530-
macro_rules! test_field_identity {
531-
($fe:tt) => {
532-
#[test]
533-
fn zero_is_additive_identity() {
534-
let zero = $fe::ZERO;
535-
let one = $fe::ONE;
536-
assert_eq!(zero.add(&zero), zero);
537-
assert_eq!(one.add(&zero), one);
538-
}
539-
540-
#[test]
541-
fn one_is_multiplicative_identity() {
542-
let one = $fe::ONE;
543-
assert_eq!(one.multiply(&one), one);
544-
}
545-
};
546-
}
547-
548-
/// Implement field element inversion tests.
549-
#[macro_export]
550-
macro_rules! test_field_invert {
551-
($fe:tt) => {
552-
#[test]
553-
fn invert() {
554-
let one = $fe::ONE;
555-
assert_eq!(one.invert().unwrap(), one);
556-
557-
let three = one + &one + &one;
558-
let inv_three = three.invert().unwrap();
559-
assert_eq!(three * &inv_three, one);
560-
561-
let minus_three = -three;
562-
let inv_minus_three = minus_three.invert().unwrap();
563-
assert_eq!(inv_minus_three, -inv_three);
564-
assert_eq!(three * &inv_minus_three, -one);
565-
}
566-
};
567-
}
568-
569-
/// Implement field element square root tests.
570-
#[macro_export]
571-
macro_rules! test_field_sqrt {
572-
($fe:tt) => {
573-
#[test]
574-
fn sqrt() {
575-
for &n in &[1u64, 4, 9, 16, 25, 36, 49, 64] {
576-
let fe = $fe::from(n);
577-
let sqrt = fe.sqrt().unwrap();
578-
assert_eq!(sqrt.square(), fe);
579-
}
580-
}
581-
};
582-
}

0 commit comments

Comments
 (0)