Skip to content

Commit

Permalink
switch new decimal rendering of duration
Browse files Browse the repository at this point in the history
  • Loading branch information
bilal-fazlani committed Jan 29, 2024
1 parent 0729150 commit bb6c3ee
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 97 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ private class CallbackRegistryLive(
for
gap <- p.gap
_ <- logger.debug(
s"callback received from ${callbackId.remote} for message ${callbackId.messageId} in ${gap.renderDetailed}"
s"callback received from ${callbackId.remote} for message ${callbackId.messageId} in ${gap.renderDecimal}"
)
_ <- p.promise.succeed(message)
yield ()
Expand Down Expand Up @@ -100,7 +100,7 @@ private class CallbackRegistryLive(
for
gap <- p.gap
_ <- logger.warn(
s"callback timed out for message ${callbackId.messageId} from ${callbackId.remote} after ${gap.renderDetailed}"
s"callback timed out for message ${callbackId.messageId} from ${callbackId.remote} after ${gap.renderDecimal}"
)
_ <- p.promise.fail(Timeout(callbackId.messageId, callbackId.remote, timeout))
yield ()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,7 @@ extension (duration: Duration)
case head :: next => NonEmptyChunk(head, next*)
case Nil => NonEmptyChunk(TimeSegment.zero)

def renderDetailed: String =
nonZeroParts.map(_.toString).mkString(" ")

def renderDecimal: String = {
private[zioMaelstrom] def renderDecimal: String = {
val millis = nonZeroParts.map(x => x.value.value * x.unit.multiplier).sum
val firstUnit = nonZeroParts.head.unit
val firstMultiplier = firstUnit.multiplier
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ private[zioMaelstrom] object Sleep:
parseDuration(duration).fold(
err => ZIO.die(Throwable(err.toString)),
sleep =>
logger.info(s"input paused for ${sleep.duration.renderDetailed}") *> ZIO.sleep(
logger.info(s"input paused for ${sleep.duration.renderDecimal}") *> ZIO.sleep(
sleep.duration
) *>
logger.info(s"input resumed")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,118 +49,78 @@ object TimeSegmentRenderingTest extends ZIOSpecDefault:

object DurationRenderTests extends ZIOSpecDefault:
def spec =
suite("detailed duration render tests")(
suite("decimal duration render tests")(
test("render zero") {
val duration = Duration.Zero
assertTrue(duration.renderDetailed == "0 milliseconds")
assertTrue(duration.renderDecimal == "0 milliseconds")
},
test("render millis") {
val duration = 100.millis
assertTrue(duration.renderDetailed == "100 milliseconds")
assertTrue(duration.renderDecimal == "100 milliseconds")
},
test("render seconds") {
val duration = 1.second plus 100.millis
assertTrue(duration.renderDetailed == "1 second 100 milliseconds")
assertTrue(duration.renderDecimal == "1.1 seconds")
},
test("render 1 minute") {
val duration = 1.minute
assertTrue(duration.renderDecimal == "1 minute")
},
test("render minutes") {
val duration = 1.minute plus 10.seconds
assertTrue(duration.renderDetailed == "1 minute 10 seconds")
assertTrue(duration.renderDecimal == "1.17 minutes")
},
test("render more minutes") {
val duration = 1.minute plus 50.seconds
assertTrue(duration.renderDetailed == "1 minute 50 seconds")
assertTrue(duration.renderDecimal == "1.83 minutes")
},
test("render hours") {
val duration = 2.hours plus 30.minutes
assertTrue(duration.renderDetailed == "2 hours 30 minutes")
assertTrue(duration.renderDecimal == "2.5 hours")
},
test("render more hours") {
val duration = 23.hours plus 59.minutes plus 59.seconds
assertTrue(duration.renderDetailed == "23 hours 59 minutes 59 seconds")
test("round to next hour") {
val duration = 22.hours plus 59.minutes plus 59.seconds
assertTrue(duration.renderDecimal == "23 hours")
},
test("render days") {
val duration = 2.days plus 1.hour plus 1.minute
assertTrue(duration.renderDetailed == "2 days 1 hour 1 minute")
assertTrue(duration.renderDecimal == "2.04 days")
},
test("render more days") {
val duration = 500.days plus 23.hours plus 50.minutes
assertTrue(duration.renderDecimal == "500.99 days")
},
test("round to next day") {
val duration = 500.days plus 23.hours plus 59.minutes plus 59.seconds plus 999.millis
assertTrue(
duration.renderDetailed == "500 days 23 hours 59 minutes 59 seconds 999 milliseconds"
)
assertTrue(duration.renderDecimal == "501 days")
},
test("minute should upgrade to next hour when rounding up") {
val duration = 59.minutes plus 59.seconds plus 999.millis
assertTrue(duration.renderDecimal == "1 hour")
},
test("minutes should upgrade to plural hours when rounding up") {
val duration = 119.minutes plus 59.seconds plus 999.millis
assertTrue(duration.renderDecimal == "2 hours")
},
// round down tests
test("round down to 1 hour") {
val duration = 1.hour plus 100.millis
assertTrue(duration.renderDecimal == "1 hour")
},
test("round down to 2 hours") {
val duration = 2.hour plus 100.millis
assertTrue(duration.renderDecimal == "2 hours")
},
test("round down to 1 day") {
val duration = 1.day plus 100.millis
assertTrue(duration.renderDecimal == "1 day")
},
test("round down to plural seconds") {
val duration = 2.second plus 1.millis
assertTrue(duration.renderDecimal == "2 seconds")
},
test("round down to 1 minute") {
val duration = 1.minute plus 1.millis
assertTrue(duration.renderDecimal == "1 minute")
}
) +
suite("decimal duration render tests")(
test("render zero") {
val duration = Duration.Zero
assertTrue(duration.renderDecimal == "0 milliseconds")
},
test("render millis") {
val duration = 100.millis
assertTrue(duration.renderDecimal == "100 milliseconds")
},
test("render seconds") {
val duration = 1.second plus 100.millis
assertTrue(duration.renderDecimal == "1.1 seconds")
},
test("render 1 minute") {
val duration = 1.minute
assertTrue(duration.renderDecimal == "1 minute")
},
test("render minutes") {
val duration = 1.minute plus 10.seconds
assertTrue(duration.renderDecimal == "1.17 minutes")
},
test("render more minutes") {
val duration = 1.minute plus 50.seconds
assertTrue(duration.renderDecimal == "1.83 minutes")
},
test("render hours") {
val duration = 2.hours plus 30.minutes
assertTrue(duration.renderDecimal == "2.5 hours")
},
test("round to next hour") {
val duration = 22.hours plus 59.minutes plus 59.seconds
assertTrue(duration.renderDecimal == "23 hours")
},
test("render days") {
val duration = 2.days plus 1.hour plus 1.minute
assertTrue(duration.renderDecimal == "2.04 days")
},
test("render more days") {
val duration = 500.days plus 23.hours plus 50.minutes
assertTrue(duration.renderDecimal == "500.99 days")
},
test("round to next day") {
val duration = 500.days plus 23.hours plus 59.minutes plus 59.seconds plus 999.millis
assertTrue(duration.renderDecimal == "501 days")
},
test("minute should upgrade to next hour when rounding up") {
val duration = 59.minutes plus 59.seconds plus 999.millis
assertTrue(duration.renderDecimal == "1 hour")
},
test("minutes should upgrade to plural hours when rounding up") {
val duration = 119.minutes plus 59.seconds plus 999.millis
assertTrue(duration.renderDecimal == "2 hours")
},
// round down tests
test("round down to 1 hour") {
val duration = 1.hour plus 100.millis
assertTrue(duration.renderDecimal == "1 hour")
},
test("round down to 2 hours") {
val duration = 2.hour plus 100.millis
assertTrue(duration.renderDecimal == "2 hours")
},
test("round down to 1 day") {
val duration = 1.day plus 100.millis
assertTrue(duration.renderDecimal == "1 day")
},
test("round down to plural seconds") {
val duration = 2.second plus 1.millis
assertTrue(duration.renderDecimal == "2 seconds")
},
test("round down to 1 minute") {
val duration = 1.minute plus 1.millis
assertTrue(duration.renderDecimal == "1 minute")
}
)
)

0 comments on commit bb6c3ee

Please sign in to comment.