1 use js_sys::*;
2 use wasm_bindgen::prelude::*;
3 use wasm_bindgen::JsCast;
4 use wasm_bindgen_test::*;
5 
set2vec(s: &Set) -> Vec<JsValue>6 fn set2vec(s: &Set) -> Vec<JsValue> {
7     let mut result = Vec::new();
8     s.for_each(&mut |x, _, _| result.push(x));
9     return result;
10 }
11 
12 #[wasm_bindgen_test]
add()13 fn add() {
14     let set = Set::new(&JsValue::undefined());
15     set.add(&100.into());
16     assert_eq!(set.size(), 1);
17     assert_eq!(set2vec(&set)[0], 100);
18 }
19 
20 #[wasm_bindgen_test]
clear()21 fn clear() {
22     let set = Set::new(&JsValue::undefined());
23     set.add(&1.into());
24     set.add(&2.into());
25     set.add(&3.into());
26     assert_eq!(set.size(), 3);
27     set.clear();
28     assert_eq!(set.size(), 0);
29 }
30 
31 #[wasm_bindgen_test]
delete()32 fn delete() {
33     let set = Set::new(&JsValue::undefined());
34     set.add(&1.into());
35     set.add(&2.into());
36     set.add(&3.into());
37 
38     assert!(set.delete(&3.into()));
39     assert!(!set.delete(&3.into()));
40     assert!(!set.delete(&4.into()));
41 }
42 
43 #[wasm_bindgen_test]
for_each()44 fn for_each() {
45     let set = Set::new(&JsValue::undefined());
46     set.add(&1.into());
47     set.add(&2.into());
48     set.add(&3.into());
49 
50     let v = set2vec(&set);
51     assert_eq!(v.len(), 3);
52     assert!(v.iter().any(|v| *v == 1));
53     assert!(v.iter().any(|v| *v == 2));
54     assert!(v.iter().any(|v| *v == 3));
55 }
56 
57 #[wasm_bindgen_test]
has()58 fn has() {
59     let set = Set::new(&JsValue::undefined());
60     set.add(&1.into());
61     set.add(&2.into());
62     set.add(&3.into());
63 
64     assert!(set.has(&1.into()));
65     assert!(!set.has(&1.3.into()));
66 }
67 
68 #[wasm_bindgen_test]
new()69 fn new() {
70     assert_eq!(Set::new(&JsValue::undefined()).size(), 0);
71 }
72 
73 #[wasm_bindgen_test]
size()74 fn size() {
75     let set = Set::new(&JsValue::undefined());
76     assert_eq!(set.size(), 0);
77     set.add(&1.into());
78     assert_eq!(set.size(), 1);
79     set.add(&2.into());
80     assert_eq!(set.size(), 2);
81     set.add(&3.into());
82     assert_eq!(set.size(), 3);
83 }
84 
85 #[wasm_bindgen_test]
set_inheritance()86 fn set_inheritance() {
87     let set = Set::new(&JsValue::undefined());
88     assert!(set.is_instance_of::<Set>());
89     assert!(set.is_instance_of::<Object>());
90     let _: &Object = set.as_ref();
91 }
92 
93 #[wasm_bindgen_test]
keys()94 fn keys() {
95     let set = Set::new(&JsValue::undefined());
96     set.add(&1.into());
97     set.add(&2.into());
98     set.add(&3.into());
99 
100     let list = set
101         .keys()
102         .into_iter()
103         .map(|e| e.unwrap())
104         .collect::<Vec<_>>();
105     assert_eq!(list.len(), 3);
106     assert!(list.iter().any(|l| *l == 1));
107     assert!(list.iter().any(|l| *l == 2));
108     assert!(list.iter().any(|l| *l == 3));
109 }
110 
111 #[wasm_bindgen_test]
values()112 fn values() {
113     let set = Set::new(&JsValue::undefined());
114     set.add(&1.into());
115     set.add(&2.into());
116     set.add(&3.into());
117 
118     let list = set
119         .values()
120         .into_iter()
121         .map(|e| e.unwrap())
122         .collect::<Vec<_>>();
123     assert_eq!(list.len(), 3);
124     assert!(list.iter().any(|l| *l == 1));
125     assert!(list.iter().any(|l| *l == 2));
126     assert!(list.iter().any(|l| *l == 3));
127 }
128