// 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.
// Dart test program for testing named parameters.

import "package:expect/expect.dart";

class NamedParametersTest {
  static int F00() {
    return 0;
  }

  int f11() {
    return 0;
  }

  static int F11(int a) {
    return a;
  }

  int f22(int a) {
    return a;
  }

  static int F10([int b = 20]) {
    return b;
  }

  int f21([int b = 20]) {
    return b;
  }

  static int F21(int a, [int b = 20]) {
    return 100 * a + b;
  }

  int f32(int a, [int b = 20]) {
    return 100 * a + b;
  }

  static int F31(int a, [int b = 20, int c = 30]) {
    return 100 * (100 * a + b) + c;
  }

  int f42(int a, [int b = 20, int c = 30]) {
    return 100 * (100 * a + b) + c;
  }

  static int F41(int a, [int b = 20, int? c, int d = 40]) {
    return 100 * (100 * (100 * a + b) + (c == null ? 0 : c)) + d;
  }

  int f52(int a, [int b = 20, int? c, int d = 40]) {
    return 100 * (100 * (100 * a + b) + (c == null ? 0 : c)) + d;
  }

  static testMain() {
    NamedParametersTest np = new NamedParametersTest();
    Expect.equals(0, F00());
    Expect.equals(0, np.f11());
    Expect.equals(10, F11(10));
    Expect.equals(10, np.f22(10));
    Expect.equals(20, F10());
    Expect.equals(20, np.f21());
    Expect.equals(20, F10(20));
    Expect.equals(20, np.f21(20));

    Expect.equals(1020, F21(10));
    Expect.equals(1020, np.f32(10));
    Expect.equals(1025, F21(10, 25));
    Expect.equals(1025, np.f32(10, 25));

    Expect.equals(102030, F31(10));
    Expect.equals(102030, np.f42(10));
    Expect.equals(102530, F31(10, 25));
    Expect.equals(102530, np.f42(10, 25));

    Expect.equals(102535, F31(10, 25, 35));
    Expect.equals(102535, np.f42(10, 25, 35));

    Expect.equals(10200040, F41(10));
    Expect.equals(10200040, np.f52(10));
  }
}

abstract class I {
  factory I() = C;
  int mul(int a, [int factor]);
}

class C implements I {
  int mul(int a, [int factor = 10]) {
    return a * factor;
  }
}

String hello(msg, to, {from}) => '${from} sent ${msg} to ${to}';
String message() => hello("gladiolas", "possums", from: "Edna");

void main() {
  NamedParametersTest.testMain();
  var i = new I();
  Expect.equals(100, i.mul(10));
  Expect.equals(1000, i.mul(10, 100));
  var c = new C();
  Expect.equals(100, c.mul(10));
  Expect.equals(1000, c.mul(10, 100));
  Expect.equals("Edna sent gladiolas to possums", message());
}
