// 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 inferring the super-constructor invocation, s, targeting the
/// super constructor D, we include the implicit super-parameters from the
/// constructor parameter list:
///
/// The super-constructor invocation s infers a super-constructor invocation s’
/// such that
/// ...
/// For each super parameter p in C, in source order, where p has parameter name
/// n, (inferred or declared) type T, associated super-constructor parameter q,
/// and where S is the type of the parameter q:
///
/// Let xn be an identifier for then name n. As an expression, xn denotes the
/// final variable introduced into the initializer list scope by p.
/// Then s’ has an argument following the previously mentioned arguments:
/// xn if p is positional, or
/// xn: xn if q is named.
///
/// @description Check that super-constructor invocation has correct parameters
/// @author sgrekhov@unipro.ru

// SharedOptions=--enable-experiment=super-parameters

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

class S<T> {
  num? n;
  T? t;
  S(this.n, [this.t]);
  S.named(this.t, [this.n]);
}

class C<T> extends S<T> {
  C.constr1(super.n, String s, super.t);
  C.constr2(int i, super.n, String s, super.t) : super();
  C.constr3(int i, super.t, String s, super.n) : super.named();
}

main() {
  var c11 = C.constr1(1, "Lily was here", 42);
  Expect.equals(1, c11.n);
  Expect.equals(42, c11.t);

  var c12 = C.constr1(1, "Lily was here", "42");
  Expect.equals(1, c12.n);
  Expect.equals("42", c12.t);

  var c21 = C.constr2(1, 2, "Lily was here", 42);
  Expect.equals(2, c21.n);
  Expect.equals(42, c21.t);

  var c22 = C.constr2(1, 2, "Lily was here", "42");
  Expect.equals(2, c22.n);
  Expect.equals("42", c22.t);

  var c31 = C.constr3(1, 3.14, "Lily was here", 42);
  Expect.equals(42, c31.n);
  Expect.equals(3.14, c31.t);

  var c32 = C.constr3(1, "", "Lily was here", 3.14);
  Expect.equals(3.14, c32.n);
  Expect.equals("", c32.t);
}
