fix array bug with string concat in display
This commit is contained in:
parent
2111fcac62
commit
5d40b4047a
|
|
@ -2366,6 +2366,23 @@ impl Interpreter {
|
||||||
(Op::Add, Value::Number(a), Value::Str(b)) => Ok(Value::Str(format!("{}{}", format_number(*a), b))),
|
(Op::Add, Value::Number(a), Value::Str(b)) => Ok(Value::Str(format!("{}{}", format_number(*a), b))),
|
||||||
(Op::Add, Value::Str(a), Value::Bool(b)) => Ok(Value::Str(format!("{}{}", a, b))),
|
(Op::Add, Value::Str(a), Value::Bool(b)) => Ok(Value::Str(format!("{}{}", a, b))),
|
||||||
(Op::Add, Value::Bool(a), Value::Str(b)) => Ok(Value::Str(format!("{}{}", a, b))),
|
(Op::Add, Value::Bool(a), Value::Str(b)) => Ok(Value::Str(format!("{}{}", a, b))),
|
||||||
|
(Op::Add, Value::Str(s), other) => Ok(Value::Str(format!("{}{}", s, other.display()))),
|
||||||
|
(Op::Add, other, Value::Str(s)) => Ok(Value::Str(format!("{}{}", other.display(), s))),
|
||||||
|
(Op::Add, Value::Array(a), Value::Array(b)) => {
|
||||||
|
let mut out = a.clone();
|
||||||
|
out.extend(b.iter().cloned());
|
||||||
|
Ok(Value::Array(out))
|
||||||
|
}
|
||||||
|
(Op::Add, Value::Array(a), other) => {
|
||||||
|
let mut out = a.clone();
|
||||||
|
out.push(other.clone());
|
||||||
|
Ok(Value::Array(out))
|
||||||
|
}
|
||||||
|
(Op::Add, other, Value::Array(a)) => {
|
||||||
|
let mut out = vec![other.clone()];
|
||||||
|
out.extend(a.iter().cloned());
|
||||||
|
Ok(Value::Array(out))
|
||||||
|
}
|
||||||
|
|
||||||
(Op::Lt, Value::Number(a), Value::Number(b)) => Ok(Value::Bool(a < b)),
|
(Op::Lt, Value::Number(a), Value::Number(b)) => Ok(Value::Bool(a < b)),
|
||||||
(Op::Gt, Value::Number(a), Value::Number(b)) => Ok(Value::Bool(a > b)),
|
(Op::Gt, Value::Number(a), Value::Number(b)) => Ok(Value::Bool(a > b)),
|
||||||
|
|
@ -6164,6 +6181,56 @@ fn find(arr, target) {
|
||||||
assert!(matches!(v, Value::Number(n) if n == 3.0));
|
assert!(matches!(v, Value::Number(n) if n == 3.0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn add_str_plus_array_stringifies() {
|
||||||
|
let mut i = Interpreter::new();
|
||||||
|
let v = i.eval_expr_str(r#""Diff: " + [1, 2]"#).unwrap();
|
||||||
|
match v {
|
||||||
|
Value::Str(s) => assert_eq!(s, "Diff: [1, 2]"),
|
||||||
|
_ => panic!("expected Str, got {:?}", v),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn add_array_plus_str_stringifies() {
|
||||||
|
let mut i = Interpreter::new();
|
||||||
|
let v = i.eval_expr_str(r#"[1, 2] + " items""#).unwrap();
|
||||||
|
match v {
|
||||||
|
Value::Str(s) => assert_eq!(s, "[1, 2] items"),
|
||||||
|
_ => panic!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn add_array_plus_array_concats() {
|
||||||
|
let mut i = Interpreter::new();
|
||||||
|
let v = i.eval_expr_str("[1, 2] + [3, 4]").unwrap();
|
||||||
|
match v {
|
||||||
|
Value::Array(a) => assert_eq!(a.len(), 4),
|
||||||
|
_ => panic!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn add_array_plus_number_appends() {
|
||||||
|
let mut i = Interpreter::new();
|
||||||
|
let v = i.eval_expr_str("[1, 2] + 3").unwrap();
|
||||||
|
match v {
|
||||||
|
Value::Array(a) => assert_eq!(a.len(), 3),
|
||||||
|
_ => panic!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn add_chains_str_array_str() {
|
||||||
|
let mut i = Interpreter::new();
|
||||||
|
let v = i.eval_expr_str(r#""Diff: " + [10, 20] + " + Sum: " + [30, 40]"#).unwrap();
|
||||||
|
match v {
|
||||||
|
Value::Str(s) => assert_eq!(s, "Diff: [10, 20] + Sum: [30, 40]"),
|
||||||
|
_ => panic!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn rand_unit_range() {
|
fn rand_unit_range() {
|
||||||
let mut i = Interpreter::new();
|
let mut i = Interpreter::new();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue