use omnilua::{Lua, LuaVersion, Value};
fn eval_value(version: LuaVersion, code: &str) -> Value {
let lua = Lua::new_versioned(version);
lua.load(code)
.eval()
.unwrap_or_else(|e| panic!("eval of `{code}` failed under {version:?}: {e:?}"))
}
fn assert_float(version: LuaVersion, code: &str) {
match eval_value(version, code) {
Value::Number(_) => {}
other => panic!(
"FloatOnly invariant violated under {version:?}: `{code}` returned \
{other:?}, expected a Float (Value::Number)"
),
}
}
#[test]
fn v51_v52_random_results_are_always_float() {
for v in [LuaVersion::V51, LuaVersion::V52] {
assert_float(v, "math.randomseed(1); return math.random()");
assert_float(v, "math.randomseed(1); return math.random(10)");
assert_float(v, "math.randomseed(1); return math.random(1)");
assert_float(v, "math.randomseed(1); return math.random(5, 8)");
assert_float(v, "math.randomseed(1); return math.random(-3, 3)");
}
}
#[test]
fn v54_random_interval_is_integer_subtype() {
match eval_value(LuaVersion::V54, "math.randomseed(1); return math.random(5, 8)") {
Value::Integer(_) => {}
other => panic!(
"5.4 random(5,8) should be an Int (Value::Integer), got {other:?}"
),
}
}