Merge branch 'trunk' into builtins-list-take-last

This commit is contained in:
satotake 2021-11-09 12:34:58 +00:00 committed by GitHub
commit dfc527ecff
39 changed files with 2459 additions and 7646 deletions

View file

@ -1,63 +1,34 @@
#![cfg(test)]
#![cfg(feature = "gen-llvm")]
#[cfg(feature = "gen-llvm")]
use crate::helpers::llvm::assert_evals_to;
// #[cfg(feature = "gen-dev")]
// use crate::helpers::dev::assert_evals_to;
// #[cfg(feature = "gen-wasm")]
// use crate::helpers::wasm::assert_evals_to;
use crate::assert_evals_to;
use crate::helpers::with_larger_debug_stack;
//use crate::assert_wasm_evals_to as assert_evals_to;
use core::ffi::c_void;
use indoc::indoc;
use roc_std::{RocList, RocStr};
#[no_mangle]
pub unsafe fn roc_alloc(size: usize, _alignment: u32) -> *mut c_void {
libc::malloc(size)
}
#[no_mangle]
pub unsafe fn roc_realloc(
c_ptr: *mut c_void,
new_size: usize,
_old_size: usize,
_alignment: u32,
) -> *mut c_void {
libc::realloc(c_ptr, new_size)
}
#[no_mangle]
pub unsafe fn roc_dealloc(c_ptr: *mut c_void, _alignment: u32) {
libc::free(c_ptr)
}
#[no_mangle]
pub unsafe fn roc_panic(c_ptr: *mut c_void, tag_id: u32) {
use roc_gen_llvm::llvm::build::PanicTagId;
use std::convert::TryFrom;
use std::ffi::CStr;
use std::os::raw::c_char;
match PanicTagId::try_from(tag_id) {
Ok(PanicTagId::NullTerminatedString) => {
let slice = CStr::from_ptr(c_ptr as *const c_char);
let string = slice.to_str().unwrap();
eprintln!("Roc hit a panic: {}", string);
std::process::exit(1);
}
Err(_) => unreachable!(),
}
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn roc_list_construction() {
let list = RocList::from_slice(&[1i64; 23]);
assert_eq!(&list, &list);
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn empty_list_literal() {
assert_evals_to!("[]", RocList::from_slice(&[]), RocList<i64>);
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_literal_empty_record() {
assert_evals_to!("[{}]", RocList::from_slice(&[()]), RocList<()>);
}
@ -68,6 +39,7 @@ fn int_singleton_list_literal() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn int_list_literal() {
assert_evals_to!("[ 12, 9 ]", RocList::from_slice(&[12, 9]), RocList<i64>);
assert_evals_to!(
@ -78,6 +50,7 @@ fn int_list_literal() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn bool_list_literal() {
// NOTE: make sure to explicitly declare the elements to be of type bool, or
// use both True and False; only using one of them causes the list to in practice be
@ -156,6 +129,7 @@ fn bool_list_literal() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn variously_sized_list_literals() {
assert_evals_to!("[]", RocList::from_slice(&[]), RocList<i64>);
assert_evals_to!("[1]", RocList::from_slice(&[1]), RocList<i64>);
@ -174,6 +148,7 @@ fn variously_sized_list_literals() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_append() {
assert_evals_to!(
"List.append [1] 2",
@ -188,6 +163,7 @@ fn list_append() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_take_first() {
assert_evals_to!(
"List.takeFirst [1, 2, 3] 2",
@ -212,6 +188,7 @@ fn list_take_first() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_take_last() {
assert_evals_to!(
"List.takeLast [1, 2, 3] 2",
@ -232,6 +209,7 @@ fn list_take_last() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_drop() {
assert_evals_to!(
"List.drop [1,2,3] 2",
@ -243,6 +221,7 @@ fn list_drop() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_drop_at() {
assert_evals_to!(
"List.dropAt [1, 2, 3] 0",
@ -259,6 +238,7 @@ fn list_drop_at() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_drop_at_shared() {
assert_evals_to!(
indoc!(
@ -280,6 +260,7 @@ fn list_drop_at_shared() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_drop_last() {
assert_evals_to!(
"List.dropLast [1, 2, 3]",
@ -291,6 +272,7 @@ fn list_drop_last() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_drop_last_mutable() {
assert_evals_to!(
indoc!(
@ -312,6 +294,7 @@ fn list_drop_last_mutable() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_drop_first() {
assert_evals_to!(
"List.dropFirst [1, 2, 3]",
@ -323,6 +306,7 @@ fn list_drop_first() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_swap() {
assert_evals_to!("List.swap [] 0 1", RocList::from_slice(&[]), RocList<i64>);
assert_evals_to!(
@ -358,11 +342,13 @@ fn list_swap() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_append_to_empty_list() {
assert_evals_to!("List.append [] 3", RocList::from_slice(&[3]), RocList<i64>);
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_append_to_empty_list_of_int() {
assert_evals_to!(
indoc!(
@ -380,6 +366,7 @@ fn list_append_to_empty_list_of_int() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_append_bools() {
assert_evals_to!(
"List.append [ True, False ] True",
@ -389,6 +376,7 @@ fn list_append_bools() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_append_longer_list() {
assert_evals_to!(
"List.append [ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22 ] 23",
@ -398,6 +386,7 @@ fn list_append_longer_list() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_prepend() {
assert_evals_to!("List.prepend [] 1", RocList::from_slice(&[1]), RocList<i64>);
assert_evals_to!(
@ -436,6 +425,7 @@ fn list_prepend() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_prepend_bools() {
assert_evals_to!(
"List.prepend [ True, False ] True",
@ -445,6 +435,7 @@ fn list_prepend_bools() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_prepend_big_list() {
assert_evals_to!(
"List.prepend [ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 100, 100, 100, 100 ] 9",
@ -456,6 +447,7 @@ fn list_prepend_big_list() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_walk_backwards_empty_all_inline() {
assert_evals_to!(
indoc!(
@ -483,6 +475,7 @@ fn list_walk_backwards_empty_all_inline() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_walk_backwards_with_str() {
assert_evals_to!(
r#"List.walkBackwards [ "x", "y", "z" ] "<" Str.concat"#,
@ -498,6 +491,7 @@ fn list_walk_backwards_with_str() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_walk_backwards_with_record() {
assert_evals_to!(
indoc!(
@ -525,6 +519,7 @@ fn list_walk_backwards_with_record() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_walk_with_str() {
assert_evals_to!(
r#"List.walk [ "x", "y", "z" ] "<" Str.concat"#,
@ -540,11 +535,13 @@ fn list_walk_with_str() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_walk_subtraction() {
assert_evals_to!(r#"List.walk [ 1, 2 ] 1 Num.sub"#, (1 - 1) - 2, i64);
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_walk_until_sum() {
assert_evals_to!(
r#"List.walkUntil [ 1, 2 ] 0 \a,b -> Continue (a + b)"#,
@ -554,6 +551,7 @@ fn list_walk_until_sum() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_walk_until_even_prefix_sum() {
assert_evals_to!(
r#"
@ -571,6 +569,7 @@ fn list_walk_until_even_prefix_sum() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_keep_if_empty_list_of_int() {
assert_evals_to!(
indoc!(
@ -588,6 +587,7 @@ fn list_keep_if_empty_list_of_int() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_keep_if_empty_list() {
assert_evals_to!(
indoc!(
@ -606,6 +606,7 @@ fn list_keep_if_empty_list() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_keep_if_always_true_for_non_empty_list() {
assert_evals_to!(
indoc!(
@ -627,6 +628,7 @@ fn list_keep_if_always_true_for_non_empty_list() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_keep_if_always_false_for_non_empty_list() {
assert_evals_to!(
indoc!(
@ -644,6 +646,7 @@ fn list_keep_if_always_false_for_non_empty_list() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_keep_if_one() {
assert_evals_to!(
indoc!(
@ -661,6 +664,7 @@ fn list_keep_if_one() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_keep_if_str_is_hello() {
assert_evals_to!(
indoc!(
@ -677,6 +681,7 @@ fn list_keep_if_str_is_hello() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_map_on_empty_list_with_int_layout() {
assert_evals_to!(
indoc!(
@ -694,6 +699,7 @@ fn list_map_on_empty_list_with_int_layout() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_map_on_non_empty_list() {
assert_evals_to!(
indoc!(
@ -711,6 +717,7 @@ fn list_map_on_non_empty_list() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_map_changes_input() {
assert_evals_to!(
indoc!(
@ -728,6 +735,7 @@ fn list_map_changes_input() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_map_on_big_list() {
assert_evals_to!(
indoc!(
@ -747,6 +755,7 @@ fn list_map_on_big_list() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_map_with_type_change() {
assert_evals_to!(
indoc!(
@ -765,6 +774,7 @@ fn list_map_with_type_change() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_map_using_defined_function() {
assert_evals_to!(
indoc!(
@ -786,6 +796,7 @@ fn list_map_using_defined_function() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_map_all_inline() {
assert_evals_to!(
indoc!(
@ -799,6 +810,7 @@ fn list_map_all_inline() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_map_closure() {
assert_evals_to!(
indoc!(
@ -819,6 +831,7 @@ fn list_map_closure() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_map4_group() {
assert_evals_to!(
indoc!(
@ -832,6 +845,7 @@ fn list_map4_group() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_map4_different_length() {
assert_evals_to!(
indoc!(
@ -850,6 +864,7 @@ fn list_map4_different_length() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_map3_group() {
assert_evals_to!(
indoc!(
@ -863,6 +878,7 @@ fn list_map3_group() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_map3_different_length() {
assert_evals_to!(
indoc!(
@ -880,6 +896,7 @@ fn list_map3_different_length() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_map2_pair() {
assert_evals_to!(
indoc!(
@ -894,6 +911,7 @@ fn list_map2_pair() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_map2_different_lengths() {
assert_evals_to!(
indoc!(
@ -910,11 +928,13 @@ fn list_map2_different_lengths() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_join_empty_list() {
assert_evals_to!("List.join []", RocList::from_slice(&[]), RocList<i64>);
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_join_one_list() {
assert_evals_to!(
"List.join [ [1, 2, 3 ] ]",
@ -924,6 +944,7 @@ fn list_join_one_list() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_join_two_non_empty_lists() {
assert_evals_to!(
"List.join [ [1, 2, 3 ] , [4 ,5, 6] ]",
@ -933,6 +954,7 @@ fn list_join_two_non_empty_lists() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_join_two_non_empty_lists_of_float() {
assert_evals_to!(
"List.join [ [ 1.2, 1.1 ], [ 2.1, 2.2 ] ]",
@ -942,6 +964,7 @@ fn list_join_two_non_empty_lists_of_float() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_join_to_big_list() {
assert_evals_to!(
indoc!(
@ -967,6 +990,7 @@ fn list_join_to_big_list() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_join_defined_empty_list() {
assert_evals_to!(
indoc!(
@ -984,6 +1008,7 @@ fn list_join_defined_empty_list() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_join_all_empty_lists() {
assert_evals_to!(
"List.join [ [], [], [] ]",
@ -993,6 +1018,7 @@ fn list_join_all_empty_lists() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_join_one_empty_list() {
assert_evals_to!(
"List.join [ [ 1.2, 1.1 ], [] ]",
@ -1002,12 +1028,14 @@ fn list_join_one_empty_list() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_single() {
assert_evals_to!("List.single 1", RocList::from_slice(&[1]), RocList<i64>);
assert_evals_to!("List.single 5.6", RocList::from_slice(&[5.6]), RocList<f64>);
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_repeat() {
assert_evals_to!(
"List.repeat 5 1",
@ -1048,6 +1076,7 @@ fn list_repeat() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_reverse() {
assert_evals_to!(
"List.reverse [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]",
@ -1063,6 +1092,7 @@ fn list_reverse() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_reverse_empty_list_of_int() {
assert_evals_to!(
indoc!(
@ -1080,11 +1110,13 @@ fn list_reverse_empty_list_of_int() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_reverse_empty_list() {
assert_evals_to!("List.reverse []", RocList::from_slice(&[]), RocList<i64>);
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn foobarbaz() {
assert_evals_to!(
indoc!(
@ -1106,11 +1138,13 @@ fn foobarbaz() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_concat_two_empty_lists() {
assert_evals_to!("List.concat [] []", RocList::from_slice(&[]), RocList<i64>);
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_concat_two_empty_lists_of_int() {
assert_evals_to!(
indoc!(
@ -1132,6 +1166,7 @@ fn list_concat_two_empty_lists_of_int() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_concat_second_list_is_empty() {
assert_evals_to!(
"List.concat [ 12, 13 ] []",
@ -1146,6 +1181,7 @@ fn list_concat_second_list_is_empty() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_concat_first_list_is_empty() {
assert_evals_to!(
"List.concat [] [ 23, 24 ]",
@ -1155,6 +1191,7 @@ fn list_concat_first_list_is_empty() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_concat_two_non_empty_lists() {
assert_evals_to!(
"List.concat [1, 2 ] [ 3, 4 ]",
@ -1164,6 +1201,7 @@ fn list_concat_two_non_empty_lists() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_concat_two_bigger_non_empty_lists() {
assert_evals_to!(
"List.concat [ 1.1, 2.2 ] [ 3.3, 4.4, 5.5 ]",
@ -1193,6 +1231,7 @@ fn assert_concat_worked(num_elems1: i64, num_elems2: i64) {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_concat_empty_list() {
assert_concat_worked(0, 0);
assert_concat_worked(1, 0);
@ -1216,6 +1255,7 @@ fn list_concat_empty_list() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_concat_nonempty_lists() {
assert_concat_worked(1, 1);
assert_concat_worked(1, 2);
@ -1231,6 +1271,7 @@ fn list_concat_nonempty_lists() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_concat_large() {
with_larger_debug_stack(|| {
// these values produce mono ASTs so large that
@ -1243,16 +1284,19 @@ fn list_concat_large() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn empty_list_len() {
assert_evals_to!("List.len []", 0, usize);
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn basic_int_list_len() {
assert_evals_to!("List.len [ 12, 9, 6, 3 ]", 4, usize);
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn loaded_int_list_len() {
assert_evals_to!(
indoc!(
@ -1268,6 +1312,7 @@ fn loaded_int_list_len() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn fn_int_list_len() {
assert_evals_to!(
indoc!(
@ -1285,16 +1330,19 @@ fn fn_int_list_len() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn int_list_is_empty() {
assert_evals_to!("List.isEmpty [ 12, 9, 6, 3 ]", false, bool);
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn empty_list_is_empty() {
assert_evals_to!("List.isEmpty []", true, bool);
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn first_int_list() {
assert_evals_to!(
indoc!(
@ -1310,6 +1358,7 @@ fn first_int_list() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
#[ignore]
fn first_wildcard_empty_list() {
assert_evals_to!(
@ -1326,6 +1375,7 @@ fn first_wildcard_empty_list() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn first_empty_list() {
assert_evals_to!(
indoc!(
@ -1341,6 +1391,7 @@ fn first_empty_list() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn last_int_list() {
assert_evals_to!(
indoc!(
@ -1356,6 +1407,7 @@ fn last_int_list() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
#[ignore]
fn last_wildcard_empty_list() {
assert_evals_to!(
@ -1372,6 +1424,7 @@ fn last_wildcard_empty_list() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn last_empty_list() {
assert_evals_to!(
indoc!(
@ -1387,6 +1440,7 @@ fn last_empty_list() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn get_empty_list() {
assert_evals_to!(
indoc!(
@ -1402,6 +1456,7 @@ fn get_empty_list() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
#[ignore]
fn get_wildcard_empty_list() {
assert_evals_to!(
@ -1418,6 +1473,7 @@ fn get_wildcard_empty_list() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn get_int_list_ok() {
assert_evals_to!(
indoc!(
@ -1433,6 +1489,7 @@ fn get_int_list_ok() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn get_int_list_oob() {
assert_evals_to!(
indoc!(
@ -1448,6 +1505,7 @@ fn get_int_list_oob() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn get_set_unique_int_list() {
assert_evals_to!(
indoc!(
@ -1463,6 +1521,7 @@ fn get_set_unique_int_list() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn set_unique_int_list() {
assert_evals_to!(
"List.set [ 12, 9, 7, 1, 5 ] 2 33",
@ -1472,6 +1531,7 @@ fn set_unique_int_list() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn set_unique_list_oob() {
assert_evals_to!(
"List.set [ 3, 17, 4.1 ] 1337 9.25",
@ -1481,6 +1541,7 @@ fn set_unique_list_oob() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn set_shared_int_list() {
assert_evals_to!(
indoc!(
@ -1508,6 +1569,7 @@ fn set_shared_int_list() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn set_shared_list_oob() {
assert_evals_to!(
indoc!(
@ -1534,6 +1596,7 @@ fn set_shared_list_oob() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn get_unique_int_list() {
assert_evals_to!(
indoc!(
@ -1551,6 +1614,7 @@ fn get_unique_int_list() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn gen_wrap_len() {
assert_evals_to!(
indoc!(
@ -1567,6 +1631,7 @@ fn gen_wrap_len() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn gen_wrap_first() {
assert_evals_to!(
indoc!(
@ -1583,6 +1648,7 @@ fn gen_wrap_first() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn gen_duplicate() {
assert_evals_to!(
indoc!(
@ -1605,6 +1671,7 @@ fn gen_duplicate() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn gen_swap() {
assert_evals_to!(
indoc!(
@ -1633,6 +1700,7 @@ fn gen_swap() {
}
// #[test]
#[cfg(any(feature = "gen-llvm"))]
// fn gen_partition() {
// assert_evals_to!(
// indoc!(
@ -1685,6 +1753,7 @@ fn gen_swap() {
// }
// #[test]
#[cfg(any(feature = "gen-llvm"))]
// fn gen_partition() {
// assert_evals_to!(
// indoc!(
@ -1722,8 +1791,8 @@ fn gen_swap() {
// RocList<i64>
// );
// }
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn gen_quicksort() {
with_larger_debug_stack(|| {
assert_evals_to!(
@ -1795,6 +1864,7 @@ fn gen_quicksort() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn foobar2() {
with_larger_debug_stack(|| {
assert_evals_to!(
@ -1868,6 +1938,7 @@ fn foobar2() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn foobar() {
with_larger_debug_stack(|| {
assert_evals_to!(
@ -1941,6 +2012,7 @@ fn foobar() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn empty_list_increment_decrement() {
assert_evals_to!(
indoc!(
@ -1957,6 +2029,7 @@ fn empty_list_increment_decrement() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_literal_increment_decrement() {
assert_evals_to!(
indoc!(
@ -1973,6 +2046,7 @@ fn list_literal_increment_decrement() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_pass_to_function() {
assert_evals_to!(
indoc!(
@ -1992,6 +2066,7 @@ fn list_pass_to_function() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_pass_to_set() {
assert_evals_to!(
indoc!(
@ -2011,6 +2086,7 @@ fn list_pass_to_set() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_wrap_in_tag() {
assert_evals_to!(
indoc!(
@ -2028,6 +2104,7 @@ fn list_wrap_in_tag() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_contains() {
assert_evals_to!(indoc!("List.contains [1,2,3] 1"), true, bool);
@ -2036,6 +2113,7 @@ fn list_contains() {
assert_evals_to!(indoc!("List.contains [] 4"), false, bool);
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_min() {
assert_evals_to!(
indoc!(
@ -2062,6 +2140,7 @@ fn list_min() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_max() {
assert_evals_to!(
indoc!(
@ -2088,6 +2167,7 @@ fn list_max() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_sum() {
assert_evals_to!("List.sum []", 0, i64);
assert_evals_to!("List.sum [ 1, 2, 3 ]", 6, i64);
@ -2095,6 +2175,7 @@ fn list_sum() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_product() {
assert_evals_to!("List.product []", 1, i64);
assert_evals_to!("List.product [ 1, 2, 3 ]", 6, i64);
@ -2102,6 +2183,7 @@ fn list_product() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_keep_oks() {
assert_evals_to!("List.keepOks [] (\\x -> x)", 0, i64);
assert_evals_to!(
@ -2122,6 +2204,7 @@ fn list_keep_oks() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_keep_errs() {
assert_evals_to!("List.keepErrs [] (\\x -> x)", 0, i64);
assert_evals_to!(
@ -2147,6 +2230,7 @@ fn list_keep_errs() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_map_with_index() {
assert_evals_to!(
"List.mapWithIndex [0,0,0] (\\index, x -> Num.intCast index + x)",
@ -2156,6 +2240,7 @@ fn list_map_with_index() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
#[should_panic(expected = r#"Roc failed with message: "integer addition overflowed!"#)]
fn cleanup_because_exception() {
assert_evals_to!(
@ -2175,6 +2260,7 @@ fn cleanup_because_exception() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_range() {
assert_evals_to!("List.range 0 -1", RocList::from_slice(&[]), RocList<i64>);
assert_evals_to!("List.range 0 0", RocList::from_slice(&[0]), RocList<i64>);
@ -2186,6 +2272,7 @@ fn list_range() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_sort_with() {
assert_evals_to!(
"List.sortWith [] Num.compare",
@ -2205,6 +2292,7 @@ fn list_sort_with() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_any() {
assert_evals_to!("List.any [] (\\e -> e > 3)", false, bool);
assert_evals_to!("List.any [ 1, 2, 3 ] (\\e -> e > 3)", false, bool);
@ -2212,6 +2300,7 @@ fn list_any() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
#[ignore]
fn list_any_empty_with_unknown_element_type() {
// Segfaults with invalid memory reference. Running this as a stand-alone
@ -2224,6 +2313,7 @@ fn list_any_empty_with_unknown_element_type() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
#[should_panic(expected = r#"Roc failed with message: "invalid ret_layout""#)]
fn lists_with_incompatible_type_param_in_if() {
assert_evals_to!(
@ -2244,6 +2334,7 @@ fn lists_with_incompatible_type_param_in_if() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn map_with_index_multi_record() {
// see https://github.com/rtfeldman/roc/issues/1700
assert_evals_to!(
@ -2258,6 +2349,7 @@ fn map_with_index_multi_record() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn empty_list_of_function_type() {
// see https://github.com/rtfeldman/roc/issues/1732
assert_evals_to!(
@ -2286,6 +2378,7 @@ fn empty_list_of_function_type() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_join_map() {
assert_evals_to!(
indoc!(
@ -2305,6 +2398,7 @@ fn list_join_map() {
}
#[test]
#[cfg(any(feature = "gen-llvm"))]
fn list_join_map_empty() {
assert_evals_to!(
indoc!(