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

import "package:expect/expect.dart";

static field core::int global = 0;
static method fact4() → dynamic {
  core::int f = 1;
  {
    core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal4<core::int>(1, 2, 3, 4).{core::Iterable::iterator}{core::Iterator<core::int>};
    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
      core::int n = :sync-for-iterator.{core::Iterator::current}{core::int};
      {
        f = f.{core::num::*}(n){(core::num) → core::int};
      }
    }
  }
  return f;
}
static method fact5() → dynamic {
  core::int f = 1;
  core::int n;
  {
    core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal5<core::int>(1, 2, 3, 4, 5).{core::Iterable::iterator}{core::Iterator<core::int>};
    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
      final core::int #t1 = :sync-for-iterator.{core::Iterator::current}{core::int};
      {
        n = #t1;
        f = f.{core::num::*}(n){(core::num) → core::int};
      }
    }
  }
  return f;
}
static method fact6() → dynamic {
  core::int f = 1;
  {
    core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal6<core::int>(1, 2, 3, 4, 5, 6).{core::Iterable::iterator}{core::Iterator<core::int>};
    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
      final core::int #t2 = :sync-for-iterator.{core::Iterator::current}{core::int};
      {
        self::global = #t2;
        f = f.{core::num::*}(self::global){(core::num) → core::int};
      }
    }
  }
  return f;
}
static method main() → dynamic {
  exp::Expect::isTrue(self::fact4() =={core::Object::==}{(core::Object) → core::bool} 24);
  exp::Expect::isTrue(self::fact5() =={core::Object::==}{(core::Object) → core::bool} 120);
  exp::Expect::isTrue(self::fact6() =={core::Object::==}{(core::Object) → core::bool} 720);
}
