Merge remote-tracking branch 'origin/trunk' into builtins-in-roc-delayed-alias

This commit is contained in:
Folkert 2022-03-18 21:25:52 +01:00
commit 4e1197165b
No known key found for this signature in database
GPG key ID: 1F17F6FFD112B97C
181 changed files with 9495 additions and 2273 deletions

View file

@ -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() {

View file

@ -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
)
}

View file

@ -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
)
}

View file

@ -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
)
}

View file

@ -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(),
);

View file

@ -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,
);

View file

@ -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(),
);