mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-07 16:23:12 +00:00
Test reverse_index_bits
Thanks to Least Authority for this
This commit is contained in:
parent
882297877c
commit
c622e45246
@ -5,3 +5,4 @@ version = "0.1.0"
|
|||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
rand = { version = "0.8.5", default-features = false, features = ["getrandom"] }
|
||||||
|
|||||||
@ -274,8 +274,50 @@ pub fn branch_hint() {
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
|
use rand::rngs::OsRng;
|
||||||
|
use rand::Rng;
|
||||||
|
|
||||||
use crate::{log2_ceil, log2_strict};
|
use crate::{log2_ceil, log2_strict};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_reverse_index_bits() {
|
||||||
|
let lengths = [32, 128, 1 << 16];
|
||||||
|
let mut rng = OsRng;
|
||||||
|
for _ in 0..32 {
|
||||||
|
for length in lengths {
|
||||||
|
let mut rand_list: Vec<u32> = Vec::with_capacity(length);
|
||||||
|
rand_list.resize_with(length, || rng.gen());
|
||||||
|
|
||||||
|
let out = super::reverse_index_bits(&rand_list);
|
||||||
|
let expect = reverse_index_bits_naive(&rand_list);
|
||||||
|
|
||||||
|
for (out, expect) in out.iter().zip(&expect) {
|
||||||
|
assert_eq!(out, expect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_reverse_index_bits_in_place() {
|
||||||
|
let lengths = [32, 128, 1 << 16];
|
||||||
|
let mut rng = OsRng;
|
||||||
|
for _ in 0..32 {
|
||||||
|
for length in lengths {
|
||||||
|
let mut rand_list: Vec<u32> = Vec::with_capacity(length);
|
||||||
|
rand_list.resize_with(length, || rng.gen());
|
||||||
|
|
||||||
|
let expect = reverse_index_bits_naive(&rand_list);
|
||||||
|
|
||||||
|
super::reverse_index_bits_in_place(&mut rand_list);
|
||||||
|
|
||||||
|
for (got, expect) in rand_list.iter().zip(&expect) {
|
||||||
|
assert_eq!(got, expect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_log2_strict() {
|
fn test_log2_strict() {
|
||||||
assert_eq!(log2_strict(1), 0);
|
assert_eq!(log2_strict(1), 0);
|
||||||
@ -326,4 +368,17 @@ mod tests {
|
|||||||
assert_eq!(log2_ceil(usize::MAX - 1), usize::BITS as usize);
|
assert_eq!(log2_ceil(usize::MAX - 1), usize::BITS as usize);
|
||||||
assert_eq!(log2_ceil(usize::MAX), usize::BITS as usize);
|
assert_eq!(log2_ceil(usize::MAX), usize::BITS as usize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn reverse_index_bits_naive<T: Copy>(arr: &[T]) -> Vec<T> {
|
||||||
|
let n = arr.len();
|
||||||
|
let n_power = log2_strict(n);
|
||||||
|
|
||||||
|
let mut out = vec![None; n];
|
||||||
|
for (i, v) in arr.iter().enumerate() {
|
||||||
|
let dst = i.reverse_bits() >> 64 - n_power;
|
||||||
|
out[dst] = Some(*v);
|
||||||
|
}
|
||||||
|
|
||||||
|
out.into_iter().map(|x| x.unwrap()).collect()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user