package org.ultramine.regions import spock.lang.Specification class RegionMapTest extends Specification { def "Test add, get and remove for one region"() { setup: RegionMap map = new RegionMap(); IRegion region = Mock(IRegion); region.getShape() >> {new Rectangle(-500, -500, -500, 1000, 1000, 1000)} map.add(region); expect: map.get(new BlockPos(0, 0, 0)) == region map.get(new BlockPos(-500, -500, -500)) == region map.get(new BlockPos(1000, 1000, 1000)) == region map.get(new BlockPos(1001, 1000, 1000)) == null when: map.remove(region) then: map.map.isEmpty() } def "Test add, get and remove for two regions without intersects"() { setup: RegionMap map = new RegionMap(); IRegion region1 = Mock(IRegion); region1.getShape() >> {new Rectangle(0, 0, 0, 150, 150, 150)} IRegion region2 = Mock(IRegion); region2.getShape() >> {new Rectangle(151, 0, 0, 350, 350, 350)} map.add(region1); map.add(region2); expect: map.get(new BlockPos(150, 0, 0)) == region1 map.get(new BlockPos(151, 0, 0)) == region2 map.get(new BlockPos(151, 0, 351)) == null when: map.remove(region1) map.remove(region2) then: map.map.isEmpty() } def "Test add, get and remove for two regions with intersects"() { setup: RegionMap map = new RegionMap(); IRegion region1 = Mock(IRegion); region1.getShape() >> {new Rectangle(0, 0, 0, 150, 150, 150)} IRegion region2 = Mock(IRegion); region2.getShape() >> {new Rectangle(1, 1, 1, 140, 140, 140)} region1.getChildren() >> {Arrays.asList(region2)} map.add(region1); map.add(region2); expect: map.get(new BlockPos(130, 130, 130)) == region2 map.get(new BlockPos(141, 141, 141)) == region1 when: map.remove(region1) map.remove(region2) then: map.map.isEmpty() } def "Test getInRange for two regions without intersects"() { setup: RegionMap map = new RegionMap(); IRegion region1 = Mock(IRegion); region1.getShape() >> {new Rectangle(0, 0, 0, 150, 150, 150)} IRegion region2 = Mock(IRegion); region2.getShape() >> {new Rectangle(151, 0, 0, 350, 350, 350)} map.add(region1); map.add(region2); expect: map.getInRange(new Rectangle(0, 0, 0, 1, 1, 1)) == [region1] as Set map.getInRange(new Rectangle(0, 0, 0, 151, 1, 1)) == [region1, region2] as Set map.getInRange(new Rectangle(151, 0, 0, 152, 1, 1)) == [region2] as Set map.getInRange(new Rectangle(351, 0, 0, 352, 1, 1)) == [] as Set } }