use super::eval;
use tsrun::JsValue;
#[test]
fn test_set_basic() {
assert_eq!(eval("let s = new Set(); s.size"), JsValue::Number(0.0));
assert_eq!(
eval("let s = new Set(); s.add(1); s.has(1)"),
JsValue::Boolean(true)
);
assert_eq!(eval("let s = new Set(); s.has(1)"), JsValue::Boolean(false));
assert_eq!(
eval("let s = new Set(); s.add(1); s.size"),
JsValue::Number(1.0)
);
}
#[test]
fn test_set_uniqueness() {
assert_eq!(
eval("let s = new Set(); s.add(1); s.add(1); s.size"),
JsValue::Number(1.0)
);
}
#[test]
fn test_set_delete() {
assert_eq!(
eval("let s = new Set(); s.add(1); s['delete'](1); s.has(1)"),
JsValue::Boolean(false)
);
}
#[test]
fn test_set_clear() {
assert_eq!(
eval("let s = new Set(); s.add(1); s.add(2); s.clear(); s.size"),
JsValue::Number(0.0)
);
}
#[test]
fn test_set_object_values() {
assert_eq!(
eval("let s = new Set(); let obj = {}; s.add(obj); s.has(obj)"),
JsValue::Boolean(true)
);
}
#[test]
fn test_set_initialize_with_array() {
assert_eq!(
eval("let s = new Set([1, 2, 3]); s.size"),
JsValue::Number(3.0)
);
assert_eq!(
eval("let s = new Set([1, 2, 2, 3]); s.size"),
JsValue::Number(3.0)
);
}
#[test]
fn test_set_foreach() {
assert_eq!(
eval(
"let result = []; let s = new Set([1, 2, 3]); s.forEach(v => result.push(v)); result.join(',')"
),
JsValue::from("1,2,3")
);
}
#[test]
fn test_set_method_chaining() {
assert_eq!(
eval("let s = new Set(); s.add(1).add(2).has(2)"),
JsValue::Boolean(true)
);
}
#[test]
fn test_set_keys() {
assert_eq!(
eval("let s = new Set([1, 2, 3]); Array.from(s.keys()).join(',')"),
JsValue::from("1,2,3")
);
}
#[test]
fn test_set_values() {
assert_eq!(
eval("let s = new Set(['a', 'b', 'c']); Array.from(s.values()).join(',')"),
JsValue::from("a,b,c")
);
}
#[test]
fn test_set_entries() {
assert_eq!(
eval(
"let s = new Set([1, 2]); let result = []; for (let e of s.entries()) { result.push(e[0] + ':' + e[1]); } result.join(',')"
),
JsValue::from("1:1,2:2")
);
}