You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2021/04/12 09:23:20 UTC
[groovy] 03/25: GROOVY-9649: Added tests for left and
full-exclusive range operator
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 <es...@tuni.fi>
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() {