@functional-lib/irrigation
Version:
irrigation fp
60 lines (52 loc) • 2.16 kB
JavaScript
import Irrigation from './../src/Irrigation';
import laws from 'fantasy-laws';
import jsc from 'jsverify';
import Z from 'sanctuary-type-classes';
import {expect} from 'chai';
const blessCons = (length=3) => jsc.bless({
generator: ()=> {
const now = new Date();
const from = new Date(now.setDate(now.getDate()-jsc.integer(0, 100).generator()))
const to = new Date(now.setDate(now.getDate()+jsc.integer(0, 100).generator()))
const elms = Array.from({length}, ()=> (
{
date: jsc.datetime(from, to).generator(),
b: jsc.integer(0, 60).generator(),
}));
return Irrigation.from(elms);
}
});
const {identity, composition} = laws.Functor(Z.equals, Irrigation);
const testConsIdentity = identity(blessCons(9));
const {rightIdentity, leftIdentity} = laws.Monoid(Z.equals, Irrigation);
const testConsComposition = composition(blessCons(4), jsc.bless({generator:() => x => {x.a = x.a * 3; return x}}), jsc.bless({generator: ()=> x => {x.b = x.b +10; return x}}));
const ordTestTransitivity = laws.Ord.transitivity(blessCons(900), blessCons(900), blessCons(900));
const testRightIdentity = rightIdentity (blessCons(14));
const testleftIdentity = leftIdentity (blessCons(14));
describe('Irrigation => ', () => {
it('testConsIdentity', testConsIdentity);
it('testConsComposition', testConsComposition);
it('ordTestTransitivity', ordTestTransitivity);
it('testRightIdentity', testRightIdentity);
it('testleftIdentity', testleftIdentity);
it('Sort correct', () => {
const A = blessCons(146).generator().sort().toArray();
let correct = true;
for(let i =0 ; i< A.length; i++){
if(i +1 < A.length && A[i].date> A[i+1].date) {
correct = false;
break;
}
}
expect(correct).to.be.true;
});
it('contains', () => {
const A = blessCons(146).generator();
const {head} = A;
const containsHeadDate = el => +el.date === +head.date;
const containsByA = el => el.a ===9;
const B = Irrigation.from([{a:1}, {a:2}, {a:3}, {a:6}]);
expect(A.contains(containsHeadDate)).to.be.true;
expect(B.contains(containsByA)).to.be.false;
});
});