Skip to content

Commit f8e9180

Browse files
authored
Handle NaN in fib (#254)
1 parent 3f8f361 commit f8e9180

File tree

2 files changed

+7
-2
lines changed
  • usvm-ts/src/test

2 files changed

+7
-2
lines changed

usvm-ts/src/test/kotlin/org/usvm/samples/Call.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,20 +30,24 @@ class Call : TsMethodTestRunner() {
3030
val method = getMethod("Call", "fib")
3131
discoverProperties<TsValue.TsNumber, TsValue.TsNumber>(
3232
method = method,
33+
{ n, r -> n.number.isNaN() && r.number == 0.0 },
3334
{ n, r -> n.number < 0.0 && r.number == -1.0 },
3435
{ n, r -> n.number > 10.0 && r.number == -2.0 },
3536
{ n, r -> n.number == 0.0 && r.number == 1.0 },
3637
{ n, r -> n.number == 1.0 && r.number == 1.0 },
37-
{ n, r -> n.number > 0 && n.number != 1.0 && fib(n.number) == r.number },
38+
{ n, r -> n.number > 0 && n.number != 1.0 && n.number <= 10.0 && fib(n.number) == r.number },
39+
invariants = arrayOf(
40+
{ n, r -> fib(n.number) == r.number }
41+
)
3842
)
3943
}
4044
}
4145

4246
fun fib(n: Double): Double {
47+
if (n.isNaN()) return 0.0
4348
if (n < 0) return -1.0
4449
if (n > 10) return -2.0
4550
if (n == 0.0) return 1.0
4651
if (n == 1.0) return 1.0
47-
4852
return fib(n - 1.0) + fib(n - 2.0)
4953
}

usvm-ts/src/test/resources/samples/Call.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ class Call {
88
}
99

1010
fib(n: number): number {
11+
if (n != n) return 0
1112
if (n < 0) return -1
1213
if (n > 10) return -2
1314
if (n == 0) return 1

0 commit comments

Comments
 (0)