Skip to content
This repository was archived by the owner on Feb 20, 2019. It is now read-only.

feat(range): Add range function #126

Merged
merged 1 commit into from
Nov 1, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ import max from './max'
import slugify from './slugify'
import convertToRoman from './convertToRoman'
import gcd from './gcd'
import range from './range'

export {
isOdd,
Expand Down Expand Up @@ -90,4 +91,5 @@ export {
slugify,
convertToRoman,
gcd,
range,
}
29 changes: 29 additions & 0 deletions src/range.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
export default range

/**
* @module range
* @description This method creates an array of numbers (positive and/or
* negative) progressing from start up to, but not including, end.
*
* @param {Number} start - The start of the range
* @param {Number} end - The end of the range
* @param {Number} step - The value to increment or decrement by
* @return {Array} - Returns an array of integers containing an arithmetic
* progression
* */

function range(start = 0, end, step = 1) {
if (end === undefined) {
end = start
start = 0
}

const length = Math.max(Math.ceil((end - start) / step), 0)
const rangeArr = Array(length)

for (let idx = 0; idx < length; idx++, start += step) {
rangeArr[idx] = start
}

return rangeArr
}
2 changes: 1 addition & 1 deletion test/flatten.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,5 @@ test('deep flattens an array of arrays', t => {
const original = [1, 2, [3, 4, [5, 6], 7], 8]
const expected = [1, 2, 3, 4, 5, 6, 7, 8]
const actual = flatten(original)
t.same(actual, expected)
t.deepEqual(actual, expected)
})
32 changes: 32 additions & 0 deletions test/range.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import test from 'ava'
import { range } from '../src'

test('creates an array of numbers from start up to end', t => {
const expected = [1, 2, 3, 4]
const actual = range(1, 5);
t.deepEqual(actual, expected)
})

test('creates an array of numbers starting from zero given an implicit end', t => {
const expected = [0, 1, 2, 3]
const actual = range(4);
t.deepEqual(actual, expected)
})

test('creates an array of numbers in given steps', t => {
const expected = [0, 5, 10, 15]
const actual = range(0, 20, 5);
t.deepEqual(actual, expected)
})

test('creates an array of negative numbers given a negative step', t => {
const expected = [0, -1, -2, -3]
const actual = range(0, -4, -1);
t.deepEqual(actual, expected)
})

test('creates an empty array with no parameters given', t => {
const expected = []
const actual = range();
t.deepEqual(actual, expected)
})