streamweave 0.10.1

Composable, async, stream-first computation in pure Rust
Documentation
//! Tests for arithmetic common utilities

use crate::nodes::arithmetic::common::add_values;
use std::any::Any;
use std::sync::Arc;

#[test]
fn test_add_values_i32() {
  let v1 = Arc::new(10i32) as Arc<dyn Any + Send + Sync>;
  let v2 = Arc::new(20i32) as Arc<dyn Any + Send + Sync>;
  let result = add_values(&v1, &v2).unwrap();
  assert_eq!(*result.downcast::<i32>().unwrap(), 30);
}

#[test]
fn test_add_values_i64() {
  let v1 = Arc::new(100i64) as Arc<dyn Any + Send + Sync>;
  let v2 = Arc::new(200i64) as Arc<dyn Any + Send + Sync>;
  let result = add_values(&v1, &v2).unwrap();
  assert_eq!(*result.downcast::<i64>().unwrap(), 300);
}

#[test]
fn test_add_values_f64() {
  let v1 = Arc::new(1.5f64) as Arc<dyn Any + Send + Sync>;
  let v2 = Arc::new(2.5f64) as Arc<dyn Any + Send + Sync>;
  let result = add_values(&v1, &v2).unwrap();
  let result_val = *result.downcast::<f64>().unwrap();
  assert!((result_val - 4.0).abs() < 0.001);
}

#[test]
fn test_add_values_type_promotion_i32_to_i64() {
  let v1 = Arc::new(10i32) as Arc<dyn Any + Send + Sync>;
  let v2 = Arc::new(20i64) as Arc<dyn Any + Send + Sync>;
  let result = add_values(&v1, &v2).unwrap();
  assert_eq!(*result.downcast::<i64>().unwrap(), 30);
}

#[test]
fn test_add_values_type_promotion_i32_to_f32() {
  let v1 = Arc::new(10i32) as Arc<dyn Any + Send + Sync>;
  let v2 = Arc::new(2.5f32) as Arc<dyn Any + Send + Sync>;
  let result = add_values(&v1, &v2).unwrap();
  let result_val = *result.downcast::<f32>().unwrap();
  assert!((result_val - 12.5).abs() < 0.001);
}

#[test]
fn test_add_values_overflow() {
  let v1 = Arc::new(i32::MAX) as Arc<dyn Any + Send + Sync>;
  let v2 = Arc::new(1i32) as Arc<dyn Any + Send + Sync>;
  let result = add_values(&v1, &v2);
  assert!(result.is_err());
  assert!(result.unwrap_err().contains("overflow"));
}

#[test]
fn test_add_values_unsupported_type() {
  let v1 = Arc::new("hello".to_string()) as Arc<dyn Any + Send + Sync>;
  let v2 = Arc::new("world".to_string()) as Arc<dyn Any + Send + Sync>;
  let result = add_values(&v1, &v2);
  assert!(result.is_err());
  assert!(result.unwrap_err().contains("Unsupported types"));
}