Files
sdk/tests/web/wasm/closure_hash_code_test.dart
Robert Nystrom ba40d9bece Format tests/web/ using the 3.8 formatting style.
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>
2025-05-02 20:17:11 -07:00

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));
}