/* * Copyright (C) 2007 The Guava Authors * * 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.common.collect; import static java.util.Arrays.asList; /** * Unit test for {@link ConcurrentHashMultiset}. * * @author Kevin Bourrillion * @author Jared Levy */ public abstract class AbstractConcurrentHashMultisetTest extends AbstractMultisetTest { // we don't support null @Override public void testToStringNull() {} // our entries are snapshots, not live views. at least for now. @Override public void testEntryAfterRemove() {} @Override public void testEntryAfterClear() {} @Override public void testEntryAfterEntrySetClear() {} @Override public void testEntryAfterEntrySetIteratorRemove() {} @Override public void testEntryAfterElementSetIteratorRemove() {} public void testCopyConstructor() { ms = ConcurrentHashMultiset.create(asList("a", "b", "a", "c")); assertEquals(4, ms.size()); assertEquals(2, ms.count("a")); assertEquals(1, ms.count("b")); assertEquals(1, ms.count("c")); } public void testSetCount() { ConcurrentHashMultiset<String> cms = ConcurrentHashMultiset.create(); cms.add("a", 2); cms.add("b", 3); try { cms.setCount("a", -1); fail(); } catch (IllegalArgumentException expected) {} assertEquals(2, cms.count("a")); assertEquals(2, cms.setCount("a", 0)); assertEquals(0, cms.count("a")); assertEquals(3, cms.setCount("b", 4)); assertEquals(4, cms.count("b")); assertEquals(0, cms.setCount("c", 5)); assertEquals(5, cms.count("c")); } public void testSetCountConditional() { ConcurrentHashMultiset<String> cms = ConcurrentHashMultiset.create(); cms.add("a", 2); cms.add("b", 3); try { cms.setCount("a", -1, 1); fail(); } catch (IllegalArgumentException expected) {} try { cms.setCount("a", 1, -1); fail(); } catch (IllegalArgumentException expected) {} assertEquals(2, cms.count("a")); assertTrue(cms.setCount("c", 0, 0)); assertEquals(0, cms.count("c")); assertFalse(cms.setCount("c", 1, 0)); assertEquals(0, cms.count("c")); assertFalse(cms.setCount("a", 0, 0)); assertEquals(2, cms.count("a")); assertFalse(cms.setCount("a", 1, 0)); assertEquals(2, cms.count("a")); assertTrue(cms.setCount("a", 2, 0)); assertEquals(0, cms.count("a")); assertTrue(cms.setCount("d", 0, 4)); assertEquals(4, cms.count("d")); assertFalse(cms.setCount("b", 0, 5)); assertEquals(3, cms.count("b")); assertFalse(cms.setCount("b", 1, 5)); assertEquals(3, cms.count("b")); assertTrue(cms.setCount("b", 3, 5)); assertEquals(5, cms.count("b")); } public void testRemoveExactly() { ConcurrentHashMultiset<String> cms = ConcurrentHashMultiset.create(); cms.add("a", 2); cms.add("b", 3); try { cms.removeExactly("a", -2); } catch (IllegalArgumentException expected) {} assertTrue(cms.removeExactly("a", 0)); assertEquals(2, cms.count("a")); assertTrue(cms.removeExactly("c", 0)); assertEquals(0, cms.count("c")); assertFalse(cms.removeExactly("a", 4)); assertEquals(2, cms.count("a")); assertTrue(cms.removeExactly("a", 2)); assertEquals(0, cms.count("a")); assertTrue(cms.removeExactly("b", 2)); assertEquals(1, cms.count("b")); } }