forked from Archives/Athou_commafeed
rename FixedSizeSortedSet to FixedSizeSortedList because it's actually a list
This commit is contained in:
@@ -10,14 +10,14 @@ import java.util.List;
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class FixedSizeSortedSet<E> {
|
public class FixedSizeSortedList<E> {
|
||||||
|
|
||||||
private final List<E> inner;
|
private final List<E> inner;
|
||||||
|
|
||||||
private final Comparator<? super E> comparator;
|
private final Comparator<? super E> comparator;
|
||||||
private final int capacity;
|
private final int capacity;
|
||||||
|
|
||||||
public FixedSizeSortedSet(int capacity, Comparator<? super E> comparator) {
|
public FixedSizeSortedList(int capacity, Comparator<? super E> comparator) {
|
||||||
this.inner = new ArrayList<>(Math.max(0, capacity));
|
this.inner = new ArrayList<>(Math.max(0, capacity));
|
||||||
this.capacity = capacity < 0 ? Integer.MAX_VALUE : capacity;
|
this.capacity = capacity < 0 ? Integer.MAX_VALUE : capacity;
|
||||||
this.comparator = comparator;
|
this.comparator = comparator;
|
||||||
@@ -10,7 +10,7 @@ import org.apache.commons.lang3.builder.CompareToBuilder;
|
|||||||
import org.hibernate.SessionFactory;
|
import org.hibernate.SessionFactory;
|
||||||
|
|
||||||
import com.commafeed.CommaFeedConfiguration;
|
import com.commafeed.CommaFeedConfiguration;
|
||||||
import com.commafeed.backend.FixedSizeSortedSet;
|
import com.commafeed.backend.FixedSizeSortedList;
|
||||||
import com.commafeed.backend.feed.FeedEntryKeyword;
|
import com.commafeed.backend.feed.FeedEntryKeyword;
|
||||||
import com.commafeed.backend.feed.FeedEntryKeyword.Mode;
|
import com.commafeed.backend.feed.FeedEntryKeyword.Mode;
|
||||||
import com.commafeed.backend.model.FeedEntry;
|
import com.commafeed.backend.model.FeedEntry;
|
||||||
@@ -199,9 +199,9 @@ public class FeedEntryStatusDAO extends GenericDAO<FeedEntryStatus> {
|
|||||||
|
|
||||||
Comparator<FeedEntryStatus> comparator = order == ReadingOrder.desc ? STATUS_COMPARATOR_DESC : STATUS_COMPARATOR_ASC;
|
Comparator<FeedEntryStatus> comparator = order == ReadingOrder.desc ? STATUS_COMPARATOR_DESC : STATUS_COMPARATOR_ASC;
|
||||||
|
|
||||||
FixedSizeSortedSet<FeedEntryStatus> set = new FixedSizeSortedSet<>(capacity, comparator);
|
FixedSizeSortedList<FeedEntryStatus> fssl = new FixedSizeSortedList<>(capacity, comparator);
|
||||||
for (FeedSubscription sub : subs) {
|
for (FeedSubscription sub : subs) {
|
||||||
FeedEntryStatus last = (order != null && set.isFull()) ? set.last() : null;
|
FeedEntryStatus last = (order != null && fssl.isFull()) ? fssl.last() : null;
|
||||||
JPAQuery<FeedEntry> query = buildQuery(user, sub, unreadOnly, keywords, newerThan, -1, capacity, order, last, tag, minEntryId,
|
JPAQuery<FeedEntry> query = buildQuery(user, sub, unreadOnly, keywords, newerThan, -1, capacity, order, last, tag, minEntryId,
|
||||||
maxEntryId);
|
maxEntryId);
|
||||||
List<Tuple> tuples = query.select(entry.id, entry.updated, status.id, entry.content.title).fetch();
|
List<Tuple> tuples = query.select(entry.id, entry.updated, status.id, entry.content.title).fetch();
|
||||||
@@ -225,11 +225,11 @@ public class FeedEntryStatusDAO extends GenericDAO<FeedEntryStatus> {
|
|||||||
status.setEntry(entry);
|
status.setEntry(entry);
|
||||||
status.setSubscription(sub);
|
status.setSubscription(sub);
|
||||||
|
|
||||||
set.add(status);
|
fssl.add(status);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
List<FeedEntryStatus> placeholders = set.asList();
|
List<FeedEntryStatus> placeholders = fssl.asList();
|
||||||
int size = placeholders.size();
|
int size = placeholders.size();
|
||||||
if (size < offset) {
|
if (size < offset) {
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
|
|||||||
@@ -0,0 +1,90 @@
|
|||||||
|
package com.commafeed.backend;
|
||||||
|
|
||||||
|
import java.util.Comparator;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
class FixedSizeSortedListTest {
|
||||||
|
|
||||||
|
private static final Comparator<String> COMP = ObjectUtils::compare;
|
||||||
|
|
||||||
|
private FixedSizeSortedList<String> list;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
public void init() {
|
||||||
|
list = new FixedSizeSortedList<>(3, COMP);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testSimpleAdd() {
|
||||||
|
list.add("0");
|
||||||
|
list.add("1");
|
||||||
|
list.add("2");
|
||||||
|
|
||||||
|
Assertions.assertEquals("0", list.asList().get(0));
|
||||||
|
Assertions.assertEquals("1", list.asList().get(1));
|
||||||
|
Assertions.assertEquals("2", list.asList().get(2));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testIsFull() {
|
||||||
|
list.add("0");
|
||||||
|
list.add("1");
|
||||||
|
|
||||||
|
Assertions.assertFalse(list.isFull());
|
||||||
|
list.add("2");
|
||||||
|
Assertions.assertTrue(list.isFull());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testOrder() {
|
||||||
|
list.add("2");
|
||||||
|
list.add("1");
|
||||||
|
list.add("0");
|
||||||
|
|
||||||
|
Assertions.assertEquals("0", list.asList().get(0));
|
||||||
|
Assertions.assertEquals("1", list.asList().get(1));
|
||||||
|
Assertions.assertEquals("2", list.asList().get(2));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testEviction() {
|
||||||
|
list.add("7");
|
||||||
|
list.add("8");
|
||||||
|
list.add("9");
|
||||||
|
|
||||||
|
list.add("0");
|
||||||
|
list.add("1");
|
||||||
|
list.add("2");
|
||||||
|
|
||||||
|
Assertions.assertEquals("0", list.asList().get(0));
|
||||||
|
Assertions.assertEquals("1", list.asList().get(1));
|
||||||
|
Assertions.assertEquals("2", list.asList().get(2));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testCapacity() {
|
||||||
|
list.add("0");
|
||||||
|
list.add("1");
|
||||||
|
list.add("2");
|
||||||
|
list.add("3");
|
||||||
|
|
||||||
|
Assertions.assertEquals(3, list.asList().size());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testLast() {
|
||||||
|
list.add("0");
|
||||||
|
list.add("1");
|
||||||
|
list.add("2");
|
||||||
|
|
||||||
|
Assertions.assertEquals("2", list.last());
|
||||||
|
|
||||||
|
list.add("3");
|
||||||
|
|
||||||
|
Assertions.assertEquals("2", list.last());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,90 +0,0 @@
|
|||||||
package com.commafeed.backend;
|
|
||||||
|
|
||||||
import java.util.Comparator;
|
|
||||||
|
|
||||||
import org.apache.commons.lang3.ObjectUtils;
|
|
||||||
import org.junit.jupiter.api.Assertions;
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
|
|
||||||
class FixedSizeSortedSetTest {
|
|
||||||
|
|
||||||
private static final Comparator<String> COMP = ObjectUtils::compare;
|
|
||||||
|
|
||||||
private FixedSizeSortedSet<String> set;
|
|
||||||
|
|
||||||
@BeforeEach
|
|
||||||
public void init() {
|
|
||||||
set = new FixedSizeSortedSet<>(3, COMP);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testSimpleAdd() {
|
|
||||||
set.add("0");
|
|
||||||
set.add("1");
|
|
||||||
set.add("2");
|
|
||||||
|
|
||||||
Assertions.assertEquals("0", set.asList().get(0));
|
|
||||||
Assertions.assertEquals("1", set.asList().get(1));
|
|
||||||
Assertions.assertEquals("2", set.asList().get(2));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testIsFull() {
|
|
||||||
set.add("0");
|
|
||||||
set.add("1");
|
|
||||||
|
|
||||||
Assertions.assertFalse(set.isFull());
|
|
||||||
set.add("2");
|
|
||||||
Assertions.assertTrue(set.isFull());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testOrder() {
|
|
||||||
set.add("2");
|
|
||||||
set.add("1");
|
|
||||||
set.add("0");
|
|
||||||
|
|
||||||
Assertions.assertEquals("0", set.asList().get(0));
|
|
||||||
Assertions.assertEquals("1", set.asList().get(1));
|
|
||||||
Assertions.assertEquals("2", set.asList().get(2));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testEviction() {
|
|
||||||
set.add("7");
|
|
||||||
set.add("8");
|
|
||||||
set.add("9");
|
|
||||||
|
|
||||||
set.add("0");
|
|
||||||
set.add("1");
|
|
||||||
set.add("2");
|
|
||||||
|
|
||||||
Assertions.assertEquals("0", set.asList().get(0));
|
|
||||||
Assertions.assertEquals("1", set.asList().get(1));
|
|
||||||
Assertions.assertEquals("2", set.asList().get(2));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testCapacity() {
|
|
||||||
set.add("0");
|
|
||||||
set.add("1");
|
|
||||||
set.add("2");
|
|
||||||
set.add("3");
|
|
||||||
|
|
||||||
Assertions.assertEquals(3, set.asList().size());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testLast() {
|
|
||||||
set.add("0");
|
|
||||||
set.add("1");
|
|
||||||
set.add("2");
|
|
||||||
|
|
||||||
Assertions.assertEquals("2", set.last());
|
|
||||||
|
|
||||||
set.add("3");
|
|
||||||
|
|
||||||
Assertions.assertEquals("2", set.last());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user