Skip to content

Commit 80549c3

Browse files
committed
Include error message when index is zero
1 parent 6881e87 commit 80549c3

File tree

3 files changed

+21
-16
lines changed

3 files changed

+21
-16
lines changed

src/expression/transform/range.transform.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ import { factory } from '../../utils/factory.js'
22
import { createRange } from '../../function/matrix/range.js'
33

44
const name = 'range'
5-
const dependencies = ['typed', 'config', '?matrix', '?bignumber', 'equal', 'smaller', 'smallerEq', 'larger', 'largerEq', 'add', 'isPositive']
5+
const dependencies = ['typed', 'config', '?matrix', '?bignumber', 'equal', 'smaller', 'smallerEq', 'larger', 'largerEq', 'add', 'isZero', 'isPositive']
66

7-
export const createRangeTransform = /* #__PURE__ */ factory(name, dependencies, ({ typed, config, matrix, bignumber, equal, smaller, smallerEq, larger, largerEq, add, isPositive }) => {
8-
const range = createRange({ typed, config, matrix, bignumber, equal, smaller, smallerEq, larger, largerEq, add, isPositive })
7+
export const createRangeTransform = /* #__PURE__ */ factory(name, dependencies, ({ typed, config, matrix, bignumber, equal, smaller, smallerEq, larger, largerEq, add, isZero, isPositive }) => {
8+
const range = createRange({ typed, config, matrix, bignumber, equal, smaller, smallerEq, larger, largerEq, add, isZero, isPositive })
99

1010
/**
1111
* Attach a transform function to math.range

src/function/matrix/range.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ import { factory } from '../../utils/factory.js'
22
import { noBignumber, noMatrix } from '../../utils/noop.js'
33

44
const name = 'range'
5-
const dependencies = ['typed', 'config', '?matrix', '?bignumber', 'equal', 'smaller', 'smallerEq', 'larger', 'largerEq', 'add', 'isPositive']
5+
const dependencies = ['typed', 'config', '?matrix', '?bignumber', 'equal', 'smaller', 'smallerEq', 'larger', 'largerEq', 'add', 'isZero', 'isPositive']
66

7-
export const createRange = /* #__PURE__ */ factory(name, dependencies, ({ typed, config, matrix, bignumber, equal, smaller, smallerEq, larger, largerEq, add, isPositive }) => {
7+
export const createRange = /* #__PURE__ */ factory(name, dependencies, ({ typed, config, matrix, bignumber, smaller, smallerEq, larger, largerEq, add, isZero, isPositive }) => {
88
/**
99
* Create a matrix or array containing a range of values.
1010
* By default, the range end is excluded. This can be customized by providing
@@ -190,7 +190,7 @@ export const createRange = /* #__PURE__ */ factory(name, dependencies, ({ typed,
190190
*/
191191
function _range (start, end, step, includeEnd) {
192192
const array = []
193-
if (equal(start, end)) return array
193+
if (isZero(step)) throw new Error('Step must be non-zero')
194194
const ongoing = isPositive(step)
195195
? includeEnd ? smallerEq : smaller
196196
: includeEnd ? largerEq : larger

test/unit-tests/function/matrix/range.test.js

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,22 +36,27 @@ describe('range', function () {
3636
assert.deepStrictEqual(range(2, -4, -2), matrix([2, 0, -2]))
3737
})
3838

39-
it('should create an empty range when step==0', function () {
40-
assert.deepStrictEqual(range(0, 10, 0), matrix([]))
41-
assert.deepStrictEqual(range(0, 10, 0, true), matrix([]))
39+
it('should throw an error when step==0', function () {
40+
assert.throws(function () { range(0, 10, 0) }, /Step must be non-zero/)
41+
assert.throws(function () { range(0, 10, 0, true) }, /Step must be non-zero/)
4242
})
4343

4444
it('should create an empty range when start and stop are equal', function () {
45-
assert.deepStrictEqual(range(0, 0, 0), matrix([]))
46-
assert.deepStrictEqual(range(0, 0, 0, true), matrix([]))
45+
assert.deepStrictEqual(range(0, 0), matrix([]))
4746
assert.deepStrictEqual(range(1, 1, 2), matrix([]))
48-
assert.deepStrictEqual(range(1, 1, 2, true), matrix([]))
4947
assert.deepStrictEqual(range('0:0'), matrix([]))
50-
assert.deepStrictEqual(range('0:0:0'), matrix([]))
48+
assert.deepStrictEqual(range('0:1:0'), matrix([]))
5149
assert.deepStrictEqual(range('1:2:1'), matrix([]))
5250
assert.deepStrictEqual(range('1:1:1'), matrix([]))
5351
})
5452

53+
it('should create an array with the end value when start and stop are equal and includeEnd=true', function () {
54+
assert.deepStrictEqual(range(0, 0, true), matrix([0]))
55+
assert.deepStrictEqual(range(1, 1, 2, true), matrix([1]))
56+
assert.deepStrictEqual(range('0:0', true), matrix([0]))
57+
assert.deepStrictEqual(range('1:1:1', true), matrix([1]))
58+
})
59+
5560
it('should output an array when setting matrix==="array"', function () {
5661
const math2 = math.create({
5762
matrix: 'Array'
@@ -84,9 +89,9 @@ describe('range', function () {
8489
assert.deepStrictEqual(range(bignumber(3), bignumber(1), bignumber(-1)), matrix([bignumber(3), bignumber(2)]))
8590
})
8691

87-
it('should create an empty range from bignumbers when step==0', function () {
88-
assert.deepStrictEqual(range(bignumber(0), bignumber(10), bignumber(0)), matrix([]))
89-
assert.deepStrictEqual(range(bignumber(0), bignumber(10), bignumber(0), true), matrix([]))
92+
it('should throw an error from bignumbers when step==0', function () {
93+
assert.throws(function () { range(bignumber(0), bignumber(10), bignumber(0)) }, /Step must be non-zero/)
94+
assert.throws(function () { range(bignumber(0), bignumber(10), bignumber(0), true) }, /Step must be non-zero/)
9095
})
9196

9297
it('should create a range with mixed numbers and bignumbers', function () {

0 commit comments

Comments
 (0)