// Copyright (c) 2011, 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.
// Dart test program testing closures.

// @dart = 2.9

import "package:expect/expect.dart";

typedef T F<T>(T t);

class Parameterized<T> {
  Parameterized() {}
  T mul3(F<T> f, T t) {
    return (3 as dynamic) * f(t);
  }

  T test(T t) {
    return mul3((T t) {
      return (3 as dynamic) * t;
    }, t);
  }
}

class LocalFunction2Test {
  static int f(int n) {
    int a = 0;
    var g = (int n) {
      a += n;
      return a;
    };
    var h = (int n) {
      a += 10 * n;
      return a;
    };
    return g(n) + h(n);
  }

  static testMain() {
    Expect.equals(3 + 33, f(3));
    Expect.equals(9.0, new Parameterized<double>().test(1.0));
  }
}

main() {
  LocalFunction2Test.testMain();
}
