use crate::UOp;
#[test]
fn test_sqrt_positive() {
assert_eq!(UOp::native_const(9.0f32).try_sqrt().unwrap().dtype(), morok_dtype::DType::Float32);
}
#[test]
fn test_sqrt_zero() {
assert_eq!(UOp::native_const(0.0f32).try_sqrt().unwrap().dtype(), morok_dtype::DType::Float32);
}
#[test]
fn test_sqrt_one() {
assert_eq!(UOp::native_const(1.0f32).try_sqrt().unwrap().dtype(), morok_dtype::DType::Float32);
}
#[test]
fn test_sqrt_preserves_dtype() {
assert_eq!(UOp::native_const(4.0f32).try_sqrt().unwrap().dtype(), morok_dtype::DType::Float32);
assert_eq!(UOp::native_const(4.0f64).try_sqrt().unwrap().dtype(), morok_dtype::DType::Float64);
}
#[test]
fn test_exp2_zero() {
assert_eq!(UOp::native_const(0.0f32).try_exp2().unwrap().dtype(), morok_dtype::DType::Float32);
}
#[test]
fn test_exp2_positive() {
assert_eq!(UOp::native_const(3.0f32).try_exp2().unwrap().dtype(), morok_dtype::DType::Float32);
}
#[test]
fn test_exp2_negative() {
assert_eq!(UOp::native_const(-2.0f32).try_exp2().unwrap().dtype(), morok_dtype::DType::Float32);
}
#[test]
fn test_exp2_one() {
assert_eq!(UOp::native_const(1.0f32).try_exp2().unwrap().dtype(), morok_dtype::DType::Float32);
}
#[test]
fn test_log2_one() {
assert_eq!(UOp::native_const(1.0f32).try_log2().unwrap().dtype(), morok_dtype::DType::Float32);
}
#[test]
fn test_log2_power_of_two() {
assert_eq!(UOp::native_const(8.0f32).try_log2().unwrap().dtype(), morok_dtype::DType::Float32);
}
#[test]
fn test_log2_two() {
assert_eq!(UOp::native_const(2.0f32).try_log2().unwrap().dtype(), morok_dtype::DType::Float32);
}
#[test]
fn test_log2_fractional() {
assert_eq!(UOp::native_const(0.5f32).try_log2().unwrap().dtype(), morok_dtype::DType::Float32);
}
#[test]
fn test_sin_zero() {
let result = UOp::native_const(0.0f32).try_sin().unwrap();
assert_eq!(result.dtype(), morok_dtype::DType::Float32);
}
#[test]
fn test_sin_positive() {
let result = UOp::native_const(1.57f32).try_sin().unwrap(); assert_eq!(result.dtype(), morok_dtype::DType::Float32);
}
#[test]
fn test_sin_negative() {
let result = UOp::native_const(-1.57f32).try_sin().unwrap(); assert_eq!(result.dtype(), morok_dtype::DType::Float32);
}
#[test]
fn test_sin_preserves_dtype() {
let result_f32 = UOp::native_const(0.5f32).try_sin().unwrap();
assert_eq!(result_f32.dtype(), morok_dtype::DType::Float32);
let result_f64 = UOp::native_const(0.5f64).try_sin().unwrap();
assert_eq!(result_f64.dtype(), morok_dtype::DType::Float64);
}
#[test]
fn test_reciprocal_one() {
let result = UOp::try_reciprocal(&UOp::native_const(1.0f32)).unwrap();
assert_eq!(result.dtype(), morok_dtype::DType::Float32);
}
#[test]
fn test_reciprocal_two() {
let result = UOp::try_reciprocal(&UOp::native_const(2.0f32)).unwrap();
assert_eq!(result.dtype(), morok_dtype::DType::Float32);
}
#[test]
fn test_reciprocal_negative() {
let result = UOp::try_reciprocal(&UOp::native_const(-4.0f32)).unwrap();
assert_eq!(result.dtype(), morok_dtype::DType::Float32);
}
#[test]
fn test_reciprocal_fractional() {
let result = UOp::try_reciprocal(&UOp::native_const(0.5f32)).unwrap();
assert_eq!(result.dtype(), morok_dtype::DType::Float32);
}
#[test]
fn test_trunc_positive() {
let result = UOp::trunc(UOp::native_const(3.7f32));
assert_eq!(result.dtype(), morok_dtype::DType::Float32);
}
#[test]
fn test_trunc_negative() {
let result = UOp::trunc(UOp::native_const(-3.7f32));
assert_eq!(result.dtype(), morok_dtype::DType::Float32);
}
#[test]
fn test_trunc_zero() {
let result = UOp::trunc(UOp::native_const(0.0f32));
assert_eq!(result.dtype(), morok_dtype::DType::Float32);
}
#[test]
fn test_trunc_integer_value() {
let result = UOp::trunc(UOp::native_const(5.0f32));
assert_eq!(result.dtype(), morok_dtype::DType::Float32);
}
#[test]
fn test_trunc_near_zero() {
let result_pos = UOp::trunc(UOp::native_const(0.9f32));
assert_eq!(result_pos.dtype(), morok_dtype::DType::Float32);
let result_neg = UOp::trunc(UOp::native_const(-0.9f32));
assert_eq!(result_neg.dtype(), morok_dtype::DType::Float32);
}
#[test]
fn test_sqrt_exp2_identity() {
let log_val = UOp::native_const(4.0f32).try_log2().unwrap();
let result = log_val.try_exp2().unwrap();
assert_eq!(result.dtype(), morok_dtype::DType::Float32);
}
#[test]
fn test_reciprocal_twice() {
let val = UOp::native_const(5.0f32);
let recip1 = UOp::try_reciprocal(&val).unwrap();
let recip2 = UOp::try_reciprocal(&recip1).unwrap();
assert_eq!(recip2.dtype(), morok_dtype::DType::Float32);
}
#[test]
fn test_transcendental_composition() {
let exp_val = UOp::native_const(2.0f32).try_exp2().unwrap();
let result = exp_val.try_sqrt().unwrap();
assert_eq!(result.dtype(), morok_dtype::DType::Float32);
}