/*
 * 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.
 */
/**
 * @assertion A function body of the form => e is equivalent to a body of
 * the form {return e;} or the form async => e which is equivalent to a body
 * of the form async {return e;}.
 *
 * @description Checks that the function body of the form => e is equivalent
 * to a body of the form {return e;}.
 *
 * @author msyabro
 */
import "../../Utils/expect.dart";

main() {
  int x = 2;

  foo1() => 1;
  foo2() {return 1;}
  bar1(int val) => val * 2;
  bar2(int val) {return val * 2;}

  Expect.equals(foo1(), foo2());
  Expect.equals(bar1(5), bar2(5));
}
