Subversion Repositories mkgmap

Rev

Rev 4609 | 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<>(), 0L);
                testMap(new OSMId2ObjectMap<>(), -10000L);
                testMap(new OSMId2ObjectMap<>(), 1L << 35);
                testMap(new OSMId2ObjectMap<>(), -1L << 35);
        }

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

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


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

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

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

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

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