use numrs::array::promoted_dtype;
use numrs::array::{Array, DType, DTypeValue};
#[test]
fn test_array_conversion_f32_to_f32() {
let a = Array::new(vec![3], vec![1.0, 2.0, 3.0]);
let b = a.to_f32();
assert_eq!(b.data, vec![1.0, 2.0, 3.0]);
}
#[test]
fn test_array_conversion_i32_to_f32() {
let a = Array::new(vec![2, 2], vec![1.0, 2.0, 3.0, 4.0]);
let b = a.clone();
assert_eq!(a.shape, b.shape);
assert_eq!(a.data, b.data);
}
#[test]
fn test_dtype_promotion_logic() {
assert_eq!(promoted_dtype(DType::F32, DType::F32), DType::F32);
assert_eq!(promoted_dtype(DType::F32, DType::I32), DType::F32);
assert_eq!(promoted_dtype(DType::I32, DType::F32), DType::F32);
assert_eq!(promoted_dtype(DType::I32, DType::I32), DType::I32);
assert_eq!(promoted_dtype(DType::Bool, DType::F32), DType::F32);
}
#[test]
fn test_array_creation_from_vec_macros() {
let a = Array::new(vec![1], vec![0.0]);
assert_eq!(a.len(), 1);
assert_eq!(a.shape, vec![1]);
}
#[test]
fn test_dtype_value_trait() {
let f = 10.0f32;
assert_eq!(f32::dtype(), DType::F32);
assert_eq!(f.to_f32(), 10.0);
let i = 5i32;
assert_eq!(i32::dtype(), DType::I32);
assert_eq!(i.to_f32(), 5.0);
let from_f = i32::from_f32(5.9); assert_eq!(from_f, 5);
}