Skip to content

Commit 86b4ec9

Browse files
committed
Update anagram.spec.js
1 parent b0b7992 commit 86b4ec9

File tree

1 file changed

+73
-32
lines changed

1 file changed

+73
-32
lines changed
Lines changed: 73 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,84 +1,125 @@
11
import { describe, expect, test, xtest } from '@jest/globals';
22
import { findAnagrams } from './anagram';
33

4+
let areSetsEqual = (setA, setB) => setA.size === setB.size && [...setA].every(val => setB.has(val));
5+
46
describe('Anagram', () => {
57
test('no matches', () => {
8+
let expected = [];
9+
let actual = findAnagrams('diaper', ['hello', 'world', 'zombies', 'pants']);
610
expect(
7-
findAnagrams('diaper', ['hello', 'world', 'zombies', 'pants']),
8-
).toEqual([]);
11+
areSetsEqual(new Set(expected), new Set(actual))
12+
).toEqual(true);
913
});
1014

1115
xtest('detects two anagrams', () => {
12-
expect(findAnagrams('solemn', ['lemons', 'cherry', 'melons'])).toEqual([
13-
'lemons',
14-
'melons',
15-
]);
16+
let expected = ['lemons', 'melons'];
17+
let actual = findAnagrams('solemn', ['lemons', 'cherry', 'melons']);
18+
expect(
19+
areSetsEqual(new Set(expected), new Set(actual))
20+
).toEqual(true);
1621
});
1722

1823
xtest('does not detect anagram subsets', () => {
19-
expect(findAnagrams('good', ['dog', 'goody'])).toEqual([]);
24+
let expected = [];
25+
let actual = findAnagrams('good', ['dog', 'goody']);
26+
expect(
27+
areSetsEqual(new Set(expected), new Set(actual))
28+
).toEqual(true);
2029
});
2130

2231
xtest('detects anagram', () => {
32+
let expected = ['inlets'];
33+
let actual = findAnagrams('listen', ['enlists', 'google', 'inlets', 'banana']);
2334
expect(
24-
findAnagrams('listen', ['enlists', 'google', 'inlets', 'banana']),
25-
).toEqual(['inlets']);
35+
areSetsEqual(new Set(expected), new Set(actual))
36+
).toEqual(true);
2637
});
2738

2839
xtest('detects three anagrams', () => {
40+
let expected = ['gallery', 'regally', 'largely'];
41+
let actual = findAnagrams('allergy', [
42+
'gallery',
43+
'ballerina',
44+
'regally',
45+
'clergy',
46+
'largely',
47+
'leading'
48+
]);
2949
expect(
30-
findAnagrams('allergy', [
31-
'gallery',
32-
'ballerina',
33-
'regally',
34-
'clergy',
35-
'largely',
36-
'leading',
37-
]),
38-
).toEqual(['gallery', 'regally', 'largely']);
50+
areSetsEqual(new Set(expected), new Set(actual))
51+
).toEqual(true);
3952
});
4053

4154
xtest('detects multiple anagrams with different case', () => {
42-
expect(findAnagrams('nose', ['Eons', 'ONES'])).toEqual(['Eons', 'ONES']);
55+
let expected = ['Eons', 'ONES'];
56+
let actual = findAnagrams('nose', ['Eons', 'ONES']);
57+
expect(
58+
areSetsEqual(new Set(expected), new Set(actual))
59+
).toEqual(true);
4360
});
4461

4562
xtest('does not detect non-anagrams with identical checksum', () => {
46-
expect(findAnagrams('mass', ['last'])).toEqual([]);
63+
let expected = [];
64+
let actual = findAnagrams('mass', ['last']);
65+
expect(
66+
areSetsEqual(new Set(expected), new Set(actual))
67+
).toEqual(true);
4768
});
4869

4970
xtest('detects anagrams case-insensitively', () => {
71+
let expected = ['Carthorse'];
72+
let actual = findAnagrams('Orchestra', ['cashregister', 'Carthorse', 'radishes']);
5073
expect(
51-
findAnagrams('Orchestra', ['cashregister', 'Carthorse', 'radishes']),
52-
).toEqual(['Carthorse']);
74+
areSetsEqual(new Set(expected), new Set(actual))
75+
).toEqual(true);
5376
});
5477

5578
xtest('detects anagrams using case-insensitive subject', () => {
79+
let expected = ['carthorse'];
80+
let actual = findAnagrams('Orchestra', ['cashregister', 'carthorse', 'radishes']);
5681
expect(
57-
findAnagrams('Orchestra', ['cashregister', 'carthorse', 'radishes']),
58-
).toEqual(['carthorse']);
82+
areSetsEqual(new Set(expected), new Set(actual))
83+
).toEqual(true);
5984
});
6085

6186
xtest('detects anagrams using case-insensitive possible matches', () => {
87+
let expected = ['Carthorse'];
88+
let actual = findAnagrams('orchestra', ['cashregister', 'Carthorse', 'radishes']);
6289
expect(
63-
findAnagrams('orchestra', ['cashregister', 'Carthorse', 'radishes']),
64-
).toEqual(['Carthorse']);
90+
areSetsEqual(new Set(expected), new Set(actual))
91+
).toEqual(true);
6592
});
6693

6794
xtest('does not detect an anagram if the original word is repeated', () => {
68-
expect(findAnagrams('go', ['go Go GO'])).toEqual([]);
95+
let expected = [];
96+
let actual = findAnagrams('go', ['go Go GO']);
97+
expect(
98+
areSetsEqual(new Set(expected), new Set(actual))
99+
).toEqual(true);
69100
});
70101

71102
xtest('anagrams must use all letters exactly once', () => {
72-
expect(findAnagrams('tapper', ['patter'])).toEqual([]);
103+
let expected = [];
104+
let actual = findAnagrams('tapper', ['patter']);
105+
expect(
106+
areSetsEqual(new Set(expected), new Set(actual))
107+
).toEqual(true);
73108
});
74109

75110
xtest('words are not anagrams of themselves (case-insensitive)', () => {
76-
expect(findAnagrams('BANANA', ['BANANA', 'Banana', 'banana'])).toEqual([]);
111+
let expected = [];
112+
let actual = findAnagrams('BANANA', ['BANANA', 'Banana', 'banana']);
113+
expect(
114+
areSetsEqual(new Set(expected), new Set(actual))
115+
).toEqual(true);
77116
});
78117

79118
xtest('words other than themselves can be anagrams', () => {
80-
expect(findAnagrams('LISTEN', ['Listen', 'Silent', 'LISTEN'])).toEqual([
81-
'Silent',
82-
]);
119+
let expected = ['Silent'];
120+
let actual = findAnagrams('LISTEN', ['Listen', 'Silent', 'LISTEN']);
121+
expect(
122+
areSetsEqual(new Set(expected), new Set(actual))
123+
).toEqual(true);
83124
});
84125
});

0 commit comments

Comments
 (0)