/* * 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.ignite.lang.utils; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Random; import org.apache.ignite.internal.util.GridBoundedPriorityQueue; import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; import org.apache.ignite.testframework.junits.common.GridCommonTest; /** * Test for {@link GridBoundedPriorityQueue}. */ @GridCommonTest(group = "Lang") public class GridBoundedPriorityQueueSelfTest extends GridCommonAbstractTest { /** Queue items comparator. */ private static final Comparator<Integer> CMP = new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return Integer.compare(o1, o2); } }; /** Queue items reverse order comparator. */ private static final Comparator<Integer> CMP_REVERSE = Collections.reverseOrder(CMP); /** * Test eviction in bounded priority queue. */ public void testEviction() { GridBoundedPriorityQueue<Integer> queue = new GridBoundedPriorityQueue<>(3, CMP); assertTrue(queue.offer(2)); assertTrue(queue.offer(1)); assertTrue(queue.offer(3)); assertTrue(queue.offer(4)); assertEquals(3, queue.size()); assertFalse(queue.offer(0)); // Item with lower priority should not be put into queue. assertEquals(3, queue.size()); assertEquals(Integer.valueOf(2), queue.poll()); assertEquals(Integer.valueOf(3), queue.poll()); assertEquals(Integer.valueOf(4), queue.poll()); assertNull(queue.poll()); assertTrue(queue.isEmpty()); // Test queue with reverse comparator. GridBoundedPriorityQueue<Integer> queueReverse = new GridBoundedPriorityQueue<>(3, CMP_REVERSE); assertTrue(queueReverse.offer(2)); assertTrue(queueReverse.offer(1)); assertTrue(queueReverse.offer(3)); assertFalse(queueReverse.offer(4)); // Item with lower priority should not be put into queue. assertEquals(Integer.valueOf(3), queueReverse.poll()); assertEquals(Integer.valueOf(2), queueReverse.poll()); assertEquals(Integer.valueOf(1), queueReverse.poll()); assertNull(queueReverse.poll()); assertTrue(queueReverse.isEmpty()); // Test put random 100 items into GridBoundedPriorityQueue(10) and check result. queue = new GridBoundedPriorityQueue<>(10, CMP); queueReverse = new GridBoundedPriorityQueue<>(10, CMP_REVERSE); Random rnd = new Random(); List<Integer> items = new ArrayList<>(100); for (int i = 0; i < 100; i++) { Integer item = rnd.nextInt(100); items.add(item); queue.offer(item); queueReverse.offer(item); } Collections.sort(items); for (int i = 0; i < 10; i++) { assertEquals(items.get(90 + i), queue.poll()); assertEquals(items.get(9 - i), queueReverse.poll()); } assertNull(queue.poll()); assertTrue(queue.isEmpty()); assertNull(queueReverse.poll()); assertTrue(queueReverse.isEmpty()); } }