import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.Collection; import java.util.Set; import org.junit.Assert; import org.junit.Test; import de.blau.android.exception.OsmException; import de.blau.android.osm.BoundingBox; import de.blau.android.osm.Node; import de.blau.android.osm.OsmElement; import de.blau.android.osm.OsmElementFactory; import de.blau.android.util.collections.LongHashSet; import de.blau.android.util.collections.LongOsmElementMap; import de.blau.android.util.collections.MultiHashMap; import de.blau.android.util.rtree.BoundedObject; import de.blau.android.util.rtree.RTree; public class CollectionTest { @Test public void hashmap() { LongOsmElementMap<Node> map = new LongOsmElementMap<Node>(10000); ArrayList<Node>elements = new ArrayList<Node>(100000); for (int i=0;i<100000;i++) { elements.add(OsmElementFactory.createNode((long) (Math.random()*Long.MAX_VALUE), 1L, OsmElement.STATE_CREATED, 0, 0)); } for (int i=0;i<100000;i++) { Node n = elements.get(i); map.put(n.getOsmId(), n); } for (int i=0;i<100000;i++) { assertTrue(map.containsKey(elements.get(i).getOsmId())); } for (int i=0;i<100000;i++) { assertNotNull(map.remove(elements.get(i).getOsmId())); } assertTrue(map.isEmpty()); } @Test public void hashset() { LongHashSet set = new LongHashSet(10000); long[] l = new long[100000]; for (int i=0;i<100000;i++) { l[i] = (long) ((Math.random()-0.5D)*2*Long.MAX_VALUE); } for (int i=0;i<100000;i++) { set.put(l[i]); } for (int i=0;i<100000;i++) { assertTrue(set.contains(l[i])); } for (int i=0;i<100000;i++) { assertTrue(set.remove(l[i])); } assertTrue(set.isEmpty()); } @Test public void rtree() { final double MAX = BoundingBox.MAX_LAT_E7; RTree tree = new RTree(2,100); final int NODES = 10000; Node[] temp = new Node[NODES]; for (long i=0;i<NODES;i++) { temp[(int) i]= OsmElementFactory.createNode(i, 1L, OsmElement.STATE_CREATED,(int)(Math.random()*MAX), (int)(Math.random()*MAX)); } long start = System.currentTimeMillis(); for (long i=0;i<NODES;i++) { tree.insert(temp[(int) i]); } System.out.println("Node insertion " + (System.currentTimeMillis()-start)); for (int i=0;i<NODES;i++) { Collection<BoundedObject>result = new ArrayList<BoundedObject>(); BoundingBox b = null; // create a small bounding box around the Node and query that, since contains doesn't seem to work for Nodes try { b = new BoundingBox(temp[i].getLon()-1,temp[i].getLat()-1,temp[i].getLon()+1,temp[i].getLat()+1); } catch (OsmException e) { fail("BoundingBox creation failed with " + e); } tree.query(result, b); assertTrue(result.contains(temp[i])); } assertEquals(NODES,tree.count()); // currently contains and remove doesn't work for nodes // for (long i=0;i<NODES;i++) { // assertTrue(tree.contains(temp[(int) i])); // } // for (long i=0;i<NODES;i++) { // tree.remove(temp[(int) i]); // } // assertEquals(0,tree.count()); } @Test public void multihashmap() { MultiHashMap<String,String> map = new MultiHashMap<String,String>(); map.add("A", "1"); map.add("A", "2"); map.add("M", "3"); Set<String> r = map.get("A"); Assert.assertTrue(r.size()==2); Assert.assertTrue(r.contains("1")); Assert.assertTrue(r.contains("2")); r = map.get("M"); Assert.assertTrue(r.size()==1); Assert.assertTrue(r.contains("3")); } }