library;
import self as self;
import "package:expect/expect.dart" as exp;

import "package:expect/expect.dart";

static field dynamic global;
static method fact4() → dynamic {
  dynamic f = 1;
  for (dynamic n in <dynamic>[1, 2, 3, 4]) {
    f = f.*(n);
  }
  return f;
}
static method fact5() → dynamic {
  dynamic f = 1;
  dynamic n;
  for (final dynamic #t1 in <dynamic>[1, 2, 3, 4, 5]) {
    n = #t1;
    f = f.*(n);
  }
  return f;
}
static method fact6() → dynamic {
  dynamic f = 1;
  for (final dynamic #t2 in <dynamic>[1, 2, 3, 4, 5, 6]) {
    self::global = #t2;
    f = f.*(self::global);
  }
  return f;
}
static method main() → dynamic {
  exp::Expect::isTrue(self::fact4().==(24));
  exp::Expect::isTrue(self::fact5().==(120));
  exp::Expect::isTrue(self::fact6().==(720));
}
