Skip to content

Commit 5345bd7

Browse files
author
Luciano Medeiros Marcelino
committed
Add tests for get-string-permutation
1 parent 0733efc commit 5345bd7

File tree

2 files changed

+36
-27
lines changed

2 files changed

+36
-27
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,31 @@
1-
// GET PERMUTAION OF A GIVEN STRING
2-
3-
let getPermutation = (str) => {
4-
if (str.length == 1) { // BASE CASE
5-
let array = [];
6-
array.push(str);
7-
return array;
8-
}
9-
10-
let currentCharacter = str.charAt(0);
11-
let restOfString = str.substring(1);
12-
let result = [];
13-
let returnResult = getPermutation(restOfString);
14-
for (j = 0; j < returnResult.length; j++) {
15-
for (i = 0; i <= returnResult[j].length; i++) {
16-
let value = returnResult[j].substring(0, i) + currentCharacter + returnResult[j].substring(i);
17-
result.push(value);
18-
}
19-
}
20-
return result;
21-
}
22-
23-
let permutation = getPermutation('abc');
24-
console.log(permutation);
1+
const { getPermutations } = require('.');
2+
3+
describe('Get permutations of a string', () => {
4+
it('returns permutations of a short string', () => {
5+
const shortString = 'ab';
6+
const expectedPermutations = ['ab', 'ba'];
7+
8+
expect(getPermutations(shortString)).toEqual(expectedPermutations);
9+
});
10+
11+
it('returns permutations of a long string', () => {
12+
const shortString = 'XUNDA';
13+
const expectedPermutations = ['XUNDA', 'UXNDA', 'NXUDA', 'XNUDA', 'UNXDA', 'NUXDA', 'DUXNA', 'UDXNA', 'XDUNA', 'DXUNA', 'UXDNA', 'XUDNA', 'XNDUA', 'NXDUA', 'DXNUA', 'XDNUA', 'NDXUA', 'DNXUA', 'DNUXA', 'NDUXA', 'UDNXA', 'DUNXA', 'NUDXA', 'UNDXA', 'ANDXU', 'NADXU', 'DANXU', 'ADNXU', 'NDAXU', 'DNAXU', 'XNADU', 'NXADU', 'AXNDU', 'XANDU', 'NAXDU', 'ANXDU', 'ADXNU', 'DAXNU', 'XADNU', 'AXDNU', 'DXANU', 'XDANU', 'XDNAU', 'DXNAU', 'NXDAU', 'XNDAU', 'DNXAU', 'NDXAU', 'UDXAN', 'DUXAN', 'XUDAN', 'UXDAN', 'DXUAN', 'XDUAN', 'ADUXN', 'DAUXN', 'UADXN', 'AUDXN', 'DUAXN', 'UDAXN', 'UXADN', 'XUADN', 'AUXDN', 'UAXDN', 'XAUDN', 'AXUDN', 'AXDUN', 'XADUN', 'DAXUN', 'ADXUN', 'XDAUN', 'DXAUN', 'NXAUD', 'XNAUD', 'ANXUD', 'NAXUD', 'XANUD', 'AXNUD', 'UXNAD', 'XUNAD', 'NUXAD', 'UNXAD', 'XNUAD', 'NXUAD', 'NAUXD', 'ANUXD', 'UNAXD', 'NUAXD', 'AUNXD', 'UANXD', 'UAXND', 'AUXND', 'XUAND', 'UXAND', 'AXUND', 'XAUND', 'DAUNX', 'ADUNX', 'UDANX', 'DUANX', 'AUDNX', 'UADNX', 'NADUX', 'ANDUX', 'DNAUX', 'NDAUX', 'ADNUX', 'DANUX', 'DUNAX', 'UDNAX', 'NDUAX', 'DNUAX', 'UNDAX', 'NUDAX', 'NUADX', 'UNADX', 'ANUDX', 'NAUDX', 'UANDX', 'AUNDX'];
14+
15+
expect(getPermutations(shortString).sort()).toEqual(expectedPermutations.sort());
16+
});
17+
18+
it('returns the same string if the string is one character long', () => {
19+
const shortString = 'a';
20+
const expectedPermutations = ['a'];
21+
22+
expect(getPermutations(shortString)).toEqual(expectedPermutations);
23+
});
24+
25+
it('is case sensitive', () => {
26+
const shortString = 'aB';
27+
28+
expect(getPermutations(shortString)).not.toEqual(['ab', 'ba']);
29+
expect(getPermutations(shortString)).toEqual(['aB', 'Ba']);
30+
});
31+
});

src/_Problems_/get-string-permutations/index.js

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// GET PERMUTATION OF A GIVEN STRING
22

3-
let getPermutation = (str) => {
3+
const getPermutations = (str) => {
44
if (str.length == 1) {
55
let array = [];
66
array.push(str);
@@ -10,7 +10,7 @@ let getPermutation = (str) => {
1010
let currentCharacter = str.charAt(0);
1111
let restOfString = str.substring(1);
1212
let result = [];
13-
let returnResult = getPermutation(restOfString);
13+
let returnResult = getPermutations(restOfString);
1414

1515
for (j = 0; j < returnResult.length; j++) {
1616
for (i = 0; i <= returnResult[j].length; i++) {
@@ -20,4 +20,6 @@ let getPermutation = (str) => {
2020
}
2121

2222
return result;
23-
}
23+
};
24+
25+
module.exports = { getPermutations };

0 commit comments

Comments
 (0)