enable many more dev-backend num tests

This commit is contained in:
Folkert 2024-01-02 21:30:49 +01:00
parent 6c521555ea
commit b7a41bcb3e
No known key found for this signature in database
GPG key ID: 1F17F6FFD112B97C
3 changed files with 178 additions and 67 deletions

View file

@ -311,6 +311,7 @@ pub const NUM_MUL_WRAP_INT: IntrinsicName = int_intrinsic!("roc_builtins.num.mul
pub const NUM_MUL_CHECKED_INT: IntrinsicName = int_intrinsic!("roc_builtins.num.mul_with_overflow"); pub const NUM_MUL_CHECKED_INT: IntrinsicName = int_intrinsic!("roc_builtins.num.mul_with_overflow");
pub const NUM_MUL_CHECKED_FLOAT: IntrinsicName = pub const NUM_MUL_CHECKED_FLOAT: IntrinsicName =
float_intrinsic!("roc_builtins.num.mul_with_overflow"); float_intrinsic!("roc_builtins.num.mul_with_overflow");
pub const NUM_NEG_OR_PANIC_INT: IntrinsicName = int_intrinsic!("roc_builtins.num.neg_or_panic");
pub const NUM_IS_MULTIPLE_OF: IntrinsicName = int_intrinsic!("roc_builtins.num.is_multiple_of"); pub const NUM_IS_MULTIPLE_OF: IntrinsicName = int_intrinsic!("roc_builtins.num.is_multiple_of");

View file

@ -1080,13 +1080,84 @@ trait Backend<'a> {
); );
self.build_num_neg(sym, &args[0], ret_layout) self.build_num_neg(sym, &args[0], ret_layout)
} }
LowLevel::NumPowInt => self.build_fn_call( LowLevel::NumPowInt => {
sym, let repr = self.interner().get_repr(arg_layouts[0]);
bitcode::NUM_POW_INT[IntWidth::I64].to_string(), let LayoutRepr::Builtin(Builtin::Int(int_width)) = repr else {
args, unreachable!("invalid layout for NumPowInt")
arg_layouts, };
ret_layout,
), self.build_fn_call(
sym,
bitcode::NUM_POW_INT[int_width].to_string(),
args,
arg_layouts,
ret_layout,
)
}
LowLevel::NumPow => {
let intrinsic = match self.interner().get_repr(arg_layouts[0]) {
LayoutRepr::Builtin(Builtin::Float(float_width)) => {
&bitcode::NUM_POW[float_width]
}
LayoutRepr::DEC => todo!("exponentiation for decimals"),
_ => unreachable!("invalid layout for NumPow"),
};
self.build_fn_call(sym, intrinsic.to_string(), args, arg_layouts, ret_layout)
}
LowLevel::NumFloor => {
let repr = self.interner().get_repr(*ret_layout);
let LayoutRepr::Builtin(Builtin::Int(int_width)) = repr else {
unreachable!("invalid return layout for NumFloor")
};
match arg_layouts[0] {
Layout::F32 => self.build_fn_call(
sym,
bitcode::NUM_FLOOR_F32[int_width].to_string(),
args,
arg_layouts,
ret_layout,
),
Layout::F64 => self.build_fn_call(
sym,
bitcode::NUM_FLOOR_F64[int_width].to_string(),
args,
arg_layouts,
ret_layout,
),
Layout::DEC => todo!("NumFloor for decimals"),
_ => unreachable!("invalid layout for NumFloor"),
}
}
LowLevel::NumCeiling => {
let repr = self.interner().get_repr(*ret_layout);
let LayoutRepr::Builtin(Builtin::Int(int_width)) = repr else {
unreachable!("invalid return layout for NumCeiling")
};
match arg_layouts[0] {
Layout::F32 => self.build_fn_call(
sym,
bitcode::NUM_CEILING_F32[int_width].to_string(),
args,
arg_layouts,
ret_layout,
),
Layout::F64 => self.build_fn_call(
sym,
bitcode::NUM_CEILING_F64[int_width].to_string(),
args,
arg_layouts,
ret_layout,
),
Layout::DEC => todo!("NumCeiling for decimals"),
_ => unreachable!("invalid layout for NumCeiling"),
}
}
LowLevel::NumSub => { LowLevel::NumSub => {
debug_assert_eq!( debug_assert_eq!(
2, 2,
@ -1393,6 +1464,36 @@ trait Backend<'a> {
self.build_num_sqrt(*sym, args[0], float_width); self.build_num_sqrt(*sym, args[0], float_width);
} }
LowLevel::NumSin => {
let intrinsic = match arg_layouts[0] {
Layout::F64 => &bitcode::NUM_SIN[FloatWidth::F64],
Layout::F32 => &bitcode::NUM_SIN[FloatWidth::F32],
Layout::DEC => bitcode::DEC_SIN,
_ => unreachable!("invalid layout for sin"),
};
self.build_fn_call(sym, intrinsic.to_string(), args, arg_layouts, ret_layout)
}
LowLevel::NumCos => {
let intrinsic = match arg_layouts[0] {
Layout::F64 => &bitcode::NUM_COS[FloatWidth::F64],
Layout::F32 => &bitcode::NUM_COS[FloatWidth::F32],
Layout::DEC => bitcode::DEC_COS,
_ => unreachable!("invalid layout for cos"),
};
self.build_fn_call(sym, intrinsic.to_string(), args, arg_layouts, ret_layout)
}
LowLevel::NumTan => {
let intrinsic = match arg_layouts[0] {
Layout::F64 => &bitcode::NUM_TAN[FloatWidth::F64],
Layout::F32 => &bitcode::NUM_TAN[FloatWidth::F32],
Layout::DEC => bitcode::DEC_TAN,
_ => unreachable!("invalid layout for tan"),
};
self.build_fn_call(sym, intrinsic.to_string(), args, arg_layouts, ret_layout)
}
LowLevel::NumRound => self.build_fn_call( LowLevel::NumRound => self.build_fn_call(
sym, sym,
bitcode::NUM_ROUND_F64[IntWidth::I64].to_string(), bitcode::NUM_ROUND_F64[IntWidth::I64].to_string(),
@ -1970,12 +2071,15 @@ trait Backend<'a> {
"NumIsZero: expected to have return layout of type Bool" "NumIsZero: expected to have return layout of type Bool"
); );
let literal = match self.interner().get_repr(arg_layouts[0]) {
LayoutRepr::Builtin(Builtin::Int(_)) => Literal::Int(0i128.to_ne_bytes()),
LayoutRepr::Builtin(Builtin::Float(_)) => Literal::Float(0.0),
LayoutRepr::DEC => Literal::Decimal([0; 16]),
_ => unreachable!("invalid layout for sin"),
};
self.load_literal_symbols(args); self.load_literal_symbols(args);
self.load_literal( self.load_literal(&Symbol::DEV_TMP, &arg_layouts[0], &literal);
&Symbol::DEV_TMP,
&arg_layouts[0],
&Literal::Int(0i128.to_ne_bytes()),
);
self.build_eq(sym, &args[0], &Symbol::DEV_TMP, &arg_layouts[0]); self.build_eq(sym, &args[0], &Symbol::DEV_TMP, &arg_layouts[0]);
self.free_symbol(&Symbol::DEV_TMP) self.free_symbol(&Symbol::DEV_TMP)
} }

