+++ /dev/null
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 org.apache.lucene.analysis;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.Map;
-
-import org.apache.lucene.util.LuceneTestCase;
-
-public class TestCharArrayMap extends LuceneTestCase {
-
- public void doRandom(int iter, boolean ignoreCase) {
- CharArrayMap<Integer> map = new CharArrayMap<Integer>(TEST_VERSION_CURRENT, 1, ignoreCase);
- HashMap<String,Integer> hmap = new HashMap<String,Integer>();
-
- char[] key;
- for (int i=0; i<iter; i++) {
- int len = random.nextInt(5);
- key = new char[len];
- for (int j=0; j<key.length; j++) {
- key[j] = (char)random.nextInt(127);
- }
- String keyStr = new String(key);
- String hmapKey = ignoreCase ? keyStr.toLowerCase(Locale.ENGLISH) : keyStr;
-
- int val = random.nextInt();
-
- Object o1 = map.put(key, val);
- Object o2 = hmap.put(hmapKey,val);
- assertEquals(o1,o2);
-
- // add it again with the string method
- assertEquals(val, map.put(keyStr,val).intValue());
-
- assertEquals(val, map.get(key,0,key.length).intValue());
- assertEquals(val, map.get(key).intValue());
- assertEquals(val, map.get(keyStr).intValue());
-
- assertEquals(hmap.size(), map.size());
- }
- }
-
- public void testCharArrayMap() {
- int num = 5 * RANDOM_MULTIPLIER;
- for (int i = 0; i < num; i++) { // pump this up for more random testing
- doRandom(1000,false);
- doRandom(1000,true);
- }
- }
-
- public void testMethods() {
- CharArrayMap<Integer> cm = new CharArrayMap<Integer>(TEST_VERSION_CURRENT, 2, false);
- HashMap<String,Integer> hm = new HashMap<String,Integer>();
- hm.put("foo",1);
- hm.put("bar",2);
- cm.putAll(hm);
- assertEquals(hm.size(), cm.size());
- hm.put("baz", 3);
- cm.putAll(hm);
- assertEquals(hm.size(), cm.size());
-
- CharArraySet cs = cm.keySet();
- int n=0;
- for (Object o : cs) {
- assertTrue(cm.containsKey(o));
- char[] co = (char[]) o;
- assertTrue(cm.containsKey(co, 0, co.length));
- n++;
- }
- assertEquals(hm.size(), n);
- assertEquals(hm.size(), cs.size());
- assertEquals(cm.size(), cs.size());
- cs.clear();
- assertEquals(0, cs.size());
- assertEquals(0, cm.size());
- try {
- cs.add("test");
- fail("keySet() allows adding new keys");
- } catch (UnsupportedOperationException ue) {
- // pass
- }
- cm.putAll(hm);
- assertEquals(hm.size(), cs.size());
- assertEquals(cm.size(), cs.size());
-
- Iterator<Map.Entry<Object,Integer>> iter1 = cm.entrySet().iterator();
- n=0;
- while (iter1.hasNext()) {
- Map.Entry<Object,Integer> entry = iter1.next();
- Object key = entry.getKey();
- Integer val = entry.getValue();
- assertEquals(cm.get(key), val);
- entry.setValue(val*100);
- assertEquals(val*100, (int)cm.get(key));
- n++;
- }
- assertEquals(hm.size(), n);
- cm.clear();
- cm.putAll(hm);
- assertEquals(cm.size(), n);
-
- CharArrayMap<Integer>.EntryIterator iter2 = cm.entrySet().iterator();
- n=0;
- while (iter2.hasNext()) {
- char[] keyc = iter2.nextKey();
- Integer val = iter2.currentValue();
- assertEquals(hm.get(new String(keyc)), val);
- iter2.setValue(val*100);
- assertEquals(val*100, (int)cm.get(keyc));
- n++;
- }
- assertEquals(hm.size(), n);
-
- cm.entrySet().clear();
- assertEquals(0, cm.size());
- assertEquals(0, cm.entrySet().size());
- assertTrue(cm.isEmpty());
- }
-
- public void testModifyOnUnmodifiable(){
- CharArrayMap<Integer> map = new CharArrayMap<Integer>(TEST_VERSION_CURRENT, 2, false);
- map.put("foo",1);
- map.put("bar",2);
- final int size = map.size();
- assertEquals(2, size);
- assertTrue(map.containsKey("foo"));
- assertEquals(1, map.get("foo").intValue());
- assertTrue(map.containsKey("bar"));
- assertEquals(2, map.get("bar").intValue());
-
- map = CharArrayMap.unmodifiableMap(map);
- assertEquals("Map size changed due to unmodifiableMap call" , size, map.size());
- String NOT_IN_MAP = "SirGallahad";
- assertFalse("Test String already exists in map", map.containsKey(NOT_IN_MAP));
- assertNull("Test String already exists in map", map.get(NOT_IN_MAP));
-
- try{
- map.put(NOT_IN_MAP.toCharArray(), 3);
- fail("Modified unmodifiable map");
- }catch (UnsupportedOperationException e) {
- // expected
- assertFalse("Test String has been added to unmodifiable map", map.containsKey(NOT_IN_MAP));
- assertNull("Test String has been added to unmodifiable map", map.get(NOT_IN_MAP));
- assertEquals("Size of unmodifiable map has changed", size, map.size());
- }
-
- try{
- map.put(NOT_IN_MAP, 3);
- fail("Modified unmodifiable map");
- }catch (UnsupportedOperationException e) {
- // expected
- assertFalse("Test String has been added to unmodifiable map", map.containsKey(NOT_IN_MAP));
- assertNull("Test String has been added to unmodifiable map", map.get(NOT_IN_MAP));
- assertEquals("Size of unmodifiable map has changed", size, map.size());
- }
-
- try{
- map.put(new StringBuilder(NOT_IN_MAP), 3);
- fail("Modified unmodifiable map");
- }catch (UnsupportedOperationException e) {
- // expected
- assertFalse("Test String has been added to unmodifiable map", map.containsKey(NOT_IN_MAP));
- assertNull("Test String has been added to unmodifiable map", map.get(NOT_IN_MAP));
- assertEquals("Size of unmodifiable map has changed", size, map.size());
- }
-
- try{
- map.clear();
- fail("Modified unmodifiable map");
- }catch (UnsupportedOperationException e) {
- // expected
- assertEquals("Size of unmodifiable map has changed", size, map.size());
- }
-
- try{
- map.entrySet().clear();
- fail("Modified unmodifiable map");
- }catch (UnsupportedOperationException e) {
- // expected
- assertEquals("Size of unmodifiable map has changed", size, map.size());
- }
-
- try{
- map.keySet().clear();
- fail("Modified unmodifiable map");
- }catch (UnsupportedOperationException e) {
- // expected
- assertEquals("Size of unmodifiable map has changed", size, map.size());
- }
-
- try{
- map.put((Object) NOT_IN_MAP, 3);
- fail("Modified unmodifiable map");
- }catch (UnsupportedOperationException e) {
- // expected
- assertFalse("Test String has been added to unmodifiable map", map.containsKey(NOT_IN_MAP));
- assertNull("Test String has been added to unmodifiable map", map.get(NOT_IN_MAP));
- assertEquals("Size of unmodifiable map has changed", size, map.size());
- }
-
- try{
- map.putAll(Collections.singletonMap(NOT_IN_MAP, 3));
- fail("Modified unmodifiable map");
- }catch (UnsupportedOperationException e) {
- // expected
- assertFalse("Test String has been added to unmodifiable map", map.containsKey(NOT_IN_MAP));
- assertNull("Test String has been added to unmodifiable map", map.get(NOT_IN_MAP));
- assertEquals("Size of unmodifiable map has changed", size, map.size());
- }
-
- assertTrue(map.containsKey("foo"));
- assertEquals(1, map.get("foo").intValue());
- assertTrue(map.containsKey("bar"));
- assertEquals(2, map.get("bar").intValue());
- }
-
- public void testToString() {
- CharArrayMap<Integer> cm = new CharArrayMap<Integer>(TEST_VERSION_CURRENT, Collections.singletonMap("test",1), false);
- assertEquals("[test]",cm.keySet().toString());
- assertEquals("[1]",cm.values().toString());
- assertEquals("[test=1]",cm.entrySet().toString());
- assertEquals("{test=1}",cm.toString());
- cm.put("test2", 2);
- assertTrue(cm.keySet().toString().contains(", "));
- assertTrue(cm.values().toString().contains(", "));
- assertTrue(cm.entrySet().toString().contains(", "));
- assertTrue(cm.toString().contains(", "));
- }
-}
-