blob: fbfc924084fbff7231534cb56564bcc0330b15a0 [file] [log] [blame]
 // 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 Test equality of function and methods tearoffs. /// https://github.com/dart-lang/language/issues/1712 /// /// @description Checks equality of generic mixin methods tearoffs /// @author sgrekhov@unipro.ru // SharedOptions=--enable-experiment=constructor-tearoffs import "../../Utils/expect.dart"; typedef IntAlias = int; class A { T mixedInSuperMethod(T t) => t; } mixin M on A { void mixedInMethod() {} T mixedInSuperMethod(T t) => super.mixedInSuperMethod(t) + 1 as T; } class AM extends A with M { T Function(T t) get tearoffSuperMethod => super.mixedInSuperMethod; } main() { A a = new A(); AM am = new AM(); var s1 = a.mixedInSuperMethod; var s2 = a.mixedInSuperMethod; var s3 = am.tearoffSuperMethod; var s4 = am.tearoffSuperMethod; Expect.equals(s1, s2); Expect.notEquals(s1, s3); Expect.notEquals(s2, s3); Expect.equals(s3, s4); Expect.equals(0, s1(0)); Expect.equals(1, s3(0)); A a1 = new AM(); var s5 = a1.mixedInSuperMethod; Expect.equals(s5, a1.mixedInSuperMethod); Expect.approxEquals(43, s5(42)); }