All files / src pipe.test.js

0% Statements 0/33
100% Branches 0/0
0% Functions 0/12
0% Lines 0/31

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78                                                                                                                                                           
const {anything, assert, func, property} = require('fast-check')
const {pipe} = require('./pipe')
 
test('pipe returns its input for no functions', () => {
  const a = anything()
  assert(
    property(a, (a) => {
      expect(
        pipe()(a)
      ).toStrictEqual(
        a
      )
    })
  )
})
 
test('pipe composes functions, but backwards', () => {
  const f = func(anything())
  const g = func(anything())
  const a = anything()
  assert(
    property(f, g, a, (f, g, a) => {
      expect(
        pipe(f, g)(a)
      ).toStrictEqual(
        g(f(a))
      )
    })
  )
})
 
test('pipe is associative', () => {
  const f = func(anything())
  const g = func(anything())
  const h = func(anything())
  const a = anything()
  assert(
    property(f, g, h, a, (f, g, h, a) => {
      expect(
        pipe(f, pipe(g, h))(a)
      ).toStrictEqual(
        pipe(pipe(f, g), h)(a)
      )
    })
  )
})
 
test('piping f with id is f', () => {
  const id = a => a
 
  const f  = func(anything())
  const a  = anything()
  assert(
    property(f, a, (f, a) => {
      expect(
        pipe(f, id)(a)
      ).toStrictEqual(
        f(a)
      )
    })
  )
})
 
test('piping id with f is f', () => {
  const id = a => a
 
  const f  = func(anything())
  const a  = anything()
  assert(
    property(f, a, (f, a) => {
      expect(
        pipe(id, f)(a)
      ).toStrictEqual(
        f(a)
      )
    })
  )
})