dust/tests/for_loop.rs

174 lines
2.9 KiB
Rust
Raw Normal View History

2024-01-06 07:26:51 +00:00
use dust_lang::*;
#[test]
2024-01-30 16:48:29 +00:00
fn list_for_loop() {
2024-01-06 07:26:51 +00:00
let result = interpret("for i in [1 2 3] { output(i) }");
assert_eq!(Ok(Value::none()), result);
}
#[test]
2024-01-30 16:48:29 +00:00
fn range_for_loop() {
2024-01-06 07:26:51 +00:00
let result = interpret(
"
2024-01-30 16:48:29 +00:00
numbers = []
for i in 1..3 {
numbers += i
}
numbers
",
2024-01-06 07:26:51 +00:00
);
assert_eq!(
Ok(Value::List(List::with_items(vec![
Value::Integer(1),
Value::Integer(2),
Value::Integer(3),
]))),
result
);
}
2024-01-30 05:24:13 +00:00
#[test]
2024-01-30 16:48:29 +00:00
fn map_for_loop() {
2024-01-30 05:24:13 +00:00
let result = interpret(
"
2024-01-30 16:48:29 +00:00
map = {
x = 'y'
foo = 'bar'
}
list = []
for [key, value] in map {
list += value
}
list
",
);
assert_eq!(
Ok(Value::List(List::with_items(vec![
Value::String("y".to_string()),
Value::String("bar".to_string()),
]))),
result
);
}
#[test]
fn modify_list() {
let result = interpret(
"
list = []
for i in [1 2 3] { list += i }
list
",
);
assert_eq!(
Ok(Value::List(List::with_items(vec![
Value::Integer(1),
Value::Integer(2),
Value::Integer(3),
]))),
result
);
}
#[test]
fn modify_map() {
let result = interpret(
"
map = {}
for i in [['x', 1] ['y', 2]] {
map:(i:0) = i:1
}
map
",
);
let map = Map::new();
map.set("x".to_string(), Value::Integer(1)).unwrap();
map.set("y".to_string(), Value::Integer(2)).unwrap();
assert_eq!(Ok(Value::Map(map)), result);
}
#[test]
fn modify_list_values() {
let result = interpret(
"
list = [1 2 3]
for i in list { i += i }
list
",
2024-01-30 05:24:13 +00:00
);
assert_eq!(
Ok(Value::List(List::with_items(vec![
Value::Integer(2),
Value::Integer(3),
Value::Integer(4),
]))),
result
);
}
2024-01-30 16:48:29 +00:00
#[test]
fn modify_map_values() {
let result = interpret(
"
map = {
x = 0
y = 1
}
for [key, value] in map {
value += 1
}
map
",
);
let map = Map::new();
map.set("x".to_string(), Value::Integer(1)).unwrap();
map.set("y".to_string(), Value::Integer(2)).unwrap();
assert_eq!(Ok(Value::Map(map)), result);
}
2024-01-30 05:24:13 +00:00
#[test]
fn r#break() {
let result = interpret(
"
2024-01-30 16:48:29 +00:00
list = []
for i in [1 2 3] {
if i > 2 {
break
} else {
list += i
2024-01-30 05:24:13 +00:00
}
2024-01-30 16:48:29 +00:00
}
list
2024-01-30 05:24:13 +00:00
",
);
assert_eq!(
Ok(Value::List(List::with_items(vec![
Value::Integer(1),
Value::Integer(2),
]))),
result
);
}