rayforce 0.1.0

Safe Rust bindings for RayforceDB - the ultra-fast columnar database
//! Tests for List type.

mod common;

use rayforce::{F64, I64, List, RayString, RayType};
use serial_test::serial;

#[test]
#[serial]
fn test_list_new() {
    init_runtime!();
    let list = List::new();
    assert_eq!(list.len(), 0);
    assert!(list.is_empty());
}

#[test]
#[serial]
fn test_list_push_i64() {
    init_runtime!();
    let mut list = List::new();
    list.push(1i64);
    list.push(2i64);
    list.push(3i64);
    assert_eq!(list.len(), 3);
}

#[test]
#[serial]
fn test_list_push_mixed() {
    init_runtime!();
    let mut list = List::new();
    list.push(42i64);
    list.push(3.14f64);
    list.push("hello");
    assert_eq!(list.len(), 3);
}

#[test]
#[serial]
fn test_list_get() {
    init_runtime!();
    let mut list = List::new();
    list.push(100i64);
    list.push(200i64);

    let item = list.get(0);
    assert!(item.is_some());

    let item = list.get(1);
    assert!(item.is_some());

    let item = list.get(2);
    assert!(item.is_none());
}

#[test]
#[serial]
fn test_list_iter() {
    init_runtime!();
    let mut list = List::new();
    list.push(1i64);
    list.push(2i64);
    list.push(3i64);

    let items: Vec<_> = list.iter().collect();
    assert_eq!(items.len(), 3);
}

#[test]
#[serial]
fn test_list_from_iter() {
    init_runtime!();
    let list = List::from_iter([1i64, 2i64, 3i64]);
    assert_eq!(list.len(), 3);
}

#[test]
#[serial]
fn test_list_with_typed_values() {
    init_runtime!();
    let mut list = List::new();
    list.push(I64::new(42).ptr().clone());
    list.push(F64::new(3.14).ptr().clone());
    list.push(RayString::new("test").ptr().clone());
    assert_eq!(list.len(), 3);
}

#[test]
#[serial]
fn test_list_large() {
    init_runtime!();
    let mut list = List::new();
    for i in 0..100 {
        list.push(i as i64);
    }
    assert_eq!(list.len(), 100);
}

#[test]
#[serial]
fn test_list_display() {
    init_runtime!();
    let mut list = List::new();
    list.push(1i64);
    list.push(2i64);
    let display = format!("{}", list);
    // Should display the list contents
    assert!(!display.is_empty());
}

#[test]
#[serial]
fn test_list_debug() {
    init_runtime!();
    let mut list = List::new();
    list.push(1i64);
    let debug = format!("{:?}", list);
    assert!(debug.contains("List"));
}

#[test]
#[serial]
fn test_list_default() {
    init_runtime!();
    let list: List = Default::default();
    assert!(list.is_empty());
}

#[test]
#[serial]
fn test_list_collect() {
    init_runtime!();
    let list: List = [1i64, 2, 3].into_iter().collect();
    assert_eq!(list.len(), 3);
}