// 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. // Tests extension declaration syntax combinations. import "package:expect/expect.dart"; void checkStaticType(T x) { Expect.type(x); } main() { Object object = []; List list = []; List numList = []; Pair numPair = Pair(1, 2.5); RecSolution recs = RecSolution(); Expect.equals(0, object.e0); Expect.equals(0, list.e0); Expect.equals(1, object.e1); Expect.equals(1, list.e1); Expect.equals(0, object.e4); Expect.equals(0, list.e4); Expect.equals(4, numList.e4); Expect.equals(0, object.e5); Expect.equals(0, list.e5); Expect.equals(5, numList.e5); Expect.equals(0, object.e6); Expect.equals(6, list.e6); Expect.equals(6, numList.e6); checkStaticType>(numList.list6); Expect.equals(0, object.e7); Expect.equals(7, list.e7); Expect.equals(7, numList.e7); checkStaticType>(numList.list7); Expect.equals(10, object.e10); Expect.equals(10, numList.e10); checkStaticType>(object.list10); checkStaticType>>(numList.list10); Expect.equals(11, object.e11); Expect.equals(11, numList.e11); checkStaticType>(object.list11); checkStaticType>>(numList.list11); Expect.equals(0, object.e14); Expect.equals(14, numPair.e14); Expect.type>(numPair.list14); checkStaticType>(numPair.list14); Expect.equals(0, object.e16); Expect.equals(16, numPair.e16); Expect.type>(numPair.map16); checkStaticType>(numPair.map16); Expect.equals(0, object.e17); Expect.equals(0, list.e17); Expect.equals(17, numList.e17); Expect.type>(numList.list17); checkStaticType>(numList.list17); Expect.equals(0, object.e19); Expect.equals(19, recs.e19); Expect.type>(recs.list19); checkStaticType>(recs.list19); Expect.equals(0, object.e20); Expect.equals(20, recs.e20); Expect.type>(recs.list20); checkStaticType>(recs.list20); } extension on Object { int get e0 => 0; // Fallbacks to test cases where other extensions do not apply. int get e4 => 0; int get e5 => 0; int get e6 => 0; int get e7 => 0; int get e14 => 0; int get e16 => 0; int get e17 => 0; int get e19 => 0; int get e20 => 0; } extension E1 on Object { int get e1 => 1; } extension on List { int get e4 => 4; } extension E5 on List { int get e5 => 5; } extension on List { int get e6 => 6; List get list6 => []; } extension E7 on List { int get e7 => 7; List get list7 => []; } extension on T { int get e10 => 10; List get list10 => []; } extension E11 on T { int get e11 => 11; List get list11 => []; } extension on Pair { int get e14 => 14; List get list14 => []; } extension E16 on Pair { int get e16 => 16; Map get map16 => {}; } extension on List { int get e17 => 17; List get list17 => []; } extension> on T { int get e19 => 19; List get list19 => []; } extension E20> on T { int get e20 => 20; List get list20 => []; } class Pair { final A first; final B second; const Pair(this.first, this.second); } class Rec> {} class RecSolution extends Rec {}