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

Paul King edited comment on GROOVY-7207 at 12/1/21, 1:24 AM:
-------------------------------------------------------------

The {{every}} method fails if it finds a single element in the list which 
doesn't pass the predicate. Since it can never find such an element for an 
empty list it will return true. This is consistent with how other languages 
treat this case:
{code}
Java: emptyStream.allMatch(x -> false) // => true
Kotlin: emptyList.all { false } // => true
Scala: List[String]().forall(x => false) // => true
Ruby: [].all? { |s| false } // => true
{code}


was (Author: paulk):
It would be worth checking what other languages do here but the current 
implementation assumes {{every}} should fail if it finds a single element in 
the list which doesn't pass the predicate.

> every() from DefaultGroovyMethods returns true for empty iterator/list
> ----------------------------------------------------------------------
>
>                 Key: GROOVY-7207
>                 URL: https://issues.apache.org/jira/browse/GROOVY-7207
>             Project: Groovy
>          Issue Type: Bug
>          Components: groovy-jdk
>    Affects Versions: 2.3.8, 2.4.0-beta-4
>            Reporter: Dhiraj Mahapatro
>            Priority: Major
>
> {code:java}
> assert [].every()
> assert [].every { it }
> assert [].every { it > 1 }
> {code}
> Is this an expected behavior? In all the variants of {{every()}} in 
> {{DefaultGroovyMethods}} the logic is simlar to
> {code:java}
> BooleanClosureWrapper bcw = new BooleanClosureWrapper(closure);
> for (Iterator iter = InvokerHelper.asIterator(self); iter.hasNext();) {
>     if (!bcw.call(iter.next())) {
>         return false;
>     }
> }
> return true;
> {code}
> So it defaults to true if {{!iter.hasNext()}}. Is this acceptable? Shouldn't 
> it falsify based on empty List fails Groovy Truth?



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to