| 93 | |
| 94 | /** |
| 95 | * Test handling of objects with invalid bbox |
| 96 | * @throws Exception |
| 97 | */ |
| 98 | @Test |
| 99 | public void testSpecialBBox() throws Exception { |
| 100 | QuadBuckets<Node> qbNodes = new QuadBuckets<>(); |
| 101 | QuadBuckets<Way> qbWays = new QuadBuckets<>(); |
| 102 | Way w1 = new Way(1); |
| 103 | Way w2 = new Way(2); |
| 104 | Way w3 = new Way(3); |
| 105 | Node n1 = new Node(1); |
| 106 | Node n2 = new Node(2); n2.setCoor(new LatLon(10, 20)); |
| 107 | Node n3 = new Node(3); n2.setCoor(new LatLon(20, 30)); |
| 108 | w2.setNodes(Arrays.asList(n1)); |
| 109 | w3.setNodes(Arrays.asList(n1, n2, n3)); |
| 110 | |
| 111 | qbNodes.add(n1); |
| 112 | qbNodes.add(n2); |
| 113 | Assert.assertEquals(2, qbNodes.size()); |
| 114 | Assert.assertTrue(qbNodes.contains(n1)); |
| 115 | Assert.assertTrue(qbNodes.contains(n2)); |
| 116 | Assert.assertFalse(qbNodes.contains(n3)); |
| 117 | qbNodes.remove(n1); |
| 118 | Assert.assertEquals(1, qbNodes.size()); |
| 119 | Assert.assertFalse(qbNodes.contains(n1)); |
| 120 | Assert.assertTrue(qbNodes.contains(n2)); |
| 121 | qbNodes.remove(n2); |
| 122 | Assert.assertEquals(0, qbNodes.size()); |
| 123 | Assert.assertFalse(qbNodes.contains(n1)); |
| 124 | Assert.assertFalse(qbNodes.contains(n2)); |
| 125 | |
| 126 | qbNodes.addAll(Arrays.asList(n1, n2, n3)); |
| 127 | qbNodes.removeAll(Arrays.asList(n1, n3)); |
| 128 | Assert.assertEquals(1, qbNodes.size()); |
| 129 | Assert.assertTrue(qbNodes.contains(n2)); |
| 130 | |
| 131 | qbWays.add(w1); |
| 132 | qbWays.add(w2); |
| 133 | qbWays.add(w3); |
| 134 | Assert.assertEquals(3, qbWays.size()); |
| 135 | Assert.assertTrue(qbWays.contains(w1)); |
| 136 | Assert.assertTrue(qbWays.contains(w2)); |
| 137 | Assert.assertTrue(qbWays.contains(w3)); |
| 138 | qbWays.remove(w1); |
| 139 | Assert.assertEquals(2, qbWays.size()); |
| 140 | Assert.assertFalse(qbWays.contains(w1)); |
| 141 | Assert.assertTrue(qbWays.contains(w2)); |
| 142 | Assert.assertTrue(qbWays.contains(w3)); |
| 143 | qbWays.remove(w2); |
| 144 | Assert.assertEquals(1, qbWays.size()); |
| 145 | Assert.assertFalse(qbWays.contains(w1)); |
| 146 | Assert.assertFalse(qbWays.contains(w2)); |
| 147 | Assert.assertTrue(qbWays.contains(w3)); |
| 148 | qbWays.remove(w3); |
| 149 | Assert.assertEquals(0, qbWays.size()); |
| 150 | Assert.assertFalse(qbWays.contains(w1)); |
| 151 | Assert.assertFalse(qbWays.contains(w2)); |
| 152 | Assert.assertFalse(qbWays.contains(w3)); |
| 153 | |
| 154 | qbWays.clear(); |
| 155 | Assert.assertEquals(0, qbWays.size()); |
| 156 | List<Way> allWays = new ArrayList<>(Arrays.asList(w1, w2, w3)); |
| 157 | qbWays.addAll(allWays); |
| 158 | Assert.assertEquals(3, qbWays.size()); |
| 159 | int count = 0; |
| 160 | for (Way w : qbWays) { |
| 161 | Assert.assertTrue(allWays.contains(w)); |
| 162 | count++; |
| 163 | } |
| 164 | Assert.assertEquals(3, count); |
| 165 | // test remove with iterator |
| 166 | Iterator<Way> iter = qbWays.iterator(); |
| 167 | while (iter.hasNext()) { |
| 168 | iter.next(); |
| 169 | iter.remove(); |
| 170 | count--; |
| 171 | Assert.assertEquals(count, qbWays.size()); |
| 172 | } |
| 173 | Assert.assertEquals(0, qbWays.size()); |
| 174 | } |