blob: e8fc5b0d4a737bd2fa588f4a59e12e2d5ff57682 [file] [log] [blame]
/*****************************************************************************
* Copyright (c) 2020 Dirk Fauth.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Dirk Fauth <dirk.fauth@googlemail.com> - Initial API and implementation
*
*****************************************************************************/
package org.eclipse.nebula.widgets.nattable.test.performance;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import org.eclipse.collections.api.factory.Maps;
import org.eclipse.collections.api.list.primitive.MutableIntList;
import org.eclipse.collections.api.map.MutableMap;
import org.eclipse.collections.api.map.primitive.MutableIntIntMap;
import org.eclipse.collections.api.set.primitive.MutableIntSet;
import org.eclipse.collections.api.tuple.primitive.IntIntPair;
import org.eclipse.collections.impl.factory.primitive.IntIntMaps;
import org.eclipse.collections.impl.factory.primitive.IntLists;
import org.eclipse.collections.impl.factory.primitive.IntSets;
import org.eclipse.nebula.widgets.nattable.util.ArrayUtil;
public class CollectionsBenchmark {
public static final int ITERATIONS = 100;
MutableMap<String, MutableIntSet> hidden = Maps.mutable.empty();
MutableIntIntMap map = IntIntMaps.mutable.empty();
public static void main(String[] args) {
CollectionsBenchmark benchmark = new CollectionsBenchmark();
benchmark.startBenchmark();
}
CollectionsBenchmark() {
this.hidden.put("Test1", IntSets.mutable.ofAll(IntStream.range(0, 100_000))); //$NON-NLS-1$
this.hidden.put("Test2", IntSets.mutable.ofAll(IntStream.range(100_001, 200_000))); //$NON-NLS-1$
this.hidden.put("Test3", IntSets.mutable.ofAll(IntStream.range(200_000, 300_000))); //$NON-NLS-1$
this.hidden.put("Test4", IntSets.mutable.ofAll(IntStream.range(300_000, 400_000))); //$NON-NLS-1$
this.hidden.put("Test5", IntSets.mutable.ofAll(IntStream.range(400_000, 500_000))); //$NON-NLS-1$
for (int i = 0; i < 1_000_000; i++) {
this.map.put(i, i * 2);
}
}
public void startBenchmark() {
// rampUp to remove class loading from performance measure
findByContains(this.hidden, 1, true);
findByCollections(this.hidden, 1, true);
flattenByIterationSet(this.hidden, true);
flattenByIterationList(this.hidden, true);
sumAndMaxByIteration(this.map, true);
int[] valuesArray = createPrimitiveValuesArrayForEach();
int[] valuesFromIntStream = createPrimitiveValuesArrayIntStream();
if (!Arrays.equals(valuesArray, valuesFromIntStream)) {
System.err.println("Primitive input not equal");
}
List<Integer> valuesList = createWrapperValuesForEach();
List<Integer> wrapperFromStream = createWrapperValuesIntStream();
if (!valuesList.equals(wrapperFromStream)) {
System.err.println("Wrapper input not equal");
}
Set<Integer> valueHashSetWrapper = createWrapperValueHashSetForEach();
Set<Integer> valueTreeSetWrapper = createWrapperValueTreeSetForEach();
Set<Integer> wrapperHashSetFromStream = createWrapperValueHashSetIntStream();
if (!valueHashSetWrapper.equals(wrapperHashSetFromStream) || !valueHashSetWrapper.equals(valueTreeSetWrapper)) {
System.err.println("Wrapper input not equal");
}
System.out.println();
createEclipseCollectionsListIteration();
createEclipseCollectionsListOf(valuesArray);
createEclipseCollectionsListIntegerCollection(valuesList);
createEclipseCollectionsListIntStream();
System.out.println();
createEclipseCollectionsSetIteration();
createEclipseCollectionsSetOf(valuesArray);
createEclipseCollectionsSetIntegerCollection(valuesList);
createEclipseCollectionsSetIntStream();
System.out.println();
System.out.println("Check value is contained");
boolean c1 = containsInList(valuesList, 450_000, false);
HashSet<Integer> valueSet = new HashSet<>(valuesList);
boolean c2 = containsInSet(valueSet, 450_000, false);
boolean c3 = containsInPrimitive(valuesArray, 450_000, false);
boolean c4 = containsInPrimitiveIteration(valuesArray, 450_000, false);
boolean c5 = containsInArrayBinarySearch(valuesArray, 450_000, false);
MutableIntList valuesIntList = IntLists.mutable.of(Arrays.copyOf(valuesArray, valuesArray.length));
boolean c6 = containsInMutableIntList(valuesIntList, 450_000, false);
MutableIntSet valuesIntSet = IntSets.mutable.of(Arrays.copyOf(valuesArray, valuesArray.length));
boolean c7 = containsInMutableIntSet(valuesIntSet, 450_000, false);
if (!c1 || !c2 || !c3 || !c4 || !c5 || !c6 || !c7) {
System.err.println("value not contained");
}
System.out.println();
System.out.println("Check value is not contained");
c1 = containsInList(valuesList, 2_000_000, false);
c2 = containsInSet(valueSet, 2_000_000, false);
c3 = containsInPrimitive(valuesArray, 2_000_000, false);
c4 = containsInPrimitiveIteration(valuesArray, 2_000_000, false);
c5 = containsInArrayBinarySearch(valuesArray, 2_000_000, false);
c6 = containsInMutableIntList(valuesIntList, 2_000_000, false);
c7 = containsInMutableIntSet(valuesIntSet, 2_000_000, false);
if (c1 || c2 || c3 || c4 || c5 || c6 || c7) {
System.err.println("value contained");
}
System.out.println();
System.out.println("Check indexOf() 450_000");
int i1 = indexOfInCollection(valuesList, 450_000, false);
int i2 = indexOfInPrimitiveIteration(valuesArray, 450_000, false);
int i3 = indexOfInMutableIntList(valuesIntList, 450_000, false);
if ((i1 != i2) || (i2 != i3) || (i3 != 449_996)) {
System.err.println("indexOf failed");
}
System.out.println();
System.out.println("Check indexOf() 2_000_000");
i1 = indexOfInCollection(valuesList, 2_000_000, false);
i2 = indexOfInPrimitiveIteration(valuesArray, 2_000_000, false);
i3 = indexOfInMutableIntList(valuesIntList, 2_000_000, false);
if ((i1 != i2) || (i2 != i3) || (i3 != -1)) {
System.err.println("indexOf failed");
}
System.out.println();
System.out.println("Remove Performance Tests"); //$NON-NLS-1$
int[] toRemove = new int[100_000];
for (int i = 0; i < 100_000; i++) {
toRemove[i] = i + 200_000;
}
// This one is really slow, so we disable it here
int[] dataArray = IntStream.range(0, 1_000_000).unordered().toArray();
// List<Integer> dataList = IntStream.range(0,
// 1_000_000).unordered().boxed().collect(Collectors.toList());
Set<Integer> dataSet = IntStream.range(0, 1_000_000).unordered().boxed().collect(Collectors.toSet());
MutableIntList dataIntList = IntLists.mutable.ofAll(IntStream.range(0, 1_000_000).unordered());
MutableIntSet dataIntSet = IntSets.mutable.ofAll(IntStream.range(0, 1_000_000).unordered());
removeAllByStream(dataArray, toRemove, false);
// removeAllByIterationList(dataList, toRemove, false);
// removeAllList(dataList, toRemove, false);
removeAllByIterationSet(dataSet, toRemove, false);
removeAllSet(dataSet, toRemove, false);
// This one is really slow, so we disable it here
// removeAllByIterationMutableIntList(dataIntList, toRemove, false);
removeAllMutableIntList(dataIntList, toRemove, false);
removeAllByIterationMutableIntSet(dataIntSet, toRemove, false);
removeAllMutableIntSet(dataIntSet, toRemove, false);
System.out.println();
boolean findByContains = findByContains(this.hidden, 100_000, false);
boolean findByCollections = findByCollections(this.hidden, 100_000, false);
if (findByContains || findByCollections) {
System.err.println("non-existing value was found");
}
findByContains = findByContains(this.hidden, 450_000, false);
findByCollections = findByCollections(this.hidden, 450_000, false);
if (!findByContains || !findByCollections) {
System.err.println("value was not found");
}
System.out.println();
flattenByIterationSet(this.hidden, false);
flattenByIterationList(this.hidden, false);
System.out.println();
System.out.println("Sum and max Performance Tests"); //$NON-NLS-1$
int[] result1 = sumAndMaxByIteration(this.map, false);
int[] result2 = sumAndMax(this.map, false);
if (!Arrays.equals(result1, result2)) {
System.out.println("result is not equal");
}
}
private int[] createPrimitiveValuesArrayForEach() {
int sum = 0;
int[] values = null;
for (int j = 0; j < ITERATIONS; j++) {
long start = System.currentTimeMillis();
values = new int[999_991];
int index = 0;
for (int i = 0; i < 1_000_000; i++) {
if (i == 0 || i % 100_000 != 0) {
values[index] = i;
index++;
}
}
long end = System.currentTimeMillis();
sum += (end - start);
}
System.out.println("collecting int[] via for-loop\t\t\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
return values;
}
private int[] createPrimitiveValuesArrayIntStream() {
int sum = 0;
int[] values = null;
for (int j = 0; j < ITERATIONS; j++) {
long start = System.currentTimeMillis();
values = IntStream.range(0, 1_000_000)
.filter(i -> i == 0 || i % 100_000 != 0)
.toArray();
long end = System.currentTimeMillis();
sum += (end - start);
}
System.out.println("collecting int[] via IntStream\t\t\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
return values;
}
private List<Integer> createWrapperValuesForEach() {
int sum = 0;
ArrayList<Integer> values = null;
for (int j = 0; j < ITERATIONS; j++) {
long start = System.currentTimeMillis();
values = new ArrayList<>(999_991);
for (int i = 0; i < 1_000_000; i++) {
if (i == 0 || i % 100_000 != 0) {
values.add(i);
}
}
long end = System.currentTimeMillis();
sum += (end - start);
}
System.out.println("collecting List<Integer> via for-loop\t\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
return values;
}
private List<Integer> createWrapperValuesIntStream() {
int sum = 0;
List<Integer> values = null;
for (int j = 0; j < ITERATIONS; j++) {
long start = System.currentTimeMillis();
values = IntStream.range(0, 1_000_000)
.filter(i -> (i == 0 || i % 100_000 != 0))
.boxed()
.collect(Collectors.toList());
long end = System.currentTimeMillis();
sum += (end - start);
}
System.out.println("collecting List<Integer> via IntStream\t\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
return values;
}
private Set<Integer> createWrapperValueHashSetForEach() {
int sum = 0;
HashSet<Integer> values = null;
for (int j = 0; j < ITERATIONS; j++) {
long start = System.currentTimeMillis();
values = new HashSet<>(999_991);
for (int i = 0; i < 1_000_000; i++) {
if (i == 0 || i % 100_000 != 0) {
values.add(i);
}
}
long end = System.currentTimeMillis();
sum += (end - start);
}
System.out.println("collecting HashSet<Integer> via for-loop\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
return values;
}
private Set<Integer> createWrapperValueTreeSetForEach() {
int sum = 0;
TreeSet<Integer> values = null;
for (int j = 0; j < ITERATIONS; j++) {
long start = System.currentTimeMillis();
values = new TreeSet<>();
for (int i = 0; i < 1_000_000; i++) {
if (i == 0 || i % 100_000 != 0) {
values.add(i);
}
}
long end = System.currentTimeMillis();
sum += (end - start);
}
System.out.println("collecting TreeSet<Integer> via for-loop\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
return values;
}
private Set<Integer> createWrapperValueHashSetIntStream() {
int sum = 0;
Set<Integer> values = null;
for (int j = 0; j < ITERATIONS; j++) {
long start = System.currentTimeMillis();
values = IntStream.range(0, 1_000_000)
.filter(i -> (i == 0 || i % 100_000 != 0))
.boxed()
.collect(Collectors.toSet());
long end = System.currentTimeMillis();
sum += (end - start);
}
System.out.println("collecting Set<Integer> via IntStream\t\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
return values;
}
private MutableIntList createEclipseCollectionsListIteration() {
int sum = 0;
MutableIntList values = null;
for (int j = 0; j < ITERATIONS; j++) {
long start = System.currentTimeMillis();
values = IntLists.mutable.withInitialCapacity(999_991);
for (int i = 0; i < 1_000_000; i++) {
if (i == 0 || i % 100_000 != 0) {
values.add(i);
}
}
long end = System.currentTimeMillis();
sum += (end - start);
}
System.out.println("creating MutableIntList via iteration\t\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
return values;
}
private MutableIntList createEclipseCollectionsListOf(int[] inputArray) {
int sum = 0;
MutableIntList values = null;
for (int j = 0; j < ITERATIONS; j++) {
long start = System.currentTimeMillis();
values = IntLists.mutable.of(inputArray);
// values = IntLists.mutable.of(inputArray).distinct().sortThis();
long end = System.currentTimeMillis();
sum += (end - start);
}
System.out.println("creating MutableIntList of int[]\t\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
return values;
}
private MutableIntList createEclipseCollectionsListIntegerCollection(List<Integer> inputCollection) {
int sum = 0;
MutableIntList values = null;
for (int j = 0; j < ITERATIONS; j++) {
long start = System.currentTimeMillis();
values = IntLists.mutable.ofAll(inputCollection);
long end = System.currentTimeMillis();
sum += (end - start);
}
System.out.println("creating MutableIntList via Integer collection\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
return values;
}
private MutableIntList createEclipseCollectionsListIntStream() {
int sum = 0;
MutableIntList values = null;
for (int j = 0; j < ITERATIONS; j++) {
long start = System.currentTimeMillis();
values = IntLists.mutable.ofAll(IntStream.range(0, 1_000_000).filter(i -> i == 0 || i % 100_000 != 0));
long end = System.currentTimeMillis();
sum += (end - start);
}
System.out.println("creating MutableIntList via IntStream\t\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
return values;
}
private MutableIntSet createEclipseCollectionsSetIteration() {
int sum = 0;
MutableIntSet values = null;
for (int j = 0; j < ITERATIONS; j++) {
long start = System.currentTimeMillis();
values = IntSets.mutable.withInitialCapacity(999_991);
for (int i = 0; i < 1_000_000; i++) {
if (i == 0 || i % 100_000 != 0) {
values.add(i);
}
}
long end = System.currentTimeMillis();
sum += (end - start);
}
System.out.println("creating MutableIntSet via iteration\t\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
return values;
}
private MutableIntSet createEclipseCollectionsSetOf(int[] inputArray) {
int sum = 0;
MutableIntSet values = null;
for (int j = 0; j < ITERATIONS; j++) {
long start = System.currentTimeMillis();
values = IntSets.mutable.of(inputArray);
long end = System.currentTimeMillis();
sum += (end - start);
}
System.out.println("creating MutableIntSet of int[]\t\t\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
return values;
}
private MutableIntSet createEclipseCollectionsSetIntegerCollection(List<Integer> inputCollection) {
int sum = 0;
MutableIntSet values = null;
for (int j = 0; j < ITERATIONS; j++) {
long start = System.currentTimeMillis();
values = IntSets.mutable.ofAll(inputCollection);
long end = System.currentTimeMillis();
sum += (end - start);
}
System.out.println("creating MutableIntSet of Integer collection\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
return values;
}
private MutableIntSet createEclipseCollectionsSetIntStream() {
int sum = 0;
MutableIntSet values = null;
for (int j = 0; j < ITERATIONS; j++) {
long start = System.currentTimeMillis();
values = IntSets.mutable.ofAll(IntStream.range(0, 1_000_000).filter(i -> (i == 0 || i % 100_000 != 0)));
long end = System.currentTimeMillis();
sum += (end - start);
}
System.out.println("creating MutableIntSet via IntStream\t\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
return values;
}
public static boolean findByContains(MutableMap<String, MutableIntSet> hidden, int columnIndex, boolean rampUp) {
int sum = 0;
boolean result = false;
for (int j = 0; j < (rampUp ? 1 : ITERATIONS); j++) {
long start = System.currentTimeMillis();
for (MutableIntSet indexes : hidden.values()) {
if (indexes.contains(columnIndex)) {
result = true;
break;
}
}
long end = System.currentTimeMillis();
sum += (end - start);
}
if (!rampUp) {
System.out.println("find via value iteration\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
}
return result;
}
public static boolean findByCollections(MutableMap<String, MutableIntSet> hidden, int columnIndex, boolean rampUp) {
int sum = 0;
boolean result = false;
for (int j = 0; j < (rampUp ? 1 : ITERATIONS); j++) {
long start = System.currentTimeMillis();
MutableIntSet detect = hidden.detect(indexes -> indexes.contains(columnIndex));
result = detect != null;
long end = System.currentTimeMillis();
sum += (end - start);
}
if (!rampUp) {
System.out.println("find via detect()\t\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
}
return result;
}
public static boolean containsInList(List<Integer> values, int columnIndex, boolean rampUp) {
int sum = 0;
boolean result = false;
for (int j = 0; j < (rampUp ? 1 : ITERATIONS); j++) {
long start = System.currentTimeMillis();
result = values.contains(Integer.valueOf(columnIndex));
long end = System.currentTimeMillis();
sum += (end - start);
}
if (!rampUp) {
System.out.println("contains in List\t\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
}
return result;
}
public static boolean containsInSet(Set<Integer> values, int columnIndex, boolean rampUp) {
int sum = 0;
boolean result = false;
for (int j = 0; j < (rampUp ? 1 : ITERATIONS); j++) {
long start = System.currentTimeMillis();
result = values.contains(Integer.valueOf(columnIndex));
long end = System.currentTimeMillis();
sum += (end - start);
}
if (!rampUp) {
System.out.println("contains in Set\t\t\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
}
return result;
}
public static boolean containsInPrimitive(int[] values, int columnIndex, boolean rampUp) {
int sum = 0;
boolean result = false;
for (int j = 0; j < (rampUp ? 1 : ITERATIONS); j++) {
long start = System.currentTimeMillis();
result = Arrays.stream(values).anyMatch(x -> x == columnIndex);
long end = System.currentTimeMillis();
sum += (end - start);
}
if (!rampUp) {
System.out.println("contains in int[] stream\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
}
return result;
}
public static boolean containsInArrayBinarySearch(int[] values, int columnIndex, boolean rampUp) {
int sum = 0;
boolean result = false;
for (int j = 0; j < (rampUp ? 1 : ITERATIONS); j++) {
long start = System.currentTimeMillis();
result = Arrays.binarySearch(values, columnIndex) >= 0;
long end = System.currentTimeMillis();
sum += (end - start);
}
if (!rampUp) {
System.out.println("contains in int[] binary search\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
}
return result;
}
public static boolean containsInPrimitiveIteration(int[] values, int columnIndex, boolean rampUp) {
int sum = 0;
boolean result = false;
for (int j = 0; j < (rampUp ? 1 : ITERATIONS); j++) {
long start = System.currentTimeMillis();
for (int i : values) {
if (i == columnIndex) {
result = true;
break;
}
}
long end = System.currentTimeMillis();
sum += (end - start);
}
if (!rampUp) {
System.out.println("contains in int[] iteration\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
}
return result;
}
public boolean containsInMutableIntList(MutableIntList values, int columnIndex, boolean rampUp) {
int sum = 0;
boolean result = false;
for (int j = 0; j < (rampUp ? 1 : ITERATIONS); j++) {
long start = System.currentTimeMillis();
result = values.contains(columnIndex);
long end = System.currentTimeMillis();
sum += (end - start);
}
if (!rampUp) {
System.out.println("contains in MutableIntList\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
}
return result;
}
public boolean containsInMutableIntSet(MutableIntSet values, int columnIndex, boolean rampUp) {
int sum = 0;
boolean result = false;
for (int j = 0; j < (rampUp ? 1 : ITERATIONS); j++) {
long start = System.currentTimeMillis();
result = values.contains(columnIndex);
long end = System.currentTimeMillis();
sum += (end - start);
}
if (!rampUp) {
System.out.println("contains in MutableIntSet\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
}
return result;
}
public static int indexOfInCollection(List<Integer> values, int columnIndex, boolean rampUp) {
int sum = 0;
int result = -1;
for (int j = 0; j < (rampUp ? 1 : ITERATIONS); j++) {
long start = System.currentTimeMillis();
result = values.indexOf(Integer.valueOf(columnIndex));
long end = System.currentTimeMillis();
sum += (end - start);
}
if (!rampUp) {
System.out.println("indexOf in collection\t\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
}
return result;
}
public static int indexOfInPrimitiveIteration(int[] values, int columnIndex, boolean rampUp) {
int sum = 0;
int result = -1;
for (int j = 0; j < (rampUp ? 1 : ITERATIONS); j++) {
long start = System.currentTimeMillis();
for (int index = 0; index < values.length; index++) {
int i = values[index];
if (i == columnIndex) {
result = index;
break;
}
}
long end = System.currentTimeMillis();
sum += (end - start);
}
if (!rampUp) {
System.out.println("indexOf in int[] iteration\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
}
return result;
}
public int indexOfInMutableIntList(MutableIntList values, int columnIndex, boolean rampUp) {
int sum = 0;
int result = -1;
for (int j = 0; j < (rampUp ? 1 : ITERATIONS); j++) {
long start = System.currentTimeMillis();
result = values.indexOf(columnIndex);
long end = System.currentTimeMillis();
sum += (end - start);
}
if (!rampUp) {
System.out.println("indexOf in MutableIntList\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
}
return result;
}
public static int[] flattenByIterationSet(MutableMap<String, MutableIntSet> hidden, boolean rampUp) {
int sum = 0;
int[] result = null;
for (int j = 0; j < (rampUp ? 1 : ITERATIONS); j++) {
long start = System.currentTimeMillis();
MutableIntSet hiddenColumnIndexes = IntSets.mutable.empty();
for (MutableIntSet indexes : hidden.values()) {
hiddenColumnIndexes.addAll(indexes);
}
result = hiddenColumnIndexes.toSortedArray();
long end = System.currentTimeMillis();
sum += (end - start);
}
if (!rampUp) {
System.out.println("flatten by iteration MutableIntSet\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
}
return result;
}
public static int[] flattenByIterationList(MutableMap<String, MutableIntSet> hidden, boolean rampUp) {
int sum = 0;
int[] result = null;
for (int j = 0; j < (rampUp ? 1 : ITERATIONS); j++) {
long start = System.currentTimeMillis();
MutableIntList hiddenColumnIndexes = IntLists.mutable.empty();
for (MutableIntSet indexes : hidden.values()) {
hiddenColumnIndexes.addAll(indexes);
}
result = hiddenColumnIndexes.distinct().toSortedArray();
long end = System.currentTimeMillis();
sum += (end - start);
}
if (!rampUp) {
System.out.println("flatten by iteration MutableIntList\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
}
return result;
}
public static void removeAllByStream(int[] values, int[] toRemove, boolean rampUp) {
int sum = 0;
for (int j = 0; j < (rampUp ? 1 : ITERATIONS); j++) {
// create a copy so we really remove everytime
long start = System.currentTimeMillis();
int[] result = Arrays.stream(values).filter(v -> (Arrays.binarySearch(toRemove, v) < 0)).toArray();
long end = System.currentTimeMillis();
sum += (end - start);
if (result.length != values.length - toRemove.length) {
System.err.println("remove failed");
}
}
if (!rampUp) {
System.out.println("remove all by primitive stream\t\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
}
}
public static void removeAllByIterationList(List<Integer> values, int[] toRemove, boolean rampUp) {
int sum = 0;
for (int j = 0; j < (rampUp ? 1 : ITERATIONS); j++) {
// create a copy so we really remove everytime
ArrayList<Integer> v = new ArrayList<>(values);
long start = System.currentTimeMillis();
for (Integer r : toRemove) {
v.remove(r);
}
long end = System.currentTimeMillis();
sum += (end - start);
}
if (!rampUp) {
System.out.println("remove all by iteration List\t\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
}
}
public static void removeAllList(List<Integer> values, int[] toRemove, boolean rampUp) {
List<Integer> asIntegerList = ArrayUtil.asIntegerList(toRemove);
int sum = 0;
for (int j = 0; j < (rampUp ? 1 : ITERATIONS); j++) {
// create a copy so we really remove everytime
ArrayList<Integer> v = new ArrayList<>(values);
long start = System.currentTimeMillis();
v.removeAll(asIntegerList);
long end = System.currentTimeMillis();
sum += (end - start);
}
if (!rampUp) {
System.out.println("remove all List\t\t\t\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
}
}
public static void removeAllByIterationSet(Set<Integer> values, int[] toRemove, boolean rampUp) {
int sum = 0;
for (int j = 0; j < (rampUp ? 1 : ITERATIONS); j++) {
// create a copy so we really remove everytime
HashSet<Integer> v = new HashSet<>(values);
long start = System.currentTimeMillis();
for (Integer r : toRemove) {
v.remove(r);
}
long end = System.currentTimeMillis();
sum += (end - start);
}
if (!rampUp) {
System.out.println("remove all by iteration Set\t\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
}
}
public static void removeAllSet(Set<Integer> values, int[] toRemove, boolean rampUp) {
List<Integer> asIntegerList = ArrayUtil.asIntegerList(toRemove);
int sum = 0;
for (int j = 0; j < (rampUp ? 1 : ITERATIONS); j++) {
// create a copy so we really remove everytime
HashSet<Integer> v = new HashSet<>(values);
long start = System.currentTimeMillis();
v.removeAll(asIntegerList);
long end = System.currentTimeMillis();
sum += (end - start);
}
if (!rampUp) {
System.out.println("remove all Set\t\t\t\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
}
}
public static void removeAllByIterationMutableIntList(MutableIntList values, int[] toRemove, boolean rampUp) {
int sum = 0;
for (int j = 0; j < (rampUp ? 1 : ITERATIONS); j++) {
// create a copy so we really remove everytime
MutableIntList v = values.toList();
long start = System.currentTimeMillis();
for (int r : toRemove) {
v.remove(r);
}
long end = System.currentTimeMillis();
sum += (end - start);
}
if (!rampUp) {
System.out.println("remove all by iteration MutableIntList\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
}
}
public static void removeAllMutableIntList(MutableIntList values, int[] toRemove, boolean rampUp) {
int sum = 0;
for (int j = 0; j < (rampUp ? 1 : ITERATIONS); j++) {
// create a copy so we really remove everytime
MutableIntList v = values.toList();
long start = System.currentTimeMillis();
v.removeAll(toRemove);
long end = System.currentTimeMillis();
sum += (end - start);
}
if (!rampUp) {
System.out.println("remove all MutableIntList\t\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
}
}
public static void removeAllByIterationMutableIntSet(MutableIntSet values, int[] toRemove, boolean rampUp) {
int sum = 0;
for (int j = 0; j < (rampUp ? 1 : ITERATIONS); j++) {
// create a copy so we really remove everytime
MutableIntSet v = values.toSet();
long start = System.currentTimeMillis();
for (int r : toRemove) {
v.remove(r);
}
long end = System.currentTimeMillis();
sum += (end - start);
}
if (!rampUp) {
System.out.println("remove all by iteration MutableIntSet\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
}
}
public static void removeAllMutableIntSet(MutableIntSet values, int[] toRemove, boolean rampUp) {
int sum = 0;
for (int j = 0; j < (rampUp ? 1 : ITERATIONS); j++) {
// create a copy so we really remove everytime
MutableIntSet v = values.toSet();
long start = System.currentTimeMillis();
v.removeAll(toRemove);
long end = System.currentTimeMillis();
sum += (end - start);
}
if (!rampUp) {
System.out.println("remove all MutableIntSet\t\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
}
}
public static int[] sumAndMaxByIteration(MutableIntIntMap map, boolean rampUp) {
int sum = 0;
int[] result = new int[2];
for (int j = 0; j < (rampUp ? 1 : ITERATIONS); j++) {
long start = System.currentTimeMillis();
int valueSum = 0;
int lastPos = -1;
for (IntIntPair entry : map.keyValuesView().toSortedList()) {
valueSum += entry.getTwo();
lastPos = Math.max(lastPos, entry.getOne());
}
result[0] = valueSum;
result[1] = lastPos;
long end = System.currentTimeMillis();
sum += (end - start);
}
if (!rampUp) {
System.out.println("sum and max by iteration\t\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
}
return result;
}
public static int[] sumAndMax(MutableIntIntMap map, boolean rampUp) {
int sum = 0;
int[] result = new int[2];
for (int j = 0; j < (rampUp ? 1 : ITERATIONS); j++) {
long start = System.currentTimeMillis();
result[0] = (int) map.values().sum();
result[1] = map.keySet().max();
long end = System.currentTimeMillis();
sum += (end - start);
}
if (!rampUp) {
System.out.println("sum and max\t\t\t\t" + (sum / ITERATIONS) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
}
return result;
}
}