smart-types-ts
Version:
A collection of _Smart Types_ and _Smart Constructors_ which enable you to be more strict when defining your application's important types/interfaces.
46 lines (38 loc) • 1.3 kB
text/typescript
import { assert } from "chai";
import * as fc from "fast-check";
import * as e from "fp-ts/lib/Either";
import { mkArrayWithLength } from "./arrayWithLength";
describe("ArrayWithLength", () => {
describe("mkArrayWithLength", () => {
it("returns a Left when the input is invalid", () => {
const maxLength = 10;
const invalidInput = fc.array(fc.anything(), {
minLength: maxLength + 1
});
fc.assert(
fc.property(invalidInput, <T>(list: T[]) => {
assert.deepStrictEqual(
mkArrayWithLength(0, maxLength)(list),
e.left(`Length not between 0-${maxLength}`)
);
})
);
});
it("succeeds when the input is an array with maxLength not exceeding the specified amount", () => {
const maxLength = 10;
const validInput = fc.array(fc.anything(), { maxLength: maxLength });
fc.assert(
fc.property(validInput, <T>(list: T[]) => {
assert.deepStrictEqual(
mkArrayWithLength(0, maxLength)(list),
e.right(list)
);
})
);
});
// Arrays cannot have a negative length!
it("throws an error when given a min value which is less than 0", () => {
assert.throws(() => mkArrayWithLength(-5, 10));
});
});
});