mirror of
https://github.com/roc-lang/roc.git
synced 2025-10-03 00:24:34 +00:00
Merge remote-tracking branch 'origin/trunk' into builtins-in-roc-delayed-alias
This commit is contained in:
commit
4e1197165b
181 changed files with 9495 additions and 2273 deletions
|
@ -798,6 +798,34 @@ fn list_walk_until_sum() {
|
|||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(any(feature = "gen-llvm"))]
|
||||
fn list_walk_imlements_position() {
|
||||
assert_evals_to!(
|
||||
r#"
|
||||
Option a : [ Some a, None ]
|
||||
|
||||
find : List a, a -> Option Nat
|
||||
find = \list, needle ->
|
||||
findHelp list needle
|
||||
|> .v
|
||||
|
||||
findHelp = \list, needle ->
|
||||
List.walkUntil list { n: 0, v: None } \{ n, v }, element ->
|
||||
if element == needle then
|
||||
Stop { n, v: Some n }
|
||||
else
|
||||
Continue { n: n + 1, v }
|
||||
|
||||
when find [ 1, 2, 3 ] 3 is
|
||||
None -> 0
|
||||
Some v -> v
|
||||
"#,
|
||||
2,
|
||||
i64
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(any(feature = "gen-llvm"))]
|
||||
fn list_walk_until_even_prefix_sum() {
|
||||
|
|
|
@ -2179,6 +2179,12 @@ to_int_tests! {
|
|||
to_u128_same_width, "15i128", 15
|
||||
to_u128_extend, "15i8", 15
|
||||
)
|
||||
"Num.toNat", usize, (
|
||||
to_nat_same_width, "15i64", 15, ["gen-wasm"]
|
||||
to_nat_extend, "15i8", 15, ["gen-wasm"]
|
||||
to_nat_truncate, "115i128", 115
|
||||
to_nat_truncate_wraps, "10_000_000_000_000_000_000_000i128", 1864712049423024128
|
||||
)
|
||||
}
|
||||
|
||||
macro_rules! to_int_checked_tests {
|
||||
|
@ -2312,6 +2318,18 @@ to_int_checked_tests! {
|
|||
to_u128_checked_same_width_signed_fits, "15i128", 15
|
||||
to_u128_checked_same_width_signed_oob, "-1i128", None
|
||||
)
|
||||
"Num.toNatChecked", usize, (
|
||||
to_nat_checked_smaller_width_pos, "15i8", 15
|
||||
to_nat_checked_smaller_width_neg_oob, "-15i8", None
|
||||
to_nat_checked_same, "15u64", 15
|
||||
to_nat_checked_same_width_signed_fits, "15i64", 15
|
||||
to_nat_checked_same_width_signed_oob, "-1i64", None
|
||||
to_nat_checked_larger_width_signed_fits_pos, "15i128", 15
|
||||
to_nat_checked_larger_width_signed_oob_pos, "18446744073709551616i128", None
|
||||
to_nat_checked_larger_width_signed_oob_neg, "-1i128", None
|
||||
to_nat_checked_larger_width_unsigned_fits_pos, "15u128", 15
|
||||
to_nat_checked_larger_width_unsigned_oob_pos, "18446744073709551616u128", None
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -2781,3 +2799,63 @@ fn to_float_f64() {
|
|||
f64
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))]
|
||||
// https://github.com/rtfeldman/roc/issues/2696
|
||||
fn upcast_of_int_is_zext() {
|
||||
assert_evals_to!(
|
||||
indoc!(
|
||||
r#"
|
||||
Num.toU16 0b1000_0000u8
|
||||
"#
|
||||
),
|
||||
128,
|
||||
u16
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(any(feature = "gen-llvm"))]
|
||||
// https://github.com/rtfeldman/roc/issues/2696
|
||||
fn upcast_of_int_checked_is_zext() {
|
||||
assert_evals_to!(
|
||||
indoc!(
|
||||
r#"
|
||||
when Num.toU16Checked 0b1000_0000u8 is
|
||||
Ok 128u16 -> 1u8
|
||||
_ -> 0u8
|
||||
"#
|
||||
),
|
||||
1,
|
||||
u16
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(any(feature = "gen-llvm"))]
|
||||
fn modulo_of_unsigned() {
|
||||
assert_evals_to!(
|
||||
indoc!(
|
||||
r#"
|
||||
0b1111_1111u8 % 64
|
||||
"#
|
||||
),
|
||||
63,
|
||||
u8
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(any(feature = "gen-llvm"))]
|
||||
fn div_of_unsigned() {
|
||||
assert_evals_to!(
|
||||
indoc!(
|
||||
r#"
|
||||
0b1111_1111u8 // 2
|
||||
"#
|
||||
),
|
||||
127,
|
||||
u8
|
||||
)
|
||||
}
|
||||
|
|
|
@ -3228,3 +3228,19 @@ fn issue_2322() {
|
|||
i64
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(any(feature = "gen-llvm"))]
|
||||
fn box_and_unbox_string() {
|
||||
assert_evals_to!(
|
||||
indoc!(
|
||||
r#"
|
||||
Box.unbox (Box.box (Str.concat "Leverage " "agile frameworks to provide a robust synopsis for high level overviews"))
|
||||
"#
|
||||
),
|
||||
RocStr::from(
|
||||
"Leverage agile frameworks to provide a robust synopsis for high level overviews"
|
||||
),
|
||||
RocStr
|
||||
)
|
||||
}
|
||||
|
|
|
@ -1548,3 +1548,35 @@ fn issue_1162() {
|
|||
u8
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))]
|
||||
fn polymorphic_tag() {
|
||||
assert_evals_to!(
|
||||
indoc!(
|
||||
r#"
|
||||
x : [ Y U8 ]*
|
||||
x = Y 3
|
||||
x
|
||||
"#
|
||||
),
|
||||
3, // Y is a newtype, it gets unwrapped
|
||||
u8
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))]
|
||||
fn issue_2725_alias_polymorphic_lambda() {
|
||||
assert_evals_to!(
|
||||
indoc!(
|
||||
r#"
|
||||
wrap = \value -> Tag value
|
||||
wrapIt = wrap
|
||||
wrapIt 42
|
||||
"#
|
||||
),
|
||||
42, // Tag is a newtype, it gets unwrapped
|
||||
i64
|
||||
)
|
||||
}
|
||||
|
|
|
@ -48,14 +48,13 @@ pub fn helper(
|
|||
module_src = &temp;
|
||||
}
|
||||
|
||||
let exposed_types = MutMap::default();
|
||||
let loaded = roc_load::file::load_and_monomorphize_from_str(
|
||||
arena,
|
||||
filename,
|
||||
module_src,
|
||||
&stdlib,
|
||||
src_dir,
|
||||
exposed_types,
|
||||
Default::default(),
|
||||
roc_target::TargetInfo::default_x86_64(),
|
||||
);
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ use inkwell::module::Module;
|
|||
use libloading::Library;
|
||||
use roc_build::link::module_to_dylib;
|
||||
use roc_build::program::FunctionIterator;
|
||||
use roc_collections::all::{MutMap, MutSet};
|
||||
use roc_collections::all::MutSet;
|
||||
use roc_gen_llvm::llvm::externs::add_default_roc_externs;
|
||||
use roc_mono::ir::OptLevel;
|
||||
use roc_region::all::LineInfo;
|
||||
|
@ -51,14 +51,13 @@ fn create_llvm_module<'a>(
|
|||
module_src = &temp;
|
||||
}
|
||||
|
||||
let exposed_types = MutMap::default();
|
||||
let loaded = roc_load::file::load_and_monomorphize_from_str(
|
||||
arena,
|
||||
filename,
|
||||
module_src,
|
||||
stdlib,
|
||||
src_dir,
|
||||
exposed_types,
|
||||
Default::default(),
|
||||
target_info,
|
||||
);
|
||||
|
||||
|
|
|
@ -86,14 +86,13 @@ fn compile_roc_to_wasm_bytes<'a, T: Wasm32Result>(
|
|||
module_src = &temp;
|
||||
}
|
||||
|
||||
let exposed_types = MutMap::default();
|
||||
let loaded = roc_load::file::load_and_monomorphize_from_str(
|
||||
arena,
|
||||
filename,
|
||||
module_src,
|
||||
stdlib,
|
||||
src_dir,
|
||||
exposed_types,
|
||||
Default::default(),
|
||||
roc_target::TargetInfo::default_wasm32(),
|
||||
);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue