// Copyright (c) 2020, 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. // Test the dynamic semantics of expressions of the form `e1 == e2` when // the `operator ==` parameter is covariant. import "package:expect/expect.dart"; class EqNever { operator ==(covariant Never other) => throw "unreachable"; } class EqTypeVar { operator ==(covariant T other) => identical(this, other); } void main() { Object oNever = EqNever(); Object oTypeNum = EqTypeVar(); Object? myNull = null; Expect.isFalse(oNever == null); Expect.isFalse(null == oNever); Expect.throws(() => oNever == 0); Expect.isFalse(0 == oNever); Expect.isFalse(oTypeNum == null); Expect.isFalse(null == oTypeNum); Expect.isFalse(oTypeNum == 0); Expect.isFalse(0 == oTypeNum); Expect.isFalse(oTypeNum == 0.0); Expect.isFalse(0.0 == oTypeNum); Expect.throws(() => oTypeNum == "not a number"); Expect.isFalse("not a number" == oTypeNum); Expect.throws(() => oTypeNum == oTypeNum); Expect.isFalse(oNever == myNull); Expect.isFalse(myNull == oNever); Expect.isFalse(oTypeNum == myNull); Expect.isFalse(myNull == oTypeNum); }