blob: b5a8999b5bc4d1fac9a565705e4baca5a4652554 [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 'dart:async';
import 'package:expect/expect.dart';
typedef FunctionType = void Function();
typedef GenericFunctionType<T> = T Function(T);
test<T>(o) {
if (o case FunctionType(:var hashCode)) {
print(hashCode);
return 1;
}
if (o case GenericFunctionType<int>(:var hashCode)) {
print(hashCode);
return 2;
}
if (o case GenericFunctionType<String>(:var hashCode)) {
print(hashCode);
return 3;
}
if (o case GenericFunctionType<T>(:var hashCode)) {
print(hashCode);
return 4;
}
if (o case GenericFunctionType(:var hashCode)) {
print(hashCode);
return 5;
}
if (o case Null(:var hashCode)) {
print(hashCode);
return 6;
}
if (o case FutureOr<int>(:var hashCode)) {
print(hashCode);
return 7;
}
if (o case dynamic(: var hashCode)) {
print(hashCode);
return 0;
}
return -1;
}
void function() {}
int intFunction(int i) => i;
String stringFunction(String s) => s;
bool boolFunction(bool b) => b;
dynamic dynamicFunction(dynamic d) => d;
void multiArgFunction(int i, String s) {}
main() {
Expect.equals(1, test(function));
Expect.equals(2, test(intFunction));
Expect.equals(3, test(stringFunction));
Expect.equals(4, test<bool>(boolFunction));
Expect.equals(0, test(boolFunction));
Expect.equals(0, test<num>(boolFunction));
Expect.equals(4, test(dynamicFunction));
Expect.equals(4, test<dynamic>(dynamicFunction));
Expect.equals(5, test<bool>(dynamicFunction));
Expect.equals(0, test(multiArgFunction));
Expect.equals(6, test(null));
Expect.equals(7, test(0));
Expect.equals(7, test(new Future<int>.value(0)));
}