commit 90705a7523fab5ba96edee99c3a3408c4525f9ef from: Sergey Bronnikov date: Sun Jul 07 08:47:17 2024 UTC molly: add a log iterator The patch add a generator which, when asked for an operation, logs a message and yields `nil`. commit - a6da1637e7167d21c26dd0c5e13d0b8d49957e9a commit + 90705a7523fab5ba96edee99c3a3408c4525f9ef blob - dda991b8c7b1c0576b388fd4d9e8691d53830306 blob + 3fffdc80c64929bd6ee56cb41bca2a1cef943687 --- CHANGELOG.md +++ CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](http ### Added +- A `log()` iterator. - A `mix()` iterator. - A CAS-register generator. blob - 943ec8deed4dcc025103d3629bc10204ce072b28 blob + c82236b8a0db3486aa7e64693c5f972d710bb905 --- molly/gen.lua +++ molly/gen.lua @@ -38,6 +38,7 @@ 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)) @@ -456,15 +457,28 @@ methods.flip_flop = flip_flop --- 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) == '') + 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 @@ -27,7 +27,7 @@ local utils = molly.utils local seed = os.time() math.randomseed(seed) -test:plan(12) +test:plan(13) test:test('clock', function(test) test:plan(5) @@ -226,6 +226,13 @@ test:test('gen.mix', function(test) 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)