package com.cwa.qiji;
import java.util.Arrays;
import java.util.HashSet;
import org.junit.Assert;
import org.junit.Test;
public class ActiveUserCachePageTest {
@Test
public void capacity() {
ActiveUserCachePage pool = new ActiveUserCachePage(12);
for (int i = 0; i < 100; i++) {
pool.update(i);
}
Assert.assertEquals(12, pool.getAllUsers().size());
}
@Test
public void userCount() {
ActiveUserCachePage pool = new ActiveUserCachePage(12);
for (int i = 0; i < 12; i++) {
pool.update(i);
Assert.assertEquals(i + 1, pool.getAllUsers().size());
}
pool.update(13);
Assert.assertEquals(12, pool.getAllUsers().size());
pool.update(5);
Assert.assertEquals(12, pool.getAllUsers().size());
}
@Test
public void update() {
ActiveUserCachePage pool = new ActiveUserCachePage(12);
Assert.assertEquals(Arrays.asList(), pool.getAllUsers());
pool.update(15);
Assert.assertEquals(Arrays.asList(15), pool.getAllUsers());
pool.update(15);
pool.update(15);
pool.update(15);
Assert.assertEquals(Arrays.asList(15), pool.getAllUsers());
}
@Test
public void eviction() {
ActiveUserCachePage pool = new ActiveUserCachePage(3);
pool.update(1);
pool.update(2);
pool.update(3); // 1, 2, 3
Assert.assertEquals(
new HashSet<Integer>(Arrays.asList(1, 2, 3)),
new HashSet<Integer>(pool.getAllUsers()));
pool.update(1); // 2, 3, 1
pool.update(4); // 3, 1, 4
Assert.assertEquals(
new HashSet<Integer>(Arrays.asList(1, 3, 4)),
new HashSet<Integer>(pool.getAllUsers()));
pool.update(5); // 1, 4, 5
Assert.assertEquals(
new HashSet<Integer>(Arrays.asList(1, 4, 5)),
new HashSet<Integer>(pool.getAllUsers()));
}
@Test
public void getRandomUsers_noUsers() {
ActiveUserCachePage pool = new ActiveUserCachePage(12);
Assert.assertEquals(Arrays.asList(), pool.getRandomUsers(20));
}
@Test
public void getRandomUsers_notEnoughUsers() {
ActiveUserCachePage pool = new ActiveUserCachePage(12);
pool.update(1);
pool.update(2);
Assert.assertEquals(
new HashSet<Integer>(Arrays.asList(1, 2)),
new HashSet<Integer>(pool.getRandomUsers(20)));
}
@Test
public void getRandomUsers_enoughUsers() {
ActiveUserCachePage pool = new ActiveUserCachePage(12);
pool.update(1);
pool.update(2);
pool.update(3);
pool.update(4);
pool.update(5);
Assert.assertEquals(3, new HashSet<Integer>(pool.getRandomUsers(3)).size());
}
@Test
public void getRandomUsers_fullOfUsers() {
ActiveUserCachePage pool = new ActiveUserCachePage(12);
for (int i = 0; i < 12; i++) {
pool.update(i);
}
for (int i = 0; i < 100; i++) {
Assert.assertEquals(4, new HashSet<Integer>(pool.getRandomUsers(4)).size());
}
}
}