import 'package:test/test.dart';
List<int> dp = [];
int mod = (1e9 + 7).toInt();
int getFib(int n) {
if (dp[n] == -1) dp[n] = (getFib(n - 1) % mod) + (getFib(n - 2) % mod);
return dp[n] % mod;
}
void main() {
dp = List.generate((1e6 + 1).toInt(), (e) => -1);
dp[0] = 0;
dp[1] = 1;
test("getFib 0 equals 0", () {
expect(getFib(0), equals(0));
});
test("getFib 1 equals 1", () {
expect(getFib(1), equals(1));
});
test("getFib 5 equals 5", () {
expect(getFib(5), equals(5));
});
test("getFib(n) equals getFib(n - 1) + getFib(n - 2)", () {
expect(getFib(7), equals(getFib(6) + getFib(5)));
expect(getFib(14), equals(getFib(13) + getFib(12)));
});
}