// Copyright (c) 2023, 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
/// Switch statement
/// 1. Evaluate the switch value producing v.
/// 2. For each case:
///   i. Match the case's pattern against v. If the match fails then continue to
///     the next case (or default clause or exit the switch if there are no
///     other cases).
///   ii. If there is a guard clause, evaluate it. If it does not evaluate to a
///     Boolean, throw a runtime error. This can happen if the guard
///     expression's type is dynamic. If it evaluates to false, continue to the
///     next case (or default or exit).
///   iii. Find the nearest non-empty case body at or following this case.
///     You're allowed to have multiple empty cases where all preceding ones
///     share the same body with the last case.
///   iv. If the enclosing scope for the body is a shared case scope, then
///     initialize all shared variables the values of the corresponding
///     variables from the case scope. There will be no shared case scope and
///     nothing to copy if the body is only used by a single case.
///   v. Execute the body statement.
///   vi. If execution of the body statement continues with a label, and that
///     label is labeling a switch case of this switch, go to step 3 and
///     continue from that label.
///   vii. Otherwise the switch statement completes normally. An explicit break
///     is no longer required.
/// 3. If no case pattern matched and there is a default clause, execute the
///   statements after it.
/// 4. If the static type of v is an always-exhaustive type, no case matches,
///   and there is no default clause, then throw a runtime error.
///
/// @description Check that if matching fails then execution continues to the
/// next case or default (if any)
/// @author sgrekhov22@gmail.com

import "../../Utils/expect.dart";

main() {
  String log = "";
  var v = [42];
  switch (v) {
    case [String s]:
      log += "case-1;";
    case [bool b]:
      log += "case-2;";
      break;
    case [1, 2]:
      log += "case-3;";
  }
  Expect.equals("", log);

  switch (v) {
    case [_, 2]:
      log += "case-1;";
    case [bool _]:
      log += "case-2;";
      break;
    case [1, _]:
      log += "case-3;";
    default:
      log += "default";
  }
  Expect.equals("default", log);
}
