have continuous indexes

have continuous indexes

by ozzymcduff

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.3.0/knockout-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://code.jquery.com/qunit/qunit-1.19.0.js"></script>
<link rel="stylesheet" href="https://code.jquery.com/qunit/qunit-1.19.0.css">
<div id="qunit"></div>
<div id="qunit-fixture"></div>

JavaScript

function isRangeSubset(collection, subset) {
      var indexes = subset.map(function (item) {
          return collection.indexOf(item);
      }).sort();
      var first = _.first(indexes);
      var last = _.last(indexes);
      var expectedLength = 1 + last - first;
      return expectedLength === indexes.length;
  }

  test("range subset", function (assert) {
      var range = _.range(0, 11);
      assert.strictEqual(isRangeSubset(range, [1, 2, 3]), true);
      assert.strictEqual(isRangeSubset(range, [1, 2, 3, 0]), true);
      assert.strictEqual(isRangeSubset(range, [2, 3, 1]), true);
      assert.strictEqual(isRangeSubset(range, [1, 2, 3, 4, 5, 6, 7, 8]), true);
      assert.strictEqual(isRangeSubset(range, [6, 7, 2, 3, 4, 8, 1, 5]), true);
  });


  test("not range subset", function (assert) {
      var range = _.range(0, 11);
      assert.strictEqual(isRangeSubset(range, [0, 2, 3]), false);
      assert.strictEqual(isRangeSubset(range, [1, 2, 4, 5, 6, 7, 8]), false);
      assert.strictEqual(isRangeSubset(range, [6, 7, 3, 4, 8, 1, 5]), false);
  });