rotate()
Создать копию данного массива, циклически повернутого вправо на заданное число (возможно отрицательное!) элементов.
by l_gordienkova
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/mocha/2.4.5/mocha.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/chai/3.5.0/chai.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/mocha/2.4.5/mocha.min.css">
<div id="mocha">
</div>
<script>
mocha.setup('bdd');
var assert = chai.assert;
var expect = chai.expect;
</script>
<script>
describe("rotate", function() {
before(function () {
chai.config.includeStack = false;
});
describe('формат', function(){
it("объявлена", function() {
assert.isFunction(window.rotate);
});
it("принимает 2 аргумента", function() {
assert.equal(rotate.length, 2);
});
});
describe('проверки', function(){
function suite(name, length, shift){
var src = Array.apply(0, new Array(length)).map(e => ~~(Math.random() * 100));
console.log(src);
var input = src.slice(), output;
try{
output = rotate(input, shift);
describe(name, function(){
it('создан новый массив', function(){
assert.notStrictEqual(output, input);
});
it('оригинал не изменен', function(){
assert.equal(input.length, src.length);
assert.ok(input.every((e,i) => e === src[i]));
});
it('длина прежняя', function(){
assert.equal(output.length, src.length);
});
if(length)
it('содержимое сдвинуто', function(){
const l = src.length;
assert.ok(output.every((e, i) => e === src[((i + shift) % l + l) % l]));
});
})
} catch(e) {
it('выполняется', function(){
throw e;
})
}
}
suite("пустой массив без сдвига", 0, 0);
suite("пустой массив со сдвигом", 0, 2);
suite("массив без сдвига", 5, 0);
suite("сдвиг вправо на 1", 5, 1);
...
JavaScript
function rotate(array, n){
return array;
}