- //Test expects bin width will be equal to 0.125s
-
- EXPECT_EQ_DOUBLE (1/125, latency_counter_get_rate (l,
- DOUBLE_TO_CDTIME_T(10),
- DOUBLE_TO_CDTIME_T(10),
- latency_counter_get_start_time(l) + TIME_T_TO_CDTIME_T(1)
- )
- );
- EXPECT_EQ_DOUBLE (0, latency_counter_get_rate (l,
- DOUBLE_TO_CDTIME_T(10.001),
- DOUBLE_TO_CDTIME_T(10.125),
- latency_counter_get_start_time(l) + TIME_T_TO_CDTIME_T(1)
- )
- );
- EXPECT_EQ_DOUBLE (1/125, latency_counter_get_rate (l,
- DOUBLE_TO_CDTIME_T(10.001),
- DOUBLE_TO_CDTIME_T(10.876),
- latency_counter_get_start_time(l) + TIME_T_TO_CDTIME_T(1)
- )
- );
- EXPECT_EQ_DOUBLE (2/125, latency_counter_get_rate (l,
- DOUBLE_TO_CDTIME_T(10.000),
- DOUBLE_TO_CDTIME_T(10.876),
- latency_counter_get_start_time(l) + TIME_T_TO_CDTIME_T(1)
- )
- );
- //Range
- EXPECT_EQ_DOUBLE (10.000 + 1.000/125, latency_counter_get_rate (l,
- DOUBLE_TO_CDTIME_T(10),
- DOUBLE_TO_CDTIME_T(20),
- latency_counter_get_start_time(l) + TIME_T_TO_CDTIME_T(1)
- )
- );
- //Range w/o interpolations
- EXPECT_EQ_DOUBLE (100, latency_counter_get_rate (l,
- DOUBLE_TO_CDTIME_T(0.001),
- DOUBLE_TO_CDTIME_T(100.0),
- latency_counter_get_start_time(l) + TIME_T_TO_CDTIME_T(1)
- )
- );
- //Full range
- EXPECT_EQ_DOUBLE (125.0, latency_counter_get_rate (l,
- DOUBLE_TO_CDTIME_T(0.001),
+
+ struct {
+ cdtime_t lower_bound;
+ cdtime_t upper_bound;
+ double want;
+ } cases[] = {
+ { // bucket 6 is zero
+ DOUBLE_TO_CDTIME_T(0.750),
+ DOUBLE_TO_CDTIME_T(0.875),
+ 0.00,
+ },
+ { // bucket 7 contains the t=1 update
+ DOUBLE_TO_CDTIME_T(0.875),
+ DOUBLE_TO_CDTIME_T(1.000),
+ 1.00,
+ },
+ { // range: bucket 7 - bucket 15; contains the t=1 and t=2 updates
+ DOUBLE_TO_CDTIME_T(0.875),
+ DOUBLE_TO_CDTIME_T(2.000),
+ 2.00,
+ },
+ { // lower bucket is only partially applied
+ DOUBLE_TO_CDTIME_T(0.875 + (0.125 / 4)),
+ DOUBLE_TO_CDTIME_T(2.000),
+ 1.75,
+ },
+ { // upper bucket is only partially applied
+ DOUBLE_TO_CDTIME_T(0.875),
+ DOUBLE_TO_CDTIME_T(2.000 - (0.125 / 4)),
+ 1.75,
+ },
+ { // both buckets are only partially applied
+ DOUBLE_TO_CDTIME_T(0.875 + (0.125 / 4)),
+ DOUBLE_TO_CDTIME_T(2.000 - (0.125 / 4)),
+ 1.50,
+ },
+ { // lower bound is unspecified
+ 0,
+ DOUBLE_TO_CDTIME_T(2.000),
+ 2.00,
+ },
+ { // upper bound is unspecified
+ DOUBLE_TO_CDTIME_T(125.000 - 0.125),