// 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 A mixin application introduces forwarding constructors for
/// accessible superclass constructors. Those implicitly introduced constructors
/// are subject to constructor tear-off in the same way as if they had been
/// declared explicitly, and they are constant expressions according to the same
/// rules.
///
/// Example:
///
/// class A<X> {
///   A.named();
///   A();
/// }
/// mixin M {}
/// class B<X> = A<X> with M;
///
/// void main() {
///   const f = B.named; // Uninstantiated tear-off.
///   var g = B<int>.new; // Explicitly instantiated tear-off.
/// }
///
/// @description Check example from the Spec.
/// @author sgrekhov@unipro.ru

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

class A<X> {
  X x;
  A.named(this.x);
  A(this.x);
}

mixin M {}

class C<X> = A<X> with M;

main() {
  const f1 = C.named;
  C c1 = f1("Lily was here");
  Expect.equals("Lily was here", c1.x);
  C c2 = f1(42);
  Expect.equals(42, c2.x);

  const f2 = C<int>.named;
  C c3 = f2(42);
  Expect.equals(42, c3.x);

  var f3 = C.new;
  C c4 = f3("Lily was here");
  Expect.equals("Lily was here", c4.x);
  C c5 = f3(42);
  Expect.equals(42, c5.x);

  var f4 = C<int>.new;
  C c6 = f4(42);
  Expect.equals(42, c6.x);
}
