Zip uses suspension, so zipping it with any other enumerable will help test those scenarios. Use Stream.zip + Enum.take to test the combination of both suspension + halt.
Improvements to the enumerable docs are welcome. :) On Sat, Sep 4, 2021 at 6:47 PM w...@resilia.nl <w...@resilia.nl> wrote: > > Hi all! > > I was recently building a datastructure > <https://github.com/Qqwy/elixir-arrays> for which I wanted to implement > Enumerable. > The basic implementation is very straightforward, because of the very > helpful documentation in the `Enum` and `Enumerable` modules. Chapeau 😊! > > I then used a code coverage tool to try to make sure that all edge cases > were exercised by the testing suite. And this is where I found out that > triggering one part of the `Enumerable.reduce`-interface is rather hard, as > there is nearly no information to find out how to thoroughly write/test it: > The usage of `:suspend`/`:suspended`. > > I think it is a very nice feature to be able to work with continuations > when dealing with enumerables. However, currently neither the Elixir > standard library, nor (to my knowledge) any libraries on Hex.PM out there > make use of it. > The resources I was able to find are: > - The blog post introducing suspensions > <https://elixir-lang.org/blog/2013/12/11/elixir-s-new-continuable-enumerators/>, > with `interleave` as single example. (2013) > - A bug report <https://github.com/elixir-lang/elixir/issues/3751> of the > suspension system, with one example that was then added as a regression > test. (2015) > - The Elixir core has many places > <https://github.com/elixir-lang/elixir/search?q=suspend> where > `:suspend`/ `:suspended` are used, but to my knowledge only ever to handle > a function that could return `:suspend` (never itself defining a function > doing so). > > Neither the `interleave` example nor the `regression test` are examples > that give much confidence that a particular Enumerable implementation now > handles suspensions correctly. > > So my proposal would be to add some kind of small example definition to > e.g. the documentation of `t Enumerable.result`. > Would this be a good idea? Or is another place better suited? > Also: Does anyone know of other resources/examples where suspensions are > currently used? > > Thank you for your consideration, > > ~Marten/Qqwy > > -- > You received this message because you are subscribed to the Google Groups > "elixir-lang-core" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to elixir-lang-core+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/elixir-lang-core/4e3e3f2f-09c8-4f13-9b5c-7a986d98b734n%40googlegroups.com > <https://groups.google.com/d/msgid/elixir-lang-core/4e3e3f2f-09c8-4f13-9b5c-7a986d98b734n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "elixir-lang-core" group. To unsubscribe from this group and stop receiving emails from it, send an email to elixir-lang-core+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4%2BmL0T1Qj4jHrt6F2O%3D5PViMAf69o6JO0BJ-pP_82nmuA%40mail.gmail.com.