Commit Diff


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) == '<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
@@ -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)