package com.cwa.qiji;
import java.util.Arrays;
import java.util.HashSet;
import org.junit.Assert;
import org.junit.Test;
public class ActiveUserPoolTest {
@Test
public void pageSize() {
ActiveUserCache pool = new ActiveUserCache(1, 9, 3, 20);
Assert.assertEquals(3, pool.getPages().length); // 9/3
ActiveUserCache pool2 = new ActiveUserCache(1, 10, 3, 20);
Assert.assertEquals(4, pool2.getPages().length); // 10/3
ActiveUserCache pool3 = new ActiveUserCache(1, 11, 3, 20);
Assert.assertEquals(4, pool3.getPages().length); // 11/3
ActiveUserCache pool4 = new ActiveUserCache(1, 12, 3, 20);
Assert.assertEquals(4, pool4.getPages().length); // 12/3
ActiveUserCache pool5 = new ActiveUserCache(1, 10, 5, 20);
Assert.assertEquals(2, pool5.getPages().length); // 10/5
}
@Test
public void update_allLevels() {
ActiveUserCache pool = new ActiveUserCache(1, 5, 2, 20);
pool.update(1, 1);
Assert.assertEquals(Arrays.asList(1), pool.getRaodomUsers(1, 10));
Assert.assertEquals(Arrays.asList(1), pool.getRaodomUsers(2, 10));
Assert.assertEquals(Arrays.asList( ), pool.getRaodomUsers(3, 10));
Assert.assertEquals(Arrays.asList( ), pool.getRaodomUsers(4, 10));
Assert.assertEquals(Arrays.asList( ), pool.getRaodomUsers(5, 10));
pool.update(1, 2);
Assert.assertEquals(Arrays.asList(1), pool.getRaodomUsers(1, 10));
Assert.assertEquals(Arrays.asList(1), pool.getRaodomUsers(2, 10));
Assert.assertEquals(Arrays.asList( ), pool.getRaodomUsers(3, 10));
Assert.assertEquals(Arrays.asList( ), pool.getRaodomUsers(4, 10));
Assert.assertEquals(Arrays.asList( ), pool.getRaodomUsers(5, 10));
pool.update(1, 3);
Assert.assertEquals(Arrays.asList(1), pool.getRaodomUsers(1, 10));
Assert.assertEquals(Arrays.asList(1), pool.getRaodomUsers(2, 10));
Assert.assertEquals(Arrays.asList(1), pool.getRaodomUsers(3, 10));
Assert.assertEquals(Arrays.asList(1), pool.getRaodomUsers(4, 10));
Assert.assertEquals(Arrays.asList(), pool.getRaodomUsers(5, 10));
pool.update(1, 4);
Assert.assertEquals(Arrays.asList(1), pool.getRaodomUsers(1, 10));
Assert.assertEquals(Arrays.asList(1), pool.getRaodomUsers(2, 10));
Assert.assertEquals(Arrays.asList(1), pool.getRaodomUsers(3, 10));
Assert.assertEquals(Arrays.asList(1), pool.getRaodomUsers(4, 10));
Assert.assertEquals(Arrays.asList( ), pool.getRaodomUsers(5, 10));
pool.update(1, 5);
Assert.assertEquals(Arrays.asList(1), pool.getRaodomUsers(1, 10));
Assert.assertEquals(Arrays.asList(1), pool.getRaodomUsers(2, 10));
Assert.assertEquals(Arrays.asList(1), pool.getRaodomUsers(3, 10));
Assert.assertEquals(Arrays.asList(1), pool.getRaodomUsers(4, 10));
Assert.assertEquals(Arrays.asList(1), pool.getRaodomUsers(5, 10));
}
@Test
public void update_oneLevel() {
ActiveUserCache pool = new ActiveUserCache(1, 5, 2, 20);
pool.update(1, 1);
pool.update(1, 1);
Assert.assertEquals(Arrays.asList(1), pool.getRaodomUsers(1, 10));
pool.update(2, 1);
pool.update(3, 1);
Assert.assertEquals(
new HashSet<Integer>(Arrays.asList(1, 2, 3)),
new HashSet<Integer>(pool.getRaodomUsers(1, 10)));
}
@Test
public void getRandomUsers_levelRange() {
ActiveUserCache pool = new ActiveUserCache(1, 5, 2, 20);
pool.update(1, 1);
pool.update(2, 2);
pool.update(5, 3);
pool.update(6, 4);
pool.update(7, 5);
pool.update(8, 5);
Assert.assertEquals(
new HashSet<Integer>(Arrays.asList(1, 2)),
new HashSet<Integer>(pool.getRaodomUsers(1, 10)));
Assert.assertEquals(
new HashSet<Integer>(Arrays.asList(1, 2)),
new HashSet<Integer>(pool.getRaodomUsers(2, 10)));
Assert.assertEquals(
new HashSet<Integer>(Arrays.asList(5, 6)),
new HashSet<Integer>(pool.getRaodomUsers(3, 10)));
Assert.assertEquals(
new HashSet<Integer>(Arrays.asList(5, 6)),
new HashSet<Integer>(pool.getRaodomUsers(4, 10)));
Assert.assertEquals(
new HashSet<Integer>(Arrays.asList(7, 8)),
new HashSet<Integer>(pool.getRaodomUsers(5, 10)));
}
@Test
public void getRandomUsersAroundLevel() {
ActiveUserCache pool = new ActiveUserCache(1, 5, 2, 20);
pool.update(1, 1);
pool.update(2, 2);
pool.update(5, 3);
pool.update(6, 4);
pool.update(7, 5);
pool.update(8, 6);
Assert.assertEquals(
new HashSet<Integer>(Arrays.asList(1,2,5,6,7,8)),
new HashSet<Integer>(pool.getRandomUsersAround(2, 10)));
}
}