14896e241a506661acc8de574508636c14ba99805Romain Guy/* 24896e241a506661acc8de574508636c14ba99805Romain Guy * Copyright (C) 2017 The Android Open Source Project 34896e241a506661acc8de574508636c14ba99805Romain Guy * 44896e241a506661acc8de574508636c14ba99805Romain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 54896e241a506661acc8de574508636c14ba99805Romain Guy * you may not use this file except in compliance with the License. 64896e241a506661acc8de574508636c14ba99805Romain Guy * You may obtain a copy of the License at 74896e241a506661acc8de574508636c14ba99805Romain Guy * 84896e241a506661acc8de574508636c14ba99805Romain Guy * http://www.apache.org/licenses/LICENSE-2.0 94896e241a506661acc8de574508636c14ba99805Romain Guy * 104896e241a506661acc8de574508636c14ba99805Romain Guy * Unless required by applicable law or agreed to in writing, software 114896e241a506661acc8de574508636c14ba99805Romain Guy * distributed under the License is distributed on an "AS IS" BASIS, 124896e241a506661acc8de574508636c14ba99805Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134896e241a506661acc8de574508636c14ba99805Romain Guy * See the License for the specific language governing permissions and 144896e241a506661acc8de574508636c14ba99805Romain Guy * limitations under the License. 154896e241a506661acc8de574508636c14ba99805Romain Guy */ 164896e241a506661acc8de574508636c14ba99805Romain Guy 179c80550cbbe357a89e2abeeb9c7769fcaefc3a65Jake Whartonpackage androidx.core.graphics 184896e241a506661acc8de574508636c14ba99805Romain Guy 194896e241a506661acc8de574508636c14ba99805Romain Guyimport android.graphics.Point 204896e241a506661acc8de574508636c14ba99805Romain Guyimport android.graphics.Rect 214896e241a506661acc8de574508636c14ba99805Romain Guyimport android.graphics.Region 229c80550cbbe357a89e2abeeb9c7769fcaefc3a65Jake Whartonimport androidx.testutils.assertThrows 23ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guyimport org.junit.Assert.assertEquals 244896e241a506661acc8de574508636c14ba99805Romain Guyimport org.junit.Assert.assertFalse 25ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guyimport org.junit.Assert.assertNotSame 264896e241a506661acc8de574508636c14ba99805Romain Guyimport org.junit.Assert.assertTrue 274896e241a506661acc8de574508636c14ba99805Romain Guyimport org.junit.Test 284896e241a506661acc8de574508636c14ba99805Romain Guy 294896e241a506661acc8de574508636c14ba99805Romain Guyclass RegionTest { 304896e241a506661acc8de574508636c14ba99805Romain Guy @Test fun containsPoint() { 314896e241a506661acc8de574508636c14ba99805Romain Guy assertFalse(Point(1, 1) in Region()) 324896e241a506661acc8de574508636c14ba99805Romain Guy assertTrue(Point(1, 1) in Region(0, 0, 2, 2)) 334896e241a506661acc8de574508636c14ba99805Romain Guy } 344896e241a506661acc8de574508636c14ba99805Romain Guy 354896e241a506661acc8de574508636c14ba99805Romain Guy @Test fun unionRect() { 364896e241a506661acc8de574508636c14ba99805Romain Guy val r = Region(0, 0, 2, 2) + Rect(4, 4, 6, 6) 374896e241a506661acc8de574508636c14ba99805Romain Guy assertFalse(Point(3, 3) in r) 384896e241a506661acc8de574508636c14ba99805Romain Guy assertTrue(Point(1, 1) in r) 394896e241a506661acc8de574508636c14ba99805Romain Guy assertTrue(Point(5, 5) in r) 404896e241a506661acc8de574508636c14ba99805Romain Guy } 414896e241a506661acc8de574508636c14ba99805Romain Guy 424896e241a506661acc8de574508636c14ba99805Romain Guy @Test fun unionRegion() { 434896e241a506661acc8de574508636c14ba99805Romain Guy val r = Region(0, 0, 2, 2) + Region(4, 4, 6, 6) 444896e241a506661acc8de574508636c14ba99805Romain Guy assertFalse(Point(3, 3) in r) 454896e241a506661acc8de574508636c14ba99805Romain Guy assertTrue(Point(1, 1) in r) 464896e241a506661acc8de574508636c14ba99805Romain Guy assertTrue(Point(5, 5) in r) 474896e241a506661acc8de574508636c14ba99805Romain Guy } 484896e241a506661acc8de574508636c14ba99805Romain Guy 494896e241a506661acc8de574508636c14ba99805Romain Guy @Test fun unionAsAndRect() { 504896e241a506661acc8de574508636c14ba99805Romain Guy val r = Region(0, 0, 2, 2) and Rect(4, 4, 6, 6) 514896e241a506661acc8de574508636c14ba99805Romain Guy assertFalse(Point(3, 3) in r) 524896e241a506661acc8de574508636c14ba99805Romain Guy assertTrue(Point(1, 1) in r) 534896e241a506661acc8de574508636c14ba99805Romain Guy assertTrue(Point(5, 5) in r) 544896e241a506661acc8de574508636c14ba99805Romain Guy } 554896e241a506661acc8de574508636c14ba99805Romain Guy 564896e241a506661acc8de574508636c14ba99805Romain Guy @Test fun unionAsAndRegion() { 574896e241a506661acc8de574508636c14ba99805Romain Guy val r = Region(0, 0, 2, 2) and Region(4, 4, 6, 6) 584896e241a506661acc8de574508636c14ba99805Romain Guy assertFalse(Point(3, 3) in r) 594896e241a506661acc8de574508636c14ba99805Romain Guy assertTrue(Point(1, 1) in r) 604896e241a506661acc8de574508636c14ba99805Romain Guy assertTrue(Point(5, 5) in r) 614896e241a506661acc8de574508636c14ba99805Romain Guy } 624896e241a506661acc8de574508636c14ba99805Romain Guy 634896e241a506661acc8de574508636c14ba99805Romain Guy @Test fun differenceRect() { 644896e241a506661acc8de574508636c14ba99805Romain Guy val r = Region(0, 0, 4, 4) - Rect(2, 2, 6, 6) 654896e241a506661acc8de574508636c14ba99805Romain Guy assertFalse(Point(3, 3) in r) 664896e241a506661acc8de574508636c14ba99805Romain Guy assertTrue(Point(1, 1) in r) 674896e241a506661acc8de574508636c14ba99805Romain Guy assertFalse(Point(5, 5) in r) 684896e241a506661acc8de574508636c14ba99805Romain Guy } 694896e241a506661acc8de574508636c14ba99805Romain Guy 704896e241a506661acc8de574508636c14ba99805Romain Guy @Test fun differenceRegion() { 714896e241a506661acc8de574508636c14ba99805Romain Guy val r = Region(0, 0, 4, 4) - Region(2, 2, 6, 6) 724896e241a506661acc8de574508636c14ba99805Romain Guy assertFalse(Point(3, 3) in r) 734896e241a506661acc8de574508636c14ba99805Romain Guy assertTrue(Point(1, 1) in r) 744896e241a506661acc8de574508636c14ba99805Romain Guy assertFalse(Point(5, 5) in r) 754896e241a506661acc8de574508636c14ba99805Romain Guy } 764896e241a506661acc8de574508636c14ba99805Romain Guy 774896e241a506661acc8de574508636c14ba99805Romain Guy @Test fun unaryMinus() { 784896e241a506661acc8de574508636c14ba99805Romain Guy val r = Rect(0, 0, 10, 10) - Rect(4, 4, 6, 6) 794896e241a506661acc8de574508636c14ba99805Romain Guy assertTrue(Point(1, 1) in r) 804896e241a506661acc8de574508636c14ba99805Romain Guy assertFalse(Point(5, 5) in r) 814896e241a506661acc8de574508636c14ba99805Romain Guy 824896e241a506661acc8de574508636c14ba99805Romain Guy val i = -r 834896e241a506661acc8de574508636c14ba99805Romain Guy assertFalse(Point(1, 1) in i) 844896e241a506661acc8de574508636c14ba99805Romain Guy assertTrue(Point(5, 5) in i) 854896e241a506661acc8de574508636c14ba99805Romain Guy } 864896e241a506661acc8de574508636c14ba99805Romain Guy 874896e241a506661acc8de574508636c14ba99805Romain Guy @Test fun not() { 884896e241a506661acc8de574508636c14ba99805Romain Guy val r = Rect(0, 0, 10, 10) - Rect(4, 4, 6, 6) 894896e241a506661acc8de574508636c14ba99805Romain Guy assertTrue(Point(1, 1) in r) 904896e241a506661acc8de574508636c14ba99805Romain Guy assertFalse(Point(5, 5) in r) 914896e241a506661acc8de574508636c14ba99805Romain Guy 924896e241a506661acc8de574508636c14ba99805Romain Guy val i = !r 934896e241a506661acc8de574508636c14ba99805Romain Guy assertFalse(Point(1, 1) in i) 944896e241a506661acc8de574508636c14ba99805Romain Guy assertTrue(Point(5, 5) in i) 954896e241a506661acc8de574508636c14ba99805Romain Guy } 964896e241a506661acc8de574508636c14ba99805Romain Guy 974896e241a506661acc8de574508636c14ba99805Romain Guy @Test fun orRect() { 984896e241a506661acc8de574508636c14ba99805Romain Guy val r = Region(0, 0, 4, 4) or Rect(2, 2, 6, 6) 994896e241a506661acc8de574508636c14ba99805Romain Guy assertFalse(Point(1, 1) in r) 1004896e241a506661acc8de574508636c14ba99805Romain Guy assertTrue(Point(3, 3) in r) 1014896e241a506661acc8de574508636c14ba99805Romain Guy } 1024896e241a506661acc8de574508636c14ba99805Romain Guy 1034896e241a506661acc8de574508636c14ba99805Romain Guy @Test fun orRegion() { 1044896e241a506661acc8de574508636c14ba99805Romain Guy val r = Region(0, 0, 4, 4) or Region(2, 2, 6, 6) 1054896e241a506661acc8de574508636c14ba99805Romain Guy assertFalse(Point(1, 1) in r) 1064896e241a506661acc8de574508636c14ba99805Romain Guy assertTrue(Point(3, 3) in r) 1074896e241a506661acc8de574508636c14ba99805Romain Guy } 1084896e241a506661acc8de574508636c14ba99805Romain Guy 1094896e241a506661acc8de574508636c14ba99805Romain Guy @Test fun xorRect() { 1104896e241a506661acc8de574508636c14ba99805Romain Guy val r = Region(0, 0, 4, 4) xor Rect(2, 2, 6, 6) 1114896e241a506661acc8de574508636c14ba99805Romain Guy assertFalse(Point(3, 3) in r) 1124896e241a506661acc8de574508636c14ba99805Romain Guy assertTrue(Point(1, 1) in r) 1134896e241a506661acc8de574508636c14ba99805Romain Guy } 1144896e241a506661acc8de574508636c14ba99805Romain Guy 1154896e241a506661acc8de574508636c14ba99805Romain Guy @Test fun xorRegion() { 1164896e241a506661acc8de574508636c14ba99805Romain Guy val r = Region(0, 0, 4, 4) xor Region(2, 2, 6, 6) 1174896e241a506661acc8de574508636c14ba99805Romain Guy assertFalse(Point(3, 3) in r) 1184896e241a506661acc8de574508636c14ba99805Romain Guy assertTrue(Point(1, 1) in r) 1194896e241a506661acc8de574508636c14ba99805Romain Guy } 120ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy 121ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy @Test fun iteratorForLoop() { 122ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy val region = Region(0, 0, 4, 4) - 123ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy Rect(2, 2, 6, 6) 124ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy var count = 0 125ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy var r = Rect() 126ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy for (rect in region) { 127ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy count++ 128ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy assertNotSame(r, rect) 129ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy r = rect 130ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy } 131ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy assertEquals(2, count) 132ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy } 133ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy 13404028515fbbdc3e80a28813a2f7ed1e21ac26e53Romain Guy @Test fun iteratorOutOfBounds() { 135ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy val region = Region(0, 0, 4, 4) - 136ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy Rect(2, 2, 6, 6) 137ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy val it = region.iterator() 138ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy it.next() 139ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy it.next() 14004028515fbbdc3e80a28813a2f7ed1e21ac26e53Romain Guy assertThrows<IndexOutOfBoundsException> { 14104028515fbbdc3e80a28813a2f7ed1e21ac26e53Romain Guy it.next() 14204028515fbbdc3e80a28813a2f7ed1e21ac26e53Romain Guy } 143ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy } 144ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy 145ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy @Test fun iteratorForEach() { 146ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy val region = Region(0, 0, 4, 4) - 147ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy Rect(2, 2, 6, 6) 148ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy var count = 0 149ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy var r = Rect() 150ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy region.forEach { 151ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy count++ 152ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy assertNotSame(r, it) 153ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy r = it 154ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy } 155ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy assertEquals(2, count) 156ad1ffc7bf89782ca4d987cb215ce048522db2149Romain Guy } 1574896e241a506661acc8de574508636c14ba99805Romain Guy} 158