Browse Source

Add signed integers

c-data-types
Luke Childs 6 years ago
parent
commit
1a06805831
  1. 39
      source/lib/predicates/number.ts
  2. 24
      source/test/number.ts

39
source/lib/predicates/number.ts

@ -180,4 +180,43 @@ export class NumberPredicate extends Predicate<number> {
validator: value => is.integer(value) && is.inRange(value, [start, end]) validator: value => is.integer(value) && is.inRange(value, [start, end])
}); });
} }
/**
* Test a number to be in a valid range for a int8.
*/
get int8() {
const start = -128;
const end = 127;
return this.addValidator({
message: (value, label) => `Expected ${label} to be an integer in range [${start}..${end}], got ${value}`,
validator: value => is.integer(value) && is.inRange(value, [start, end])
});
}
/**
* Test a number to be in a valid range for a int16.
*/
get int16() {
const start = -32768;
const end = 32767;
return this.addValidator({
message: (value, label) => `Expected ${label} to be an integer in range [${start}..${end}], got ${value}`,
validator: value => is.integer(value) && is.inRange(value, [start, end])
});
}
/**
* Test a number to be in a valid range for a int32.
*/
get int32() {
const start = -2147483648;
const end = 2147483647;
return this.addValidator({
message: (value, label) => `Expected ${label} to be an integer in range [${start}..${end}], got ${value}`,
validator: value => is.integer(value) && is.inRange(value, [start, end])
});
}
} }

24
source/test/number.ts

@ -106,3 +106,27 @@ test('number.uint32', t => {
t.throws(() => m(1.5, m.number.uint32), 'Expected number to be an integer in range [0..4294967295], got 1.5'); t.throws(() => m(1.5, m.number.uint32), 'Expected number to be an integer in range [0..4294967295], got 1.5');
t.throws(() => m(4294967296, m.number.uint32), 'Expected number to be an integer in range [0..4294967295], got 4294967296'); t.throws(() => m(4294967296, m.number.uint32), 'Expected number to be an integer in range [0..4294967295], got 4294967296');
}); });
test('number.int8', t => {
t.notThrows(() => m(-128, m.number.int8));
t.notThrows(() => m(127, m.number.int8));
t.throws(() => m(-129, m.number.int8), 'Expected number to be an integer in range [-128..127], got -129');
t.throws(() => m(1.5, m.number.int8), 'Expected number to be an integer in range [-128..127], got 1.5');
t.throws(() => m(128, m.number.int8), 'Expected number to be an integer in range [-128..127], got 128');
});
test('number.int16', t => {
t.notThrows(() => m(-32768, m.number.int16));
t.notThrows(() => m(32767, m.number.int16));
t.throws(() => m(-32769, m.number.int16), 'Expected number to be an integer in range [-32768..32767], got -32769');
t.throws(() => m(1.5, m.number.int16), 'Expected number to be an integer in range [-32768..32767], got 1.5');
t.throws(() => m(32768, m.number.int16), 'Expected number to be an integer in range [-32768..32767], got 32768');
});
test('number.int32', t => {
t.notThrows(() => m(-2147483648, m.number.int32));
t.notThrows(() => m(2147483647, m.number.int32));
t.throws(() => m(-2147483649, m.number.int32), 'Expected number to be an integer in range [-2147483648..2147483647], got -2147483649');
t.throws(() => m(1.5, m.number.int32), 'Expected number to be an integer in range [-2147483648..2147483647], got 1.5');
t.throws(() => m(2147483648, m.number.int32), 'Expected number to be an integer in range [-2147483648..2147483647], got 2147483648');
});

Loading…
Cancel
Save