import { IO } from 'fp-ts/lib/IO' import { constRunIO, newIO, noOpIO, runIO } from '../IO' describe('constRunIO', () => { let num = 0 const mutateNumIO = newIO(() => { num = 3 }) it('should return the run function for an IO', () => { const actual = constRunIO(mutateNumIO)() const expected = mutateNumIO() expect(actual).toBe(expected) expect(num).toBe(3) }) }) describe('newIO', () => { let num = 0 const mutateNumIO = newIO(() => { num = 5 }) const mutateNumIO_ = newIO(() => { num = 5 }) it('should create an IO', () => { const actual = mutateNumIO() const expected = mutateNumIO_() expect(actual).toBe(expected) expect(num).toBe(5) }) }) describe('noOpIO', () => { it('should return void', () => { const actual = noOpIO() const expected = undefined expect(actual).toBe(expected) }) }) describe('runIO', () => { it('should run a possibly effectful function in IO', () => { let num = 0 const mutateNumIO = newIO(() => { num = 2 }) const actual = runIO(mutateNumIO) const expected = mutateNumIO() expect(actual).toBe(expected) expect(num).toBe(2) }) })