Set.rs 2.9 KB

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