All files

src/stdlib/time.panack

Green: covered; red: known zero; amber: unavailable. Blank lines are outside the executable-start-line denominator.

    1 import "host.panack"
    2 
    3 enum DurationError { FractionalNanosecond, ZeroDurationDivisor }
    4 enum ClockError { ClockUnavailable }
    5 
    6 pure duration_seconds(value: Int): Duration {
    7   duration_nanoseconds(value * 1000000000)
    8 }
    9 pure duration_milliseconds(value: Int): Duration {
   10   duration_nanoseconds(value * 1000000)
   11 }
   12 pure duration_add(left: Duration, right: Duration): Duration {
   13   duration_nanoseconds(duration_ticks(left) + duration_ticks(right))
   14 }
   15 pure duration_subtract(left: Duration, right: Duration): Duration {
   16   duration_nanoseconds(duration_ticks(left) - duration_ticks(right))
   17 }
   18 pure duration_scale(value: Duration, factor: Int): Duration {
   19   duration_nanoseconds(duration_ticks(value) * factor)
   20 }
   21 pure duration_before(left: Duration, right: Duration): Bool {
   22   duration_ticks(left) < duration_ticks(right)
   23 }
   24 pure duration_as_seconds(value: Duration): Rat {
   25   duration_ticks(value) / 1000000000
   26 }
   27 pure duration_divide(value: Duration, divisor: Int): Result[Duration,DurationError] {
   28   if duration_nanoseconds(divisor) == duration_nanoseconds(0) { Error(ZeroDurationDivisor()) }
   29   else { duration_from_seconds(duration_ticks(value) / (divisor * 1000000000)) }
   30 }
   31 pure duration_ratio(left: Duration, right: Duration): Result[Rat,DurationError] {
   32   if right == duration_nanoseconds(0) { Error(ZeroDurationDivisor()) }
   33   else { Ok(duration_ticks(left) / duration_ticks(right)) }
   34 }
   35 

Functions

[
  {
    "id": "declaration/3",
    "name": "duration_seconds",
    "line": 6,
    "state": "covered",
    "entries": "12"
  },
  {
    "id": "declaration/4",
    "name": "duration_milliseconds",
    "line": 9,
    "state": "covered",
    "entries": "4"
  },
  {
    "id": "declaration/5",
    "name": "duration_add",
    "line": 12,
    "state": "covered",
    "entries": "1"
  },
  {
    "id": "declaration/6",
    "name": "duration_subtract",
    "line": 15,
    "state": "covered",
    "entries": "1"
  },
  {
    "id": "declaration/7",
    "name": "duration_scale",
    "line": 18,
    "state": "covered",
    "entries": "1"
  },
  {
    "id": "declaration/8",
    "name": "duration_before",
    "line": 21,
    "state": "covered",
    "entries": "1"
  },
  {
    "id": "declaration/9",
    "name": "duration_as_seconds",
    "line": 24,
    "state": "covered",
    "entries": "1"
  },
  {
    "id": "declaration/10",
    "name": "duration_divide",
    "line": 27,
    "state": "covered",
    "entries": "5"
  },
  {
    "id": "declaration/11",
    "name": "duration_ratio",
    "line": 31,
    "state": "covered",
    "entries": "5"
  }
]

Source branch outcomes

[
  {
    "id": "declaration/10/tail/decision/true",
    "outcome": "true",
    "line": 28,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/10/tail/decision/false",
    "outcome": "false",
    "line": 28,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/11/tail/decision/true",
    "outcome": "true",
    "line": 32,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/11/tail/decision/false",
    "outcome": "false",
    "line": 32,
    "state": "covered",
    "hits": "4"
  }
]

Reviewed declaration exclusions

[
  {
    "id": "declaration/0",
    "reason": "import",
    "line": 1
  },
  {
    "id": "declaration/1",
    "reason": "enum-declaration",
    "line": 3
  },
  {
    "id": "declaration/2",
    "reason": "enum-declaration",
    "line": 4
  }
]