Subversion Repositories mkgmap

Rev

Rev 2648 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
 * Copyright (c) 2012.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 3 as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * Author: GerdP
 */


package uk.me.parabola.mkgmap.reader.osm;


import org.junit.Test;
import static org.junit.Assert.*;

/**
 *
 */

public class CustomCollectionsTest {

        @Test
        public void testOSMId2ObjectMap() {
                testMap(new OSMId2ObjectMap<Long>(), 0L);
                testMap(new OSMId2ObjectMap<Long>(), -10000L);
                testMap(new OSMId2ObjectMap<Long>(), 1L << 35);
                testMap(new OSMId2ObjectMap<Long>(), -1L << 35);
        }

        private void testMap(OSMId2ObjectMap<Long> map, long idOffset) {
               
                for (long i = 1; i < 1000; i++) {
                        Long j = map.put(idOffset + i, new Long(i));
                        assertEquals(true, j == null);
                        assertEquals(map.size(), i);
                }

                for (long i = 1; i < 1000; i++) {
                        boolean b = map.containsKey(idOffset + i);
                        assertEquals(b, true);
                }


                for (long i = 1; i < 1000; i++) {
                        assertEquals((Long)map.get(idOffset + i), new Long(i));
                }

                // random read access
                for (long i = 1; i < 1000; i++) {
                        Long key = (long) Math.max(1, (Math.random() * 1000));
                        assertEquals((Long)map.get(idOffset + key), key);
                }

                for (long i = 1000; i < 2000; i++) {
                        assertEquals(true, (Long)map.get(idOffset + i) == null);
                }
               
                for (long i = 1000; i < 2000; i++) {
                        boolean b = map.containsKey(idOffset + i);
                        assertEquals(b, false);
                }
                for (long i = 1000; i < 1200; i++) {
                        Long j = map.put(idOffset + i, new Long(333));
                        assertEquals(true, j == null);
                        assertEquals(map.size(), i);
                }
                // random read access 2
                for (int i = 1; i < 1000; i++) {
                        Long key = 1000 + (long) (Math.random() * 200);
                        assertEquals((Long)map.get(idOffset + key), new Long(333));
                }


                for (long i = -2000; i < -1000; i++) {
                        assertEquals(true, map.get(idOffset + i) == null);
                }
                for (long i = -2000; i < -1000; i++) {
                        boolean b = map.containsKey(idOffset + i);
                        assertEquals(b, false);
                }
                long mapSize = map.size();
                // seq. update existing records
                for (int i = 1; i < 1000; i++) {
                        long j = map.put(idOffset + i, new Long (i+333));
                        assertEquals(j, i);
                        assertEquals(map.size(), mapSize);
                }
                // random read access 3, update existing entries
                for (int i = 1; i < 1000; i++) {
                        long j = map.put(idOffset + i, new Long (i+555));
                        assertEquals(true, j == i+333 | j == i+555);
                        assertEquals(map.size(), mapSize);
                }
                               
                assertEquals(true, map.get(idOffset + 123456) == null);
                map.put(idOffset + 123456, (long) 999);
                assertEquals((Long)map.get(idOffset + 123456), new Long(999));
                map.put(idOffset + 123456, (long) 888);
                assertEquals((Long)map.get(idOffset + 123456), new Long(888));

                assertEquals(true, map.get(idOffset - 123456) == null);
                map.put(idOffset - 123456, (long) 999);
                assertEquals((Long)map.get(idOffset - 123456), new Long(999));
                map.put(idOffset - 123456, (long) 888);
                assertEquals((Long)map.get(idOffset - 123456), new Long(888));
       
                map.clear();
                assertEquals(map.size(), 0);
                for (long i = 0; i < 100; i++){
                        map.put(idOffset + i, new Long(i));
                }
                Long old = map.remove(idOffset + 5);
                assertEquals(old, new Long(5));
                assertEquals(map.size(), 99);
                assertEquals(true, map.get(idOffset + 5) == null);
        }
       
}