// Copyright (c) 2024, 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.

void foo1(x, [a = 'default_a', b = 'default_b']) {
  print('x = $x');
  print('a = $a');
  print('b = $b');
}

void foo2(y, z, {c = 'default_c', a = 42, b = const ['default_b']}) {
  print('y = $y');
  print('z = $z');
  print('a = $a');
  print('b = $b');
  print('c = $c');
}

void foo3<P, Q>(z, y, {bool a = false, required Map<P, Q> b}) {
  print(P);
  print(y);
  print(b);
}

main() {
  foo1('fixed_x', 'concrete_a');
  foo2('fixed_y', 'fixed_z', a: 'concrete_a');
}
