@atlaspack/graph 3.4.6 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @atlaspack/graph
2
2
 
3
+ ## 3.5.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#600](https://github.com/atlassian-labs/atlaspack/pull/600) [`1b52b99`](https://github.com/atlassian-labs/atlaspack/commit/1b52b99db4298b04c1a6eb0f97994d75a2d436f9) Thanks [@mattcompiles](https://github.com/mattcompiles)! - Add static intersect, size and equals methods to BitSet
8
+
9
+ ## 3.4.7
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies [[`209692f`](https://github.com/atlassian-labs/atlaspack/commit/209692ffb11eae103a0d65c5e1118a5aa1625818), [`f4da1e1`](https://github.com/atlassian-labs/atlaspack/commit/f4da1e120e73eeb5e8b8927f05e88f04d6148c7b)]:
14
+ - @atlaspack/feature-flags@2.16.0
15
+
3
16
  ## 3.4.6
4
17
 
5
18
  ### Patch Changes
package/lib/BitSet.js CHANGED
@@ -25,6 +25,11 @@ class BitSet {
25
25
  res.union(b);
26
26
  return res;
27
27
  }
28
+ static intersect(a, b) {
29
+ let res = a.clone();
30
+ res.intersect(b);
31
+ return res;
32
+ }
28
33
  get capacity() {
29
34
  return this.bits.length * 32;
30
35
  }
@@ -63,6 +68,26 @@ class BitSet {
63
68
  this.bits[i] &= ~other.bits[i];
64
69
  }
65
70
  }
71
+ size() {
72
+ let bits = this.bits;
73
+ let setBitsCount = 0;
74
+ for (let k = 0; k < bits.length; k++) {
75
+ let chunk = bits[k];
76
+ while (chunk !== 0) {
77
+ chunk &= chunk - 1; // Clear the least significant bit set
78
+ setBitsCount++;
79
+ }
80
+ }
81
+ return setBitsCount;
82
+ }
83
+ equals(other) {
84
+ for (let i = 0; i < this.bits.length; i++) {
85
+ if (this.bits[i] !== other.bits[i]) {
86
+ return false;
87
+ }
88
+ }
89
+ return true;
90
+ }
66
91
  forEach(fn) {
67
92
  // https://lemire.me/blog/2018/02/21/iterating-over-set-bits-quickly/
68
93
  let bits = this.bits;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaspack/graph",
3
- "version": "3.4.6",
3
+ "version": "3.5.0",
4
4
  "description": "Blazing fast, zero configuration web application bundler",
5
5
  "license": "(MIT OR Apache-2.0)",
6
6
  "publishConfig": {
@@ -16,7 +16,7 @@
16
16
  "node": ">= 16.0.0"
17
17
  },
18
18
  "dependencies": {
19
- "@atlaspack/feature-flags": "2.15.1",
19
+ "@atlaspack/feature-flags": "2.16.0",
20
20
  "nullthrows": "^1.1.1"
21
21
  },
22
22
  "type": "commonjs"
package/src/BitSet.js CHANGED
@@ -28,6 +28,12 @@ export class BitSet {
28
28
  return res;
29
29
  }
30
30
 
31
+ static intersect(a: BitSet, b: BitSet): BitSet {
32
+ let res = a.clone();
33
+ res.intersect(b);
34
+ return res;
35
+ }
36
+
31
37
  get capacity(): number {
32
38
  return this.bits.length * 32;
33
39
  }
@@ -82,6 +88,31 @@ export class BitSet {
82
88
  }
83
89
  }
84
90
 
91
+ size(): number {
92
+ let bits = this.bits;
93
+ let setBitsCount = 0;
94
+
95
+ for (let k = 0; k < bits.length; k++) {
96
+ let chunk = bits[k];
97
+
98
+ while (chunk !== 0) {
99
+ chunk &= chunk - 1; // Clear the least significant bit set
100
+ setBitsCount++;
101
+ }
102
+ }
103
+
104
+ return setBitsCount;
105
+ }
106
+
107
+ equals(other: BitSet): boolean {
108
+ for (let i = 0; i < this.bits.length; i++) {
109
+ if (this.bits[i] !== other.bits[i]) {
110
+ return false;
111
+ }
112
+ }
113
+ return true;
114
+ }
115
+
85
116
  forEach(fn: (bit: number) => void) {
86
117
  // https://lemire.me/blog/2018/02/21/iterating-over-set-bits-quickly/
87
118
  let bits = this.bits;
@@ -107,4 +107,46 @@ describe('BitSet', () => {
107
107
  assertValues(set2, [3, 5]);
108
108
  assertValues(set3, [1, 3, 5]);
109
109
  });
110
+
111
+ it('BitSet.intersect should create a new BitSet with the intersect', () => {
112
+ let set1 = new BitSet(5);
113
+ set1.add(1);
114
+ set1.add(3);
115
+
116
+ let set2 = new BitSet(5);
117
+ set2.add(3);
118
+ set2.add(5);
119
+
120
+ let set3 = BitSet.intersect(set1, set2);
121
+ assertValues(set1, [1, 3]);
122
+ assertValues(set2, [3, 5]);
123
+ assertValues(set3, [3]);
124
+ });
125
+
126
+ it('should identify equality with another BitSet', () => {
127
+ let set1 = new BitSet(5);
128
+ set1.add(1);
129
+ set1.add(3);
130
+
131
+ let set2 = new BitSet(5);
132
+ set2.add(3);
133
+ set2.add(5);
134
+
135
+ let set3 = set1.clone();
136
+
137
+ assert(set1.equals(set3));
138
+ assert(!set1.equals(set2));
139
+ });
140
+
141
+ it('should calculate size of BitSet', () => {
142
+ let set1 = new BitSet(5);
143
+ set1.add(1);
144
+ set1.add(3);
145
+
146
+ assert.equal(set1.size(), 2);
147
+
148
+ set1.add(3);
149
+ set1.add(4);
150
+ assert.equal(set1.size(), 3);
151
+ });
110
152
  });
