commit - a6da1637e7167d21c26dd0c5e13d0b8d49957e9a
commit + 90705a7523fab5ba96edee99c3a3408c4525f9ef
blob - dda991b8c7b1c0576b388fd4d9e8691d53830306
blob + 3fffdc80c64929bd6ee56cb41bca2a1cef943687
--- CHANGELOG.md
+++ CHANGELOG.md
### Added
+- A `log()` iterator.
- A `mix()` iterator.
- A CAS-register generator.
blob - 943ec8deed4dcc025103d3629bc10204ce072b28
blob + c82236b8a0db3486aa7e64693c5f972d710bb905
--- molly/gen.lua
+++ molly/gen.lua
local fun = require('fun')
local clock = require('molly.clock')
+local log = require('molly.log')
local tbl = require('molly.compat.tbl')
local fun_mt = debug.getmetatable(fun.range(10))
--- Special generators
-- @section
---- (TODO) A generator which, when asked for an operation, logs a message and yields
--- nil. Occurs only once; use `repeat` to repeat.
+--- A generator which, when asked for an operation, logs
+-- a message and yields `nil`. Occurs only once; use `repeat` to
+-- repeat.
-- @return an iterator
--
--- @function log
-local log = function()
- -- TODO
+-- @usage
+-- > molly.gen.iter({1, 2, 3}):log()
+-- [INFO 2024-07-07 11:38:47:119933]: 1
+-- ---
+-- - null
+-- ...
+-- --
+-- @function log
+local log_it = function(it)
+ assert(tostring(it) == '<generator>')
+ local gen, param, state = unwrap(it)
+ local _, v = gen(param, state)
+ log.info(v)
+ return nil_gen(nil, nil)
end
-exports.log = log
+exports.log = log_it
+methods.log = log_it
--- (TODO) Operations from that generator are scheduled at uniformly random intervals
-- between `0` to `2 * (dt seconds)`.
blob - b9cd18cc5f84a4882e9f96de677adab51b6c271f
blob + 0d41f838fe2629357b664381b0b839e25eb89728
--- test/tests.lua
+++ test/tests.lua
local seed = os.time()
math.randomseed(seed)
-test:plan(12)
+test:plan(13)
test:test('clock', function(test)
test:plan(5)
test:is(#tbl, 11, 'length of items generated by gen.mix')
end)
+test:test('gen.log', function(test)
+ test:plan(1)
+
+ local res = molly.gen.iter({1, 2, 3}):log()
+ test:is(res, nil, 'gen.log returns nil')
+end)
+
test:test('runner', function(test)
test:plan(4)