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
}
]