1 package com.atlassian.scheduler.core.util;
2
3 import org.junit.Test;
4
5 import static com.atlassian.scheduler.core.util.TimeIntervalQuantizer.quantize;
6 import static com.atlassian.scheduler.core.util.TimeIntervalQuantizer.quantizeToMinutes;
7 import static org.junit.Assert.assertEquals;
8
9
10
11
12 public class TimeIntervalQuantizerTest {
13 @Test(expected = IllegalArgumentException.class)
14 public void testNegativeInterval() {
15 quantize(-1L, 5);
16 }
17
18 @Test
19 public void testIgnoredResolutions() {
20 assertEquals(5L, quantize(5L, -42));
21 assertEquals(5L, quantize(5L, -1));
22 assertEquals(5L, quantize(5L, 0));
23 assertEquals(5L, quantize(5L, 1));
24 }
25
26 @Test
27 public void testQuantizationBoundaries() {
28 assertEquals(0L, quantize(0L, 100));
29 assertEquals(100L, quantize(1L, 100));
30 assertEquals(100L, quantize(99L, 100));
31 assertEquals(100L, quantize(100L, 100));
32 assertEquals(200L, quantize(101L, 100));
33 assertEquals(200L, quantize(199L, 100));
34 assertEquals(200L, quantize(200L, 100));
35 assertEquals(300L, quantize(201L, 100));
36
37 assertEquals(0L, quantize(0L, 1000));
38 assertEquals(1000L, quantize(10L, 1000));
39 assertEquals(1000L, quantize(999L, 1000));
40 assertEquals(1000L, quantize(1000L, 1000));
41 assertEquals(2000L, quantize(1001L, 1000));
42 assertEquals(2000L, quantize(1999L, 1000));
43 assertEquals(2000L, quantize(2000L, 1000));
44 assertEquals(3000L, quantize(2001L, 1000));
45 }
46
47 @Test
48 public void testSignOverflowBoundary() {
49
50 assertEquals(9223372036854775804L, quantize(9223372036854775801L, 4));
51 assertEquals(9223372036854775804L, quantize(9223372036854775804L, 4));
52 assertEquals(9223372036854775807L, quantize(9223372036854775805L, 4));
53 assertEquals(9223372036854775807L, quantize(9223372036854775807L, 4));
54
55
56 assertEquals(9223372036854775800L, quantize(9223372036854775799L, 7));
57 assertEquals(9223372036854775800L, quantize(9223372036854775800L, 7));
58 assertEquals(9223372036854775807L, quantize(9223372036854775801L, 7));
59 assertEquals(9223372036854775807L, quantize(9223372036854775806L, 7));
60 assertEquals(9223372036854775807L, quantize(9223372036854775807L, 7));
61 }
62
63 @Test
64 public void testQuantizeExamples() {
65 assertEquals(0L, quantize(0L, 50));
66 assertEquals(130L, quantize(123L, 10));
67 assertEquals(15000L, quantize(11L, 15000));
68 assertEquals(180000L, quantize(127249L, 60000));
69 }
70
71 @Test
72 public void testQuantizeToMinutesExamples() {
73 assertEquals(0L, quantizeToMinutes(0));
74 assertEquals(60000L, quantizeToMinutes(123));
75 assertEquals(180000L, quantizeToMinutes(127249));
76 }
77 }