blob: 84aad0fd4f908253ecb6cb214de7d1fe8b6aa397 [file] [log] [blame]
/*
* 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.hugegraph.unit.util.collection;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.apache.hugegraph.testutil.Assert;
import org.apache.hugegraph.util.collection.Int2IntsMap;
public class Int2IntsMapTest {
private static final int KEY_NUMBER = 5;
private static final int VALUE_NUMBER = 1000;
@Before
public void setup() {
// pass
}
@After
public void teardown() {
// pass
}
@Test
public void testInt2IntsMap() {
Int2IntsMap map = new Int2IntsMap();
int i = 100;
int j = 200;
int k = 250;
int l = 255;
int m = 270;
Random random = new Random();
for (int n = 0; n < VALUE_NUMBER; n++) {
switch (random.nextInt() % KEY_NUMBER) {
case 0:
if (i < 200) {
map.add(1, i++);
}
break;
case 1:
if (j < 250) {
map.add(2, j++);
}
break;
case 2:
if (k < 255) {
map.add(3, k++);
}
break;
case 3:
if (l < 270) {
map.add(4, l++);
}
break;
case 4:
if (m < 300) {
map.add(5, m++);
}
break;
default:
break;
}
}
int[][] results = new int[KEY_NUMBER][];
results[0] = new int[]{100,101,102,103,104,105,106,107,108,109,
110,111,112,113,114,115,116,117,118,119,
120,121,122,123,124,125,126,127,128,129,
130,131,132,133,134,135,136,137,138,139,
140,141,142,143,144,145,146,147,148,149,
150,151,152,153,154,155,156,157,158,159,
160,161,162,163,164,165,166,167,168,169,
170,171,172,173,174,175,176,177,178,179,
180,181,182,183,184,185,186,187,188,189,
190,191,192,193,194,195,196,197,198,199};
results[1] = new int[]{200,201,202,203,204,205,206,207,208,209,
210,211,212,213,214,215,216,217,218,219,
220,221,222,223,224,225,226,227,228,229,
230,231,232,233,234,235,236,237,238,239,
240,241,242,243,244,245,246,247,248,249};
results[2] = new int[]{250,251,252,253,254};
results[3] = new int[]{255,256,257,258,259,260,261,262,
263,264,265,266,267,268,269};
results[4] = new int[]{270,271,272,273,274,275,276,277,278,279,
280,281,282,283,284,285,286,287,288,289,
290,291,292,293,294,295,296,297,298,299};
for (int ii = 0; ii < KEY_NUMBER; ii++) {
int[] result = map.getValues(ii + 1);
Assert.assertArrayEquals(results[ii], result);
}
}
@Test
public void testInt2IntsMapRandom() {
Int2IntsMap map = new Int2IntsMap();
Random random = new Random();
for (int i = 0; i < VALUE_NUMBER; i++) {
map.add(Math.abs(random.nextInt()) % KEY_NUMBER, i);
}
Set<Integer> all = new HashSet<>();
for (int i = 0; i < KEY_NUMBER; i++) {
int[] values = map.getValues(i);
for (int j : values) {
all.add(j);
}
}
Assert.assertEquals(VALUE_NUMBER, all.size());
}
@Test
public void testInt2IntsMapContainsKey() {
Int2IntsMap map = new Int2IntsMap();
Random random = new Random();
for (int i = 0; i < VALUE_NUMBER; i++) {
map.add(Math.abs(random.nextInt()) % KEY_NUMBER, i);
}
Set<Integer> all = new HashSet<>();
for (int i = 0; i < KEY_NUMBER; i++) {
int[] values = map.getValues(i);
for (int j : values) {
all.add(j);
}
}
Assert.assertEquals(VALUE_NUMBER, all.size());
for (int i = 0; i < 5; i++) {
Assert.assertTrue(map.containsKey(i));
}
}
@Test
public void testInt2IntsMapSize() {
Int2IntsMap map = new Int2IntsMap();
Random random = new Random();
for (int i = 0; i < VALUE_NUMBER; i++) {
map.add(Math.abs(random.nextInt()) % KEY_NUMBER, i);
}
Set<Integer> all = new HashSet<>();
for (int i = 0; i < KEY_NUMBER; i++) {
int[] values = map.getValues(i);
for (int j : values) {
all.add(j);
}
}
Assert.assertEquals(VALUE_NUMBER, all.size());
Assert.assertEquals(KEY_NUMBER, map.size());
}
@Test
public void testEmptyInt2IntsMap() {
Int2IntsMap map = new Int2IntsMap();
int[] ints = map.getValues(-1);
Assert.assertEquals(0, map.size());
Assert.assertArrayEquals(new int[0], ints);
map.add(1, 1);
ints = map.getValues(1);
Assert.assertEquals(1, map.size());
Assert.assertEquals(1, ints[0]);
ints = map.getValues(2);
Assert.assertArrayEquals(new int[0], ints);
}
}