<div dir="ltr">Juan, please don't forget to look at the changeset in my previous mail when you have time.<div><br></div><div>Here are some additional tweaks. I reimplemented Collection>>#identityIncludes: using #allSatisfy: instead of #do:, in this way it is fast for Bags too, and it mirrors the implementation of Collection>>#includes:.</div><div><br></div><div>I also implemented a fast Bag>>#atRandom:, and implemented a general Collection>>#atRandom:. Originally #atRandom: was not implemented in Collection, so I implemented a generic version that only assumes the collection understands #size and #do:.</div><div><br></div><div>Thanks,</div><div>Luciano</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, May 3, 2022 at 7:54 AM Luciano Notarfrancesco <<a href="mailto:luchiano@gmail.com">luchiano@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Here are some more methods that take advantage of the structure of a Bag (#allSatisfy:, #anySatisfy:, #max:, #min:, #sum:, etc).<div><br></div><div>Also made some tweaks to some methods in Collection to call existing methods instead of reimplementing, in order to simplify the changes in Bag (otherwise. for example, I'd have to implement #sum, #sum: and #sum:ifEmpty: in Bag instead of only implementing #sum:ifEmpty). And I changed Collection>>#product to produce an error when the collection is empty instead of returning 1 (to be consistent with Collection>>#sum:).</div><div><br></div><div>All base image tests pass, but please review.<div><br></div><div>Also, while running tests I got a walkback on BitBltCanvasEngine, see the attached log.</div></div></div>
</blockquote></div>