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.

Reply via email to