use reifydb_core::value::column::factory;
use reifydb_value::value::value_type::{ValueType, field::from_field};
use crate::common::{Env, Frozen, alias, arith, batch, column, strings};
#[test]
fn an_alias_over_a_column_lowers_to_the_column_renamed() {
let mut frozen = Frozen::inline(&["Field { name: \"x\", data_type: Int32 } [\"1\", \"2\"]"]);
let env = Env::new();
let input = batch(vec![factory::int4("a", [1, 2])]);
let expression = alias("x", column("a"));
let lowered = env.lowered(&expression, input.clone()).unwrap();
let old = frozen.old(&env, &expression, input).unwrap();
assert_eq!(lowered, old);
assert_eq!(lowered.0.name(), "x");
assert_eq!(strings(&lowered), vec!["1", "2"]);
}
#[test]
fn an_alias_over_arithmetic_keeps_the_arith_type_and_takes_the_alias_name() {
let mut frozen = Frozen::inline(&["Field { name: \"total\", data_type: Int64 } [\"3\"]"]);
let env = Env::new();
let input = batch(vec![factory::int4("l", [1]), factory::int4("r", [2])]);
let expression = alias("total", arith("+", column("l"), column("r")));
let lowered = env.lowered(&expression, input.clone()).unwrap();
let old = frozen.old(&env, &expression, input).unwrap();
assert_eq!(lowered, old);
assert_eq!(lowered.0.name(), "total");
assert_eq!(from_field(&lowered.0).unwrap().value_type, Some(ValueType::Int8));
assert_eq!(strings(&lowered), vec!["3"]);
}