Files
sdk/tests/language/const/map_hashcode_override2_test.dart
Lasse R.H. Nielsen 5430e68680 Remove unnecessary leftover @dart=2.19 from tests.
Change-Id: I6d5e15ff2d432202618fbc490969a65a9181816d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/396281
Reviewed-by: Nicholas Shahan <nshahan@google.com>
Commit-Queue: Lasse Nielsen <lrn@google.com>
2024-11-28 09:10:30 +00:00

59 lines
2.1 KiB
Dart

// 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.
// Checks that a const map can have a key which overrides `hashCode`.
// Overriding `hashCode` in const map keys was made an error in Dart 3.0.
// @dart=2.19
import 'package:expect/expect.dart';
/// Returns its argument.
///
/// Prevents static optimizations and inlining.
@pragma('vm:never-inline')
@pragma('dart2js:noInline')
dynamic getValueNonOptimized(dynamic x) {
// DateTime.now() cannot be predicted statically, never equal to 42.
if (DateTime.now().millisecondsSinceEpoch == 42) {
return getValueNonOptimized(2);
}
return x;
}
class MyClass {
final int n;
const MyClass(this.n);
int get hashCode => super.hashCode + 1;
}
main() {
const constInstance = MyClass(1);
final nonConstInstance = MyClass(1);
const constMap = {MyClass(1): 11};
final nonConstMap = {constInstance: 11};
final nonConstMap2 = {nonConstInstance: 11};
// operator== is _not_ overridden, so instances are not equal.
Expect.notEquals(constInstance, nonConstInstance);
Expect.isTrue(constMap.containsKey(getValueNonOptimized(constInstance)));
Expect.isFalse(constMap.containsKey(getValueNonOptimized(nonConstInstance)));
Expect.isTrue(nonConstMap.containsKey(getValueNonOptimized(constInstance)));
Expect.isFalse(
nonConstMap.containsKey(getValueNonOptimized(nonConstInstance)));
Expect.isFalse(nonConstMap2.containsKey(getValueNonOptimized(constInstance)));
Expect.isTrue(
nonConstMap2.containsKey(getValueNonOptimized(nonConstInstance)));
Expect.equals(11, constMap[getValueNonOptimized(constInstance)]);
Expect.isNull(constMap[getValueNonOptimized(nonConstInstance)]);
Expect.equals(11, nonConstMap[getValueNonOptimized(constInstance)]);
Expect.isNull(nonConstMap[getValueNonOptimized(nonConstInstance)]);
Expect.isNull(nonConstMap2[getValueNonOptimized(constInstance)]);
Expect.equals(11, nonConstMap2[getValueNonOptimized(nonConstInstance)]);
}