use crate::types::{BduResult, Position};
pub fn syn_reducer_x(
_src_area_id: &str,
_dst_area_id: &str,
neuron_location: Position,
_src_dimensions: (usize, usize, usize),
dst_dimensions: (usize, usize, usize),
dst_y_index: u32,
dst_z_index: u32,
) -> BduResult<Vec<Position>> {
let (x, _y, _z) = neuron_location;
let dst_x_dim = dst_dimensions.0;
let mut positions = Vec::new();
for bit_pos in 0..dst_x_dim {
if bit_pos < 32 {
let mask = 1 << bit_pos;
if (x & mask) != 0 {
positions.push((bit_pos as u32, dst_y_index, dst_z_index));
}
}
}
Ok(positions)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_reducer() {
let result = syn_reducer_x("src", "dst", (5, 0, 0), (10, 10, 10), (8, 1, 1), 0, 0);
assert!(result.is_ok());
let positions = result.unwrap();
assert!(positions.contains(&(0, 0, 0)));
assert!(positions.contains(&(2, 0, 0)));
}
}