mirror of
https://github.com/roc-lang/roc.git
synced 2025-11-02 22:01:20 +00:00
enable many more dev-backend num tests
This commit is contained in:
parent
6c521555ea
commit
b7a41bcb3e
3 changed files with 178 additions and 67 deletions
|
|
@ -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");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue