Skip to content

Commit 945544a

Browse files
committed
fix(setpos): fix a boundry contion for setPos
1 parent 646fcf3 commit 945544a

File tree

4 files changed

+18
-4
lines changed

4 files changed

+18
-4
lines changed

README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,21 @@ $ yarn add numeric-array-integer
1616
## Usage:
1717

1818
```js
19+
// Initialize new NumericArrayInteger with bits per number 4 (max number is 2^4-1, 15), total bit length 10
1920
const integer = new NumericArrayInteger(4, 10);
21+
22+
// Set number at position
2023
integer.setPos(0, 3);
2124
integer.setPos(2, 2);
25+
26+
// Get data as an integer
2227
const data = integer.getData();
2328
console.log(data); // 515
29+
30+
// Load data from an integer
2431
const integer2 = NumericArrayInteger.fromData(data, 4, 10);
32+
33+
// Get back original number at position
2534
console.log(integer2.getPos(0)); // 3
2635
console.log(integer2.getPos(2)); // 2
2736
```

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "numeric-array-integer",
3-
"version": "3.0.0",
3+
"version": "3.1.0",
44
"description": "JavaScript numeric array implemented using an integer",
55
"main": "dist/index.js",
66
"module": "./dist/index.mjs",

src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export class NumericArrayInteger {
5050
if (position > this.arrayLength) {
5151
throw new Error('Position exceeds length');
5252
}
53-
if (value > 2 ** this.elementBitLength) {
53+
if (value >= 2 ** this.elementBitLength) {
5454
throw new Error('Value exceeds bit length');
5555
}
5656
const mask = value << (position * this.elementBitLength);

test/index.test.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,14 @@ describe('NumericArrayInteger', () => {
3232
expect(() => integer.clearPos(13)).toThrowError('Position exceeds length');
3333
});
3434

35-
it('set position throw error for invalid value', () => {
35+
it('set position handle boundry and invalid value', () => {
3636
const integer = new NumericArrayInteger(4, 10);
37-
expect(() => integer.setPos(1, 17)).toThrowError(
37+
integer.setPos(1, 2 ** 4 - 1);
38+
expect(integer.getPos(1)).toEqual(2 ** 4 - 1);
39+
expect(() => integer.setPos(1, 2 ** 4 + 1)).toThrowError(
40+
'Value exceeds bit length'
41+
);
42+
expect(() => integer.setPos(1, 2 ** 4)).toThrowError(
3843
'Value exceeds bit length'
3944
);
4045
});

0 commit comments

Comments
 (0)