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;
}