fixed_wide_vectors/fixed_wide/src/tests.rs

47 lines
920 B
Rust
Raw Normal View History

2024-08-28 19:17:00 +00:00
use fixed_wide_traits::wide::WideMul;
2024-08-29 20:16:02 +00:00
use crate::types::I32F32;
2024-08-28 19:17:00 +00:00
#[test]
fn test_wide_mul(){
2024-08-29 20:16:02 +00:00
let a=I32F32::ONE;
2024-08-28 19:17:00 +00:00
let aa=a.wide_mul(a);
assert_eq!(aa,crate::types::I64F64::ONE);
}
#[test]
fn test_bint(){
2024-08-29 20:16:02 +00:00
let a=I32F32::ONE;
assert_eq!(a*2,I32F32::from(2));
2024-08-28 19:17:00 +00:00
}
2024-08-29 17:12:08 +00:00
#[test]
fn test_sqrt(){
2024-08-29 20:16:02 +00:00
let a=I32F32::ONE*4;
assert_eq!(a.sqrt(),I32F32::from(2));
2024-08-29 17:12:08 +00:00
}
2024-08-29 19:13:42 +00:00
#[test]
fn test_sqrt_low(){
2024-08-29 20:16:02 +00:00
let a=I32F32::HALF;
2024-08-29 19:13:42 +00:00
let b=a*a;
assert_eq!(b.sqrt(),a);
}
2024-08-29 20:16:09 +00:00
fn find_equiv_sqrt_via_f64(n:I32F32)->I32F32{
//GIMME THEM BITS BOY
let &[bits]=n.to_bits().to_bits().digits();
let ibits=bits as i64;
let f=(ibits as f64)/((1u64<<32) as f64);
let f_ans=f.sqrt();
let mut i=(f_ans*((1u64<<32) as f64)) as i64;
let s=(i as i128)*(i as i128);
if s<((ibits as i128)<<32){
i+=1;
}
I32F32::from_bits(bnum::BInt::<1>::from(i))
}
#[test]
fn test_sqrt_exact(){
let a=I32F32::ONE*2;
let b=find_equiv_sqrt_via_f64(a);
assert_eq!(a.sqrt(),b);
}