dart-sdk/tests/language/const/map_hashcode_override_test.dart
Jake Macdonald 41bc0b4d07 opt assignable_expression_test into 2.19
opt switch related tests back to 2.19
opt map/set hashCode override tests back to 2.19

Change-Id: Ib5c44fc17de43eaf9bcad71d7a326c5fcbff02bf
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/285800
Auto-Submit: Jake Macdonald <jakemac@google.com>
Reviewed-by: Bob Nystrom <rnystrom@google.com>
Commit-Queue: Jake Macdonald <jakemac@google.com>
2023-02-27 22:48:51 +00:00

44 lines
1.3 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.
//
// @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 Nasty {
final int n;
const Nasty(this.n);
int get hashCode {
throw "Evil hashCode";
}
}
main() {
// Test that when using an instance of a custom class as a key in a const Map,
// its hash code is computed as its identity hash, and even if the class
// overrides `hashCode`, that `hashCode` implementation is not called.
final map = const {1: 42, 'foo': 499, 2: 'bar', Nasty(1): 'baz'};
Expect.equals(42, map[getValueNonOptimized(1.0)]);
Expect.equals(
499, map[getValueNonOptimized(new String.fromCharCodes('foo'.runes))]);
Expect.equals('bar', map[getValueNonOptimized(2)]);
Expect.isNull(map[getValueNonOptimized(Nasty(1))]);
Expect.equals('baz', map[getValueNonOptimized(const Nasty(1))]);
}