diff --git a/source/lib/predicates/number.ts b/source/lib/predicates/number.ts index 3c4bf25..33aeb32 100644 --- a/source/lib/predicates/number.ts +++ b/source/lib/predicates/number.ts @@ -148,7 +148,20 @@ export class NumberPredicate extends Predicate { get uint8() { const start = 0; const end = 255; - + + 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 uint16. + */ + get uint16() { + const start = 0; + const end = 65535; + 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]) diff --git a/source/test/number.ts b/source/test/number.ts index f3a14bf..38a269d 100644 --- a/source/test/number.ts +++ b/source/test/number.ts @@ -90,3 +90,11 @@ test('number.uint8', t => { t.throws(() => m(1.5, m.number.uint8), 'Expected number to be an integer in range [0..255], got 1.5'); t.throws(() => m(256, m.number.uint8), 'Expected number to be an integer 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 range [0..65535], got -1'); + t.throws(() => m(1.5, m.number.uint16), 'Expected number to be an integer in range [0..65535], got 1.5'); + t.throws(() => m(65536, m.number.uint16), 'Expected number to be an integer in range [0..65535], got 65536'); +});