97 lines
3.4 KiB
JavaScript
97 lines
3.4 KiB
JavaScript
var assert = require('assert');
|
|
|
|
var DRange = require('../index.js');
|
|
|
|
describe('add sets', function() {
|
|
it('should allow adding numbers', function () {
|
|
var drange = DRange(5);
|
|
assert.equal('[ 5 ]', drange.toString());
|
|
drange.add(6);
|
|
assert.equal('[ 5-6 ]', drange.toString());
|
|
drange.add(8);
|
|
assert.equal('[ 5-6, 8 ]', drange.toString());
|
|
drange.add(7);
|
|
assert.equal('[ 5-8 ]', drange.toString());
|
|
assert.equal(drange.length, 4);
|
|
});
|
|
it('should allow adding ranges of numbers', function () {
|
|
var drange = DRange(1,5);
|
|
assert.equal('[ 1-5 ]', drange.toString());
|
|
drange.add(6,10);
|
|
assert.equal('[ 1-10 ]', drange.toString());
|
|
drange.add(15,20);
|
|
assert.equal('[ 1-10, 15-20 ]', drange.toString());
|
|
drange.add(0,14);
|
|
assert.equal('[ 0-20 ]', drange.toString());
|
|
assert.equal(drange.length, 21);
|
|
});
|
|
it('should allow adding another DiscontinuousRange', function () {
|
|
var drange = DRange(1,5);
|
|
drange.add(15,20);
|
|
var erange = DRange(6);
|
|
erange.add(17, 30);
|
|
drange.add(erange);
|
|
assert.equal('[ 1-6, 15-30 ]', drange.toString());
|
|
assert.equal(drange.length, 22);
|
|
});
|
|
});
|
|
|
|
describe('subtract sets', function() {
|
|
it('should allow subtracting numbers', function () {
|
|
var drange = DRange(1, 10);
|
|
drange.subtract(5);
|
|
assert.equal('[ 1-4, 6-10 ]', drange.toString());
|
|
drange.subtract(7);
|
|
assert.equal('[ 1-4, 6, 8-10 ]', drange.toString());
|
|
drange.subtract(6);
|
|
assert.equal('[ 1-4, 8-10 ]', drange.toString());
|
|
assert.equal(drange.length, 7);
|
|
});
|
|
it('should allow subtracting ranges of numbers', function () {
|
|
var drange = DRange(1, 100);
|
|
drange.subtract(5, 15);
|
|
assert.equal('[ 1-4, 16-100 ]', drange.toString());
|
|
drange.subtract(90, 200);
|
|
assert.equal('[ 1-4, 16-89 ]', drange.toString());
|
|
assert.equal(drange.length, 78);
|
|
});
|
|
it('should allow subtracting another DiscontinuousRange', function () {
|
|
var drange = DRange(0,100);
|
|
var erange = DRange(6);
|
|
erange.add(17, 30);
|
|
drange.subtract(erange);
|
|
assert.equal('[ 0-5, 7-16, 31-100 ]', drange.toString());
|
|
assert.equal(drange.length, 86);
|
|
});
|
|
});
|
|
|
|
|
|
describe('index sets', function() {
|
|
it('should appropriately retrieve numbers in range by index', function () {
|
|
var drange = DRange(0, 9);
|
|
drange.add(20, 29);
|
|
drange.add(40, 49);
|
|
assert.equal(drange.index(5), 5);
|
|
assert.equal(drange.index(15), 25);
|
|
assert.equal(drange.index(25), 45);
|
|
assert.equal(drange.length, 30);
|
|
});
|
|
});
|
|
|
|
describe('clone sets', function() {
|
|
it('should be able to clone a DiscontinuousRange that doesn\'t affect the original', function () {
|
|
var drange = DRange(0, 9);
|
|
var erange = drange.clone();
|
|
erange.subtract(5);
|
|
assert.equal('[ 0-9 ]', drange.toString());
|
|
assert.equal('[ 0-4, 6-9 ]', erange.toString());
|
|
});
|
|
});
|
|
|
|
var all_numbers = new DRange(1, 100);
|
|
var bad_numbers = DRange(13).add(8).add(60,80);
|
|
var good_numbers = all_numbers.clone().subtract(bad_numbers);
|
|
console.log(good_numbers.toString());
|
|
var random_good_number = good_numbers.index(Math.floor(Math.random() * good_numbers.length));
|
|
console.log(random_good_number);
|