Skip to main content

stwo_gpu/core/poly/circle/
mod.rs

1mod canonic;
2mod domain;
3
4pub use canonic::CanonicCoset;
5pub use domain::{CircleDomain, MAX_CIRCLE_DOMAIN_LOG_SIZE, MIN_CIRCLE_DOMAIN_LOG_SIZE};
6
7#[cfg(test)]
8mod tests {
9    use super::CanonicCoset;
10    use crate::core::utils::bit_reverse_index;
11
12    #[test]
13    fn is_canonic_valid_domain() {
14        let canonic_domain = CanonicCoset::new(4).circle_domain();
15
16        assert!(canonic_domain.is_canonic());
17    }
18
19    #[test]
20    pub fn test_bit_reverse_indices() {
21        let log_domain_size = 7;
22        let log_small_domain_size = 5;
23        let domain = CanonicCoset::new(log_domain_size);
24        let small_domain = CanonicCoset::new(log_small_domain_size);
25        let n_folds = log_domain_size - log_small_domain_size;
26        for i in 0..2usize.pow(log_domain_size) {
27            let point = domain.at(bit_reverse_index(i, log_domain_size));
28            let small_point = small_domain.at(bit_reverse_index(
29                i / 2usize.pow(n_folds),
30                log_small_domain_size,
31            ));
32            assert_eq!(point.repeated_double(n_folds), small_point);
33        }
34    }
35}