blob: dbcaeb7496a52111336033c024a34a5e36edca59 [file] [log] [blame]
// 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.
import 'package:expect/expect.dart';
extension type ExtensionTypeNullable(String? s) {}
extension type ExtensionTypeNum(num n) {}
extension type ExtensionTypeBool(bool b) {}
sealed class S {}
class A extends S {}
class B extends S {}
extension type ExtensionTypeSealed(S s) {}
methodNull1(ExtensionTypeNullable o) => switch (o) {
null => 0,
String s => 1,
};
methodNull2(ExtensionTypeNullable o) => switch (o) {
ExtensionTypeNullable() => 2,
};
methodNull3(String? o) => switch (o) {
ExtensionTypeNullable s => 3,
};
methodNum1(ExtensionTypeNum o) => switch (o) {
int() => 0,
double() => 1,
};
methodNum2(ExtensionTypeNum o) => switch (o) {
ExtensionTypeNum() => 2,
};
methodNum3(num o) => switch (o) {
ExtensionTypeNum() => 3,
};
methodBool1(ExtensionTypeBool o) => switch (o) {
true => 0,
false => 1,
};
methodBool2(ExtensionTypeBool o) => switch (o) {
ExtensionTypeBool() => 2,
};
methodBool3(bool o) => switch (o) {
ExtensionTypeBool() => 3,
};
methodSealed1(ExtensionTypeSealed o) => switch (o) {
A() => 0,
B() => 1,
};
methodSealed2(ExtensionTypeSealed o) => switch (o) {
ExtensionTypeSealed() => 2,
};
methodSealed3(S o) => switch (o) {
ExtensionTypeSealed() => 3,
};
main() {
Expect.equals(0, methodNull1(ExtensionTypeNullable(null)));
Expect.equals(1, methodNull1(ExtensionTypeNullable('foo')));
Expect.equals(2, methodNull2(ExtensionTypeNullable(null)));
Expect.equals(2, methodNull2(ExtensionTypeNullable('foo')));
Expect.equals(3, methodNull3(null));
Expect.equals(3, methodNull3('foo'));
Expect.equals(0, methodNum1(ExtensionTypeNum(42)));
Expect.equals(1, methodNum1(ExtensionTypeNum(3.14)));
Expect.equals(2, methodNum2(ExtensionTypeNum(42)));
Expect.equals(2, methodNum2(ExtensionTypeNum(3.14)));
Expect.equals(3, methodNum3(42));
Expect.equals(3, methodNum3(3.14));
Expect.equals(0, methodBool1(ExtensionTypeBool(true)));
Expect.equals(1, methodBool1(ExtensionTypeBool(false)));
Expect.equals(2, methodBool2(ExtensionTypeBool(true)));
Expect.equals(2, methodBool2(ExtensionTypeBool(false)));
Expect.equals(3, methodBool3(true));
Expect.equals(3, methodBool3(false));
Expect.equals(0, methodSealed1(ExtensionTypeSealed(A())));
Expect.equals(1, methodSealed1(ExtensionTypeSealed(B())));
Expect.equals(2, methodSealed2(ExtensionTypeSealed(A())));
Expect.equals(2, methodSealed2(ExtensionTypeSealed(B())));
Expect.equals(3, methodSealed3(A()));
Expect.equals(3, methodSealed3(B()));
}