package com.spotify.heroic.aggregation;
import static org.junit.Assert.assertEquals;
import com.spotify.heroic.common.DateRange;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
public class BucketStrategyTest {
@Test
public void testStart() {
final BucketStrategy.Mapping mapping =
BucketStrategy.START.setup(new DateRange(10, 30), 10, 10);
final Map<Long, BucketStrategy.StartEnd> fromTo = new HashMap<>();
// underflow
for (long ts = 0L; ts < 10L; ts++) {
fromTo.put(ts, new BucketStrategy.StartEnd(0, 0));
}
// first bucket
for (long ts = 10L; ts < 20L; ts++) {
fromTo.put(ts, new BucketStrategy.StartEnd(0, 1));
}
// second bucket
for (long ts = 20L; ts < 30L; ts++) {
fromTo.put(ts, new BucketStrategy.StartEnd(1, 2));
}
// overflow
for (long ts = 30L; ts < 40L; ts++) {
fromTo.put(ts, new BucketStrategy.StartEnd(2, 2));
}
for (final Map.Entry<Long, BucketStrategy.StartEnd> e : fromTo.entrySet()) {
assertEquals("Expected same mapping for timestamp " + e.getKey(), e.getValue(),
mapping.map(e.getKey()));
}
}
@Test
public void testEnd() {
final BucketStrategy.Mapping mapping =
BucketStrategy.END.setup(new DateRange(10, 30), 10, 10);
final Map<Long, BucketStrategy.StartEnd> fromTo = new HashMap<>();
// underflow
for (long ts = 0L; ts <= 10L; ts++) {
fromTo.put(ts, new BucketStrategy.StartEnd(0, 0));
}
// first bucket
for (long ts = 11L; ts <= 20L; ts++) {
fromTo.put(ts, new BucketStrategy.StartEnd(0, 1));
}
// second bucket
for (long ts = 21L; ts <= 30L; ts++) {
fromTo.put(ts, new BucketStrategy.StartEnd(1, 2));
}
// overflow
for (long ts = 31L; ts <= 40L; ts++) {
fromTo.put(ts, new BucketStrategy.StartEnd(2, 2));
}
for (final Map.Entry<Long, BucketStrategy.StartEnd> e : fromTo.entrySet()) {
assertEquals("Expected same mapping for timestamp " + e.getKey(), e.getValue(),
mapping.map(e.getKey()));
}
}
}