// This example shows how to manipulate a Javascript Set using Rust code. #![allow(clippy::bool_assert_comparison)] use boa_engine::{object::builtins::JsSet, Context, JsValue}; fn main() -> Result<(), JsValue> { // New `Context` for a new Javascript executor. let context = &mut Context::default(); // Create an empty set. let set = JsSet::new(context); assert_eq!(set.size(context)?, 0); set.add(5, context)?; assert_eq!(set.size(context)?, 1); set.add(10, context)?; assert_eq!(set.size(context)?, 2); set.clear(context)?; assert_eq!(set.size(context)?, 0); set.add("one", context)?; set.add("two", context)?; set.add("three", context)?; assert!(set.has("one", context)?); assert_eq!(set.has("One", context)?, false); set.delete("two", context)?; assert_eq!(set.has("two", context)?, false); set.clear(context)?; assert_eq!(set.has("one", context)?, false); assert_eq!(set.has("three", context)?, false); assert_eq!(set.size(context)?, 0); // Add a slice into a set; set.add_items( &[JsValue::new(1), JsValue::new(2), JsValue::new(3)], context, )?; // Will return 1, as one slice was added. assert_eq!(set.size(context)?, 1); // Make a new set from a slice let slice_set = JsSet::from_iter([JsValue::new(1), JsValue::new(2), JsValue::new(3)], context); // Will return 3, as each element of slice was added into the set. assert_eq!(slice_set.size(context)?, 3); set.clear(context)?; Ok(()) }