Fix test number generation

This commit is contained in:
Rerumu 2022-06-15 19:10:06 -04:00
parent 987a19ed8e
commit 65cd89c6d7
4 changed files with 30 additions and 30 deletions

View File

@ -4,6 +4,7 @@ local linked = {}
local LUA_NAN_ARITHMETIC = 0 / 0 local LUA_NAN_ARITHMETIC = 0 / 0
local LUA_NAN_CANONICAL = 0 / 0 local LUA_NAN_CANONICAL = 0 / 0
local LUA_NAN_DEFAULT = 0 / 0 local LUA_NAN_DEFAULT = 0 / 0
local LUA_INFINITY = math.huge
local function is_number_equality(lhs, rhs) local function is_number_equality(lhs, rhs)
if type(lhs) ~= "number" or type(rhs) ~= "number" then if type(lhs) ~= "number" or type(rhs) ~= "number" then

View File

@ -5,7 +5,6 @@ use std::{
use wast::{ use wast::{
core::{Expression, Instruction}, core::{Expression, Instruction},
token::{Float32, Float64},
AssertExpression, WastExecute, WastInvoke, AssertExpression, WastExecute, WastInvoke,
}; };
@ -26,21 +25,18 @@ impl LuaJIT {
match &data[0] { match &data[0] {
Instruction::I32Const(v) => write!(w, "{v}"), Instruction::I32Const(v) => write!(w, "{v}"),
Instruction::I64Const(v) => write!(w, "{v}LL"), Instruction::I64Const(v) => write!(w, "{v}LL"),
Instruction::F32Const(v) => write!(w, "{}", f32::from_bits(v.bits)), Instruction::F32Const(v) => target::write_f32(f32::from_bits(v.bits), w),
Instruction::F64Const(v) => write!(w, "{}", f64::from_bits(v.bits)), Instruction::F64Const(v) => target::write_f64(f64::from_bits(v.bits), w),
_ => panic!("Unsupported instruction"), _ => panic!("Unsupported instruction"),
} }
} }
write_assert_number!(write_assert_maybe_f32, Float32, f32);
write_assert_number!(write_assert_maybe_f64, Float64, f64);
fn write_simple_expression(data: &AssertExpression, w: &mut dyn Write) -> Result<()> { fn write_simple_expression(data: &AssertExpression, w: &mut dyn Write) -> Result<()> {
match data { match data {
AssertExpression::I32(v) => write!(w, "{v}"), AssertExpression::I32(v) => write!(w, "{v}"),
AssertExpression::I64(v) => write!(w, "{v}LL"), AssertExpression::I64(v) => write!(w, "{v}LL"),
AssertExpression::F32(v) => Self::write_assert_maybe_f32(v, w), AssertExpression::F32(v) => target::write_f32_nan(v, w),
AssertExpression::F64(v) => Self::write_assert_maybe_f64(v, w), AssertExpression::F64(v) => target::write_f64_nan(v, w),
_ => panic!("Unsupported expression"), _ => panic!("Unsupported expression"),
} }
} }

View File

