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. * Test a number to be in a valid range for a uint8.
*/ */
get uint8() { get uint8() {
const start = 0; return this.integer.inRange(0, 255);
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])
});
} }
/** /**
* Test a number to be in a valid range for a uint16. * Test a number to be in a valid range for a uint16.
*/ */
get uint16() { get uint16() {
const start = 0; return this.integer.inRange(0, 65535);
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])
});
} }
/** /**
* Test a number to be in a valid range for a uint32. * Test a number to be in a valid range for a uint32.
*/ */
get uint32() { get uint32() {
const start = 0; return this.integer.inRange(0, 4294967295);
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])
});
} }
/** /**
* Test a number to be in a valid range for a int8. * Test a number to be in a valid range for a int8.
*/ */
get int8() { get int8() {
const start = -128; return this.integer.inRange(-128, 127);
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])
});
} }
/** /**
* Test a number to be in a valid range for a int16. * Test a number to be in a valid range for a int16.
*/ */
get int16() { get int16() {
const start = -32768; return this.integer.inRange(-32768, 32767);
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])
});
} }
/** /**
* Test a number to be in a valid range for a int32. * Test a number to be in a valid range for a int32.
*/ */
get int32() { get int32() {
const start = -2147483648; return this.integer.inRange(-2147483648, 2147483647);
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])
});
} }
} }

36
source/test/number.ts

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

Loading…
Cancel
Save