dart-sdk/tests/language_2/const/set5_test.dart
Daco Harkes a5d4e010af [test] const types and null in const maps and sets
We were lacking tests for doing a `null` lookup in const maps and sets.

Also, we were lacking tests for having type literals with user-defined
classes in const maps and sets.

Bug: https://github.com/dart-lang/sdk/issues/45908

Change-Id: I1665420ddcc71df7b47a87ee9e16d7ebbe9e13f5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/208080
Commit-Queue: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Erik Ernst <eernst@google.com>
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2021-07-26 12:42:20 +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.
// Tests lookup of type literals of user-defined classes in const sets.
// @dart = 2.9
import 'package:expect/expect.dart';
class A {}
class C<T> {}
typedef F = T Function<T>();
const aType = A;
const fType = F;
main() {
final set1 = const {A, 1, 'asdf', F};
Expect.isTrue(set1.contains(getValueNonOptimized(A)));
Expect.isTrue(set1.contains(getValueNonOptimized(aType)));
Expect.isTrue(set1.contains(getValueNonOptimized(F)));
Expect.isTrue(set1.contains(getValueNonOptimized(fType)));
Expect.equals(A, set1.lookup(getValueNonOptimized(A)));
Expect.equals(A, set1.lookup(getValueNonOptimized(aType)));
Expect.equals(F, set1.lookup(getValueNonOptimized(F)));
Expect.equals(F, set1.lookup(getValueNonOptimized(fType)));
}
/// 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;
}