use luau::{Error, Lua, Table};
#[test]
fn sequence_iterator_advances_after_conversion_errors() -> Result<(), Error> {
let lua = Lua::new()?;
let table = lua.create_table()?;
table.raw_set(1, 10)?;
table.raw_set(2, "not an integer")?;
table.raw_set(3, 30)?;
let mut values = table.sequence_values::<i32>();
assert_eq!(values.next().transpose()?, Some(10));
assert!(matches!(
values.next(),
Some(Err(Error::FromLuaConversionError { .. }))
));
assert_eq!(values.next().transpose()?, Some(30));
assert!(values.next().is_none());
Ok(())
}
#[test]
fn table_capacity_rejects_values_outside_the_vm_domain() -> Result<(), Error> {
let lua = Lua::new()?;
assert!(matches!(
lua.create_table_with_capacity(usize::MAX, 0),
Err(Error::RuntimeError(message)) if message == "table overflow"
));
Ok(())
}
#[test]
fn table_len_preserves_wide_luau_integer_results() -> Result<(), Error> {
let lua = Lua::new()?;
let table: Table<'_> = lua
.load(
r#"
return setmetatable({}, {
__len = function()
return 2147483648
end,
})
"#,
)
.eval()?;
assert_eq!(table.len()?, 2_147_483_648);
Ok(())
}