ba40d9bece
Change-Id: I73edeeaf4934899b71d6335dcb4b4b54dce46bae Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/426340 Auto-Submit: Bob Nystrom <rnystrom@google.com> Reviewed-by: Nate Biggs <natebiggs@google.com> Commit-Queue: Nate Biggs <natebiggs@google.com>
103 lines
2.4 KiB
Dart
103 lines
2.4 KiB
Dart
// Copyright (c) 2024, 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.
|
|
|
|
import 'package:expect/expect.dart';
|
|
|
|
// Check closure (tear-off, instantiation, static) equality, hash code, and
|
|
// identities.
|
|
//
|
|
// In principle principle unequal objects can have the same hash code, but it's
|
|
// very unlikely in this test. So we also check that if two closures are not
|
|
// equal then they should have different hash codes.
|
|
|
|
void staticFunction() {}
|
|
|
|
void genericStaticFunction<T>(T t) {}
|
|
|
|
class C {
|
|
void memberFunction() {}
|
|
|
|
void genericMemberFunction<T>(T t) {}
|
|
}
|
|
|
|
void main() {
|
|
var functionExpression = () {};
|
|
|
|
var genericFunctionExpression = <T>(T t) {};
|
|
|
|
check(functionExpression, functionExpression, equal: true, isIdentical: true);
|
|
check(
|
|
genericFunctionExpression,
|
|
genericFunctionExpression,
|
|
equal: true,
|
|
isIdentical: true,
|
|
);
|
|
check(
|
|
genericFunctionExpression<int>,
|
|
genericFunctionExpression<int>,
|
|
equal: true,
|
|
isIdentical: false,
|
|
);
|
|
|
|
check(() {}, () {}, equal: false, isIdentical: false);
|
|
|
|
check(staticFunction, staticFunction, equal: true, isIdentical: true);
|
|
check(
|
|
genericStaticFunction,
|
|
genericStaticFunction,
|
|
equal: true,
|
|
isIdentical: true,
|
|
);
|
|
check(
|
|
genericStaticFunction<int>,
|
|
genericStaticFunction<int>,
|
|
equal: true,
|
|
isIdentical: true,
|
|
);
|
|
|
|
final o1 = C();
|
|
|
|
check(o1.memberFunction, o1.memberFunction, equal: true, isIdentical: false);
|
|
check(
|
|
o1.genericMemberFunction,
|
|
o1.genericMemberFunction,
|
|
equal: true,
|
|
isIdentical: false,
|
|
);
|
|
check(
|
|
o1.genericMemberFunction<int>,
|
|
o1.genericMemberFunction<int>,
|
|
equal: true,
|
|
isIdentical: false,
|
|
);
|
|
|
|
final o2 = C();
|
|
|
|
check(o1.memberFunction, o2.memberFunction, equal: false, isIdentical: false);
|
|
check(
|
|
o1.genericMemberFunction,
|
|
o2.genericMemberFunction,
|
|
equal: false,
|
|
isIdentical: false,
|
|
);
|
|
check(
|
|
o1.genericMemberFunction<int>,
|
|
o2.genericMemberFunction<int>,
|
|
equal: false,
|
|
isIdentical: false,
|
|
);
|
|
}
|
|
|
|
void check(
|
|
Object? o1,
|
|
Object? o2, {
|
|
required bool equal,
|
|
required bool isIdentical,
|
|
}) {
|
|
(equal ? Expect.equals : Expect.notEquals)(o1, o2);
|
|
(equal ? Expect.equals : Expect.notEquals)(o1.hashCode, o2.hashCode);
|
|
|
|
(isIdentical ? Expect.isTrue : Expect.isFalse)(identical(o1, o2));
|
|
}
|