@@ -528,12 +528,17 @@ describe('Graph', () => {
528
528
  getChildren,
529
529
  });
530
530
 
531
- assert.deepEqual(contexts, [
532
- [0, undefined],
533
- [1, 'node-0-created-context'],
534
- [2, 'node-1-created-context'],
535
- [3, 'node-2-created-context'],
536
- ]);
531
+ assert.deepEqual(
532
+ contexts.map((values) =>
533
+ values.map((v) => (v != null ? v : undefined)),
534
+ ),
535
+ [
536
+ [0, undefined],
537
+ [1, 'node-0-created-context'],
538
+ [2, 'node-1-created-context'],
539
+ [3, 'node-2-created-context'],
540
+ ],
541
+ );
537
542
  assert.equal(result, undefined);
538
543
  });
539
544
  });
@@ -572,16 +577,21 @@ describe('Graph', () => {
572
577
  getChildren,
573
578
  });
574
579
 
575
- assert.deepEqual(contexts, [
576
- [0, undefined],
577
- [1, 'node-0-created-context'],
578
- [2, 'node-1-created-context'],
579
- ['exit', 2, 'node-2-created-context'],
580
- [3, 'node-1-created-context'],
581
- ['exit', 3, 'node-3-created-context'],
582
- ['exit', 1, 'node-1-created-context'],
583
- ['exit', 0, 'node-0-created-context'],
584
- ]);
580
+ assert.deepEqual(
581
+ contexts.map((values) =>
582
+ values.map((v) => (v != null ? v : undefined)),
583
+ ),
584
+ [
585
+ [0, undefined],
586
+ [1, 'node-0-created-context'],
587
+ [2, 'node-1-created-context'],
588
+ ['exit', 2, 'node-2-created-context'],
589
+ [3, 'node-1-created-context'],
590
+ ['exit', 3, 'node-3-created-context'],
591
+ ['exit', 1, 'node-1-created-context'],
592
+ ['exit', 0, 'node-0-created-context'],
593
+ ],
594
+ );
585
595
  assert.equal(result, undefined);
586
596
  });
587
597
  });