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() {