feat: convert polynomial to block
This commit is contained in:
parent
4f5612df47
commit
27acd0a531
3 changed files with 47 additions and 0 deletions
|
|
@ -1 +1,2 @@
|
|||
mod parse;
|
||||
mod poly;
|
||||
|
|
|
|||
46
src/utils/poly.rs
Normal file
46
src/utils/poly.rs
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
use std::{fmt::format, str::FromStr, u128, u8};
|
||||
|
||||
pub fn get_alpha_rep(num: u128) -> String {
|
||||
let mut powers: Vec<u32> = vec![];
|
||||
|
||||
for shift in 0..127 {
|
||||
//println!("{:?}", ((num >> shift) & 1));
|
||||
if (((num >> shift) & 1) == 1) {
|
||||
println!("Shift success");
|
||||
powers.push(shift);
|
||||
}
|
||||
}
|
||||
//println!("{:?}", powers);
|
||||
|
||||
let mut alpha_rep = String::new();
|
||||
|
||||
if powers.len() == 1 {
|
||||
return String::from_str("1").unwrap();
|
||||
}
|
||||
|
||||
for power in powers {
|
||||
alpha_rep.push_str(&format!("a^{power}"));
|
||||
}
|
||||
|
||||
alpha_rep
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
// Note this useful idiom: importing names from outer (for mod tests) scope.
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_num_to_alpha_rep_1() {
|
||||
let number: u128 = 0x010000000000000000000000000000000;
|
||||
let polynomial: &str = "1";
|
||||
assert_eq!(get_alpha_rep(number.reverse_bits()), polynomial);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_num_to_alpha_rep_a4a2a() {
|
||||
let number: u128 = 0x16000000000000000000000000000000;
|
||||
let polynomial: &str = "a^4a^2a";
|
||||
assert_eq!(get_alpha_rep(number.reverse_bits()), polynomial);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue