// Copyright (c) 2019, 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 class declaration, type alias, or function [G] may be generic,
 * that is, [G] may have formal type parameters declared.
 * @description Checks that a generic syntax is not confused with relational
 * expressions.
 * @author msyabro
 */

import "../../Utils/expect.dart";

class A<B, C, D, E> {
  foo(p1, p2, p3, p4) {
    Expect.equals(true, p1);
    Expect.equals(3, p2);
    Expect.equals(4, p3);
    Expect.equals(false, p4);
  }
  bar(p) {
    Expect.equals(null, p());
  }

  test() {
    var a = 1;
    var b = 2;
    var c = 3;
    var d = 4;
    var e = 5;
    var f = 6;
    foo(a < b, c, d, e > f);
  }
}

main() {
  new A().test();
}
