dart-sdk/tests/language/inference_update_2/scrutinee_promotion_if_case_test.dart
Lasse R.H. Nielsen 9d933d1281 Retire 3.3 experiments in the 3.4 release.
Tested: No new tests.
Change-Id: Idf19ce8b6743b221841e6cef6b2a80e8ab37860e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/354260
Auto-Submit: Lasse Nielsen <lrn@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Nate Bosch <nbosch@google.com>
Reviewed-by: Daco Harkes <dacoharkes@google.com>
Commit-Queue: Lasse Nielsen <lrn@google.com>
2024-03-04 16:09:31 +00:00

80 lines
1.5 KiB
Dart

// Copyright (c) 2023, 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 that field promotion takes effect when the thing being promoted is a
// scrutinee of an if-case construct.
import '../static_type_helper.dart';
class C {
final Object? _o;
C(this._o);
}
void castPattern(C c) {
if (c._o case _ as int) {
c._o.expectStaticType<Exactly<int>>();
}
}
void listPattern(C c) {
if (c._o case []) {
c._o.expectStaticType<Exactly<List<Object?>>>();
}
}
void mapPattern(C c) {
if (c._o case {0: _}) {
c._o.expectStaticType<Exactly<Map<Object?, Object?>>>();
}
}
void nullAssertPattern(C c) {
if (c._o case _!) {
c._o.expectStaticType<Exactly<Object>>();
}
}
void nullCheckPattern(C c) {
if (c._o case _?) {
c._o.expectStaticType<Exactly<Object>>();
}
}
void objectPattern(C c) {
if (c._o case int()) {
c._o.expectStaticType<Exactly<int>>();
}
}
void recordPattern(C c) {
if (c._o case ()) {
c._o.expectStaticType<Exactly<()>>();
}
}
void variablePattern(C c) {
if (c._o case int x) {
c._o.expectStaticType<Exactly<int>>();
}
}
void wildcardPattern(C c) {
if (c._o case int _) {
c._o.expectStaticType<Exactly<int>>();
}
}
main() {
castPattern(C(0));
listPattern(C([]));
mapPattern(C({}));
nullAssertPattern(C(0));
nullCheckPattern(C(0));
objectPattern(C(0));
recordPattern(C(()));
variablePattern(C(0));
wildcardPattern(C(0));
}