// 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.

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();
}
