This is an automated email from the ASF dual-hosted git repository. paulk pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/groovy.git
commit 5983f66eca55956cc67f9c7993d92e61313a5bbe Author: Esko Toivonen <[email protected]> AuthorDate: Wed Mar 31 16:27:12 2021 +0300 GROOVY-9649: Added tests for left and full-exclusive range operator --- src/spec/test/OperatorsTest.groovy | 4 +- src/test/groovy/ListTest.groovy | 16 +++- src/test/groovy/RangeTest.groovy | 106 +++++++++++++++++++++ .../powerassert/AssertionRenderingTest.groovy | 20 ++++ .../runtime/powerassert/EvaluationTest.groovy | 2 + 5 files changed, 143 insertions(+), 5 deletions(-) diff --git a/src/spec/test/OperatorsTest.groovy b/src/spec/test/OperatorsTest.groovy index 0393a47..3f9746c 100644 --- a/src/spec/test/OperatorsTest.groovy +++ b/src/spec/test/OperatorsTest.groovy @@ -543,6 +543,8 @@ assert function(*args,5,6) == 26 def range = 0..5 // <1> assert (0..5).collect() == [0, 1, 2, 3, 4, 5] // <2> assert (0..<5).collect() == [0, 1, 2, 3, 4] // <3> + assert (0<..5).collect() == [1, 2, 3, 4, 5] + assert (0<..<5).collect() == [1, 2, 3, 4] assert (0..5) instanceof List // <4> assert (0..5).size() == 6 // <5> // end::intrange[] @@ -781,4 +783,4 @@ assert !(falseValue2 ^= false) assert !(falseValue3 ^= null) ''' } -} \ No newline at end of file +} diff --git a/src/test/groovy/ListTest.groovy b/src/test/groovy/ListTest.groovy index 5e3860d..8a92f54 100644 --- a/src/test/groovy/ListTest.groovy +++ b/src/test/groovy/ListTest.groovy @@ -312,13 +312,21 @@ class ListTest extends GroovyTestCase { assert list[0..0] == [0] , 'one element range' assert list[0..<0] == [] , 'empty range' assert list[3..0] == [3, 2, 1, 0] , 'reverse range' - assert list[3..<0] == [3, 2, 1] , 'reverse exclusive range' + assert list[3..<0] == [3, 2, 1] , 'reverse right exclusive range' + assert list[3<..0] == [2, 1, 0] , 'reverse left exclusive range' + assert list[3<..<0] == [2, 1] , 'reverse full exclusive range' assert list[-2..-1] == [2, 3] , 'negative index range' - assert list[-2..<-1] == [2] , 'negative index range exclusive' + assert list[-2..<-1] == [2] , 'negative index range right exclusive' + assert list[-2<..-1] == [3] , 'negative index range left exclusive' + assert list[-2<..<-1] == [] , 'negative index range full exclusive' assert list[-1..-2] == [3, 2] , 'negative index range reversed' - assert list[-1..<-2] == [3] , 'negative index range reversed exclusive' // aaaahhhhh ! + assert list[-1..<-2] == [3] , 'negative index range reversed right exclusive' + assert list[-1<..-2] == [2] , 'negative index range reversed left exclusive' + assert list[-1<..<-2] == [] , 'negative index range reversed full exclusive' // aaaaaaahhhhh ! assert list[0..-1] == list , 'pos - neg value' - assert list[0..<-1] == [0, 1, 2] , 'pos - neg value exclusive' + assert list[0..<-1] == [0, 1, 2] , 'pos - neg value right exclusive' + assert list[0<..-1] == [1, 2, 3] , 'pos - neg value left exclusive' + assert list[0<..<-1] == [1, 2] , 'pos - neg value full exclusive' assert list[0..<-2] == [0, 1] , 'pos - neg value exclusive' shouldFail(GroovyRuntimeException) { list[null] } shouldFail(IndexOutOfBoundsException) { list[5..6] } diff --git a/src/test/groovy/RangeTest.groovy b/src/test/groovy/RangeTest.groovy index dc2cb45..82798f9 100644 --- a/src/test/groovy/RangeTest.groovy +++ b/src/test/groovy/RangeTest.groovy @@ -36,6 +36,18 @@ class RangeTest extends GroovyTestCase { assert x == 45 x = 0 + for (i in 1<..10) { + x = x + i + } + assert x == 54 + + x = 0 + for (i in 1<..<10) { + x = x + i + } + assert x == 44 + + x = 0 for (i in 0..'\u0009') { x = x + i } @@ -54,13 +66,29 @@ class RangeTest extends GroovyTestCase { x = x + it } assert x == 45 + + x = 0 + (1<..10).each { + x = x + it + } + assert x == 54 + + x = 0 + (1<..<10).each { + x = x + it + } + assert x == 44 } void testIntStep() { assertStep(0..9, 3, [0, 3, 6, 9]) assertStep(0..<10, 3, [0, 3, 6, 9]) + assertStep(0<..10, 3, [1, 4, 7, 10]) + assertStep(0<..<10, 3, [1, 4, 7]) assertStep(9..0, 3, [9, 6, 3, 0]) assertStep(9..<0, 3, [9, 6, 3]) + assertStep(9<..-1, 3, [8, 5, 2, -1]) + assertStep(9<..<-1, 3, [8, 5, 2]) } @@ -75,8 +103,12 @@ class RangeTest extends GroovyTestCase { assertStep('a'..'f', 2, ['a', 'c', 'e']) assertStep('f'..'a', 2, ['f', 'd', 'b']) assertStep('a'..<'e', 2, ['a', 'c']) + assertStep('a'<..'f', 2, ['b', 'd', 'f']) + assertStep('a'<..<'f', 2, ['b', 'd']) assertStep('z'..'v', 2, ['z', 'x', 'v']) assertStep('z'..<'v', 2, ['z', 'x']) + assertStep('z'<..'u', 2, ['y', 'w', 'u']) + assertStep('z'<..<'u', 2, ['y', 'w']) } void testNegativeObjectStep() { @@ -87,15 +119,23 @@ class RangeTest extends GroovyTestCase { void testIterateIntRange() { assertIterate(0..9, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) assertIterate(1..<8, [1, 2, 3, 4, 5, 6, 7]) + assertIterate(1<..8, [2, 3, 4, 5, 6, 7, 8]) + assertIterate(1<..<8, [2, 3, 4, 5, 6, 7]) assertIterate(7..1, [7, 6, 5, 4, 3, 2, 1]) assertIterate(6..<1, [6, 5, 4, 3, 2]) + assertIterate(6<..1, [5, 4, 3, 2, 1]) + assertIterate(6<..<1, [5, 4, 3, 2]) } void testIterateObjectRange() { assertIterate('a'..'d', ['a', 'b', 'c', 'd']) assertIterate('a'..<'d', ['a', 'b', 'c']) + assertIterate('a'<..'d', ['b', 'c', 'd']) + assertIterate('a'<..<'d', ['b', 'c']) assertIterate('z'..'x', ['z', 'y', 'x']) assertIterate('z'..<'x', ['z', 'y']) + assertIterate('z'<..'x', ['y', 'x']) + assertIterate('z'<..<'x', ['y']) } enum RomanNumber { @@ -146,6 +186,14 @@ class RangeTest extends GroovyTestCase { range = 0..<5 assert range.contains(0) && 0 in range assert !range.contains(5) && !(5 in range) + + range = 0<..5 + assert !range.contains(0) && !(0 in range) + assert range.contains(5) && 5 in range + + range = 0<..<5 + assert !range.contains(0) && !(0 in range) + assert !range.contains(5) && !(5 in range) } void testBackwardsRangeContains() { @@ -156,6 +204,14 @@ class RangeTest extends GroovyTestCase { range = 5..<1 assert range.contains(5) && 5 in range assert !range.contains(1) && !(1 in range) + + range = 5<..1 + assert !range.contains(5) && !(5 in range) + assert range.contains(1) && 1 in range + + range = 5<..<1 + assert !range.contains(5) && !(5 in range) + assert !range.contains(1) && !(1 in range) } void testObjectRangeContains() { @@ -169,6 +225,19 @@ class RangeTest extends GroovyTestCase { assert !range.contains('g') assert !range.contains('f') assert !range.contains('a') + + range = 'b'<..'f' + assert range.contains('f') + assert !range.contains('b') + assert !range.contains('g') + assert !range.contains('a') + + range = 'b'<..<'f' + assert !range.contains('b') + assert !range.contains('f') + assert !range.contains('a') + assert !range.contains('g') + assert range.contains('c') } void testBackwardsObjectRangeContains() { @@ -182,6 +251,19 @@ class RangeTest extends GroovyTestCase { assert range.contains('f') assert range.contains('c') assert !range.contains('b') + + range = 'f'<..'b' + assert !range.contains('f') + assert range.contains('b') + assert !range.contains('g') + assert !range.contains('a') + + range = 'f'<..<'b' + assert !range.contains('b') + assert !range.contains('f') + assert !range.contains('a') + assert !range.contains('g') + assert range.contains('c') } void testIntRangeToString() { @@ -191,25 +273,47 @@ class RangeTest extends GroovyTestCase { assertToString(0..<11, "0..<11") assertToString([1, 4..<11, 9], "[1, 4..<11, 9]") + assertToString(0<..11, "0<..11") + assertToString([1, 4<..11, 9], "[1, 4<..11, 9]") + + assertToString(0<..<11, "0<..<11") + assertToString([1, 4<..<11, 9], "[1, 4<..<11, 9]") + assertToString(10..0, "10..0") assertToString([1, 10..4, 9], "[1, 10..4, 9]") assertToString(11..<0, "11..<0") assertToString([1, 11..<4, 9], "[1, 11..<4, 9]") + + assertToString(11<..0, "11<..0") + assertToString([1, 11<..4, 9], "[1, 11<..4, 9]") + + assertToString(11<..<0, "11<..<0") + assertToString([1, 11<..<4, 9], "[1, 11<..<4, 9]") } void testObjectRangeToString() { assertToString('a'..'d', 'a..d', "'a'..'d'") assertToString('a'..<'d', 'a..c', "'a'..'c'") + assertToString('a'<..'d', 'b..d', "'b'..'d'") + assertToString('a'<..<'d', 'b..c', "'b'..'c'") + assertToString('z'..'x', 'z..x', "'z'..'x'") assertToString('z'..<'x', 'z..y', "'z'..'y'") + assertToString('z'<..'x', 'y..x', "'y'..'x'") + assertToString('z'<..<'x', 'y..y', "'y'..'y'") } void testRangeSize() { assertSize(1..10, 10) assertSize(11..<21, 10) + assertSize(11<..21, 10) + assertSize(11<..<22, 10) + assertSize(30..21, 10) assertSize(40..<30, 10) + assertSize(40<..30, 10) + assertSize(41<..<30, 10) } void testBorderCases() { @@ -217,6 +321,8 @@ class RangeTest extends GroovyTestCase { assertIterate(0..0, [0]) assertIterate(0..-1, [0, -1]) assertIterate(0..<-1, [0]) + assertIterate(0<..-1, [-1]) + assertIterate(0<..<-1, []) } void testEmptyRanges() { diff --git a/src/test/org/codehaus/groovy/runtime/powerassert/AssertionRenderingTest.groovy b/src/test/org/codehaus/groovy/runtime/powerassert/AssertionRenderingTest.groovy index f34d762..ee8a791 100644 --- a/src/test/org/codehaus/groovy/runtime/powerassert/AssertionRenderingTest.groovy +++ b/src/test/org/codehaus/groovy/runtime/powerassert/AssertionRenderingTest.groovy @@ -363,6 +363,26 @@ assert (a..<b) == null def b = 2 assert (a..<b) == null } + + isRendered ''' +assert (a<..b) == null + | | | + 1 2 false + ''', { -> + def a = 1 + def b = 2 + assert (a<..b) == null + } + + isRendered ''' +assert (a<..<b) == null + | | | + 1 2 false + ''', { -> + def a = 1 + def b = 2 + assert (a<..<b) == null + } } @Test diff --git a/src/test/org/codehaus/groovy/runtime/powerassert/EvaluationTest.groovy b/src/test/org/codehaus/groovy/runtime/powerassert/EvaluationTest.groovy index 38bee33..945df42 100644 --- a/src/test/org/codehaus/groovy/runtime/powerassert/EvaluationTest.groovy +++ b/src/test/org/codehaus/groovy/runtime/powerassert/EvaluationTest.groovy @@ -156,6 +156,8 @@ final class EvaluationTest extends GroovyTestCase { void testRangeExpression() { assert (1..3).contains(3) assert !((1..<3).contains(3)) + assert !((1<..3).contains(1)) + assert (!(1<..<3).contains(1) && !(1<..<3).contains(3)) } void testPropertyExpression() {
