#![allow(missing_docs)]
use ruchy::frontend::parser::Parser;
use ruchy::runtime::interpreter::Interpreter;
#[test]
fn test_dataframe_indexing_row_access() {
let code = r#"
let df = df![
"id" => [1, 2, 3],
"name" => ["Alice", "Bob", "Charlie"]
];
df[0]
"#;
let mut parser = Parser::new(code);
let ast = parser.parse().expect("Parse failed");
let mut interpreter = Interpreter::new();
let result = interpreter.eval_expr(&ast);
assert!(result.is_ok(), "DataFrame indexing should work: {result:?}");
}
#[test]
fn test_dataframe_field_access_column() {
let code = r#"
let df = df![
"id" => [1, 2, 3],
"name" => ["Alice", "Bob", "Charlie"]
];
df.id
"#;
let mut parser = Parser::new(code);
let ast = parser.parse().expect("Parse failed");
let mut interpreter = Interpreter::new();
let result = interpreter.eval_expr(&ast);
assert!(
result.is_ok(),
"DataFrame field access should work: {result:?}"
);
}
#[test]
fn test_dataframe_column_access_via_string_index() {
let code = r#"
let df = df![
"id" => [1, 2, 3],
"name" => ["Alice", "Bob", "Charlie"]
];
df["name"]
"#;
let mut parser = Parser::new(code);
let ast = parser.parse().expect("Parse failed");
let mut interpreter = Interpreter::new();
let result = interpreter.eval_expr(&ast);
assert!(
result.is_ok(),
"DataFrame string indexing should work: {result:?}"
);
}
#[test]
fn test_dataframe_out_of_bounds_index() {
let code = r#"
let df = df![
"id" => [1, 2, 3]
];
df[999]
"#;
let mut parser = Parser::new(code);
let ast = parser.parse().expect("Parse failed");
let mut interpreter = Interpreter::new();
let result = interpreter.eval_expr(&ast);
assert!(result.is_err(), "Out of bounds should error gracefully");
}
#[test]
fn test_dataframe_nonexistent_field() {
let code = r#"
let df = df![
"id" => [1, 2, 3]
];
df.nonexistent
"#;
let mut parser = Parser::new(code);
let ast = parser.parse().expect("Parse failed");
let mut interpreter = Interpreter::new();
let result = interpreter.eval_expr(&ast);
assert!(result.is_err(), "Nonexistent field should error gracefully");
}