mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-28 06:14:46 +00:00
248 lines
4.7 KiB
Rust
248 lines
4.7 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 {
|
|
|
|
#[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#"
|
|
set1 : Set I64
|
|
set1 = Set.fromList [1,2]
|
|
|
|
set2 : Set I64
|
|
set2 = Set.fromList [1,3,4]
|
|
|
|
Set.union set1 set2
|
|
|> Set.toList
|
|
"#
|
|
),
|
|
&[4, 2, 3, 1],
|
|
&[i64]
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn difference() {
|
|
assert_evals_to!(
|
|
indoc!(
|
|
r#"
|
|
set1 : Set I64
|
|
set1 = Set.fromList [1,2]
|
|
|
|
set2 : Set I64
|
|
set2 = Set.fromList [1,3,4]
|
|
|
|
Set.difference set1 set2
|
|
|> Set.toList
|
|
"#
|
|
),
|
|
&[2],
|
|
&[i64]
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn intersection() {
|
|
assert_evals_to!(
|
|
indoc!(
|
|
r#"
|
|
set1 : Set I64
|
|
set1 = Set.fromList [1,2]
|
|
|
|
set2 : Set I64
|
|
set2 = Set.fromList [1,3,4]
|
|
|
|
Set.intersection set1 set2
|
|
|> Set.toList
|
|
"#
|
|
),
|
|
&[1],
|
|
&[i64]
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn walk_sum() {
|
|
assert_evals_to!(
|
|
indoc!(
|
|
r#"
|
|
Set.walk (Set.fromList [1,2,3]) (\x, y -> x + y) 0
|
|
"#
|
|
),
|
|
6,
|
|
i64
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn contains() {
|
|
assert_evals_to!(
|
|
indoc!(
|
|
r#"
|
|
Set.contains (Set.fromList [1,3,4]) 4
|
|
"#
|
|
),
|
|
true,
|
|
bool
|
|
);
|
|
|
|
assert_evals_to!(
|
|
indoc!(
|
|
r#"
|
|
Set.contains (Set.fromList [1,3,4]) 2
|
|
"#
|
|
),
|
|
false,
|
|
bool
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn from_list() {
|
|
assert_evals_to!(
|
|
indoc!(
|
|
r#"
|
|
[1,2,2,3,1,4]
|
|
|> Set.fromList
|
|
|> Set.toList
|
|
"#
|
|
),
|
|
&[4, 2, 3, 1],
|
|
&[i64]
|
|
);
|
|
|
|
assert_evals_to!(
|
|
indoc!(
|
|
r#"
|
|
[]
|
|
|> Set.fromList
|
|
|> Set.toList
|
|
"#
|
|
),
|
|
&[],
|
|
&[i64]
|
|
);
|
|
|
|
assert_evals_to!(
|
|
indoc!(
|
|
r#"
|
|
empty : List I64
|
|
empty = []
|
|
|
|
empty
|
|
|> Set.fromList
|
|
|> Set.toList
|
|
"#
|
|
),
|
|
&[],
|
|
&[i64]
|
|
);
|
|
}
|
|
}
|