Skip to content

Commit

Permalink
Add interval
Browse files Browse the repository at this point in the history
  • Loading branch information
caiogondim committed Sep 7, 2020
1 parent 8de0625 commit 9377977
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 1 deletion.
3 changes: 2 additions & 1 deletion .eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
"ecmaVersion": 12
},
"rules": {
"unicorn/no-null": "off"
"unicorn/no-null": "off",
"sonarjs/prefer-while": "off"
}
}
1 change: 1 addition & 0 deletions TODO.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Today
- rename: create-number-generator -> create-async-number-generator
- eslint
- speed up tests

# Someday
- Add toBeNear Jest matcher
Expand Down
24 changes: 24 additions & 0 deletions src/interval/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
const sleep = require('../sleep')

async function* interval(ms, gen) {
for await (let value of gen) {
yield value
await sleep(ms)
}
}

function composable(ms) {
return async function* composableInterval(gen) {
yield* interval(ms, gen)
}
}

function main(ms, gen) {
if (!gen) {
return composable(ms)
} else {
return interval(ms, gen)
}
}

module.exports = main
23 changes: 23 additions & 0 deletions src/interval/test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
const interval = require('.')
const take = require('../take')
const consume = require('../consume')
const compose = require('../compose')
const createFibonacciGenerator = require('../_shared/create-fibonacci-generator')

it('consumes generator every `ms` miliseconds', async () => {
const composed = take(4, interval(10, createFibonacciGenerator()))
const past = Date.now()
const output = await consume(composed)

expect(output).toEqual([1, 1, 2, 3])
expect(Date.now() - past).toBeGreaterThanOrEqual(40)
})

it('is composable', async () => {
const composed = compose(createFibonacciGenerator(), interval(10), take(4))
const past = Date.now()
const output = await consume(composed)

expect(output).toEqual([1, 1, 2, 3])
expect(Date.now() - past).toBeGreaterThanOrEqual(40)
})

0 comments on commit 9377977

Please sign in to comment.