package org.redisson;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.PriorityQueue;
import java.util.Queue;
import org.junit.Assert;
import org.junit.Test;
import org.redisson.api.RPriorityQueue;
public class RedissonPriorityQueueTest extends BaseTest {
@Test
public void testReadAll() {
RPriorityQueue<Integer> set = redisson.getPriorityQueue("simple");
set.add(2);
set.add(0);
set.add(1);
set.add(5);
assertThat(set.readAll()).containsExactly(0, 1, 2, 5);
}
@Test
public void testIteratorNextNext() {
RPriorityQueue<String> list = redisson.getPriorityQueue("simple");
list.add("1");
list.add("4");
Iterator<String> iter = list.iterator();
Assert.assertEquals("1", iter.next());
Assert.assertEquals("4", iter.next());
Assert.assertFalse(iter.hasNext());
}
@Test
public void testIteratorRemove() {
RPriorityQueue<String> list = redisson.getPriorityQueue("list");
list.add("1");
list.add("4");
list.add("2");
list.add("5");
list.add("3");
for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
String value = iterator.next();
if (value.equals("2")) {
iterator.remove();
}
}
assertThat(list).contains("1", "4", "5", "3");
int iteration = 0;
for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
iterator.next();
iterator.remove();
iteration++;
}
Assert.assertEquals(4, iteration);
Assert.assertEquals(0, list.size());
Assert.assertTrue(list.isEmpty());
}
@Test
public void testIteratorSequence() {
RPriorityQueue<Integer> set = redisson.getPriorityQueue("set");
for (int i = 0; i < 1000; i++) {
set.add(Integer.valueOf(i));
}
Queue<Integer> setCopy = new PriorityQueue<Integer>();
for (int i = 0; i < 1000; i++) {
setCopy.add(Integer.valueOf(i));
}
checkIterator(set, setCopy);
}
private void checkIterator(Queue<Integer> set, Queue<Integer> setCopy) {
for (Iterator<Integer> iterator = set.iterator(); iterator.hasNext();) {
Integer value = iterator.next();
if (!setCopy.remove(value)) {
Assert.fail();
}
}
Assert.assertEquals(0, setCopy.size());
}
@Test
public void testTrySetComparator() {
RPriorityQueue<Integer> set = redisson.getPriorityQueue("set");
boolean setRes = set.trySetComparator(Collections.reverseOrder());
Assert.assertTrue(setRes);
Assert.assertTrue(set.add(1));
Assert.assertTrue(set.add(2));
Assert.assertTrue(set.add(3));
Assert.assertTrue(set.add(4));
Assert.assertTrue(set.add(5));
assertThat(set).containsExactly(5, 4, 3, 2, 1);
boolean setRes2 = set.trySetComparator(Collections.reverseOrder(Collections.reverseOrder()));
Assert.assertFalse(setRes2);
assertThat(set).containsExactly(5, 4, 3, 2, 1);
set.clear();
boolean setRes3 = set.trySetComparator(Collections.reverseOrder(Collections.reverseOrder()));
Assert.assertTrue(setRes3);
set.add(3);
set.add(1);
set.add(2);
assertThat(set).containsExactly(1, 2, 3);
}
@Test
public void testSort() {
RPriorityQueue<Integer> set = redisson.getPriorityQueue("set");
Assert.assertTrue(set.add(2));
Assert.assertTrue(set.add(3));
Assert.assertTrue(set.add(1));
Assert.assertTrue(set.add(4));
Assert.assertTrue(set.add(10));
Assert.assertTrue(set.add(-1));
Assert.assertTrue(set.add(0));
assertThat(set).containsExactly(-1, 0, 1, 2, 3, 4, 10);
Assert.assertEquals(-1, (int)set.peek());
}
@Test
public void testRemove() {
RPriorityQueue<Integer> set = redisson.getPriorityQueue("set");
set.add(5);
set.add(3);
set.add(1);
set.add(2);
set.add(4);
set.add(1);
Assert.assertFalse(set.remove(0));
Assert.assertTrue(set.remove(3));
Assert.assertTrue(set.remove(1));
assertThat(set).containsExactly(1, 2, 4, 5);
}
@Test
public void testRetainAll() {
RPriorityQueue<Integer> set = redisson.getPriorityQueue("set");
for (int i = 0; i < 200; i++) {
set.add(i);
}
Assert.assertTrue(set.retainAll(Arrays.asList(1, 2)));
Assert.assertEquals(2, set.size());
}
@Test
public void testContainsAll() {
RPriorityQueue<Integer> set = redisson.getPriorityQueue("set");
for (int i = 0; i < 200; i++) {
set.add(i);
}
Assert.assertTrue(set.containsAll(Arrays.asList(30, 11)));
Assert.assertFalse(set.containsAll(Arrays.asList(30, 711, 11)));
}
@Test
public void testToArray() {
RPriorityQueue<String> set = redisson.getPriorityQueue("set");
set.add("1");
set.add("4");
set.add("2");
set.add("5");
set.add("3");
assertThat(set.toArray()).contains("1", "4", "2", "5", "3");
String[] strs = set.toArray(new String[0]);
assertThat(strs).contains("1", "4", "2", "5", "3");
}
@Test
public void testContains() {
RPriorityQueue<TestObject> set = redisson.getPriorityQueue("set");
set.add(new TestObject("1", "2"));
set.add(new TestObject("1", "2"));
set.add(new TestObject("2", "3"));
set.add(new TestObject("3", "4"));
set.add(new TestObject("5", "6"));
Assert.assertTrue(set.contains(new TestObject("2", "3")));
Assert.assertTrue(set.contains(new TestObject("1", "2")));
Assert.assertFalse(set.contains(new TestObject("1", "9")));
}
@Test
public void testDuplicates() {
RPriorityQueue<TestObject> set = redisson.getPriorityQueue("set");
set.add(new TestObject("1", "2"));
set.add(new TestObject("2", "3"));
set.add(new TestObject("5", "6"));
set.add(new TestObject("1", "2"));
set.add(new TestObject("3", "4"));
Assert.assertEquals(5, set.size());
assertThat(set).containsExactly(new TestObject("1", "2"), new TestObject("1", "2"),
new TestObject("2", "3"), new TestObject("3", "4"), new TestObject("5", "6"));
}
@Test
public void testSize() {
RPriorityQueue<Integer> set = redisson.getPriorityQueue("set");
set.add(1);
set.add(2);
set.add(3);
set.add(3);
set.add(4);
set.add(5);
set.add(5);
Assert.assertEquals(7, set.size());
}
}