mirror of
https://github.com/roc-lang/roc.git
synced 2025-10-01 15:51:12 +00:00
292 lines
5.9 KiB
Rust
292 lines
5.9 KiB
Rust
#[macro_use]
|
|
extern crate pretty_assertions;
|
|
#[macro_use]
|
|
extern crate indoc;
|
|
|
|
extern crate bumpalo;
|
|
extern crate inkwell;
|
|
extern crate libc;
|
|
extern crate roc_gen;
|
|
|
|
#[macro_use]
|
|
mod helpers;
|
|
|
|
#[cfg(test)]
|
|
mod gen_set {
|
|
// use roc_std::RocStr;
|
|
|
|
#[test]
|
|
fn empty_len() {
|
|
assert_evals_to!(
|
|
indoc!(
|
|
r#"
|
|
Set.len Set.empty
|
|
"#
|
|
),
|
|
0,
|
|
usize
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn singleton_len() {
|
|
assert_evals_to!(
|
|
indoc!(
|
|
r#"
|
|
Set.len (Set.singleton 42)
|
|
"#
|
|
),
|
|
1,
|
|
usize
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn singleton_to_list() {
|
|
assert_evals_to!(
|
|
indoc!(
|
|
r#"
|
|
Set.toList (Set.singleton 42)
|
|
"#
|
|
),
|
|
&[42],
|
|
&[i64]
|
|
);
|
|
|
|
assert_evals_to!(
|
|
indoc!(
|
|
r#"
|
|
Set.toList (Set.singleton 1)
|
|
"#
|
|
),
|
|
&[1],
|
|
&[i64]
|
|
);
|
|
|
|
assert_evals_to!(
|
|
indoc!(
|
|
r#"
|
|
Set.toList (Set.singleton 1.0)
|
|
"#
|
|
),
|
|
&[1.0],
|
|
&[f64]
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn insert() {
|
|
assert_evals_to!(
|
|
indoc!(
|
|
r#"
|
|
Set.empty
|
|
|> Set.insert 0
|
|
|> Set.insert 1
|
|
|> Set.insert 2
|
|
|> Set.toList
|
|
"#
|
|
),
|
|
&[0, 1, 2],
|
|
&[i64]
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn remove() {
|
|
assert_evals_to!(
|
|
indoc!(
|
|
r#"
|
|
Set.empty
|
|
|> Set.insert 0
|
|
|> Set.insert 1
|
|
|> Set.remove 1
|
|
|> Set.remove 2
|
|
|> Set.toList
|
|
"#
|
|
),
|
|
&[0],
|
|
&[i64]
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn union() {
|
|
assert_evals_to!(
|
|
indoc!(
|
|
r#"
|
|
fromList : List a -> Set a
|
|
fromList = \list -> List.walk list (\x, a -> Set.insert a x) Set.empty
|
|
|
|
set1 : Set I64
|
|
set1 = fromList [1,2]
|
|
|
|
set2 : Set I64
|
|
set2 = fromList [1,3,4]
|
|
|
|
Set.union set1 set2
|
|
|> Set.toList
|
|
"#
|
|
),
|
|
&[4, 2, 3, 1],
|
|
&[i64]
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn difference() {
|
|
assert_evals_to!(
|
|
indoc!(
|
|
r#"
|
|
fromList : List a -> Set a
|
|
fromList = \list -> List.walk list (\x, a -> Set.insert a x) Set.empty
|
|
|
|
set1 : Set I64
|
|
set1 = fromList [1,2]
|
|
|
|
set2 : Set I64
|
|
set2 = fromList [1,3,4]
|
|
|
|
Set.difference set1 set2
|
|
|> Set.toList
|
|
"#
|
|
),
|
|
&[2],
|
|
&[i64]
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn intersection() {
|
|
assert_evals_to!(
|
|
indoc!(
|
|
r#"
|
|
fromList : List a -> Set a
|
|
fromList = \list -> List.walk list (\x, a -> Set.insert a x) Set.empty
|
|
|
|
set1 : Set I64
|
|
set1 = fromList [1,2]
|
|
|
|
set2 : Set I64
|
|
set2 = fromList [1,3,4]
|
|
|
|
Set.intersection set1 set2
|
|
|> Set.toList
|
|
"#
|
|
),
|
|
&[1],
|
|
&[i64]
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn walk_sum() {
|
|
assert_evals_to!(
|
|
indoc!(
|
|
r#"
|
|
fromList : List a -> Set a
|
|
fromList = \list -> List.walk list (\x, a -> Set.insert a x) Set.empty
|
|
|
|
|
|
Set.walk (fromList [1,2,3]) (\x, y -> x + y) 0
|
|
"#
|
|
),
|
|
6,
|
|
i64
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn with_default() {
|
|
assert_evals_to!(
|
|
indoc!(
|
|
r#"
|
|
result : Result I64 {}
|
|
result = Ok 2
|
|
|
|
Result.withDefault result 0
|
|
"#
|
|
),
|
|
2,
|
|
i64
|
|
);
|
|
|
|
assert_evals_to!(
|
|
indoc!(
|
|
r#"
|
|
result : Result I64 {}
|
|
result = Err {}
|
|
|
|
Result.withDefault result 0
|
|
"#
|
|
),
|
|
0,
|
|
i64
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn result_map() {
|
|
assert_evals_to!(
|
|
indoc!(
|
|
r#"
|
|
result : Result I64 {}
|
|
result = Ok 2
|
|
|
|
result
|
|
|> Result.map (\x -> x + 1)
|
|
|> Result.withDefault 0
|
|
"#
|
|
),
|
|
3,
|
|
i64
|
|
);
|
|
|
|
assert_evals_to!(
|
|
indoc!(
|
|
r#"
|
|
result : Result I64 {}
|
|
result = Err {}
|
|
|
|
result
|
|
|> Result.map (\x -> x + 1)
|
|
|> Result.withDefault 0
|
|
"#
|
|
),
|
|
0,
|
|
i64
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn result_map_err() {
|
|
assert_evals_to!(
|
|
indoc!(
|
|
r#"
|
|
result : Result {} I64
|
|
result = Err 2
|
|
|
|
when Result.mapErr result (\x -> x + 1) is
|
|
Err n -> n
|
|
Ok _ -> 0
|
|
"#
|
|
),
|
|
3,
|
|
i64
|
|
);
|
|
|
|
assert_evals_to!(
|
|
indoc!(
|
|
r#"
|
|
result : Result {} I64
|
|
result = Ok {}
|
|
|
|
when Result.mapErr result (\x -> x + 1) is
|
|
Err n -> n
|
|
Ok _ -> 0
|
|
"#
|
|
),
|
|
0,
|
|
i64
|
|
);
|
|
}
|
|
}
|