@ -5,7 +5,6 @@ use std::{
use wast::{ use wast::{
core::{Expression, Instruction}, core::{Expression, Instruction},
token::{Float32, Float64},
AssertExpression, WastExecute, WastInvoke, AssertExpression, WastExecute, WastInvoke,
}; };
@ -22,7 +21,7 @@ impl Luau {
let data_1 = (data & 0xFFFFFFFF) as u32; let data_1 = (data & 0xFFFFFFFF) as u32;
let data_2 = (data >> 32 & 0xFFFFFFFF) as u32; let data_2 = (data >> 32 & 0xFFFFFFFF) as u32;
write!(w, "rt.num.from_u32({data_1}, {data_2})") write!(w, "{{{data_1}, {data_2}}}")
} }
fn write_expression(data: &Expression, w: &mut dyn Write) -> Result<()> { fn write_expression(data: &Expression, w: &mut dyn Write) -> Result<()> {
@ -33,21 +32,18 @@ impl Luau {
match &data[0] { match &data[0] {
Instruction::I32Const(v) => write!(w, "{v}"), Instruction::I32Const(v) => write!(w, "{v}"),
Instruction::I64Const(v) => Self::write_i64(*v, w), Instruction::I64Const(v) => Self::write_i64(*v, w),
Instruction::F32Const(v) => write!(w, "{}", f32::from_bits(v.bits)), Instruction::F32Const(v) => target::write_f32(f32::from_bits(v.bits), w),
Instruction::F64Const(v) => write!(w, "{}", f64::from_bits(v.bits)), Instruction::F64Const(v) => target::write_f64(f64::from_bits(v.bits), w),
_ => panic!("Unsupported instruction"), _ => panic!("Unsupported instruction"),
} }
} }
write_assert_number!(write_assert_maybe_f32, Float32, f32);
write_assert_number!(write_assert_maybe_f64, Float64, f64);
fn write_simple_expression(data: &AssertExpression, w: &mut dyn Write) -> Result<()> { fn write_simple_expression(data: &AssertExpression, w: &mut dyn Write) -> Result<()> {
match data { match data {
AssertExpression::I32(v) => write!(w, "{v}"), AssertExpression::I32(v) => write!(w, "{v}"),
AssertExpression::I64(v) => Self::write_i64(*v, w), AssertExpression::I64(v) => Self::write_i64(*v, w),
AssertExpression::F32(v) => Self::write_assert_maybe_f32(v, w), AssertExpression::F32(v) => target::write_f32_nan(v, w),
AssertExpression::F64(v) => Self::write_assert_maybe_f64(v, w), AssertExpression::F64(v) => target::write_f64_nan(v, w),
_ => panic!("Unsupported expression"), _ => panic!("Unsupported expression"),
} }
} }

View File

@ -12,17 +12,9 @@ use wast::{
use wasm_ast::builder::TypeInfo; use wasm_ast::builder::TypeInfo;
#[macro_export] macro_rules! impl_write_number_nan {
macro_rules! write_assert_number { ($name:ident, $name_nan:ident, $numeric:ty, $pattern:ty) => {
($name:ident, $generic:ty, $reader:ty) => { pub fn $name(number: $numeric, w: &mut dyn Write) -> Result<()> {
fn $name(data: &wast::NanPattern<$generic>, w: &mut dyn Write) -> Result<()> {
use wast::NanPattern;
match data {
NanPattern::CanonicalNan => write!(w, "LUA_NAN_CANONICAL"),
NanPattern::ArithmeticNan => write!(w, "LUA_NAN_ARITHMETIC"),
NanPattern::Value(data) => {
let number = <$reader>::from_bits(data.bits);
let sign = if number.is_sign_negative() { "-" } else { "" }; let sign = if number.is_sign_negative() { "-" } else { "" };
if number.is_infinite() { if number.is_infinite() {
@ -33,11 +25,26 @@ macro_rules! write_assert_number {
write!(w, "{number}") write!(w, "{number}")
} }
} }
pub fn $name_nan(data: &wast::NanPattern<$pattern>, w: &mut dyn Write) -> Result<()> {
use wast::NanPattern;
match data {
NanPattern::CanonicalNan => write!(w, "LUA_NAN_CANONICAL"),
NanPattern::ArithmeticNan => write!(w, "LUA_NAN_ARITHMETIC"),
NanPattern::Value(data) => {
let number = <$numeric>::from_bits(data.bits);
$name(number, w)
}
} }
} }
}; };
} }
impl_write_number_nan!(write_f32, write_f32_nan, f32, wast::token::Float32);
impl_write_number_nan!(write_f64, write_f64_nan, f64, wast::token::Float64);
pub struct TypedModule<'a> { pub struct TypedModule<'a> {
name: &'a str, name: &'a str,
module: &'a BinModule, module: &'a BinModule,