View file

@ -820,7 +820,7 @@ fn gen_div_ceil_by_zero() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-dev", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_int_eq() { fn gen_int_eq() {
assert_evals_to!( assert_evals_to!(
indoc!( indoc!(
@ -834,7 +834,7 @@ fn gen_int_eq() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_int_neq() { fn gen_int_neq() {
assert_evals_to!( assert_evals_to!(
indoc!( indoc!(
@ -866,7 +866,7 @@ fn float_greater_than() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_dec_eq() { fn gen_dec_eq() {
assert_evals_to!( assert_evals_to!(
indoc!( indoc!(
@ -886,7 +886,7 @@ fn gen_dec_eq() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_dec_neq() { fn gen_dec_neq() {
assert_evals_to!( assert_evals_to!(
indoc!( indoc!(
@ -906,7 +906,7 @@ fn gen_dec_neq() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_wrap_int_neq() { fn gen_wrap_int_neq() {
assert_evals_to!( assert_evals_to!(
indoc!( indoc!(
@ -924,7 +924,7 @@ fn gen_wrap_int_neq() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-dev", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_add_i8() { fn gen_add_i8() {
assert_evals_to!( assert_evals_to!(
indoc!( indoc!(
@ -938,7 +938,7 @@ fn gen_add_i8() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-dev", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_add_u8() { fn gen_add_u8() {
assert_evals_to!( assert_evals_to!(
indoc!( indoc!(
@ -952,7 +952,7 @@ fn gen_add_u8() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-dev", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_add_i16() { fn gen_add_i16() {
assert_evals_to!( assert_evals_to!(
indoc!( indoc!(
@ -966,7 +966,7 @@ fn gen_add_i16() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-dev", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_add_u16() { fn gen_add_u16() {
assert_evals_to!( assert_evals_to!(
indoc!( indoc!(
@ -980,7 +980,7 @@ fn gen_add_u16() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-dev", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_add_i32() { fn gen_add_i32() {
assert_evals_to!( assert_evals_to!(
indoc!( indoc!(
@ -994,7 +994,7 @@ fn gen_add_i32() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-dev", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_add_u32() { fn gen_add_u32() {
assert_evals_to!( assert_evals_to!(
indoc!( indoc!(
@ -1008,7 +1008,7 @@ fn gen_add_u32() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-dev", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_add_i64() { fn gen_add_i64() {
assert_evals_to!( assert_evals_to!(
indoc!( indoc!(
@ -1022,7 +1022,7 @@ fn gen_add_i64() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_sub_dec() { fn gen_sub_dec() {
assert_evals_to!( assert_evals_to!(
indoc!( indoc!(
@ -1045,7 +1045,7 @@ fn gen_sub_dec() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_mul_dec() { fn gen_mul_dec() {
assert_evals_to!( assert_evals_to!(
indoc!( indoc!(
@ -1068,13 +1068,13 @@ fn gen_mul_dec() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_sub_f64() { fn gen_sub_f64() {
assert_evals_to!("1.5f64 - 2.4 - 3", -3.9, f64); assert_evals_to!("1.5f64 - 2.4 - 3", -3.9, f64);
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_sub_f32() { fn gen_sub_f32() {
assert_evals_to!("1.5f32 - 2.4 - 3", -3.9, f32); assert_evals_to!("1.5f32 - 2.4 - 3", -3.9, f32);
} }
@ -1164,7 +1164,7 @@ fn gen_div_u64() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_div_checked_i64() { fn gen_div_checked_i64() {
assert_evals_to!( assert_evals_to!(
indoc!( indoc!(
@ -1180,7 +1180,7 @@ fn gen_div_checked_i64() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_div_checked_by_zero_i64() { fn gen_div_checked_by_zero_i64() {
assert_evals_to!( assert_evals_to!(
indoc!( indoc!(
@ -1218,7 +1218,7 @@ fn gen_rem_checked_div_by_zero_i64() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_is_positive_i64() { fn gen_is_positive_i64() {
assert_evals_to!("Num.isPositive 0", false, bool); assert_evals_to!("Num.isPositive 0", false, bool);
assert_evals_to!("Num.isPositive 1", true, bool); assert_evals_to!("Num.isPositive 1", true, bool);
@ -1226,7 +1226,7 @@ fn gen_is_positive_i64() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_is_negative_i64() { fn gen_is_negative_i64() {
assert_evals_to!("Num.isNegative 0", false, bool); assert_evals_to!("Num.isNegative 0", false, bool);
assert_evals_to!("Num.isNegative 3", false, bool); assert_evals_to!("Num.isNegative 3", false, bool);
@ -1234,7 +1234,7 @@ fn gen_is_negative_i64() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_is_positive_f64() { fn gen_is_positive_f64() {
assert_evals_to!("Num.isPositive 0.0", false, bool); assert_evals_to!("Num.isPositive 0.0", false, bool);
assert_evals_to!("Num.isPositive 4.7", true, bool); assert_evals_to!("Num.isPositive 4.7", true, bool);
@ -1242,7 +1242,7 @@ fn gen_is_positive_f64() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_is_negative_f64() { fn gen_is_negative_f64() {
assert_evals_to!("Num.isNegative 0.0", false, bool); assert_evals_to!("Num.isNegative 0.0", false, bool);
assert_evals_to!("Num.isNegative 9.9", false, bool); assert_evals_to!("Num.isNegative 9.9", false, bool);
@ -1258,27 +1258,33 @@ fn gen_is_zero_i64() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_is_zero_f64() { fn gen_is_zero_f64() {
assert_evals_to!("Num.isZero 0.0", true, bool); assert_evals_to!("Num.isZero 0.0f64", true, bool);
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_is_zero_dec() {
assert_evals_to!("Num.isZero 0.0dec", true, bool);
}
#[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_is_odd() { fn gen_is_odd() {
assert_evals_to!("Num.isOdd 4", false, bool); assert_evals_to!("Num.isOdd 4", false, bool);
assert_evals_to!("Num.isOdd 5", true, bool); assert_evals_to!("Num.isOdd 5", true, bool);
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_is_even() { fn gen_is_even() {
assert_evals_to!("Num.isEven 6", true, bool); assert_evals_to!("Num.isEven 6", true, bool);
assert_evals_to!("Num.isEven 7", false, bool); assert_evals_to!("Num.isEven 7", false, bool);
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn sin() { fn sin() {
assert_evals_to!("Num.sin 0f64", 0.0, f64); assert_evals_to!("Num.sin 0f64", 0.0, f64);
assert_evals_to!("Num.sin 1.41421356237f64", 0.9877659459922529, f64); assert_evals_to!("Num.sin 1.41421356237f64", 0.9877659459922529, f64);
@ -1291,7 +1297,7 @@ fn sin() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn cos() { fn cos() {
assert_evals_to!("Num.cos 0f64", 1.0, f64); assert_evals_to!("Num.cos 0f64", 1.0, f64);
assert_evals_to!("Num.cos 3.14159265359f64", -1.0, f64); assert_evals_to!("Num.cos 3.14159265359f64", -1.0, f64);
@ -1304,7 +1310,7 @@ fn cos() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn tan() { fn tan() {
assert_evals_to!("Num.tan 0f64", 0.0f64, f64); assert_evals_to!("Num.tan 0f64", 0.0f64, f64);
assert_evals_to!("Num.tan 0dec", RocDec::from_str("0.0").unwrap(), RocDec); assert_evals_to!("Num.tan 0dec", RocDec::from_str("0.0").unwrap(), RocDec);
@ -1343,7 +1349,7 @@ fn bitwise_or() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn lt_u8() { fn lt_u8() {
assert_evals_to!("1u8 < 2u8", true, bool); assert_evals_to!("1u8 < 2u8", true, bool);
assert_evals_to!("1u8 < 1u8", false, bool); assert_evals_to!("1u8 < 1u8", false, bool);
@ -1353,7 +1359,7 @@ fn lt_u8() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn lte_u8() { fn lte_u8() {
assert_evals_to!("1u8 <= 1u8", true, bool); assert_evals_to!("1u8 <= 1u8", true, bool);
assert_evals_to!("2u8 <= 1u8", false, bool); assert_evals_to!("2u8 <= 1u8", false, bool);
@ -1363,7 +1369,7 @@ fn lte_u8() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gt_u8() { fn gt_u8() {
assert_evals_to!("2u8 > 1u8", true, bool); assert_evals_to!("2u8 > 1u8", true, bool);
assert_evals_to!("2u8 > 2u8", false, bool); assert_evals_to!("2u8 > 2u8", false, bool);
@ -1373,7 +1379,7 @@ fn gt_u8() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gte_u8() { fn gte_u8() {
assert_evals_to!("1u8 >= 1u8", true, bool); assert_evals_to!("1u8 >= 1u8", true, bool);
assert_evals_to!("1u8 >= 2u8", false, bool); assert_evals_to!("1u8 >= 2u8", false, bool);
@ -1393,7 +1399,7 @@ fn lt_u64() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn lte_u64() { fn lte_u64() {
assert_evals_to!("1u64 <= 1u64", true, bool); assert_evals_to!("1u64 <= 1u64", true, bool);
assert_evals_to!("2u64 <= 1u64", false, bool); assert_evals_to!("2u64 <= 1u64", false, bool);
@ -1413,7 +1419,7 @@ fn gt_u64() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gte_u64() { fn gte_u64() {
assert_evals_to!("1u64 >= 1u64", true, bool); assert_evals_to!("1u64 >= 1u64", true, bool);
assert_evals_to!("1u64 >= 2u64", false, bool); assert_evals_to!("1u64 >= 2u64", false, bool);
@ -1432,7 +1438,7 @@ fn lt_i64() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn lte_i64() { fn lte_i64() {
assert_evals_to!("1 <= 1", true, bool); assert_evals_to!("1 <= 1", true, bool);
assert_evals_to!("2 <= 1", false, bool); assert_evals_to!("2 <= 1", false, bool);
@ -1450,7 +1456,7 @@ fn gt_i64() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gte_i64() { fn gte_i64() {
assert_evals_to!("1 >= 1", true, bool); assert_evals_to!("1 >= 1", true, bool);
assert_evals_to!("1 >= 2", false, bool); assert_evals_to!("1 >= 2", false, bool);
@ -1459,7 +1465,7 @@ fn gte_i64() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn lt_f64() { fn lt_f64() {
assert_evals_to!("1.1f64 < 1.2", true, bool); assert_evals_to!("1.1f64 < 1.2", true, bool);
assert_evals_to!("1.1f64 < 1.1", false, bool); assert_evals_to!("1.1f64 < 1.1", false, bool);
@ -1468,7 +1474,7 @@ fn lt_f64() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn lte_f64() { fn lte_f64() {
assert_evals_to!("1.1f64 <= 1.1", true, bool); assert_evals_to!("1.1f64 <= 1.1", true, bool);
assert_evals_to!("1.2f64 <= 1.1", false, bool); assert_evals_to!("1.2f64 <= 1.1", false, bool);
@ -1477,7 +1483,7 @@ fn lte_f64() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gt_f64() { fn gt_f64() {
assert_evals_to!("2.2f64 > 1.1", true, bool); assert_evals_to!("2.2f64 > 1.1", true, bool);
assert_evals_to!("2.2f64 > 2.2", false, bool); assert_evals_to!("2.2f64 > 2.2", false, bool);
@ -1486,7 +1492,7 @@ fn gt_f64() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gte_f64() { fn gte_f64() {
assert_evals_to!("1.1f64 >= 1.1", true, bool); assert_evals_to!("1.1f64 >= 1.1", true, bool);
assert_evals_to!("1.1f64 >= 1.2", false, bool); assert_evals_to!("1.1f64 >= 1.2", false, bool);
@ -1495,7 +1501,7 @@ fn gte_f64() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-dev", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_order_of_arithmetic_ops() { fn gen_order_of_arithmetic_ops() {
assert_evals_to!( assert_evals_to!(
indoc!( indoc!(
@ -1509,7 +1515,7 @@ fn gen_order_of_arithmetic_ops() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_order_of_arithmetic_ops_complex_float() { fn gen_order_of_arithmetic_ops_complex_float() {
assert_evals_to!( assert_evals_to!(
indoc!( indoc!(
@ -1523,7 +1529,7 @@ fn gen_order_of_arithmetic_ops_complex_float() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-dev", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn if_guard_bind_variable_false() { fn if_guard_bind_variable_false() {
assert_evals_to!( assert_evals_to!(
indoc!( indoc!(
@ -1542,7 +1548,7 @@ fn if_guard_bind_variable_false() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-dev", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn if_guard_bind_variable_true() { fn if_guard_bind_variable_true() {
assert_evals_to!( assert_evals_to!(
indoc!( indoc!(
@ -1561,7 +1567,7 @@ fn if_guard_bind_variable_true() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-dev", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn tail_call_elimination() { fn tail_call_elimination() {
assert_evals_to!( assert_evals_to!(
indoc!( indoc!(
@ -1591,7 +1597,7 @@ fn int_negate_dev() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn int_negate() { fn int_negate() {
assert_evals_to!("Num.neg 123", -123, i64); assert_evals_to!("Num.neg 123", -123, i64);
assert_evals_to!("Num.neg Num.maxI64", -i64::MAX, i64); assert_evals_to!("Num.neg Num.maxI64", -i64::MAX, i64);
@ -1616,7 +1622,7 @@ fn neg_min_int_overflow() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_wrap_int_neg() { fn gen_wrap_int_neg() {
assert_evals_to!( assert_evals_to!(
indoc!( indoc!(
@ -1632,7 +1638,7 @@ fn gen_wrap_int_neg() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-dev", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn gen_basic_fn() { fn gen_basic_fn() {
assert_evals_to!( assert_evals_to!(
indoc!( indoc!(
@ -1782,7 +1788,7 @@ fn frac_is_finite() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn int_compare() { fn int_compare() {
assert_evals_to!("Num.compare 0 1", RocOrder::Lt, RocOrder); assert_evals_to!("Num.compare 0 1", RocOrder::Lt, RocOrder);
assert_evals_to!("Num.compare 1 1", RocOrder::Eq, RocOrder); assert_evals_to!("Num.compare 1 1", RocOrder::Eq, RocOrder);
@ -1790,7 +1796,7 @@ fn int_compare() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn float_compare() { fn float_compare() {
assert_evals_to!("Num.compare 0.01 3.14", RocOrder::Lt, RocOrder); assert_evals_to!("Num.compare 0.01 3.14", RocOrder::Lt, RocOrder);
assert_evals_to!("Num.compare 3.14 3.14", RocOrder::Eq, RocOrder); assert_evals_to!("Num.compare 3.14 3.14", RocOrder::Eq, RocOrder);
@ -1798,26 +1804,26 @@ fn float_compare() {
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn pow() { fn pow() {
assert_evals_to!("Num.pow 2.0f64 2.0f64", 4.0, f64); assert_evals_to!("Num.pow 2.0f64 2.0f64", 4.0, f64);
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn ceiling() { fn ceiling() {
assert_evals_to!("Num.ceiling 1.1f64", 2, i64); assert_evals_to!("Num.ceiling 1.1f64", 2, i64);
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn floor() { fn floor() {
assert_evals_to!("Num.floor 1.9f64", 1, i64); assert_evals_to!("Num.floor 1.9f64", 1, i64);
assert_evals_to!("Num.floor -1.9f64", -2, i64); assert_evals_to!("Num.floor -1.9f64", -2, i64);
} }
#[test] #[test]
#[cfg(any(feature = "gen-llvm", feature = "gen-dev", feature = "gen-wasm"))] #[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
fn pow_int() { fn pow_int() {
assert_evals_to!("Num.powInt 2 3", 8, i64); assert_evals_to!("Num.powInt 2 3", 8, i64);
} }