Skip to content

Commit

Permalink
7903328: Introduce a new method 'clear' in interface 'Multiset'
Browse files Browse the repository at this point in the history
Reviewed-by: shade
  • Loading branch information
lgxbslgx authored and shipilev committed Sep 26, 2022
1 parent c1b3e75 commit fbcc4ac
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 3 deletions.
Expand Up @@ -309,7 +309,7 @@ public static synchronized void startChurnProfile() {
throw new IllegalStateException("Churn profile already started");
}
started = true;
churn = new HashMultiset<>();
churn.clear();
try {
for (GarbageCollectorMXBean bean : ManagementFactory.getGarbageCollectorMXBeans()) {
((NotificationEmitter) bean).addNotificationListener(listener, null, null);
Expand Down
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand Down Expand Up @@ -105,4 +105,10 @@ public int hashCode() {
result = 31 * result + (int) (size ^ (size >>> 32));
return result;
}

@Override
public void clear() {
size = 0;
map.clear();
}
}
7 changes: 6 additions & 1 deletion jmh-core/src/main/java/org/openjdk/jmh/util/Multiset.java
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 2022, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand Down Expand Up @@ -82,4 +82,9 @@ public interface Multiset<T> {
* @return the collections of keys
*/
Collection<T> keys();

/**
* Remove all the elements.
*/
void clear();
}
59 changes: 59 additions & 0 deletions jmh-core/src/test/java/org/openjdk/jmh/util/MultisetTest.java
@@ -0,0 +1,59 @@
/*
* Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package org.openjdk.jmh.util;

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

public class MultisetTest {
@Test
public void testClear() {
Multiset<String> set = new HashMultiset<>();
set.add("one");
set.add("two", 2);
assertFalse(set.isEmpty());
assertEquals(3, set.size());
assertEquals(2, set.keys().size());
assertEquals(1, set.count("one"));
assertEquals(2, set.count("two"));

// clear the set
set.clear();
assertTrue(set.isEmpty());
assertEquals(0, set.size());
assertEquals(0, set.keys().size());
assertEquals(0, set.count("one"));
assertEquals(0, set.count("two"));

// reuse the set
set.add("one");
set.add("two", 2);
assertFalse(set.isEmpty());
assertEquals(3, set.size());
assertEquals(2, set.keys().size());
assertEquals(1, set.count("one"));
assertEquals(2, set.count("two"));
}
}

0 comments on commit fbcc4ac

Please sign in to comment.