[ https://issues.apache.org/jira/browse/GROOVY-8026?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15764736#comment-15764736 ]
Brian Ray commented on GROOVY-8026: ----------------------------------- Interesting. Here are expanded tests, just to see how close the symptoms are to that issue. {code:java} //compare to GROOVY-5744 (multiple assignment from an Iterator skips every other element) otherTxt = '1 2 3 4 5 6 7 8 9' mm = otherTxt =~ /\d/ println mm.collect { it } // [1, 2, 3, 4, 5, 6, 7, 8, 9] println mm[ 0..8 ] // [1, 2, 3, 4, 5, 6, 7, 8, 9] println mm[ 0..mm.size()-1 ] // [1, 2, 3, 4, 5, 6, 7, 8, 9] println mm[ 0..<mm.size() ] // [1, 2, 3, 4, 5, 6, 7, 8, 9] println mm[-1] // 9 println mm[ 0..-1 ] // the current inconsistency: [1, 9] println mm[ (0..-1).toList() ] // [1, 9] println mm[ (0..-1).iterator().toList() ] // [1, 9] //for comparison aa = [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ] println aa.collect { it } // [1, 2, 3, 4, 5, 6, 7, 8, 9] println aa[ 0..8 ] // [1, 2, 3, 4, 5, 6, 7, 8, 9] println aa[ 0..aa.size()-1 ] // [1, 2, 3, 4, 5, 6, 7, 8, 9] println aa[ 0..<aa.size() ] // [1, 2, 3, 4, 5, 6, 7, 8, 9] println aa[-1] // 9 println aa[ 0..-1 ] // [1, 2, 3, 4, 5, 6, 7, 8, 9] println aa[ (0..-1).toList() ] // [1, 9] println aa[ (0..-1).iterator().toList() ] // [1, 9] {code} The only mismatch between {{List#getAt(Range)}} and {{Matcher#getAt(Range)}} (actually [{{Matcher#getAt(Collection)}}|http://docs.groovy-lang.org/latest/html/groovy-jdk/java/util/regex/Matcher.html#getAt(java.util.Collection)]?) seems to be this one scenario. Mechanically it is as if the {{Range}} is first evaluated to a {{List}} when indexing a {{Matcher}}. In contrast {{List#getAt(Range)}} is clever. It appears to convert the {{Range}} end to the implied positive index before evaluating it. > Matcher indexed via IntRange with startIdx..-1 does not return "intermediate" > range matches > ------------------------------------------------------------------------------------------- > > Key: GROOVY-8026 > URL: https://issues.apache.org/jira/browse/GROOVY-8026 > Project: Groovy > Issue Type: Bug > Components: groovy-jdk > Affects Versions: 2.4.7 > Environment: Zulu OpenJDK 1.8.0_102-b14 > Windows 7 Pro > Reporter: Brian Ray > Priority: Minor > > Maybe this isn't a bug, and I realize that a {{Matcher}} is not exactly a > {{List}} or any other {{Collection}}, but the inconsistency is a little > mysterious. Here's a simple Groovysh script with several comparative indexes: > {code:java} > txt = 'abcd 1 efgh 2 ijkl 3 mnop' > m = txt =~ /\d/ > println m.collect { it } // as expected: [1, 2, 3] > println m[ 0..2 ] // as expected: [1, 2, 3] > println m[ 0..m.size()-1 ] // as expected: [1, 2, 3] > println m[ 0..<m.size() ] // as expected: [1, 2, 3] > println m[ 0..-1 ] // bug?: [1, 3] > //for comparison > a = [ 1, 2, 3 ] > println a.collect { it } // [1, 2, 3] > println a[ 0..2 ] // [1, 2, 3] > println a[ 0..a.size()-1 ] // [1, 2, 3] > println a[ 0..<a.size() ] // [1, 2, 3] > println a[ 0..-1 ] // [1, 2, 3] > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)