Skip to content

Commit

Permalink
Merge pull request #245 from hypest/equals-for-cluster-subclasses
Browse files Browse the repository at this point in the history
Equals for cluster subclasses
  • Loading branch information
markmcd committed Feb 21, 2016
2 parents 8d39220 + e64c52a commit aa32533
Show file tree
Hide file tree
Showing 5 changed files with 146 additions and 2 deletions.
1 change: 1 addition & 0 deletions CONTRIBUTORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@
* Mihai Preda, https://github.com/preda
* Iris Uy, https://github.com/irisu
* Emma Yeap, https://github.com/microcat
* Stefanos Togoulidis, https://github.com/hypest
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,13 @@ public void clearItems() {

@Override
public void removeItem(T item) {
// TODO: delegate QuadItem#hashCode and QuadItem#equals to its item.
throw new UnsupportedOperationException("NonHierarchicalDistanceBasedAlgorithm.remove not implemented");
// QuadItem delegates hashcode() and equals() to its item so,
// removing any QuadItem to that item will remove the item
final QuadItem<T> quadItem = new QuadItem<T>(item);
synchronized (mQuadTree) {
mItems.remove(quadItem);
mQuadTree.remove(quadItem);
}
}

@Override
Expand Down Expand Up @@ -199,5 +204,19 @@ public Set<T> getItems() {
public int getSize() {
return 1;
}

@Override
public int hashCode() {
return mClusterItem.hashCode();
};

@Override
public boolean equals(Object other) {
if (!(other instanceof QuadItem<?>)) {
return false;
}

return ((QuadItem<?>) other).mClusterItem.equals(mClusterItem);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -65,4 +65,19 @@ public String toString() {
", mItems.size=" + mItems.size() +
'}';
}

@Override
public int hashCode() {
return mCenter.hashCode() + mItems.hashCode();
};

@Override
public boolean equals(Object other) {
if (!(other instanceof StaticCluster<?>)) {
return false;
}

return ((StaticCluster<?>) other).mCenter.equals(mCenter)
&& ((StaticCluster<?>) other).mItems.equals(mItems);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
/*
* Copyright 2015 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.google.maps.android.clustering;

import com.google.android.gms.maps.model.LatLng;
import com.google.maps.android.clustering.algo.NonHierarchicalDistanceBasedAlgorithm;

import junit.framework.TestCase;

public class QuadItemTest extends TestCase {

public class TestingItem implements ClusterItem {
private final LatLng mPosition;

public TestingItem(double lat, double lng) {
mPosition = new LatLng(lat, lng);
}

@Override
public LatLng getPosition() {
return mPosition;
}
}

public void setUp() {
// nothing to setup
}

public void testRemoval() {
TestingItem item_1_5 = new TestingItem(0.1, 0.5);
TestingItem item_2_3 = new TestingItem(0.2, 0.3);

NonHierarchicalDistanceBasedAlgorithm<ClusterItem> algo
= new NonHierarchicalDistanceBasedAlgorithm<ClusterItem>();
algo.addItem(item_1_5);
algo.addItem(item_2_3);

assertEquals(2, algo.getItems().size());

algo.removeItem(item_1_5);

assertEquals(1, algo.getItems().size());

assertFalse(algo.getItems().contains(item_1_5));
assertTrue(algo.getItems().contains(item_2_3));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/*
* Copyright 2015 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.google.maps.android.clustering;

import com.google.android.gms.maps.model.LatLng;
import com.google.maps.android.clustering.algo.StaticCluster;

import junit.framework.TestCase;

public class StaticClusterTest extends TestCase {

private StaticCluster<ClusterItem> mCluster;

public void setUp() {
mCluster = new StaticCluster<ClusterItem>(new LatLng(0.1, 0.5));
}

public void testEquality() {
StaticCluster<ClusterItem> cluster_1_5 = new StaticCluster<ClusterItem>(
new LatLng(0.1, 0.5));

assertEquals(cluster_1_5, mCluster);
assertNotSame(cluster_1_5, mCluster);
assertEquals(cluster_1_5.hashCode(), mCluster.hashCode());
}

public void testUnequality() {
StaticCluster<ClusterItem> cluster_2_3 = new StaticCluster<ClusterItem>(
new LatLng(0.2, 0.3));

assertFalse(mCluster.equals(cluster_2_3));
assertFalse(cluster_2_3.hashCode() == mCluster.hashCode());
}
}

0 comments on commit aa32533

Please sign in to comment.