|
|
|
const VALUES = Array.from('abcdefghijklmnopqrstuvwxyz');
|
|
|
|
|
|
|
|
function toObjects(array) {
|
|
|
|
return array.split('').map(x => ({ id: x }));
|
|
|
|
}
|
|
|
|
|
|
|
|
function permute() {
|
|
|
|
const values = VALUES.slice();
|
|
|
|
const number = Math.floor(Math.random() * VALUES.length);
|
|
|
|
const permuted = [];
|
|
|
|
for (let i = 0; i < number; i++) {
|
|
|
|
permuted.push(
|
|
|
|
...values.splice(Math.floor(Math.random() * (number - i)), 1)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
return permuted.join('');
|
|
|
|
}
|
|
|
|
|
|
|
|
export default {
|
|
|
|
props: {
|
|
|
|
values: toObjects('abc'),
|
|
|
|
},
|
|
|
|
|
|
|
|
html: `(a)(b)(c)`,
|
|
|
|
|
|
|
|
test({ assert, component, target }) {
|
|
|
|
function test(sequence) {
|
|
|
|
const previous = target.textContent;
|
|
|
|
const expected = sequence.split('').map(x => `(${x})`).join('');
|
|
|
|
component.values = toObjects(sequence);
|
|
|
|
assert.htmlEqual(
|
|
|
|
target.innerHTML,
|
|
|
|
expected,
|
|
|
|
`\n${previous} -> ${expected}\n${target.textContent}`
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
// first, some fixed tests so that we can debug them
|
|
|
|
test('abc');
|
|
|
|
test('abcd');
|
|
|
|
test('abecd');
|
|
|
|
test('fabecd');
|
|
|
|
test('fabed');
|
|
|
|
test('beadf');
|
|
|
|
test('ghbeadf');
|
|
|
|
test('gf');
|
|
|
|
test('gc');
|
|
|
|
test('g');
|
|
|
|
test('');
|
|
|
|
test('abc');
|
|
|
|
test('duqbmineapjhtlofrskcg');
|
|
|
|
test('hdnkjougmrvftewsqpailcb');
|
|
|
|
test('bidhfacge');
|
|
|
|
test('kgjnempcboaflidh');
|
|
|
|
test('fekbijachgd');
|
|
|
|
test('kdmlgfbicheja');
|
|
|
|
|
|
|
|
// then, we party
|
|
|
|
for (let i = 0; i < 100; i += 1) test(permute());
|
|
|
|
}
|
|
|
|
};
|