Browse Source

Reduce code duplication

c-data-types
Luke Childs 6 years ago
parent
commit
74c2f08f15
  1. 48
      source/lib/predicates/number.ts
  2. 36
      source/test/number.ts

48
source/lib/predicates/number.ts

@ -146,77 +146,41 @@ export class NumberPredicate extends Predicate<number> {
* Test a number to be in a valid range for a uint8.
*/
get uint8() {
const start = 0;
const end = 255;
return this.addValidator({
message: (value, label) => `Expected ${label} to be an integer in the range ${start}...${end}, got ${value}`,
validator: value => is.integer(value) && is.inRange(value, [start, end])
});
return this.integer.inRange(0, 255);
}
/**
* Test a number to be in a valid range for a uint16.
*/
get uint16() {
const start = 0;
const end = 65535;
return this.addValidator({
message: (value, label) => `Expected ${label} to be an integer in the range ${start}...${end}, got ${value}`,
validator: value => is.integer(value) && is.inRange(value, [start, end])
});
return this.integer.inRange(0, 65535);
}
/**
* Test a number to be in a valid range for a uint32.
*/
get uint32() {
const start = 0;
const end = 4294967295;
return this.addValidator({
message: (value, label) => `Expected ${label} to be an integer in the range ${start}...${end}, got ${value}`,
validator: value => is.integer(value) && is.inRange(value, [start, end])
});
return this.integer.inRange(0, 4294967295);
}
/**
* 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 the range ${start}...${end}, got ${value}`,
validator: value => is.integer(value) && is.inRange(value, [start, end])
});
return this.integer.inRange(-128, 127);
}
/**
* 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 the range ${start}...${end}, got ${value}`,
validator: value => is.integer(value) && is.inRange(value, [start, end])
});
return this.integer.inRange(-32768, 32767);
}
/**
* 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 the range ${start}...${end}, got ${value}`,
validator: value => is.integer(value) && is.inRange(value, [start, end])
});
return this.integer.inRange(-2147483648, 2147483647);
}
}

36
source/test/number.ts

@ -86,47 +86,47 @@ test('number.integerOrInfinite', t => {
test('number.uint8', t => {
t.notThrows(() => m(0, m.number.uint8));
t.notThrows(() => m(255, m.number.uint8));
t.throws(() => m(-1, m.number.uint8), 'Expected number to be an integer in the range 0...255, got -1');
t.throws(() => m(1.5, m.number.uint8), 'Expected number to be an integer in the range 0...255, got 1.5');
t.throws(() => m(256, m.number.uint8), 'Expected number to be an integer in the range 0...255, got 256');
t.throws(() => m(-1, m.number.uint8), 'Expected number to be in range [0..255], got -1');
t.throws(() => m(1.5, m.number.uint8), 'Expected number to be an integer, got 1.5');
t.throws(() => m(256, m.number.uint8), 'Expected number to be in range [0..255], got 256');
});
test('number.uint16', t => {
t.notThrows(() => m(0, m.number.uint16));
t.notThrows(() => m(65535, m.number.uint16));
t.throws(() => m(-1, m.number.uint16), 'Expected number to be an integer in the range 0...65535, got -1');
t.throws(() => m(1.5, m.number.uint16), 'Expected number to be an integer in the range 0...65535, got 1.5');
t.throws(() => m(65536, m.number.uint16), 'Expected number to be an integer in the range 0...65535, got 65536');
t.throws(() => m(-1, m.number.uint16), 'Expected number to be in range [0..65535], got -1');
t.throws(() => m(1.5, m.number.uint16), 'Expected number to be an integer, got 1.5');
t.throws(() => m(65536, m.number.uint16), 'Expected number to be in range [0..65535], got 65536');
});
test('number.uint32', t => {
t.notThrows(() => m(0, m.number.uint32));
t.notThrows(() => m(4294967295, m.number.uint32));
t.throws(() => m(-1, m.number.uint32), 'Expected number to be an integer in the range 0...4294967295, got -1');
t.throws(() => m(1.5, m.number.uint32), 'Expected number to be an integer in the range 0...4294967295, got 1.5');
t.throws(() => m(4294967296, m.number.uint32), 'Expected number to be an integer in the range 0...4294967295, got 4294967296');
t.throws(() => m(-1, m.number.uint32), 'Expected number to be in range [0..4294967295], got -1');
t.throws(() => m(1.5, m.number.uint32), 'Expected number to be an integer, got 1.5');
t.throws(() => m(4294967296, m.number.uint32), 'Expected number to be 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 the range -128...127, got -129');
t.throws(() => m(1.5, m.number.int8), 'Expected number to be an integer in the range -128...127, got 1.5');
t.throws(() => m(128, m.number.int8), 'Expected number to be an integer in the range -128...127, got 128');
t.throws(() => m(-129, m.number.int8), 'Expected number to be in range [-128..127], got -129');
t.throws(() => m(1.5, m.number.int8), 'Expected number to be an integer, got 1.5');
t.throws(() => m(128, m.number.int8), 'Expected number to be 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 the range -32768...32767, got -32769');
t.throws(() => m(1.5, m.number.int16), 'Expected number to be an integer in the range -32768...32767, got 1.5');
t.throws(() => m(32768, m.number.int16), 'Expected number to be an integer in the range -32768...32767, got 32768');
t.throws(() => m(-32769, m.number.int16), 'Expected number to be in range [-32768..32767], got -32769');
t.throws(() => m(1.5, m.number.int16), 'Expected number to be an integer, got 1.5');
t.throws(() => m(32768, m.number.int16), 'Expected number to be 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 the range -2147483648...2147483647, got -2147483649');
t.throws(() => m(1.5, m.number.int32), 'Expected number to be an integer in the range -2147483648...2147483647, got 1.5');
t.throws(() => m(2147483648, m.number.int32), 'Expected number to be an integer in the range -2147483648...2147483647, got 2147483648');
t.throws(() => m(-2147483649, m.number.int32), 'Expected number to be in range [-2147483648..2147483647], got -2147483649');
t.throws(() => m(1.5, m.number.int32), 'Expected number to be an integer, got 1.5');
t.throws(() => m(2147483648, m.number.int32), 'Expected number to be in range [-2147483648..2147483647], got 2147483648');
});

Loading…
Cancel
Save