// Copyright (c) 2012, 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";

// Test is-test of typedefs with optional and named parameters.

typedef int Func1(int a);
typedef int Func2(int a, [int b]);
typedef int Func3(int a, [int b, int c]);
typedef int Func4([int a, int b, int c]);
typedef int Func5(int a, {int b});
typedef int Func6(int a, {int b, int c});
typedef int Func7({int a, int b, int c});

void main() {
  int func1(int i) => -1;
  Expect.isTrue(func1 is Func1);
  Expect.isFalse(func1 is Func2);
  Expect.isFalse(func1 is Func3);
  Expect.isFalse(func1 is Func4);
  Expect.isFalse(func1 is Func5);
  Expect.isFalse(func1 is Func6);
  Expect.isFalse(func1 is Func7);

  int func2(int i, int j) => -1;
  Expect.isFalse(func2 is Func1);
  Expect.isFalse(func2 is Func2);
  Expect.isFalse(func2 is Func3);
  Expect.isFalse(func2 is Func4);
  Expect.isFalse(func2 is Func5);
  Expect.isFalse(func2 is Func6);
  Expect.isFalse(func2 is Func7);

  int func3(int i, int j, int k) => -1;
  Expect.isFalse(func3 is Func1);
  Expect.isFalse(func3 is Func2);
  Expect.isFalse(func3 is Func3);
  Expect.isFalse(func3 is Func4);
  Expect.isFalse(func3 is Func5);
  Expect.isFalse(func3 is Func6);
  Expect.isFalse(func3 is Func7);

  int func4(int i, [int j = -1]) => -1;
  Expect.isTrue(func4 is Func1);
  Expect.isTrue(func4 is Func2);
  Expect.isFalse(func4 is Func3);
  Expect.isFalse(func4 is Func4);
  Expect.isFalse(func4 is Func5);
  Expect.isFalse(func4 is Func6);
  Expect.isFalse(func4 is Func7);

  int func5(int i, [int j = -1, int k = -1]) => -1;
  Expect.isTrue(func5 is Func1);
  Expect.isTrue(func5 is Func2);
  Expect.isTrue(func5 is Func3);
  Expect.isFalse(func5 is Func4);
  Expect.isFalse(func5 is Func5);
  Expect.isFalse(func5 is Func6);
  Expect.isFalse(func5 is Func7);

  int func6([int i = -1, int j = -1, int k = -1]) => -1;
  Expect.isTrue(func6 is Func1);
  Expect.isTrue(func6 is Func2);
  Expect.isTrue(func6 is Func3);
  Expect.isTrue(func6 is Func4);
  Expect.isFalse(func6 is Func5);
  Expect.isFalse(func6 is Func6);
  Expect.isFalse(func6 is Func7);

  int func7(int i, {int j = -1}) => -1;
  Expect.isTrue(func7 is Func1);
  Expect.isFalse(func7 is Func2);
  Expect.isFalse(func7 is Func3);
  Expect.isFalse(func7 is Func4);
  Expect.isFalse(func7 is Func5);
  Expect.isFalse(func7 is Func6);
  Expect.isFalse(func7 is Func7);

  int func8(int i, {int b = -1}) => -1;
  Expect.isTrue(func8 is Func1);
  Expect.isFalse(func8 is Func2);
  Expect.isFalse(func8 is Func3);
  Expect.isFalse(func8 is Func4);
  Expect.isTrue(func8 is Func5);
  Expect.isFalse(func8 is Func6);
  Expect.isFalse(func8 is Func7);

  int func9(int i, {int b = -1, int c = -1}) => -1;
  Expect.isTrue(func9 is Func1);
  Expect.isFalse(func9 is Func2);
  Expect.isFalse(func9 is Func3);
  Expect.isFalse(func9 is Func4);
  Expect.isTrue(func9 is Func5);
  Expect.isTrue(func9 is Func6);
  Expect.isFalse(func9 is Func7);

  int func10(int i, {int c = -1, int b = -1}) => -1;
  Expect.isTrue(func10 is Func1);
  Expect.isFalse(func10 is Func2);
  Expect.isFalse(func10 is Func3);
  Expect.isFalse(func10 is Func4);
  Expect.isTrue(func10 is Func5);
  Expect.isTrue(func10 is Func6);
  Expect.isFalse(func10 is Func7);

  int func11({int a = -1, int b = -1, int c = -1}) => -1;
  Expect.isFalse(func11 is Func1);
  Expect.isFalse(func11 is Func2);
  Expect.isFalse(func11 is Func3);
  Expect.isFalse(func11 is Func4);
  Expect.isFalse(func11 is Func5);
  Expect.isFalse(func11 is Func6);
  Expect.isTrue(func11 is Func7);

  int func12({int c = -1, int a = -1, int b = -1}) => -1;
  Expect.isFalse(func12 is Func1);
  Expect.isFalse(func12 is Func2);
  Expect.isFalse(func12 is Func3);
  Expect.isFalse(func12 is Func4);
  Expect.isFalse(func12 is Func5);
  Expect.isFalse(func12 is Func6);
  Expect.isTrue(func12 is Func7);
}
