svod-tensor 0.1.0-alpha.3

High-level lazy tensor API for the Svod ML compiler
Documentation
use crate::*;
use svod_dtype::DType;

#[test]
fn test_bitwise_and_basic() {
    let a = Tensor::from_slice([0b1010i32, 0b1100]);
    let b = Tensor::from_slice([0b1100i32, 0b0011]);
    let result = a.bitwise_and(&b).unwrap();
    assert_eq!(result.uop().dtype(), DType::Int32);
}

#[test]
fn test_bitwise_or_basic() {
    let a = Tensor::from_slice([0b1010i32, 0b1100]);
    let b = Tensor::from_slice([0b1100i32, 0b0011]);
    let result = a.bitwise_or(&b).unwrap();
    assert_eq!(result.uop().dtype(), DType::Int32);
}

#[test]
fn test_bitwise_xor_basic() {
    let a = Tensor::from_slice([0b1010i32, 0b1100]);
    let b = Tensor::from_slice([0b1100i32, 0b0011]);
    let result = a.bitwise_xor(&b).unwrap();
    assert_eq!(result.uop().dtype(), DType::Int32);
}

#[test]
fn test_lshift_basic() {
    let t = Tensor::from_slice([1i32, 2, 3]);
    let shift = Tensor::from_slice([1i32, 2, 3]);
    let result = t.lshift(&shift).unwrap();
    assert_eq!(result.uop().dtype(), DType::Int32);
}

#[test]
fn test_rshift_basic() {
    let t = Tensor::from_slice([8i32, 16, 24]);
    let shift = Tensor::from_slice([1i32, 2, 3]);
    let result = t.rshift(&shift).unwrap();
    assert_eq!(result.uop().dtype(), DType::Int32);
}

#[test]
fn test_bitwise_bool() {
    let a = Tensor::from_slice([true, false, true]);
    let b = Tensor::from_slice([true, true, false]);
    let result = a.bitwise_and(&b).unwrap();
    assert_eq!(result.uop().dtype(), DType::Bool);
}

#[test]
fn test_bitwise_error_on_float() {
    let a = Tensor::from_slice([1.0f32, 2.0]);
    let b = Tensor::from_slice([3.0f32, 4.0]);
    let result = a.bitwise_and(&b);
    assert!(result.is_err());
}