[ 
https://issues.apache.org/jira/browse/GROOVY-11603?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17941343#comment-17941343
 ] 

ASF GitHub Bot commented on GROOVY-11603:
-----------------------------------------

codecov-commenter commented on PR #2179:
URL: https://github.com/apache/groovy/pull/2179#issuecomment-2781338250

   ## 
[Codecov](https://app.codecov.io/gh/apache/groovy/pull/2179?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
 Report
   Attention: Patch coverage is `85.52632%` with `22 lines` in your changes 
missing coverage. Please review.
   > Project coverage is 68.8941%. Comparing base 
[(`876fbed`)](https://app.codecov.io/gh/apache/groovy/commit/876fbed302a2e92d572d6c01ce4f134c712cb1c5?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
 to head 
[(`2f72a8d`)](https://app.codecov.io/gh/apache/groovy/commit/2f72a8de2558edf280e0fdd344cf9f662f129667?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache).
   
   | [Files with missing 
lines](https://app.codecov.io/gh/apache/groovy/pull/2179?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
 | Patch % | Lines |
   |---|---|---|
   | 
[src/main/java/groovy/util/Iterators.java](https://app.codecov.io/gh/apache/groovy/pull/2179?src=pr&el=tree&filepath=src%2Fmain%2Fjava%2Fgroovy%2Futil%2FIterators.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3JjL21haW4vamF2YS9ncm9vdnkvdXRpbC9JdGVyYXRvcnMuamF2YQ==)
 | 85.5263% | [10 Missing and 12 partials :warning: 
](https://app.codecov.io/gh/apache/groovy/pull/2179?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
 |
   
   <details><summary>Additional details and impacted files</summary>
   
   
   [![Impacted file tree 
graph](https://app.codecov.io/gh/apache/groovy/pull/2179/graphs/tree.svg?width=650&height=150&src=pr&token=1r45138NfQ&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)](https://app.codecov.io/gh/apache/groovy/pull/2179?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
   
   ```diff
   @@                Coverage Diff                 @@
   ##               master      #2179        +/-   ##
   ==================================================
   + Coverage     68.8710%   68.8941%   +0.0231%     
   - Complexity      29570      29574         +4     
   ==================================================
     Files            1421       1422         +1     
     Lines          113714     113866       +152     
     Branches        19715      19746        +31     
   ==================================================
   + Hits            78316      78447       +131     
   - Misses          28787      28796         +9     
   - Partials         6611       6623        +12     
   ```
   
   | [Files with missing 
lines](https://app.codecov.io/gh/apache/groovy/pull/2179?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
 | Coverage Δ | |
   |---|---|---|
   | 
[src/main/java/groovy/util/Iterators.java](https://app.codecov.io/gh/apache/groovy/pull/2179?src=pr&el=tree&filepath=src%2Fmain%2Fjava%2Fgroovy%2Futil%2FIterators.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3JjL21haW4vamF2YS9ncm9vdnkvdXRpbC9JdGVyYXRvcnMuamF2YQ==)
 | `85.5263% <85.5263%> (ø)` | |
   
   ... and [2 files with indirect coverage 
changes](https://app.codecov.io/gh/apache/groovy/pull/2179/indirect-changes?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
   
   </details>
   <details><summary> :rocket: New features to boost your workflow: </summary>
   
   - :snowflake: [Test 
Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, 
report on failures, and find test suite problems.
   - :package: [JS Bundle 
Analysis](https://docs.codecov.com/docs/javascript-bundle-analysis): Save 
yourself from yourself by tracking and limiting bundle sizes in JS merges.
   </details>




> Add Lazy generators for iterators
> ---------------------------------
>
>                 Key: GROOVY-11603
>                 URL: https://issues.apache.org/jira/browse/GROOVY-11603
>             Project: Groovy
>          Issue Type: Improvement
>            Reporter: Paul King
>            Assignee: Paul King
>            Priority: Major
>
> This issue is to propose some iterate, generate and combine methods. The 
> first two are exact mirrors of their Stream counterparts.
> {code:groovy}
> def evens = Iterators.iterate(2, n -> n + 2)
> def odds = Iterators.iterate(1, n -> n + 2)
> assert evens.take(4).collect() == [2, 4, 6, 8]
> assert odds.take(4).collect() == [1, 3, 5, 7]
> var r = new Random()
> var randomDigits = Iterators.generate({ r.nextInt(10) } as Supplier)
> println randomDigits.take(10).join() // 2698715440 (different every time)
> assert randomDigits.take(3).collect() ==~ /\[\d, \d, \d\]/ // regex of 3 
> digits
> {code}
> We could achieve the same result using the Streams API as follows:
> {code:groovy}
> def alsoEvens = Stream.iterate(2, n -> n + 2).iterator()
> assert alsoEvens.take(4).collect() == [2, 4, 6, 8]
> {code}
> So, these two methods are "just" convenience without the overhead of setting 
> up the Stream, so will be quicker for many simple cases.
> The other methods are combine and combineLazy. They are iterator variants of 
> combinations/eachCombination with some inspiration from the Groovy-stream 
> project to use a map to name the streams/result tuples. This is also known as 
> cross-product and Groovy-stream calls dubs its take on cross product as faux 
> list-comprehension which is something we have wanted for a while.
> {code:groovy}
> assert Iterators.combine(x: 1..2, y: 'a'..'c').collect().toString()
>     == '[[x:1, y:a], [x:1, y:b], [x:1, y:c], [x:2, y:a], [x:2, y:b], [x:2, 
> y:c]]'
> assert Iterators.combine(x: 1..3, y: 'a'..'b').collect().toString()
>     == '[[x:1, y:a], [x:1, y:b], [x:2, y:a], [x:2, y:b], [x:3, y:a], [x:3, 
> y:b]]'
> {code}
> The combineLazy method is the same but expects iterators as the input sources 
> not iterables. The traditional cross-product output would not be very 
> interesting if there are two or more infinite streams as the sources as can 
> be seen from the first of the next two examples (even is always 0). So, there 
> is an optional flag, fairOrder, which visits the streams one index level at a 
> time, (sort of breadth first vs depth first).
> {code:groovy}
> assert Iterators.combineLazy(
>     even: Iterators.iterate(0, n -> n + 2),
>     odd: Iterators.iterate(1, n -> n + 2), false)
>     .take(10).collect().join('\n')
>     == '''
> [even:0, odd:1]
> [even:0, odd:3]
> [even:0, odd:5]
> [even:0, odd:7]
> [even:0, odd:9]
> [even:0, odd:11]
> [even:0, odd:13]
> [even:0, odd:15]
> [even:0, odd:17]
> [even:0, odd:19]
> '''.trim()
> assert Iterators.combineLazy(
>     even: Iterators.iterate(0, n -> n + 2),
>     odd: Iterators.iterate(1, n -> n + 2), true)
>     .take(10).collect().join('\n')
>     == '''
> [even:0, odd:1]
> [even:0, odd:3]
> [even:2, odd:1]
> [even:2, odd:3]
> [even:0, odd:5]
> [even:2, odd:5]
> [even:4, odd:1]
> [even:4, odd:3]
> [even:4, odd:5]
> [even:0, odd:7]
> '''.trim()
> {code}
> There are some more things to think about to fully utilise some of the 
> functionality from Groovy-stream but these cross product generators seem like 
> a nice start.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to