blob: 9509f1a067044048bb9408a7a89c9648a8c0d78e [file] [log] [blame]
// Copyright (c) 2019, 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.
/// @assertion A class declaration, type alias, or function [G] may be generic,
/// that is, [G] may have formal type parameters declared.
/// @description Checks various correct generic function declarations.
/// @author iarkh@unipro.ru
import "../../Utils/expect.dart";
typedef test_func = Function();
class Test<X> {
T func1<T>(expected1, expected2) {
Expect.equals(expected1, T);
return expected2;
}
void func2<T extends X>(expected) {
Expect.equals(expected, T);
}
int func3<T extends num>(expected) {
Expect.equals(expected, T);
return 1;
}
void fManyParameters<
T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20>(){}
}
main() {
Test test = new Test();
test.func1(typeOf<dynamic>(), 0);
test.func1<String>(typeOf<String>(), "123");
test.func1<test_func>(typeOf<test_func>(), main);
test.func1<dynamic>(typeOf<dynamic>(), 1);
test.func2(typeOf<dynamic>());
test.func3(typeOf<num>());
test.func3<int>(typeOf<int>());
test.func3<num>(typeOf<num>());
test.fManyParameters();
Test<String> test1 = new Test<String>();
test1.func2(typeOf<String>());
Test<List> test2 = new Test<List>();
test2.func2(typeOf<List<dynamic>>());
Test<test_func> test3 = new Test<test_func>();
test3.func2(typeOf<test_func>());
}