882daf8972
Closes https://github.com/dart-lang/sdk/issues/32072 Change-Id: Ic9bb34d2dbee6852e024f1b79d895e4d8150f03f Reviewed-on: https://dart-review.googlesource.com/39821 Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
92 lines
1.7 KiB
Dart
92 lines
1.7 KiB
Dart
// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
// Tests of loops.
|
|
|
|
import 'package:expect/expect.dart';
|
|
|
|
fact(n) {
|
|
var f = BigInt.one;
|
|
while (n > 1) {
|
|
f *= BigInt.from(n);
|
|
--n;
|
|
}
|
|
return f;
|
|
}
|
|
|
|
fib(n) {
|
|
if (n == 0) return 0;
|
|
var previous = 0, current = 1;
|
|
while (n > 1) {
|
|
var temp = current;
|
|
current += previous;
|
|
previous = temp;
|
|
--n;
|
|
}
|
|
return current;
|
|
}
|
|
|
|
mkTrue() => true;
|
|
mkFalse() => false;
|
|
|
|
check(b) {
|
|
Expect.isTrue(b);
|
|
return b;
|
|
}
|
|
|
|
test0() {
|
|
while (mkTrue()) {
|
|
Expect.isTrue(true);
|
|
return;
|
|
}
|
|
Expect.isTrue(false);
|
|
}
|
|
|
|
test1() {
|
|
while (mkFalse()) {
|
|
Expect.isTrue(false);
|
|
}
|
|
Expect.isTrue(true);
|
|
}
|
|
|
|
test2() {
|
|
do {
|
|
Expect.isTrue(true);
|
|
} while (mkFalse());
|
|
Expect.isTrue(true);
|
|
}
|
|
|
|
test3() {
|
|
do {
|
|
Expect.isTrue(true);
|
|
return;
|
|
} while (check(false));
|
|
Expect.isTrue(false);
|
|
}
|
|
|
|
main() {
|
|
Expect.isTrue(fact(0) == BigInt.one);
|
|
Expect.isTrue(fact(1) == BigInt.one);
|
|
Expect.isTrue(fact(5) == BigInt.from(120));
|
|
Expect.isTrue(fact(42) ==
|
|
BigInt.parse("1405006117752879898543142606244511569936384000000000"));
|
|
Expect.isTrue(fact(3.14159) == BigInt.from(6));
|
|
|
|
Expect.isTrue(fib(0) == 0);
|
|
Expect.isTrue(fib(1) == 1);
|
|
Expect.isTrue(fib(2) == 1);
|
|
Expect.isTrue(fib(3) == 2);
|
|
Expect.isTrue(fib(4) == 3);
|
|
Expect.isTrue(fib(5) == 5);
|
|
Expect.isTrue(fib(6) == 8);
|
|
Expect.isTrue(fib(7) == 13);
|
|
Expect.isTrue(fib(42) == 267914296);
|
|
Expect.isTrue(fib(3.14159) == 3);
|
|
|
|
test0();
|
|
test1();
|
|
test2();
|
|
test3();
|
|
}
|