// Copyright (c) 2021, 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 When tearing off a constructor of a generic class using [C.name],
/// the type arguments may be implicitly instantiated, just as for a normal
/// generic method tear-off of the corresponding static function. The
/// instantiation is based on the context-type at the tear-off position. If the
/// context types allows a generic function, the tear-off is not instantiated
/// and the result is a generic function.
///
/// @description Checks that type arguments can be implicitly instantiated.
/// @author iarkh@unipro.ru

// SharedOptions=--enable-experiment=constructor-tearoffs

import "../../Utils/expect.dart";

class C<T1, T2 extends num, T3 extends String> {
  var t1, t2, t3;
  var p1, p2;

  C.constr() {
    t1 = T1;
    t2 = T2;
    t3 = T3;
  }
  C.constr1(T1 par1, T2 par2) {
    t1 = T1;
    t2 = T2;
    t3 = T3;
    p1 = par1;
    p2 = par2;
  }

  void check(exp1, exp2, exp3, exp4, exp5) {
    Expect.equals(exp1, T1);
    Expect.equals(exp2, T2);
    Expect.equals(exp3, T3);
    Expect.equals(exp4, p1);
    Expect.equals(exp5, p2);
  }
}

main() {
  var v = C.constr;
  C c = v();
  c.check(dynamic, num, String, null, null);

  var v1 = C.constr1;
  C c1 = v1(1, 2);
  c1.check(dynamic, num, String, 1, 2);
}
